Skip to content

Commit

Permalink
feat: optional last semicolon for statements, yay!
Browse files Browse the repository at this point in the history
  • Loading branch information
novusnota committed Jun 24, 2024
1 parent 9af92e4 commit 446c0ef
Show file tree
Hide file tree
Showing 4 changed files with 3,875 additions and 3,916 deletions.
37 changes: 24 additions & 13 deletions grammar.js
Original file line number Diff line number Diff line change
Expand Up @@ -336,36 +336,50 @@ module.exports = grammar({
/* Statements*/

_statement: ($) =>
choice($._statement_with_brace, seq($._statement_without_semicolon, ";")),

_statement_with_brace: ($) =>
choice(
$.let_statement, // StatementLet
$.block_statement, // StatementBlock
$.return_statement, // StatementReturn
$.expression_statement, // StatementExpression
$.assignment_statement, // StatementAssign
$.augmented_assignment_statement, // StatementAugmentedAssign
$.if_statement, // StatementCondition
$.while_statement, // StatementWhile
$.repeat_statement, // StatementRepeat
$.do_until_statement, // StatementUntil
$.try_statement, // StatementTry
$.foreach_statement, // StatementForEach
),

_statement_without_semicolon: ($) =>
choice(
$.let_statement, // StatementLet
$.return_statement, // StatementReturn
$.expression_statement, // StatementExpression
$.assignment_statement, // StatementAssign
$.augmented_assignment_statement, // StatementAugmentedAssign
$.do_until_statement, // StatementUntil
),

let_statement: ($) =>
seq(
"let",
field("name", $.identifier),
optional(seq(":", field("type", $._type))),
"=",
field("value", $._expression),
";",
),

block_statement: ($) => prec.right(seq("{", repeat($._statement), "}")),
block_statement: ($) =>
prec.right(
seq(
"{",
repeat($._statement),
optional($._statement_without_semicolon),
"}",
),
),

return_statement: ($) => seq("return", optional($._expression), ";"),
return_statement: ($) => seq("return", optional($._expression)),

expression_statement: ($) => seq($._expression, ";"),
expression_statement: ($) => seq($._expression),

assignment_statement: ($) =>
prec.right(
Expand All @@ -374,7 +388,6 @@ module.exports = grammar({
field("left", alias($._lvalue, $.lvalue)),
"=",
field("right", $._expression),
";",
),
),

Expand All @@ -388,7 +401,6 @@ module.exports = grammar({
choice("+=", "-=", "*=", "/=", "%=", "&=", "|=", "^="),
),
field("right", $._expression),
";",
),
),

Expand Down Expand Up @@ -430,7 +442,6 @@ module.exports = grammar({
"(",
field("condition", $._expression),
")",
";",
),

try_statement: ($) =>
Expand Down
85 changes: 50 additions & 35 deletions src/grammar.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 446c0ef

Please sign in to comment.