@@ -267,7 +267,7 @@ access_expr -> fn_eoe stab_eoe 'end' : build_fn('$1', '$2', '$3').
267267access_expr  ->  open_paren  stab_eoe  ')'  : build_paren_stab ('$1' , '$2' , '$3' ).
268268access_expr  ->  open_paren  ';'  stab_eoe  ')'  : build_paren_stab ('$1' , '$3' , '$4' ).
269269access_expr  ->  open_paren  ';'  close_paren  : build_paren_stab ('$1' , [], '$3' ).
270- access_expr  ->  empty_paren  : warn_empty_paren ('$1' ), {'__block__' , [] , []}.
270+ access_expr  ->  empty_paren  : warn_empty_paren ('$1' ), {'__block__' , parens_meta ( '$1' ) , []}.
271271access_expr  ->  int  : handle_number (number_value ('$1' ), '$1' , ? exprs ('$1' )).
272272access_expr  ->  flt  : handle_number (number_value ('$1' ), '$1' , ? exprs ('$1' )).
273273access_expr  ->  char  : handle_number (? exprs ('$1' ), '$1' , number_value ('$1' )).
@@ -342,15 +342,15 @@ stab_expr -> expr :
342342stab_expr  ->  stab_op_eol_and_expr  :
343343               build_op ([], '$1' ).
344344stab_expr  ->  empty_paren  stab_op_eol_and_expr  :
345-                build_op ([], '$2' ).
345+                build_op_with_meta ([], '$2' ,  parens_meta ( '$1' ) ).
346346stab_expr  ->  empty_paren  when_op  expr  stab_op_eol_and_expr  :
347-                build_op ([{'when' , meta_from_token ('$2' ), ['$3' ]}], '$4' ).
347+                build_op_with_meta ([{'when' , meta_from_token ('$2' ), ['$3' ]}], '$4' ,  parens_meta ( '$1' ) ).
348348stab_expr  ->  call_args_no_parens_all  stab_op_eol_and_expr  :
349349               build_op (unwrap_when (unwrap_splice ('$1' )), '$2' ).
350350stab_expr  ->  stab_parens_many  stab_op_eol_and_expr  :
351-                build_op (unwrap_splice ('$1' ), '$2' ).
351+                build_op_with_meta (unwrap_splice (element ( 2 ,  '$1' )) , '$2' ,  parens_meta ( '$1' ) ).
352352stab_expr  ->  stab_parens_many  when_op  expr  stab_op_eol_and_expr  :
353-                build_op ([{'when' , meta_from_token ('$2' ), unwrap_splice ('$1' ) ++  ['$3' ]}], '$4' ).
353+                build_op_with_meta ([{'when' , meta_from_token ('$2' ), unwrap_splice (element ( 2 ,  '$1' ))  ++  ['$3' ]}], '$4' ,  parens_meta ( '$1' ) ).
354354
355355stab_op_eol_and_expr  ->  stab_op_eol  expr  : {'$1' , '$2' }.
356356stab_op_eol_and_expr  ->  stab_op_eol  : warn_empty_stab_clause ('$1' ), {'$1' , handle_literal (nil , '$1' )}.
@@ -370,7 +370,7 @@ open_paren -> '(' eol  : next_is_eol('$1', '$2').
370370close_paren  ->  ')'      : '$1' .
371371close_paren  ->  eol  ')'  : '$2' .
372372
373- empty_paren  ->  open_paren  ')'  : '$1' .
373+ empty_paren  ->  open_paren  ')'  : { '$1' ,  '$2' } .
374374
375375open_bracket   ->  '['      : '$1' .
376376open_bracket   ->  '['  eol  : next_is_eol ('$1' , '$2' ).
@@ -515,8 +515,8 @@ call_args_no_parens_many_strict -> call_args_no_parens_many : '$1'.
515515call_args_no_parens_many_strict  ->  open_paren  call_args_no_parens_kw  close_paren  : error_no_parens_strict ('$1' ).
516516call_args_no_parens_many_strict  ->  open_paren  call_args_no_parens_many  close_paren  : error_no_parens_strict ('$1' ).
517517
518- stab_parens_many  ->  open_paren  call_args_no_parens_kw  close_paren  : ['$2' ].
519- stab_parens_many  ->  open_paren  call_args_no_parens_many  close_paren  : '$2' .
518+ stab_parens_many  ->  open_paren  call_args_no_parens_kw  close_paren  : { '$1' ,  ['$2' ],  '$3' } .
519+ stab_parens_many  ->  open_paren  call_args_no_parens_many  close_paren  : { '$1' ,  '$2' ,  '$3' } .
520520
521521%  Containers
522522
@@ -719,6 +719,10 @@ number_value({_, {_, _, Value}, _}) ->
719719
720720% % Operators
721721
722+ build_op_with_meta (Left , {Op , Right }, Meta ) -> 
723+   {Op1 , OpMeta , Args } =  build_op (Left , Op , Right ),
724+   {Op1 , Meta  ++  OpMeta , Args }.
725+ 
722726build_op (Left , {Op , Right }) -> 
723727  build_op (Left , Op , Right ).
724728
@@ -1139,6 +1143,18 @@ unwrap_when(Args) ->
11391143      Args 
11401144  end .
11411145
1146+ parens_meta ({Open , Close }) -> 
1147+   case  ? token_metadata () of 
1148+     true  ->
1149+       ParensEntry  =  meta_from_token (Open ) ++  [{closing , meta_from_token (Close )}],
1150+       [{parens , [ParensEntry ]}];
1151+     false  ->
1152+       []
1153+   end ;
1154+ parens_meta ({Open , _Args , Close }) -> 
1155+   parens_meta ({Open , Close }).
1156+ 
1157+ 
11421158% % Warnings and errors
11431159
11441160return_error ({Line , Column , _ }, ErrorMessage , ErrorToken ) -> 
@@ -1290,7 +1306,7 @@ warn_nested_no_parens_keyword(Key, Value) when is_atom(Key) ->
12901306warn_nested_no_parens_keyword (_Key , _Value ) -> 
12911307  ok .
12921308
1293- warn_empty_paren ({_ , {Line , Column , _ }}) -> 
1309+ warn_empty_paren ({{ _ , {Line , Column , _ }},  _ }) -> 
12941310  warn (
12951311    {Line , Column },
12961312    " invalid expression (). " 
0 commit comments