Skip to content

Commit 967ab5f

Browse files
asteriteTomAFrenchjfecher
authored
feat: LSP hover for integer literals (#7368)
Co-authored-by: Tom French <[email protected]> Co-authored-by: jfecher <[email protected]>
1 parent 4c3dee1 commit 967ab5f

File tree

8 files changed

+1104
-940
lines changed

8 files changed

+1104
-940
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

compiler/noirc_frontend/src/ast/visitor.rs

Lines changed: 33 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -162,25 +162,25 @@ pub trait Visitor {
162162
true
163163
}
164164

165-
fn visit_literal_array(&mut self, _: &ArrayLiteral) -> bool {
165+
fn visit_literal_array(&mut self, _: &ArrayLiteral, _: Span) -> bool {
166166
true
167167
}
168168

169-
fn visit_literal_slice(&mut self, _: &ArrayLiteral) -> bool {
169+
fn visit_literal_slice(&mut self, _: &ArrayLiteral, _: Span) -> bool {
170170
true
171171
}
172172

173-
fn visit_literal_bool(&mut self, _: bool) {}
173+
fn visit_literal_bool(&mut self, _: bool, _: Span) {}
174174

175-
fn visit_literal_integer(&mut self, _value: FieldElement, _negative: bool) {}
175+
fn visit_literal_integer(&mut self, _value: FieldElement, _negative: bool, _: Span) {}
176176

177-
fn visit_literal_str(&mut self, _: &str) {}
177+
fn visit_literal_str(&mut self, _: &str, _: Span) {}
178178

179-
fn visit_literal_raw_str(&mut self, _: &str, _: u8) {}
179+
fn visit_literal_raw_str(&mut self, _: &str, _: u8, _: Span) {}
180180

181-
fn visit_literal_fmt_str(&mut self, _: &[FmtStrFragment], _length: u32) {}
181+
fn visit_literal_fmt_str(&mut self, _: &[FmtStrFragment], _length: u32, _: Span) {}
182182

183-
fn visit_literal_unit(&mut self) {}
183+
fn visit_literal_unit(&mut self, _: Span) {}
184184

185185
fn visit_block_expression(&mut self, _: &BlockExpression, _: Option<Span>) -> bool {
186186
true
@@ -262,18 +262,19 @@ pub trait Visitor {
262262
true
263263
}
264264

265-
fn visit_array_literal(&mut self, _: &ArrayLiteral) -> bool {
265+
fn visit_array_literal(&mut self, _: &ArrayLiteral, _: Span) -> bool {
266266
true
267267
}
268268

269-
fn visit_array_literal_standard(&mut self, _: &[Expression]) -> bool {
269+
fn visit_array_literal_standard(&mut self, _: &[Expression], _: Span) -> bool {
270270
true
271271
}
272272

273273
fn visit_array_literal_repeated(
274274
&mut self,
275275
_repeated_element: &Expression,
276276
_length: &Expression,
277+
_: Span,
277278
) -> bool {
278279
true
279280
}
@@ -927,28 +928,32 @@ impl Expression {
927928
impl Literal {
928929
pub fn accept(&self, span: Span, visitor: &mut impl Visitor) {
929930
if visitor.visit_literal(self, span) {
930-
self.accept_children(visitor);
931+
self.accept_children(span, visitor);
931932
}
932933
}
933934

934-
pub fn accept_children(&self, visitor: &mut impl Visitor) {
935+
pub fn accept_children(&self, span: Span, visitor: &mut impl Visitor) {
935936
match self {
936937
Literal::Array(array_literal) => {
937-
if visitor.visit_literal_array(array_literal) {
938-
array_literal.accept(visitor);
938+
if visitor.visit_literal_array(array_literal, span) {
939+
array_literal.accept(span, visitor);
939940
}
940941
}
941942
Literal::Slice(array_literal) => {
942-
if visitor.visit_literal_slice(array_literal) {
943-
array_literal.accept(visitor);
943+
if visitor.visit_literal_slice(array_literal, span) {
944+
array_literal.accept(span, visitor);
944945
}
945946
}
946-
Literal::Bool(value) => visitor.visit_literal_bool(*value),
947-
Literal::Integer(value, negative) => visitor.visit_literal_integer(*value, *negative),
948-
Literal::Str(str) => visitor.visit_literal_str(str),
949-
Literal::RawStr(str, length) => visitor.visit_literal_raw_str(str, *length),
950-
Literal::FmtStr(fragments, length) => visitor.visit_literal_fmt_str(fragments, *length),
951-
Literal::Unit => visitor.visit_literal_unit(),
947+
Literal::Bool(value) => visitor.visit_literal_bool(*value, span),
948+
Literal::Integer(value, negative) => {
949+
visitor.visit_literal_integer(*value, *negative, span);
950+
}
951+
Literal::Str(str) => visitor.visit_literal_str(str, span),
952+
Literal::RawStr(str, length) => visitor.visit_literal_raw_str(str, *length, span),
953+
Literal::FmtStr(fragments, length) => {
954+
visitor.visit_literal_fmt_str(fragments, *length, span);
955+
}
956+
Literal::Unit => visitor.visit_literal_unit(span),
952957
}
953958
}
954959
}
@@ -1120,21 +1125,21 @@ impl Lambda {
11201125
}
11211126

11221127
impl ArrayLiteral {
1123-
pub fn accept(&self, visitor: &mut impl Visitor) {
1124-
if visitor.visit_array_literal(self) {
1125-
self.accept_children(visitor);
1128+
pub fn accept(&self, span: Span, visitor: &mut impl Visitor) {
1129+
if visitor.visit_array_literal(self, span) {
1130+
self.accept_children(span, visitor);
11261131
}
11271132
}
11281133

1129-
pub fn accept_children(&self, visitor: &mut impl Visitor) {
1134+
pub fn accept_children(&self, span: Span, visitor: &mut impl Visitor) {
11301135
match self {
11311136
ArrayLiteral::Standard(expressions) => {
1132-
if visitor.visit_array_literal_standard(expressions) {
1137+
if visitor.visit_array_literal_standard(expressions, span) {
11331138
visit_expressions(expressions, visitor);
11341139
}
11351140
}
11361141
ArrayLiteral::Repeated { repeated_element, length } => {
1137-
if visitor.visit_array_literal_repeated(repeated_element, length) {
1142+
if visitor.visit_array_literal_repeated(repeated_element, length, span) {
11381143
repeated_element.accept(visitor);
11391144
length.accept(visitor);
11401145
}

tooling/lsp/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ fm.workspace = true
3232
rayon.workspace = true
3333
fxhash.workspace = true
3434
convert_case = "0.6.0"
35+
num-bigint.workspace = true
3536

3637
[target.'cfg(all(target_arch = "wasm32", not(target_os = "wasi")))'.dependencies]
3738
wasm-bindgen.workspace = true

0 commit comments

Comments
 (0)