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

Commit e22c586

Browse files
authoredNov 9, 2023
Merge branch 'fwcd:main' into main
2 parents 900327f + 0ef8789 commit e22c586

15 files changed

+1969564
-588413
lines changed
 

‎grammar.js

+122-91
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ const PREC = {
5151
const DEC_DIGITS = token(sep1(/[0-9]+/, /_+/));
5252
const HEX_DIGITS = token(sep1(/[0-9a-fA-F]+/, /_+/));
5353
const BIN_DIGITS = token(sep1(/[01]/, /_+/));
54-
const REAL_EXPONENT = token(seq(/[eE]/, optional(/[+-]/), DEC_DIGITS))
54+
const REAL_EXPONENT = token(seq(/[eE]/, optional(/[+-]/), DEC_DIGITS));
5555

5656
module.exports = grammar({
5757
name: "kotlin",
@@ -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,29 +811,32 @@ 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

815-
this_expression: $ => "this",
818+
this_expression: $ => choice(
819+
"this",
820+
$._this_at
821+
),
816822

817-
super_expression: $ => seq(
823+
super_expression: $ => prec.right(choice(
818824
"super",
819-
// TODO optional(seq("<", $._type, ">")),
820-
// TODO optional(seq("@", $.simple_identifier))
821-
),
825+
seq("super", "<", $._type, ">"),
826+
$._super_at
827+
)),
822828

823829
if_expression: $ => prec.right(seq(
824830
"if",
825-
"(", $._expression, ")",
831+
"(", field('condition', $._expression), ")",
826832
choice(
827-
$.control_structure_body,
833+
field('consequence', $.control_structure_body),
828834
";",
829835
seq(
830-
optional($.control_structure_body),
836+
optional(field('consequence', $.control_structure_body)),
831837
optional(";"),
832838
"else",
833-
choice($.control_structure_body, ";")
839+
choice(field('alternative', $.control_structure_body), ";")
834840
)
835841
)
836842
)),
@@ -849,19 +855,19 @@ module.exports = grammar({
849855

850856
when_expression: $ => seq(
851857
"when",
852-
optional($.when_subject),
858+
optional(field('subject', $.when_subject)),
853859
"{",
854-
repeat($.when_entry),
860+
repeat(field('entry', $.when_entry)),
855861
"}"
856862
),
857863

858864
when_entry: $ => seq(
859865
choice(
860-
seq($.when_condition, repeat(seq(",", $.when_condition))),
866+
seq(field('condition', $.when_condition), repeat(seq(",", field('condition', $.when_condition)))),
861867
"else"
862868
),
863869
"->",
864-
$.control_structure_body,
870+
field('body', $.control_structure_body),
865871
optional($._semi)
866872
),
867873

@@ -877,9 +883,9 @@ module.exports = grammar({
877883

878884
try_expression: $ => seq(
879885
"try",
880-
$._block,
886+
field('body', $._block),
881887
choice(
882-
seq(repeat1($.catch_block), optional($.finally_block)),
888+
seq(repeat1(field('catch', $.catch_block)), optional(field('finally', $.finally_block))),
883889
$.finally_block
884890
)
885891
),
@@ -892,10 +898,10 @@ module.exports = grammar({
892898
":",
893899
$._type,
894900
")",
895-
$._block,
901+
field('body', $._block),
896902
),
897903

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

900906
jump_expression: $ => choice(
901907
prec.right(PREC.RETURN_OR_THROW, seq("throw", $._expression)),
@@ -986,7 +992,8 @@ module.exports = grammar({
986992
"sealed",
987993
"annotation",
988994
"data",
989-
"inner"
995+
"inner",
996+
"value",
990997
),
991998

992999
member_modifier: $ => choice(
@@ -1086,6 +1093,7 @@ module.exports = grammar({
10861093
"expect",
10871094
"data",
10881095
"inner",
1096+
"value",
10891097
"actual",
10901098
"set",
10911099
"get"
@@ -1114,15 +1122,38 @@ module.exports = grammar({
11141122
// Keywords
11151123
// ==========
11161124

1117-
_return_at: $ => seq("return@", $._lexical_identifier),
1125+
_return_at: $ => seq(
1126+
"return@",
1127+
alias($._lexical_identifier, $.label)
1128+
),
11181129

1119-
_continue_at: $ => seq("continue@", $._lexical_identifier),
1130+
_continue_at: $ => seq(
1131+
"continue@",
1132+
alias($._lexical_identifier, $.label)
1133+
),
11201134

1121-
_break_at: $ => seq("break@", $._lexical_identifier),
1135+
_break_at: $ => seq(
1136+
"break@",
1137+
alias($._lexical_identifier, $.label)
1138+
),
11221139

1123-
_this_at: $ => seq("this@", $._lexical_identifier),
1140+
_this_at: $ => seq(
1141+
"this@",
1142+
alias($._lexical_identifier, $.type_identifier)
1143+
),
11241144

1125-
_super_at: $ => seq("super@", $._lexical_identifier),
1145+
_super_at: $ => choice(
1146+
seq(
1147+
"super@",
1148+
alias($._lexical_identifier, $.type_identifier)
1149+
),
1150+
seq(
1151+
"super",
1152+
"<", $._type, ">",
1153+
token.immediate("@"),
1154+
alias($._lexical_identifier, $.type_identifier)
1155+
)
1156+
),
11261157

11271158
// ==========
11281159
// Literals

0 commit comments

Comments
 (0)