related #67: allow multiple ';' separating _simple_class_members

pull/904/head
PrestonKnopp 2025-09-30 22:56:52 +07:00
parent cd5d7b3b6f
commit a8b2572472
2 changed files with 40 additions and 11 deletions

@ -445,7 +445,7 @@ module.exports = grammar({
class_body: ($) =>
choice(
$._class_members,
$._class_member,
seq(
$._indent,
seq(repeat($._class_member), choice($._body_end, $._dedent)),
@ -456,21 +456,27 @@ module.exports = grammar({
// A class body can only directly contain class members. Then these class
// members can contain statements in their bodies, but not directly in the
// class.
_class_members: ($) =>
seq(trailSep1($._class_member, ";"), choice($._newline, $._body_end)),
_class_member: ($) =>
choice($._simple_class_members, $._compound_class_member),
_simple_class_members: ($) =>
seq(
trailSep1($._simple_class_member, repeat1(";")),
choice($._newline, $._body_end),
),
_simple_class_member: ($) =>
choice(
$.extends_statement,
$.function_definition,
$.variable_statement,
$.signal_statement,
$.enum_definition,
$.const_statement,
$.class_definition,
$.extends_statement,
$.pass_statement,
$.signal_statement,
$.variable_statement,
),
_compound_class_member: ($) =>
choice($.class_definition, $.enum_definition, $.function_definition),
// -- Enum
enum_definition: ($) =>
seq(

@ -3,6 +3,10 @@
============================================
test() ; ; print()
class T:
var hello: T = "";; ;const c = 1;;;;;signal world
func hello():
pass;;pass
---
@ -14,7 +18,26 @@ test() ; ; print()
(expression_statement
(call
(identifier)
(arguments))))
(arguments)))
(class_definition
(name)
(class_body
(variable_statement
(name)
(type
(identifier))
(string))
(const_statement
(name)
(integer))
(signal_statement
(name))
(function_definition
(name)
(parameters)
(body
(pass_statement)
(pass_statement))))))
============================================
#57 Parser can't handle certain multiline raw strings