Skip to content

Commit ed373e1

Browse files
committed
Improve variables and function calls
1 parent 6b02dfd commit ed373e1

5 files changed

Lines changed: 5151 additions & 5347 deletions

File tree

grammar.js

Lines changed: 40 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ module.exports = grammar({
5353

5454
// statements
5555
return_statement: ($) =>
56-
seq("return", optional($.expression_list), optional($.empty_statement)),
56+
seq("return", field("value", optional($.expression_list)), optional($.empty_statement)),
5757

5858
statement: ($) =>
5959
choice(
@@ -82,35 +82,27 @@ module.exports = grammar({
8282
"function",
8383
field(
8484
"name",
85-
choice($.identifier, alias($._table_function_variable, $.variable)),
85+
alias($._function_name, $.function_name),
8686
),
8787
$._function_body,
8888
),
89-
_table_function_variable: ($) =>
89+
_function_name: ($) =>
9090
seq(
91-
$._table_identifier,
92-
choice($._named_field_identifier, $._method_identifier),
91+
choice($.identifier, $._dotted_name),
92+
optional($._method_identifier),
9393
),
94-
_table_identifier: ($) =>
95-
field(
96-
"table",
97-
choice($.identifier, alias($._table_field_variable, $.variable)),
98-
),
99-
_table_field_variable: ($) =>
100-
seq($._table_identifier, $._named_field_identifier),
94+
_dotted_name: $ => seq($.identifier, repeat1(seq(".", $.identifier))),
10195

10296
for_generic_statement: ($) =>
10397
seq(
10498
"for",
105-
field("left", alias($._name_list, $.variable_list)),
99+
field("left", _list($.identifier, ",")),
106100
"in",
107-
field("right", alias($._value_list, $.expression_list)),
101+
field("right", _list($.expression, ",")),
108102
"do",
109103
optional(field("body", $.block)),
110104
"end",
111105
),
112-
_name_list: ($) => _list(field("name", $.identifier), ","),
113-
_value_list: ($) => _list(field("value", $.expression), ","),
114106

115107
for_numeric_statement: ($) =>
116108
seq(
@@ -172,18 +164,21 @@ module.exports = grammar({
172164
local_variable_declaration: ($) =>
173165
seq(
174166
"local",
175-
alias($._local_variable_list, $.variable_list),
176-
optional(seq("=", alias($._value_list, $.expression_list))),
167+
field("variables", _list($.variable, ",")),
168+
optional(seq("=", field("values", _list($.expression, ",")))),
169+
),
170+
variable: ($) =>
171+
seq(
172+
field("name", $.identifier),
173+
optional(seq("<", field("attribute", $.identifier), ">"))
177174
),
178-
_local_variable_list: ($) =>
179-
_list(alias($._local_variable, $.variable), ","),
180-
_local_variable: ($) =>
181-
seq(field("name", $.identifier), optional($.attribute)),
182-
attribute: ($) => seq("<", field("name", $.identifier), ">"),
183175

184176
variable_assignment: ($) =>
185-
seq($.variable_list, "=", alias($._value_list, $.expression_list)),
186-
variable_list: ($) => _list($.variable, ","),
177+
seq(
178+
field("assignee", _list($._variable, ",")),
179+
"=",
180+
field("value", _list($.expression, ","))
181+
),
187182

188183
empty_statement: () => ";",
189184

@@ -278,47 +273,39 @@ module.exports = grammar({
278273
),
279274
field_separator: () => choice(",", ";"),
280275

281-
prefix: ($) => choice($.variable, $.call, $.parenthesized_expression),
276+
prefix: ($) => choice($.identifier, $.call, $.parenthesized_expression, $.subscript, $.member_access),
282277
prefix_expression: ($) => $.prefix,
283278
_prefix_expression: ($) => prec(PREC.CALL, $.prefix),
284279

285280
parenthesized_expression: ($) => seq("(", $.expression, ")"),
286281

287282
call: ($) =>
288283
seq(
289-
field(
290-
"function",
291-
choice(
292-
$._prefix_expression,
293-
alias($._table_method_variable, $.variable),
294-
),
295-
),
296-
field("arguments", $.argument_list),
284+
field("function", choice($._prefix_expression, $.method_reference)),
285+
field("arguments", choice($.argument_list, $.table, $.string)),
297286
),
298-
_table_method_variable: ($) =>
299-
seq(field("table", $.prefix_expression), $._method_identifier),
287+
method_reference: $ => seq(
288+
$._prefix_expression,
289+
$._method_identifier,
290+
),
300291
_method_identifier: ($) => seq(":", field("method", $.identifier)),
301292
argument_list: ($) =>
302-
choice(seq("(", optional($.expression_list), ")"), $.table, $.string),
293+
seq("(", optional($.expression_list), ")"),
303294
expression_list: ($) => _list($.expression, ","),
304295

305-
variable: ($) => choice(field("name", $.identifier), $._table_variable),
306-
_table_variable: ($) =>
296+
_variable: ($) => choice($.identifier, $.member_access, $.subscript),
297+
member_access: $ => seq(
298+
field("subject", $.prefix),
299+
".",
300+
field("member", $.identifier)
301+
),
302+
subscript: ($) =>
307303
seq(
308-
field(
309-
"table",
310-
choice(
311-
$.identifier,
312-
alias($._table_variable, $.variable),
313-
$.call,
314-
$.parenthesized_expression,
315-
),
316-
),
317-
choice($._indexed_field_identifier, $._named_field_identifier),
304+
field("subject", $.prefix),
305+
"[",
306+
field("subscript", $.expression),
307+
"]"
318308
),
319-
_named_field_identifier: ($) => seq(".", field("field", $.identifier)),
320-
_indexed_field_identifier: ($) =>
321-
seq("[", field("field", $.expression), "]"),
322309

323310
function_definition: ($) => seq("function", $._function_body),
324311
_function_body: ($) =>
@@ -332,7 +319,7 @@ module.exports = grammar({
332319
parameter_list: ($) =>
333320
choice(
334321
seq(
335-
_list(field("name", $.identifier), ","),
322+
_list($.identifier, ","),
336323
optional(seq(",", $.vararg_expression)),
337324
),
338325
$.vararg_expression,

package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
"nan": "^2.15.0"
2222
},
2323
"devDependencies": {
24-
"tree-sitter-cli": "^0.20.6",
2524
"prettier": "^2.6.2"
2625
},
2726
"tree-sitter": [

0 commit comments

Comments
 (0)