diff --git a/grammar.js b/grammar.js index 96f12b7b7..f8acc0b6d 100644 --- a/grammar.js +++ b/grammar.js @@ -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( diff --git a/test/corpus/guard_expressions.txt b/test/corpus/guard_expressions.txt new file mode 100644 index 000000000..17fad1e69 --- /dev/null +++ b/test/corpus/guard_expressions.txt @@ -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))))))