@@ -37,6 +37,11 @@ const ALPHA_CHAR = /[^\x00-\x1F\s0-9:;`"'@$#.,|^&<=>+\-*/\\%?!~()\[\]{}]/;
3737module . exports = grammar ( {
3838 name : 'ruby' ,
3939 inline : $ => [ $ . _arg_rhs , $ . _call_operator ] ,
40+ conflicts : $ => [
41+ [ $ . _expression , $ . _chained_command_call ] ,
42+ [ $ . _pattern_expr_alt , $ . alternative_pattern ] ,
43+ [ $ . _array_pattern_n , $ . as_pattern , $ . _find_pattern_body ] ,
44+ ] ,
4045 externals : $ => [
4146 $ . _line_break ,
4247 $ . _no_line_break ,
@@ -159,7 +164,8 @@ module.exports = grammar({
159164 _method_rest : $ => seq (
160165 field ( 'name' , $ . _method_name ) ,
161166 choice (
162- $ . _body_expr ,
167+ prec ( 2 , $ . _body_expr ) ,
168+ // with parameters
163169 seq (
164170 field ( 'parameters' , alias ( $ . parameters , $ . method_parameters ) ) ,
165171 choice (
@@ -168,6 +174,7 @@ module.exports = grammar({
168174 ) ,
169175
170176 ) ,
177+ // without parameters but with body
171178 seq (
172179 optional (
173180 field ( 'parameters' , alias ( $ . bare_parameters , $ . method_parameters ) ) ,
@@ -195,15 +202,16 @@ module.exports = grammar({
195202 ) ,
196203 ) ,
197204
198- _body_expr : $ =>
205+ _body_expr : $ => prec . right ( 1 ,
199206 seq (
200207 '=' ,
201208 field ( 'body' ,
202209 choice (
203- $ . _arg ,
204- alias ( $ . rescue_modifier_arg , $ . rescue_modifier ) ,
210+ $ . _expression ,
211+ alias ( $ . rescue_modifier_expression , $ . rescue_modifier ) ,
205212 ) ) ,
206213 ) ,
214+ ) ,
207215
208216
209217 parameters : $ => seq (
@@ -436,7 +444,7 @@ module.exports = grammar({
436444 $ . _pattern_expr_basic ,
437445 ) ,
438446
439- alternative_pattern : $ => seq ( field ( 'alternatives' , $ . _pattern_expr_basic ) , repeat1 ( seq ( '|' , field ( 'alternatives' , $ . _pattern_expr_basic ) ) ) ) ,
447+ alternative_pattern : $ => prec . right ( seq ( field ( 'alternatives' , $ . _pattern_expr_basic ) , repeat1 ( seq ( '|' , field ( 'alternatives' , $ . _pattern_expr_basic ) ) ) ) ) ,
440448
441449 _array_pattern_body : $ => choice (
442450 $ . _pattern_expr ,
@@ -507,11 +515,11 @@ module.exports = grammar({
507515 const begin = field ( 'begin' , $ . _pattern_primitive ) ;
508516 const end = field ( 'end' , $ . _pattern_primitive ) ;
509517 const operator = field ( 'operator' , choice ( '..' , '...' ) ) ;
510- return choice (
518+ return prec . right ( choice (
511519 seq ( begin , operator , end ) ,
512520 seq ( operator , end ) ,
513521 seq ( begin , operator ) ,
514- ) ;
522+ ) ) ;
515523 } ,
516524
517525 _pattern_primitive : $ => choice (
@@ -897,8 +905,7 @@ module.exports = grammar({
897905 const operator = field ( 'operator' , choice ( '..' , '...' ) ) ;
898906 return prec . right ( PREC . RANGE , choice (
899907 seq ( begin , operator , end ) ,
900- seq ( operator , end ) ,
901- seq ( begin , operator ) ,
908+ seq ( operator , end )
902909 ) ) ;
903910 } ,
904911
0 commit comments