Skip to content

Commit d13ccdd

Browse files
authored
Support bodyless class/struct/record/enum/interface (#364)
* Support bodyless class/struct/record/enum/interface * 💄 * Further shrink parser to 7734/3889
1 parent 4bf615f commit d13ccdd

File tree

12 files changed

+489325
-492321
lines changed

12 files changed

+489325
-492321
lines changed

.gitignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,3 +38,8 @@ dist/
3838
*.tar.gz
3939
*.tgz
4040
*.zip
41+
42+
# Build artifacts
43+
parser.exp
44+
parser.lib
45+
bindings/*

grammar.js

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ module.exports = grammar({
265265

266266
class_declaration: $ => seq(
267267
$._class_declaration_initializer,
268-
$._optional_semi,
268+
$._declaration_list_body,
269269
),
270270

271271
_class_declaration_initializer: $ => seq(
@@ -275,13 +275,11 @@ module.exports = grammar({
275275
field('name', $.identifier),
276276
repeat(choice($.type_parameter_list, $.parameter_list, $.base_list)),
277277
repeat($.type_parameter_constraints_clause),
278-
field('body', $.declaration_list),
279278
),
280279

281280
struct_declaration: $ => seq(
282281
$._struct_declaration_initializer,
283-
field('body', $.declaration_list),
284-
$._optional_semi,
282+
$._declaration_list_body,
285283
),
286284

287285
_struct_declaration_initializer: $ => seq(
@@ -295,13 +293,19 @@ module.exports = grammar({
295293
),
296294

297295
enum_declaration: $ => seq(
296+
$._enum_declaration_initializer,
297+
choice(
298+
seq(field('body', $.enum_member_declaration_list), $._optional_semi),
299+
';',
300+
),
301+
),
302+
303+
_enum_declaration_initializer: $ => seq(
298304
repeat($._attribute_list),
299305
repeat($.modifier),
300306
'enum',
301307
field('name', $.identifier),
302308
optional($.base_list),
303-
field('body', $.enum_member_declaration_list),
304-
$._optional_semi,
305309
),
306310

307311
enum_member_declaration_list: $ => seq(
@@ -322,8 +326,7 @@ module.exports = grammar({
322326

323327
interface_declaration: $ => seq(
324328
$._interface_declaration_initializer,
325-
field('body', $.declaration_list),
326-
$._optional_semi,
329+
$._declaration_list_body,
327330
),
328331

329332
_interface_declaration_initializer: $ => seq(
@@ -354,8 +357,7 @@ module.exports = grammar({
354357

355358
record_declaration: $ => seq(
356359
$._record_declaration_initializer,
357-
choice(field('body', $.declaration_list), ';'),
358-
$._optional_semi,
360+
$._declaration_list_body,
359361
),
360362

361363
_record_declaration_initializer: $ => seq(
@@ -374,6 +376,11 @@ module.exports = grammar({
374376
seq(':', $.primary_constructor_base_type, optional(seq(',', commaSep1($._name)))),
375377
),
376378

379+
_declaration_list_body: $ => choice(
380+
seq(field('body', $.declaration_list), $._optional_semi),
381+
';',
382+
),
383+
377384
primary_constructor_base_type: $ => seq(
378385
field('type', $._name),
379386
$.argument_list,

package.json

Lines changed: 11 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/grammar.json

Lines changed: 65 additions & 57 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)