Add support for `%` operator in case guards (#96)

pull/844/head
Giacomo Cavalieri 2024-09-01 15:30:01 +07:00 committed by GitHub
parent 426e67087f
commit 16e775f33c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 48 additions and 1 deletions

@ -466,7 +466,8 @@ module.exports = grammar({
binaryExpr(prec.left, 6, "*", $._case_clause_guard_expression),
binaryExpr(prec.left, 6, "*.", $._case_clause_guard_expression),
binaryExpr(prec.left, 6, "/", $._case_clause_guard_expression),
binaryExpr(prec.left, 6, "/.", $._case_clause_guard_expression)
binaryExpr(prec.left, 6, "/.", $._case_clause_guard_expression),
binaryExpr(prec.left, 6, "%", $._case_clause_guard_expression)
),
_case_clause_guard_unit: ($) =>
choice(

@ -218,3 +218,38 @@ case var {
(discard)))
(record
(constructor_name))))))
================================================================================
Case with int remainder in guard
================================================================================
case var {
_ if 11 % 2 == 0 -> True
_ -> False
}
--------------------------------------------------------------------------------
(source_file
(case
(case_subjects
(identifier))
(case_clauses
(case_clause
(case_clause_patterns
(case_clause_pattern
(discard)))
(case_clause_guard
(binary_expression
(binary_expression
(integer)
(integer))
(integer)))
(record
(constructor_name)))
(case_clause
(case_clause_patterns
(case_clause_pattern
(discard)))
(record
(constructor_name))))))

@ -0,0 +1,11 @@
pub fn case_with_remainder() {
case todo {
_ if 1 % 2 == 0 -> todo
// ^ number
// ^ operator
// ^ number
// ^ operator
// ^ number
_ -> todo
}
}