Skip to content

Commit 31b263f

Browse files
committed
Ensure nodes appear in the syntax tree
Previously, these nodes were defined using regexes, preventing them from being explicitly represented in the tree.
1 parent d563cbf commit 31b263f

File tree

7 files changed

+178
-92
lines changed

7 files changed

+178
-92
lines changed

grammar.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -428,7 +428,8 @@ module.exports = grammar({
428428
),
429429

430430
assignment: $ => seq(caseInsensitive('assignment'), '(', '=', ')'),
431-
operator: $ => seq(caseInsensitive('operator'), '(', /[^()]+/, ')'),
431+
operator: $ => seq(caseInsensitive('operator'), '(', $.operator_name, ')'),
432+
operator_name: $ => /[^()]+/,
432433
defined_io_procedure: $ => seq(
433434
choice(caseInsensitive('read'), caseInsensitive('write')),
434435
'(',
@@ -689,9 +690,10 @@ module.exports = grammar({
689690
),
690691

691692
implicit_range: $ => seq(
692-
/[a-zA-Z]/,
693-
optional(seq('-', /[a-zA-Z]/))
693+
$.implicit_range_letter,
694+
optional(seq('-', $.implicit_range_letter))
694695
),
696+
implicit_range_letter: $ => /[a-zA-Z]/,
695697

696698
import_statement: $ => prec.left(seq(
697699
caseInsensitive('import'),
@@ -1934,8 +1936,9 @@ module.exports = grammar({
19341936
)),
19351937

19361938
user_defined_operator: $ => prec.right(seq(
1937-
'.', /[a-zA-Z]+/, '.'
1939+
'.', $.user_defined_operator_name, '.'
19381940
)),
1941+
user_defined_operator_name: $ => /[a-zA-Z]+/,
19391942

19401943
// Due to the fact Fortran uses parentheses for both function calls and
19411944
// array access there is no way to differentiate the two except for the

src/grammar.json

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8181,15 +8181,19 @@
81818181
"value": "("
81828182
},
81838183
{
8184-
"type": "PATTERN",
8185-
"value": "[^()]+"
8184+
"type": "SYMBOL",
8185+
"name": "operator_name"
81868186
},
81878187
{
81888188
"type": "STRING",
81898189
"value": ")"
81908190
}
81918191
]
81928192
},
8193+
"operator_name": {
8194+
"type": "PATTERN",
8195+
"value": "[^()]+"
8196+
},
81938197
"defined_io_procedure": {
81948198
"type": "SEQ",
81958199
"members": [
@@ -10397,8 +10401,8 @@
1039710401
"type": "SEQ",
1039810402
"members": [
1039910403
{
10400-
"type": "PATTERN",
10401-
"value": "[a-zA-Z]"
10404+
"type": "SYMBOL",
10405+
"name": "implicit_range_letter"
1040210406
},
1040310407
{
1040410408
"type": "CHOICE",
@@ -10411,8 +10415,8 @@
1041110415
"value": "-"
1041210416
},
1041310417
{
10414-
"type": "PATTERN",
10415-
"value": "[a-zA-Z]"
10418+
"type": "SYMBOL",
10419+
"name": "implicit_range_letter"
1041610420
}
1041710421
]
1041810422
},
@@ -10423,6 +10427,10 @@
1042310427
}
1042410428
]
1042510429
},
10430+
"implicit_range_letter": {
10431+
"type": "PATTERN",
10432+
"value": "[a-zA-Z]"
10433+
},
1042610434
"import_statement": {
1042710435
"type": "PREC_LEFT",
1042810436
"value": 0,
@@ -18858,8 +18866,8 @@
1885818866
"value": "."
1885918867
},
1886018868
{
18861-
"type": "PATTERN",
18862-
"value": "[a-zA-Z]+"
18869+
"type": "SYMBOL",
18870+
"name": "user_defined_operator_name"
1886318871
},
1886418872
{
1886518873
"type": "STRING",
@@ -18868,6 +18876,10 @@
1886818876
]
1886918877
}
1887018878
},
18879+
"user_defined_operator_name": {
18880+
"type": "PATTERN",
18881+
"value": "[a-zA-Z]+"
18882+
},
1887118883
"call_expression": {
1887218884
"type": "PREC",
1887318885
"value": 80,

src/node-types.json

Lines changed: 45 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6976,7 +6976,17 @@
69766976
{
69776977
"type": "implicit_range",
69786978
"named": true,
6979-
"fields": {}
6979+
"fields": {},
6980+
"children": {
6981+
"multiple": true,
6982+
"required": true,
6983+
"types": [
6984+
{
6985+
"type": "implicit_range_letter",
6986+
"named": true
6987+
}
6988+
]
6989+
}
69806990
},
69816991
{
69826992
"type": "implicit_statement",
@@ -9717,7 +9727,17 @@
97179727
{
97189728
"type": "operator",
97199729
"named": true,
9720-
"fields": {}
9730+
"fields": {},
9731+
"children": {
9732+
"multiple": false,
9733+
"required": true,
9734+
"types": [
9735+
{
9736+
"type": "operator_name",
9737+
"named": true
9738+
}
9739+
]
9740+
}
97219741
},
97229742
{
97239743
"type": "output_item_list",
@@ -14684,7 +14704,17 @@
1468414704
{
1468514705
"type": "user_defined_operator",
1468614706
"named": true,
14687-
"fields": {}
14707+
"fields": {},
14708+
"children": {
14709+
"multiple": false,
14710+
"required": true,
14711+
"types": [
14712+
{
14713+
"type": "user_defined_operator_name",
14714+
"named": true
14715+
}
14716+
]
14717+
}
1468814718
},
1468914719
{
1469014720
"type": "variable_attributes",
@@ -15585,6 +15615,10 @@
1558515615
"type": "implicit",
1558615616
"named": false
1558715617
},
15618+
{
15619+
"type": "implicit_range_letter",
15620+
"named": true
15621+
},
1558815622
{
1558915623
"type": "import",
1559015624
"named": false
@@ -15709,6 +15743,10 @@
1570915743
"type": "operator",
1571015744
"named": false
1571115745
},
15746+
{
15747+
"type": "operator_name",
15748+
"named": true
15749+
},
1571215750
{
1571315751
"type": "optional",
1571415752
"named": false
@@ -15921,6 +15959,10 @@
1592115959
"type": "use",
1592215960
"named": false
1592315961
},
15962+
{
15963+
"type": "user_defined_operator_name",
15964+
"named": true
15965+
},
1592415966
{
1592515967
"type": "value",
1592615968
"named": false

0 commit comments

Comments
 (0)