Support Int/Float operators in guard expressions (#92)

pull/844/head
Alex Manning 2024-07-19 12:02:06 +07:00 committed by GitHub
parent 02a17bf9d0
commit f35f5c96ba
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 82 additions and 1 deletions

@ -455,7 +455,15 @@ module.exports = grammar({
binaryExpr(prec.left, 4, ">", $._case_clause_guard_expression),
binaryExpr(prec.left, 4, ">=", $._case_clause_guard_expression),
binaryExpr(prec.left, 4, ">.", $._case_clause_guard_expression),
binaryExpr(prec.left, 4, ">=.", $._case_clause_guard_expression)
binaryExpr(prec.left, 4, ">=.", $._case_clause_guard_expression),
binaryExpr(prec.left, 5, "+", $._case_clause_guard_expression),
binaryExpr(prec.left, 5, "+.", $._case_clause_guard_expression),
binaryExpr(prec.left, 5, "-", $._case_clause_guard_expression),
binaryExpr(prec.left, 5, "-.", $._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(

@ -0,0 +1,73 @@
================================================================================
Guard Expressions
================================================================================
case value {
n if n + 1 > 10 -> True
n if n / 2 < 5 -> False
}
case value {
n if n -. 1.0 <. 10.0 -> True
n if n *. 2 >. 5 -> False
}
--------------------------------------------------------------------------------
(source_file
(case
(case_subjects
(identifier))
(case_clauses
(case_clause
(case_clause_patterns
(case_clause_pattern
(identifier)))
(case_clause_guard
(binary_expression
(binary_expression
(identifier)
(integer))
(integer)))
(record
(constructor_name)))
(case_clause
(case_clause_patterns
(case_clause_pattern
(identifier)))
(case_clause_guard
(binary_expression
(binary_expression
(identifier)
(integer))
(integer)))
(record
(constructor_name)))))
(case
(case_subjects
(identifier))
(case_clauses
(case_clause
(case_clause_patterns
(case_clause_pattern
(identifier)))
(case_clause_guard
(binary_expression
(binary_expression
(identifier)
(float))
(float)))
(record
(constructor_name)))
(case_clause
(case_clause_patterns
(case_clause_pattern
(identifier)))
(case_clause_guard
(binary_expression
(binary_expression
(identifier)
(integer))
(integer)))
(record
(constructor_name))))))