Skip to content
This repository was archived by the owner on Dec 20, 2024. It is now read-only.

Commit 0ef8789

Browse files
Add field names (fwcd#106)
* Add named fields to function_declaration * Add named fields to class_declaration * Add named fields to object_declaration * Add named fields to property_declaration * Add named fields to type_alias * Add named fields to constructors * Add named fields to anonymous_initializer * Add named fields to companion_object * Add named fields to lambda_literal * Add named fields to anonymous_fonction * Add named fields to object_literal * Add named fields to control statements/expressions
1 parent 16de60e commit 0ef8789

15 files changed

+1960336
-604161
lines changed

grammar.js

+82-79
Original file line numberDiff line numberDiff line change
@@ -177,12 +177,12 @@ module.exports = grammar({
177177
top_level_object: $ => seq($._declaration, optional($._semi)),
178178

179179
type_alias: $ => seq(
180-
optional($.modifiers),
180+
optional(field('modifiers', $.modifiers)),
181181
"typealias",
182-
alias($.simple_identifier, $.type_identifier),
183-
optional($.type_parameters),
182+
field('name', alias($.simple_identifier, $.type_identifier)),
183+
optional(field('type_parameters', $.type_parameters)),
184184
"=",
185-
$._type
185+
field('type', $._type)
186186
),
187187

188188
_declaration: $ => choice(
@@ -208,30 +208,30 @@ module.exports = grammar({
208208

209209
class_declaration: $ => prec.right(choice(
210210
seq(
211-
optional($.modifiers),
212-
choice("class", "interface"),
213-
alias($.simple_identifier, $.type_identifier),
214-
optional($.type_parameters),
215-
optional($.primary_constructor),
216-
optional(seq(":", $._delegation_specifiers)),
217-
optional($.type_constraints),
218-
optional($.class_body)
211+
optional(field('modifiers', $.modifiers)),
212+
field('kind', choice("class", "interface")),
213+
field('name', alias($.simple_identifier, $.type_identifier)),
214+
optional(field('type_parameters', $.type_parameters)),
215+
optional(field('primary_constructor', $.primary_constructor)),
216+
optional(seq(":", field('delegation_specifiers', $._delegation_specifiers))),
217+
optional(field('constraints', $.type_constraints)),
218+
optional(field('body', $.class_body))
219219
),
220220
seq(
221-
optional($.modifiers),
222-
"enum", "class",
223-
alias($.simple_identifier, $.type_identifier),
224-
optional($.type_parameters),
225-
optional($.primary_constructor),
226-
optional(seq(":", $._delegation_specifiers)),
227-
optional($.type_constraints),
228-
optional($.enum_class_body)
221+
optional(field('modifiers', $.modifiers)),
222+
field('kind', "enum"), "class",
223+
field('name', alias($.simple_identifier, $.type_identifier)),
224+
optional(field('type_parameters', $.type_parameters)),
225+
optional(field('primary_constructor', $.primary_constructor)),
226+
optional(seq(":", field('delegation_specifiers', $._delegation_specifiers))),
227+
optional(field('constraints', $.type_constraints)),
228+
optional(field('body', $.enum_class_body))
229229
)
230230
)),
231231

232232
primary_constructor: $ => seq(
233-
optional(seq(optional($.modifiers), "constructor")),
234-
$._class_parameters
233+
optional(seq(optional(field('modifiers', $.modifiers)), "constructor")),
234+
field('parameters', $._class_parameters)
235235
),
236236

237237
class_body: $ => seq("{", optional($._class_member_declarations), "}"),
@@ -308,15 +308,15 @@ module.exports = grammar({
308308
$.secondary_constructor
309309
),
310310

311-
anonymous_initializer: $ => seq("init", $._block),
311+
anonymous_initializer: $ => seq("init", field('body', $._block)),
312312

313313
companion_object: $ => seq(
314-
optional($.modifiers),
314+
optional(field('modifiers', $.modifiers)),
315315
"companion",
316316
"object",
317-
optional(alias($.simple_identifier, $.type_identifier)),
318-
optional(seq(":", $._delegation_specifiers)),
319-
optional($.class_body)
317+
optional(field('name', alias($.simple_identifier, $.type_identifier))),
318+
optional(seq(":", field('delegation_specifiers', $._delegation_specifiers))),
319+
optional(field('body', $.class_body))
320320
),
321321

322322
function_value_parameters: $ => seq(
@@ -342,15 +342,15 @@ module.exports = grammar({
342342
),
343343

344344
function_declaration: $ => prec.right(seq( // TODO
345-
optional($.modifiers),
345+
optional(field('modifiers', $.modifiers)),
346346
"fun",
347-
optional($.type_parameters),
348-
optional(seq($._receiver_type, optional('.'))),
349-
$.simple_identifier,
350-
$.function_value_parameters,
351-
optional(seq(":", $._type)),
352-
optional($.type_constraints),
353-
optional($.function_body)
347+
optional(field('type_parameters', $.type_parameters)),
348+
optional(seq(field('receiver', $._receiver_type), optional('.'))),
349+
field('name', $.simple_identifier),
350+
field('parameters', $.function_value_parameters),
351+
optional(seq(":", field('return_type', $._type))),
352+
optional(field('constraints', $.type_constraints)),
353+
optional(field('body', $.function_body))
354354
)),
355355

356356
function_body: $ => choice($._block, seq("=", $._expression)),
@@ -362,21 +362,21 @@ module.exports = grammar({
362362
)),
363363

364364
property_declaration: $ => prec.right(seq(
365-
optional($.modifiers),
366-
choice("val", "var"),
367-
optional($.type_parameters),
368-
optional(seq($._receiver_type, optional('.'))),
369-
choice($.variable_declaration, $.multi_variable_declaration),
370-
optional($.type_constraints),
365+
optional(field('modifiers', $.modifiers)),
366+
field('kind', choice("val", "var")),
367+
optional(field('type_parameters', $.type_parameters)),
368+
optional(seq(field('receiver', $._receiver_type), optional('.'))),
369+
choice(field('variable', $.variable_declaration), field('variables', $.multi_variable_declaration)),
370+
optional(field('constraints', $.type_constraints)),
371371
optional(choice(
372-
seq("=", $._expression),
373-
$.property_delegate
372+
seq("=", field('expression', $._expression)),
373+
field('delegate', $.property_delegate)
374374
)),
375375
optional(';'),
376376
choice(
377377
// TODO: Getter-setter combinations
378-
optional($.getter),
379-
optional($.setter)
378+
optional(field('getter', $.getter)),
379+
optional(field('setter', $.setter))
380380
)
381381
)),
382382

@@ -415,19 +415,19 @@ module.exports = grammar({
415415
parameter: $ => seq($.simple_identifier, ":", $._type),
416416

417417
object_declaration: $ => prec.right(seq(
418-
optional($.modifiers),
418+
optional(field('modifiers', $.modifiers)),
419419
"object",
420-
alias($.simple_identifier, $.type_identifier),
421-
optional(seq(":", $._delegation_specifiers)),
422-
optional($.class_body)
420+
field('name', alias($.simple_identifier, $.type_identifier)),
421+
optional(seq(":", field('delegation_specifiers', $._delegation_specifiers))),
422+
optional(field('body', $.class_body))
423423
)),
424424

425425
secondary_constructor: $ => seq(
426-
optional($.modifiers),
426+
optional(field('modifiers', $.modifiers)),
427427
"constructor",
428-
$.function_value_parameters,
429-
optional(seq(":", $.constructor_delegation_call)),
430-
optional($._block)
428+
field('parameters', $.function_value_parameters),
429+
optional(seq(":", field('delegation', $.constructor_delegation_call))),
430+
optional(field('body', $._block))
431431
),
432432

433433
constructor_delegation_call: $ => seq(choice("this", "super"), $.value_arguments),
@@ -570,27 +570,30 @@ module.exports = grammar({
570570
"for",
571571
"(",
572572
repeat($.annotation),
573-
choice($.variable_declaration, $.multi_variable_declaration),
573+
choice(
574+
field('variable', $.variable_declaration),
575+
field('variables', $.multi_variable_declaration)
576+
),
574577
"in",
575-
$._expression,
578+
field('value', $._expression),
576579
")",
577-
optional($.control_structure_body)
580+
optional(field('body', $.control_structure_body))
578581
)),
579582

580583
while_statement: $ => seq(
581584
"while",
582585
"(",
583-
$._expression,
586+
field('condition', $._expression),
584587
")",
585-
choice(";", $.control_structure_body)
588+
choice(";", field('body', $.control_structure_body))
586589
),
587590

588591
do_while_statement: $ => prec.right(seq(
589592
"do",
590-
optional($.control_structure_body),
593+
optional(field('body', $.control_structure_body)),
591594
"while",
592595
"(",
593-
$._expression,
596+
field('condition', $._expression),
594597
")",
595598
)),
596599

@@ -775,8 +778,8 @@ module.exports = grammar({
775778

776779
lambda_literal: $ => prec(PREC.LAMBDA_LITERAL, seq(
777780
"{",
778-
optional(seq(optional($.lambda_parameters), "->")),
779-
optional($.statements),
781+
optional(seq(optional(field('parameters', $.lambda_parameters)), "->")),
782+
optional(field('body', $.statements)),
780783
"}"
781784
)),
782785

@@ -796,9 +799,9 @@ module.exports = grammar({
796799
anonymous_function: $ => prec.right(seq(
797800
"fun",
798801
optional(seq(sep1($._simple_user_type, "."), ".")), // TODO
799-
$.function_value_parameters,
800-
optional(seq(":", $._type)),
801-
optional($.function_body)
802+
field('parameters', $.function_value_parameters),
803+
optional(seq(":", field('return_type', $._type))),
804+
optional(field('body', $.function_body))
802805
)),
803806

804807
_function_literal: $ => choice(
@@ -808,8 +811,8 @@ module.exports = grammar({
808811

809812
object_literal: $ => seq(
810813
"object",
811-
optional(seq(":", $._delegation_specifiers)),
812-
$.class_body
814+
optional(seq(":", field('delegation_specifiers', $._delegation_specifiers))),
815+
field('body', $.class_body)
813816
),
814817

815818
this_expression: $ => choice(
@@ -825,15 +828,15 @@ module.exports = grammar({
825828

826829
if_expression: $ => prec.right(seq(
827830
"if",
828-
"(", $._expression, ")",
831+
"(", field('condition', $._expression), ")",
829832
choice(
830-
$.control_structure_body,
833+
field('consequence', $.control_structure_body),
831834
";",
832835
seq(
833-
optional($.control_structure_body),
836+
optional(field('consequence', $.control_structure_body)),
834837
optional(";"),
835838
"else",
836-
choice($.control_structure_body, ";")
839+
choice(field('alternative', $.control_structure_body), ";")
837840
)
838841
)
839842
)),
@@ -852,19 +855,19 @@ module.exports = grammar({
852855

853856
when_expression: $ => seq(
854857
"when",
855-
optional($.when_subject),
858+
optional(field('subject', $.when_subject)),
856859
"{",
857-
repeat($.when_entry),
860+
repeat(field('entry', $.when_entry)),
858861
"}"
859862
),
860863

861864
when_entry: $ => seq(
862865
choice(
863-
seq($.when_condition, repeat(seq(",", $.when_condition))),
866+
seq(field('condition', $.when_condition), repeat(seq(",", field('condition', $.when_condition)))),
864867
"else"
865868
),
866869
"->",
867-
$.control_structure_body,
870+
field('body', $.control_structure_body),
868871
optional($._semi)
869872
),
870873

@@ -880,9 +883,9 @@ module.exports = grammar({
880883

881884
try_expression: $ => seq(
882885
"try",
883-
$._block,
886+
field('body', $._block),
884887
choice(
885-
seq(repeat1($.catch_block), optional($.finally_block)),
888+
seq(repeat1(field('catch', $.catch_block)), optional(field('finally', $.finally_block))),
886889
$.finally_block
887890
)
888891
),
@@ -895,10 +898,10 @@ module.exports = grammar({
895898
":",
896899
$._type,
897900
")",
898-
$._block,
901+
field('body', $._block),
899902
),
900903

901-
finally_block: $ => seq("finally", $._block),
904+
finally_block: $ => seq("finally", field('body', $._block)),
902905

903906
jump_expression: $ => choice(
904907
prec.right(PREC.RETURN_OR_THROW, seq("throw", $._expression)),

0 commit comments

Comments
 (0)