Skip to content

Commit 4e48fb9

Browse files
GearsDatapackslpil
authored andcommitted
Add bool assert syntax
1 parent 99ec410 commit 4e48fb9

File tree

3 files changed

+55
-36
lines changed

3 files changed

+55
-36
lines changed

grammar.js

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,7 @@ module.exports = grammar({
277277
seq(field("label", $.label), field("name", $.identifier)),
278278
_name_param: ($) => field("name", $.identifier),
279279
_statement_seq: ($) => repeat1($._statement),
280-
_statement: ($) => choice($._expression, $.let, $.let_assert, $.use),
280+
_statement: ($) => choice($._expression, $.let, $.let_assert, $.use, $.assert),
281281
_expression: ($) => choice($._expression_unit, $.binary_expression),
282282
binary_expression: ($) =>
283283
choice(
@@ -337,7 +337,6 @@ module.exports = grammar({
337337
$.anonymous_function,
338338
$.block,
339339
$.case,
340-
$.assert,
341340
$.boolean_negation,
342341
$.integer_negation,
343342
$.record_update,
@@ -491,6 +490,12 @@ module.exports = grammar({
491490
$._assignment,
492491
optional(seq("as", field("message", $._expression)))
493492
),
493+
assert: ($) =>
494+
seq(
495+
"assert",
496+
field("value", $._expression),
497+
optional(seq("as", field("message", $._expression)))
498+
),
494499
let: ($) => seq("let", $._assignment),
495500
use: ($) =>
496501
seq(
@@ -501,7 +506,6 @@ module.exports = grammar({
501506
),
502507
use_assignments: ($) => series_of($.use_assignment, ","),
503508
use_assignment: ($) => seq($._pattern, optional($._type_annotation)),
504-
assert: ($) => seq("assert", $._assignment),
505509
boolean_negation: ($) => seq("!", $._expression_unit),
506510
integer_negation: ($) => seq("-", $._expression_unit),
507511
_assignment: ($) =>

test/corpus/functions.txt

Lines changed: 42 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -288,14 +288,15 @@ fn assignment() {
288288
let y = x
289289
let #(x, _) = #(1, 2)
290290
}
291-
fn assertations() {
292-
assert Ok(a) = Ok(1)
293-
assert x = {
294-
1 + 1
295-
"Hello, World!"
296-
}
297-
assert y = x
298-
assert #(x, _) = #(1, 2)
291+
fn assertions() {
292+
assert True && False
293+
assert add(1, 2) == 3
294+
assert !some_value
295+
assert {
296+
10
297+
11
298+
} != 10
299+
assert result.is_ok(Ok(10))
299300
}
300301
fn update(x) {
301302
Cat(..x, name: "Nubi", cuteness: 1000 + 1001)
@@ -557,34 +558,42 @@ fn field_access(x) {
557558
parameters: (function_parameters)
558559
body: (block
559560
(assert
560-
pattern: (record_pattern
561-
name: (constructor_name)
562-
arguments: (record_pattern_arguments
563-
(record_pattern_argument
564-
pattern: (identifier))))
565-
value: (record
566-
name: (constructor_name)
567-
arguments: (arguments
568-
(argument
569-
value: (integer)))))
561+
value: (binary_expression
562+
left: (record
563+
name: (constructor_name))
564+
right: (record
565+
name: (constructor_name))))
570566
(assert
571-
pattern: (identifier)
572-
value: (block
573-
(binary_expression
574-
left: (integer)
575-
right: (integer))
576-
(string
577-
(quoted_content))))
567+
value: (binary_expression
568+
left: (function_call
569+
function: (identifier)
570+
arguments: (arguments
571+
(argument
572+
value: (integer))
573+
(argument
574+
value: (integer))))
575+
right: (integer)))
578576
(assert
579-
pattern: (identifier)
580-
value: (identifier))
577+
value: (boolean_negation
578+
(identifier)))
581579
(assert
582-
pattern: (tuple_pattern
583-
(identifier)
584-
(discard))
585-
value: (tuple
586-
(integer)
587-
(integer)))))
580+
value: (binary_expression
581+
left: (block
582+
(integer)
583+
(integer))
584+
right: (integer)))
585+
(assert
586+
value: (function_call
587+
function: (field_access
588+
record: (identifier)
589+
field: (label))
590+
arguments: (arguments
591+
(argument
592+
value: (record
593+
name: (constructor_name)
594+
arguments: (arguments
595+
(argument
596+
value: (integer))))))))))
588597
(function
589598
name: (identifier)
590599
parameters: (function_parameters

test/highlight/functions.gleam

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,12 @@ fn let_assert_test() {
115115
// ^ keyword
116116
}
117117

118+
fn assert_test() {
119+
assert x == add(1, 4)
120+
// <- keyword
121+
// ^ function
122+
}
123+
118124
fn punned_call_arg_test() {
119125
wibble(arg:, arg2:)
120126
// ^ function

0 commit comments

Comments
 (0)