Skip to content

Commit b8b0c81

Browse files
committed
group identifer in var, signal, component declaration
1 parent 95a6a2c commit b8b0c81

16 files changed

+187
-156
lines changed

crates/lsp/src/database.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,7 @@ impl SemanticDB {
260260

261261
if let Some(statements) = ast_template.statements() {
262262
for signal in statements.find_children::<AstInputSignalDecl>() {
263-
if let Some(name) = signal.name() {
263+
if let Some(name) = signal.signal_identifier().unwrap().name() {
264264
self.insert(
265265
file_db.file_id,
266266
SemanticInfo::TemplateData((
@@ -274,7 +274,7 @@ impl SemanticDB {
274274
}
275275
}
276276
for signal in statements.find_children::<AstOutputSignalDecl>() {
277-
if let Some(name) = signal.name() {
277+
if let Some(name) = signal.signal_identifier().unwrap().name() {
278278
self.insert(
279279
file_db.file_id,
280280
SemanticInfo::TemplateData((
@@ -289,7 +289,7 @@ impl SemanticDB {
289289
}
290290

291291
for signal in statements.find_children::<AstSignalDecl>() {
292-
if let Some(name) = signal.name() {
292+
if let Some(name) = signal.signal_identifier().unwrap().name() {
293293
self.insert(
294294
file_db.file_id,
295295
SemanticInfo::TemplateData((
@@ -304,7 +304,7 @@ impl SemanticDB {
304304
}
305305

306306
for var in statements.find_children::<AstVarDecl>() {
307-
if let Some(name) = var.name() {
307+
if let Some(name) = var.var_identifier().unwrap().name() {
308308
self.insert(
309309
file_db.file_id,
310310
SemanticInfo::TemplateData((

crates/lsp/src/handler/goto_definition.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ mod tests {
207207
.statement_list()
208208
.unwrap()
209209
.find_children::<AstInputSignalDecl>();
210-
let signal_name = inputs[0].name().unwrap();
210+
let signal_name = inputs[0].signal_identifier().unwrap().name().unwrap();
211211

212212
let tmp = signal_name.syntax().text_range().start();
213213

crates/parser/src/grammar.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ pub mod entry {
3636

3737
while !p.eof() {
3838
match p.current() {
39-
Pragma => pragma::pragma(p),
39+
PragmaKw => pragma::pragma(p),
4040
TemplateKw => template::template(p),
4141
IncludeKw => include::include(p),
4242
ComponentKw => main_component::main_component(p),

crates/parser/src/grammar/declaration.rs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,14 @@ fn signal_header(p: &mut Parser) -> Option<bool> {
5050
}
5151

5252
pub(crate) fn var_init(p: &mut Parser) {
53+
let var_identifier_open_marker = p.open();
54+
5355
// name of variable
5456
p.expect(Identifier);
55-
5657
// eg: [N - 1][M]
5758
array(p);
59+
60+
p.close(var_identifier_open_marker, VarIdentifier);
5861

5962
// assign for variable
6063
// eg: = 10
@@ -66,11 +69,12 @@ pub(crate) fn var_init(p: &mut Parser) {
6669

6770
// eg: in[N - 1] <== c.in;
6871
pub(crate) fn signal_init(p: &mut Parser, assign_able: bool) {
72+
let signal_identifier_open_marker = p.open();
6973
// name of signal
7074
p.expect(Identifier);
71-
7275
// eg: [N][M-1]
7376
array(p);
77+
p.close(signal_identifier_open_marker, SignalIdentifier);
7478

7579
// assign for intermediate and outputs signals
7680
// eg: <== Multiplier2().out
@@ -159,14 +163,13 @@ pub(super) fn component_declaration(p: &mut Parser) {
159163
let m = p.open();
160164
p.expect(ComponentKw);
161165

162-
// TODO: why do we need `ComponentIdentifier` kind here?
163166
let m_c = p.open();
164167
p.expect(Identifier);
165-
p.close(m_c, ComponentIdentifier);
166-
168+
167169
// support array component
168170
// eg: comp[N - 1][10]
169171
let is_array = array(p);
172+
p.close(m_c, ComponentIdentifier);
170173

171174
// do not assign for array components
172175
if !is_array && p.at(Assign) {

crates/parser/src/grammar/pragma.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use super::*;
88

99
pub fn pragma(p: &mut Parser) {
1010
let m = p.open();
11-
p.expect(Pragma);
11+
p.expect(PragmaKw);
1212
p.expect(Circom);
1313
p.expect(Version);
1414
p.expect(Semicolon);

crates/parser/src/snapshots/parser__input__tests__test_comment_error.snap

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ expression: input
55
kind:
66
- EndLine
77
- WhiteSpace
8-
- Pragma
8+
- PragmaKw
99
- WhiteSpace
1010
- Version
1111
- Semicolon

crates/parser/src/snapshots/parser__input__tests__test_pragma.snap

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ kind:
99
- EndLine
1010
- EndLine
1111
- WhiteSpace
12-
- Pragma
12+
- PragmaKw
1313
- WhiteSpace
1414
- Circom
1515
- WhiteSpace

crates/parser/src/token_kind.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,10 @@ pub enum TokenKind {
2020
WhiteSpace,
2121
#[regex(r"\r?\n")]
2222
EndLine,
23-
// Circom
24-
#[token("pragma")]
23+
// Pragma
2524
Pragma,
25+
#[token("pragma")]
26+
PragmaKw,
2627
#[token("circom")]
2728
Circom,
2829
#[regex("2.[0-9].[0-9]")]
@@ -211,6 +212,7 @@ pub enum TokenKind {
211212
FunctionName,
212213
ParameterList,
213214
SignalDecl,
215+
VarIdentifier,
214216
VarDecl,
215217
InputSignalDecl,
216218
OutputSignalDecl,

crates/syntax/src/abstract_syntax_tree/ast.rs

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,33 +14,42 @@ ast_node!(AstSignalHeader, SignalHeader);
1414
ast_node!(AstInputSignalDecl, InputSignalDecl);
1515
ast_node!(AstOutputSignalDecl, OutputSignalDecl);
1616
ast_node!(AstSignalDecl, SignalDecl);
17+
ast_node!(AstSignalIdentifier, SignalIdentifier);
1718

1819
impl AstInputSignalDecl {
19-
pub fn name(&self) -> Option<AstIdentifier> {
20+
pub fn signal_identifier(&self) -> Option<AstSignalIdentifier> {
2021
support::child(self.syntax())
2122
}
22-
23-
pub fn same_name(&self, other: &SyntaxText) -> bool {
24-
if let Some(name) = self.name() {
25-
return name.equal(other);
26-
}
27-
false
28-
}
2923
}
3024

3125
impl AstOutputSignalDecl {
32-
pub fn name(&self) -> Option<AstIdentifier> {
26+
pub fn signal_identifier(&self) -> Option<AstSignalIdentifier> {
3327
support::child(self.syntax())
3428
}
3529
}
30+
3631
impl AstSignalDecl {
32+
pub fn signal_identifier(&self) -> Option<AstSignalIdentifier> {
33+
support::child(self.syntax())
34+
}
35+
}
36+
37+
impl AstSignalIdentifier {
3738
pub fn name(&self) -> Option<AstIdentifier> {
3839
support::child(self.syntax())
3940
}
4041
}
42+
4143
ast_node!(AstVarDecl, VarDecl);
44+
ast_node!(AstVarIdentifier, VarIdentifier);
4245

4346
impl AstVarDecl {
47+
pub fn var_identifier(&self) -> Option<AstVarIdentifier> {
48+
support::child(self.syntax())
49+
}
50+
}
51+
52+
impl AstVarIdentifier {
4453
pub fn name(&self) -> Option<AstIdentifier> {
4554
support::child(self.syntax())
4655
}

crates/syntax/src/abstract_syntax_tree/template.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ impl AstTemplateDef {
4747
pub fn find_input_signal(&self, name: &str) -> Option<AstInputSignalDecl> {
4848
if let Some(statements) = self.statements() {
4949
for input_signal in statements.find_children::<AstInputSignalDecl>() {
50-
if let Some(signal_name) = input_signal.name() {
50+
if let Some(signal_name) = input_signal.signal_identifier().unwrap().name() {
5151
if signal_name.syntax().text() == name {
5252
return Some(input_signal);
5353
}
@@ -60,7 +60,7 @@ impl AstTemplateDef {
6060
pub fn find_output_signal(&self, name: &str) -> Option<AstOutputSignalDecl> {
6161
if let Some(statements) = self.statements() {
6262
for input_signal in statements.find_children::<AstOutputSignalDecl>() {
63-
if let Some(signal_name) = input_signal.name() {
63+
if let Some(signal_name) = input_signal.signal_identifier().unwrap().name() {
6464
if signal_name.syntax().text() == name {
6565
return Some(input_signal);
6666
}
@@ -73,7 +73,7 @@ impl AstTemplateDef {
7373
pub fn find_internal_signal(&self, name: &str) -> Option<AstSignalDecl> {
7474
if let Some(statements) = self.statements() {
7575
for signal in statements.find_children::<AstSignalDecl>() {
76-
if let Some(signal_name) = signal.name() {
76+
if let Some(signal_name) = signal.signal_identifier().unwrap().name() {
7777
if signal_name.syntax().text() == name {
7878
return Some(signal);
7979
}

0 commit comments

Comments
 (0)