Add support for `let assert ... as` (#107)

pull/844/head
Gears 2024-11-26 00:34:56 +07:00 committed by GitHub
parent 2702fe84b9
commit e451746f71
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 49 additions and 15 deletions

@ -357,23 +357,27 @@ module.exports = grammar({
optional(field("arguments", $.arguments))
),
todo: ($) =>
seq(
"todo",
optional(
choice(
// DEPRECATED: The 'as' syntax was introduced in v0.30.
seq("(", field("message", $.string), ")"),
seq("as", field("message", $._expression))
prec.left(
seq(
"todo",
optional(
choice(
// DEPRECATED: The 'as' syntax was introduced in v0.30.
seq("(", field("message", $.string), ")"),
seq("as", field("message", $._expression))
)
)
)
),
panic: ($) =>
seq(
"panic",
optional(
choice(
seq("(", field("message", $.string), ")"),
seq("as", field("message", $._expression))
prec.left(
seq(
"panic",
optional(
choice(
seq("(", field("message", $.string), ")"),
seq("as", field("message", $._expression))
)
)
)
),
@ -488,7 +492,13 @@ module.exports = grammar({
),
_case_clause_tuple_access: ($) =>
seq(field("tuple", $.identifier), ".", field("index", $.integer)),
let_assert: ($) => seq("let", "assert", $._assignment),
let_assert: ($) =>
seq(
"let",
"assert",
$._assignment,
optional(seq("as", field("message", $._expression)))
),
let: ($) => seq("let", $._assignment),
use: ($) =>
seq(

@ -277,6 +277,8 @@ fn assert_assignment() {
}
let assert y = x
let assert #(x, _) = #(1, 2)
let assert Ok(_) = Ok(10) as "This never fails"
let assert 10 = 11 as { "message1" <> "message2" }
}
fn assignment() {
let x = {
@ -504,7 +506,29 @@ fn field_access(x) {
(discard))
value: (tuple
(integer)
(integer)))))
(integer)))
(let_assert
pattern: (record_pattern
name: (constructor_name)
arguments: (record_pattern_arguments
(record_pattern_argument
pattern: (discard))))
value: (record
name: (constructor_name)
arguments: (arguments
(argument
value: (integer))))
message: (string
(quoted_content)))
(let_assert
pattern: (integer)
value: (integer)
message: (block
(binary_expression
left: (string
(quoted_content))
right: (string
(quoted_content)))))))
(function
name: (identifier)
parameters: (function_parameters)