Add bool `assert` syntax

pull/844/head
GearsDatapacks 2025-04-13 17:02:04 +07:00 committed by Louis Pilfold
parent 99ec410150
commit 4e48fb94bf
3 changed files with 55 additions and 36 deletions

@ -277,7 +277,7 @@ module.exports = grammar({
seq(field("label", $.label), field("name", $.identifier)), seq(field("label", $.label), field("name", $.identifier)),
_name_param: ($) => field("name", $.identifier), _name_param: ($) => field("name", $.identifier),
_statement_seq: ($) => repeat1($._statement), _statement_seq: ($) => repeat1($._statement),
_statement: ($) => choice($._expression, $.let, $.let_assert, $.use), _statement: ($) => choice($._expression, $.let, $.let_assert, $.use, $.assert),
_expression: ($) => choice($._expression_unit, $.binary_expression), _expression: ($) => choice($._expression_unit, $.binary_expression),
binary_expression: ($) => binary_expression: ($) =>
choice( choice(
@ -337,7 +337,6 @@ module.exports = grammar({
$.anonymous_function, $.anonymous_function,
$.block, $.block,
$.case, $.case,
$.assert,
$.boolean_negation, $.boolean_negation,
$.integer_negation, $.integer_negation,
$.record_update, $.record_update,
@ -491,6 +490,12 @@ module.exports = grammar({
$._assignment, $._assignment,
optional(seq("as", field("message", $._expression))) optional(seq("as", field("message", $._expression)))
), ),
assert: ($) =>
seq(
"assert",
field("value", $._expression),
optional(seq("as", field("message", $._expression)))
),
let: ($) => seq("let", $._assignment), let: ($) => seq("let", $._assignment),
use: ($) => use: ($) =>
seq( seq(
@ -501,7 +506,6 @@ module.exports = grammar({
), ),
use_assignments: ($) => series_of($.use_assignment, ","), use_assignments: ($) => series_of($.use_assignment, ","),
use_assignment: ($) => seq($._pattern, optional($._type_annotation)), use_assignment: ($) => seq($._pattern, optional($._type_annotation)),
assert: ($) => seq("assert", $._assignment),
boolean_negation: ($) => seq("!", $._expression_unit), boolean_negation: ($) => seq("!", $._expression_unit),
integer_negation: ($) => seq("-", $._expression_unit), integer_negation: ($) => seq("-", $._expression_unit),
_assignment: ($) => _assignment: ($) =>

@ -288,14 +288,15 @@ fn assignment() {
let y = x let y = x
let #(x, _) = #(1, 2) let #(x, _) = #(1, 2)
} }
fn assertations() { fn assertions() {
assert Ok(a) = Ok(1) assert True && False
assert x = { assert add(1, 2) == 3
1 + 1 assert !some_value
"Hello, World!" assert {
} 10
assert y = x 11
assert #(x, _) = #(1, 2) } != 10
assert result.is_ok(Ok(10))
} }
fn update(x) { fn update(x) {
Cat(..x, name: "Nubi", cuteness: 1000 + 1001) Cat(..x, name: "Nubi", cuteness: 1000 + 1001)
@ -557,34 +558,42 @@ fn field_access(x) {
parameters: (function_parameters) parameters: (function_parameters)
body: (block body: (block
(assert (assert
pattern: (record_pattern value: (binary_expression
name: (constructor_name) left: (record
arguments: (record_pattern_arguments name: (constructor_name))
(record_pattern_argument right: (record
pattern: (identifier)))) name: (constructor_name))))
value: (record
name: (constructor_name)
arguments: (arguments
(argument
value: (integer)))))
(assert (assert
pattern: (identifier) value: (binary_expression
value: (block left: (function_call
(binary_expression function: (identifier)
left: (integer) arguments: (arguments
right: (integer)) (argument
(string value: (integer))
(quoted_content)))) (argument
value: (integer))))
right: (integer)))
(assert (assert
pattern: (identifier) value: (boolean_negation
value: (identifier)) (identifier)))
(assert (assert
pattern: (tuple_pattern value: (binary_expression
(identifier) left: (block
(discard)) (integer)
value: (tuple (integer))
(integer) right: (integer)))
(integer))))) (assert
value: (function_call
function: (field_access
record: (identifier)
field: (label))
arguments: (arguments
(argument
value: (record
name: (constructor_name)
arguments: (arguments
(argument
value: (integer))))))))))
(function (function
name: (identifier) name: (identifier)
parameters: (function_parameters parameters: (function_parameters

@ -115,6 +115,12 @@ fn let_assert_test() {
// ^ keyword // ^ keyword
} }
fn assert_test() {
assert x == add(1, 4)
// <- keyword
// ^ function
}
fn punned_call_arg_test() { fn punned_call_arg_test() {
wibble(arg:, arg2:) wibble(arg:, arg2:)
// ^ function // ^ function