@@ -143,11 +143,11 @@ expr -> unmatched_expr : '$1'.
143
143
% % if calls without parentheses are do blocks in particular
144
144
% % segments and act accordingly.
145
145
matched_expr -> matched_expr matched_op_expr : build_op ('$1' , '$2' ).
146
- matched_expr -> no_parens_one_expr : '$1' .
147
146
matched_expr -> unary_op_eol matched_expr : build_unary_op ('$1' , '$2' ).
148
147
matched_expr -> at_op_eol matched_expr : build_unary_op ('$1' , '$2' ).
149
148
matched_expr -> capture_op_eol matched_expr : build_unary_op ('$1' , '$2' ).
150
149
matched_expr -> ellipsis_op matched_expr : build_unary_op ('$1' , '$2' ).
150
+ matched_expr -> no_parens_one_expr : '$1' .
151
151
matched_expr -> sub_matched_expr : '$1' .
152
152
153
153
unmatched_expr -> matched_expr unmatched_op_expr : build_op ('$1' , '$2' ).
@@ -192,6 +192,10 @@ matched_op_expr -> pipe_op_eol matched_expr : {'$1', '$2'}.
192
192
matched_op_expr -> comp_op_eol matched_expr : {'$1' , '$2' }.
193
193
matched_op_expr -> rel_op_eol matched_expr : {'$1' , '$2' }.
194
194
matched_op_expr -> arrow_op_eol matched_expr : {'$1' , '$2' }.
195
+
196
+ % % We warn exclusively for |> and friends because they are used
197
+ % % in other languages with lower precedence than function application,
198
+ % % which can be the source of confusion.
195
199
matched_op_expr -> arrow_op_eol no_parens_one_expr : warn_pipe ('$1' , '$2' ), {'$1' , '$2' }.
196
200
197
201
unmatched_op_expr -> match_op_eol unmatched_expr : {'$1' , '$2' }.
@@ -230,9 +234,7 @@ no_parens_op_expr -> when_op_eol no_parens_expr : {'$1', '$2'}.
230
234
no_parens_op_expr -> pipe_op_eol no_parens_expr : {'$1' , '$2' }.
231
235
no_parens_op_expr -> comp_op_eol no_parens_expr : {'$1' , '$2' }.
232
236
no_parens_op_expr -> rel_op_eol no_parens_expr : {'$1' , '$2' }.
233
- no_parens_op_expr -> arrow_op_eol no_parens_expr : {'$1' , '$2' }.
234
- no_parens_op_expr -> arrow_op_eol no_parens_one_ambig_expr : warn_pipe ('$1' , '$2' ), {'$1' , '$2' }.
235
- no_parens_op_expr -> arrow_op_eol no_parens_many_expr : warn_pipe ('$1' , '$2' ), {'$1' , '$2' }.
237
+ no_parens_op_expr -> arrow_op_eol no_parens_expr : warn_pipe ('$1' , '$2' ), {'$1' , '$2' }.
236
238
237
239
% % Allow when (and only when) with keywords
238
240
no_parens_op_expr -> when_op_eol call_args_no_parens_kw : {'$1' , '$2' }.
@@ -245,8 +247,8 @@ no_parens_many_expr -> dot_identifier call_args_no_parens_many_strict : build_no
245
247
246
248
no_parens_one_expr -> dot_op_identifier call_args_no_parens_one : build_no_parens ('$1' , '$2' ).
247
249
no_parens_one_expr -> dot_identifier call_args_no_parens_one : build_no_parens ('$1' , '$2' ).
248
- no_parens_zero_expr -> dot_do_identifier : build_no_parens ('$1' , nil ).
249
- no_parens_zero_expr -> dot_identifier : build_no_parens ('$1' , nil ).
250
+ no_parens_zero_expr -> dot_do_identifier : build_identifier ('$1' ).
251
+ no_parens_zero_expr -> dot_identifier : build_identifier ('$1' ).
250
252
251
253
sub_matched_expr -> no_parens_zero_expr : '$1' .
252
254
sub_matched_expr -> range_op : build_nullary_op ('$1' ).
@@ -299,11 +301,11 @@ bracket_arg -> open_bracket container_expr close_bracket : build_access_arg('$1'
299
301
bracket_arg -> open_bracket container_expr ',' close_bracket : build_access_arg ('$1' , '$2' , '$4' ).
300
302
bracket_arg -> open_bracket container_expr ',' container_args close_bracket : error_too_many_access_syntax ('$3' ).
301
303
302
- bracket_expr -> dot_bracket_identifier bracket_arg : build_access (build_no_parens ('$1' , nil ), meta_with_from_brackets ('$2' )).
304
+ bracket_expr -> dot_bracket_identifier bracket_arg : build_access (build_identifier ('$1' ), meta_with_from_brackets ('$2' )).
303
305
bracket_expr -> access_expr bracket_arg : build_access ('$1' , meta_with_from_brackets ('$2' )).
304
306
305
307
bracket_at_expr -> at_op_eol dot_bracket_identifier bracket_arg :
306
- build_access (build_unary_op ('$1' , build_no_parens ('$2' , nil )), meta_with_from_brackets ('$3' )).
308
+ build_access (build_unary_op ('$1' , build_identifier ('$2' )), meta_with_from_brackets ('$3' )).
307
309
bracket_at_expr -> at_op_eol access_expr bracket_arg :
308
310
build_access (build_unary_op ('$1' , '$2' ), meta_with_from_brackets ('$3' )).
309
311
@@ -897,32 +899,35 @@ build_nested_parens(Dot, Args1, {Args2Meta, Args2}, {BlockMeta, Block}) ->
897
899
{Identifier , Meta , append_non_empty (Args2 , Block )}.
898
900
899
901
build_parens (Expr , {ArgsMeta , Args }, {BlockMeta , Block }) ->
900
- {BuiltExpr , BuiltMeta , BuiltArgs } = build_identifier (Expr , append_non_empty (Args , Block )),
902
+ {BuiltExpr , BuiltMeta , BuiltArgs } = build_call (Expr , append_non_empty (Args , Block )),
901
903
{BuiltExpr , BlockMeta ++ ArgsMeta ++ BuiltMeta , BuiltArgs }.
902
904
903
905
build_no_parens_do_block (Expr , Args , {BlockMeta , Block }) ->
904
- {BuiltExpr , BuiltMeta , BuiltArgs } = build_no_parens (Expr , Args ++ Block ),
906
+ {BuiltExpr , BuiltMeta , BuiltArgs } = build_call (Expr , Args ++ Block ),
905
907
{BuiltExpr , BlockMeta ++ BuiltMeta , BuiltArgs }.
906
908
907
909
build_no_parens (Expr , Args ) ->
908
- build_identifier (Expr , Args ).
910
+ build_call (Expr , Args ).
909
911
910
- build_identifier ({'.' , Meta , IdentifierLocation , DotArgs }, nil ) ->
912
+ build_identifier ({'.' , Meta , IdentifierLocation , DotArgs }) ->
911
913
{{'.' , Meta , DotArgs }, [{no_parens , true } | IdentifierLocation ], []};
912
914
913
- build_identifier ({'.' , Meta , IdentifierLocation , DotArgs }, Args ) ->
914
- {{'.' , Meta , DotArgs }, IdentifierLocation , Args };
915
-
916
- build_identifier ({'.' , Meta , _ } = Dot , nil ) ->
915
+ build_identifier ({'.' , Meta , _ } = Dot ) ->
917
916
{Dot , [{no_parens , true } | Meta ], []};
918
917
919
- build_identifier ({'.' , Meta , _ } = Dot , Args ) ->
918
+ build_identifier ({_ , Location , Identifier }) ->
919
+ {Identifier , meta_from_location (Location ), nil }.
920
+
921
+ build_call ({'.' , Meta , IdentifierLocation , DotArgs }, Args ) ->
922
+ {{'.' , Meta , DotArgs }, IdentifierLocation , Args };
923
+
924
+ build_call ({'.' , Meta , _ } = Dot , Args ) ->
920
925
{Dot , Meta , Args };
921
926
922
- build_identifier ({op_identifier , Location , Identifier }, [Arg ]) ->
927
+ build_call ({op_identifier , Location , Identifier }, [Arg ]) ->
923
928
{Identifier , [{ambiguous_op , nil } | meta_from_location (Location )], [Arg ]};
924
929
925
- build_identifier ({_ , Location , Identifier }, Args ) ->
930
+ build_call ({_ , Location , Identifier }, Args ) ->
926
931
{Identifier , meta_from_location (Location ), Args }.
927
932
928
933
% % Fn
0 commit comments