From 5a9641cc3fd405047800e7b2feefb10997107ef4 Mon Sep 17 00:00:00 2001 From: Pedro Castro Date: Sun, 20 Nov 2022 12:06:16 -0300 Subject: [PATCH] refactor: remove pipe expression --- grammar.js | 32 ++++++-------------- test/corpus/comments.txt | 2 +- test/corpus/expressions.txt | 59 +++++++++++++++++++++---------------- test/corpus/functions.txt | 2 +- test/corpus/jsx.txt | 2 +- 5 files changed, 45 insertions(+), 52 deletions(-) diff --git a/grammar.js b/grammar.js index 98fb4bb..3302205 100644 --- a/grammar.js +++ b/grammar.js @@ -38,8 +38,8 @@ module.exports = grammar({ 'member', 'call', $.spread_element, + 'binary_pipe', $.await_expression, - $.pipe_expression, $.lazy_expression, 'binary_times', 'binary_pow', @@ -55,6 +55,7 @@ module.exports = grammar({ $.mutation_expression, $.function, $.let_binding, + $.try_expression ], // Nested.Module.Path precendence [ @@ -63,7 +64,7 @@ module.exports = grammar({ $.nested_variant_identifier, $.module_identifier_path, ], - [$._jsx_attribute_value, $.pipe_expression], + [$._jsx_attribute_value, $.binary_expression], [$.function_type_parameters, $.function_type], ], @@ -106,7 +107,9 @@ module.exports = grammar({ [$.variant_declaration], [$.unit, $._function_type_parameter_list], [$.functor_parameter, $.module_primary_expression, $.module_identifier_path], - [$._reserved_identifier, $.function] + [$._reserved_identifier, $.function], + [$._jsx_attribute_value, $.ternary_expression], + [$.jsx_expression, $.block], ], rules: { @@ -522,7 +525,6 @@ module.exports = grammar({ $.switch_expression, $.try_expression, $.call_expression, - $.pipe_expression, $.subscript_expression, $.member_expression, $.module_pack, @@ -717,10 +719,7 @@ module.exports = grammar({ try_expression: $ => seq( 'try', - choice( - $.block, - $.primary_expression, - ), + $.expression, 'catch', '{', repeat($.switch_match), @@ -742,20 +741,6 @@ module.exports = grammar({ field('arguments', alias($.call_arguments, $.arguments)), )), - pipe_expression: $ => prec.left(seq( - $.primary_expression, - choice('->', '|>'), - choice( - $.value_identifier, - $.value_identifier_path, - $.variant_identifier, - $.polyvar_identifier, - $.nested_variant_identifier, - $.parenthesized_expression, - $.block, - ), - )), - module_pack: $ => seq( 'module', '(', @@ -1046,7 +1031,7 @@ module.exports = grammar({ ), _jsx_attribute_value: $ => choice( - $.primary_expression, + $.expression, $.jsx_expression, ), @@ -1150,6 +1135,7 @@ module.exports = grammar({ ['!==', 'binary_relation'], ['>=', 'binary_relation'], ['>', 'binary_relation'], + [choice('|>', '->'), 'binary_pipe'] ].map(([operator, precedence]) => prec.left(precedence, seq( field('left', $.expression), diff --git a/test/corpus/comments.txt b/test/corpus/comments.txt index ebd1c15..13e6737 100644 --- a/test/corpus/comments.txt +++ b/test/corpus/comments.txt @@ -59,7 +59,7 @@ switch foo { (comment) (expression_statement (number)) (expression_statement - (pipe_expression + (binary_expression (value_identifier) (comment) (value_identifier))) diff --git a/test/corpus/expressions.txt b/test/corpus/expressions.txt index c32a342..11d0efc 100644 --- a/test/corpus/expressions.txt +++ b/test/corpus/expressions.txt @@ -150,9 +150,9 @@ f(raise) (function parameter: (value_identifier) body: (binary_expression - left: (pipe_expression - (value_identifier) - (value_identifier_path + left: (binary_expression + left: (value_identifier) + right: (value_identifier_path (module_identifier) (value_identifier))) right: (number)))))) @@ -196,54 +196,61 @@ foo->{ baz } +{foo}->print() + --- (source_file (expression_statement - (pipe_expression - (pipe_expression (value_identifier) (value_identifier)) + (binary_expression + (binary_expression (value_identifier) (value_identifier)) (value_identifier))) (expression_statement - (pipe_expression - (pipe_expression (value_identifier) (value_identifier)) + (binary_expression + (binary_expression (value_identifier) (value_identifier)) (value_identifier))) (expression_statement - (pipe_expression - (call_expression - (pipe_expression - (value_identifier) + (binary_expression + (binary_expression + (value_identifier) + (call_expression (value_identifier_path - (module_identifier) - (value_identifier))) - (arguments (value_identifier))) + (module_identifier) (value_identifier)) + (arguments + (value_identifier)))) (value_identifier_path (module_identifier) (value_identifier)))) (expression_statement - (pipe_expression + (binary_expression (number) - (variant_identifier))) + (variant (variant_identifier)))) (expression_statement - (pipe_expression + (binary_expression (value_identifier) - (polyvar_identifier))) + (polyvar (polyvar_identifier)))) (expression_statement - (pipe_expression + (binary_expression (value_identifier) (value_identifier))) (expression_statement - (pipe_expression + (binary_expression (value_identifier) (parenthesized_expression (function (value_identifier) (binary_expression (value_identifier) (number)))))) (expression_statement - (pipe_expression + (binary_expression (value_identifier) (block (open_statement (module_identifier)) - (expression_statement (value_identifier)))))) + (expression_statement (value_identifier))))) + (expression_statement + (binary_expression + (block + (expression_statement (value_identifier))) + (call_expression (value_identifier) (arguments))))) =========================================== Record @@ -737,9 +744,9 @@ switch (element->HtmlInputElement.ofElement) { (expression_statement (switch_expression (parenthesized_expression - (pipe_expression - (value_identifier) - (value_identifier_path (module_identifier) (value_identifier)))) + (binary_expression + left: (value_identifier) + right: (value_identifier_path (module_identifier) (value_identifier)))) (switch_match (variant_pattern (variant_identifier) @@ -1380,7 +1387,7 @@ await foo->bar + 5 (expression_statement (binary_expression (await_expression - (pipe_expression (value_identifier) (value_identifier))) + (binary_expression (value_identifier) (value_identifier))) (number)))) =========================================== diff --git a/test/corpus/functions.txt b/test/corpus/functions.txt index d8112d8..2f0aa21 100644 --- a/test/corpus/functions.txt +++ b/test/corpus/functions.txt @@ -214,7 +214,7 @@ Operator precendence (expression_statement (function (formal_parameters (parameter (value_identifier))) (binary_expression - (pipe_expression + (binary_expression (value_identifier) (value_identifier_path (module_identifier) (value_identifier))) (number))))) diff --git a/test/corpus/jsx.txt b/test/corpus/jsx.txt index db4c6f7..b4d13d3 100644 --- a/test/corpus/jsx.txt +++ b/test/corpus/jsx.txt @@ -101,7 +101,7 @@ Attribute values (jsx_identifier) (jsx_attribute (property_identifier) - (pipe_expression (value_identifier) (value_identifier))) + (binary_expression (value_identifier) (value_identifier))) (jsx_attribute (property_identifier) (true)))))