anchor.diff:  call_args_parens -> empty_paren : [].
   call_args_parens -> open_paren no_parens_expr close_paren : ['$2'].
   call_args_parens -> open_paren kw_base close_paren : [reverse('$2')].
  +call_args_parens -> open_paren kw_base ',' close_paren : warn_trailing_comma('$3'), [reverse('$2')].
   call_args_parens -> open_paren call_args_parens_base close_paren : reverse('$2').
   call_args_parens -> open_paren call_args_parens_base ',' kw_base close_paren : reverse([reverse('$4') | '$2']).
  +call_args_parens -> open_paren call_args_parens_base ',' kw_base ',' close_paren : warn_trailing_comma('$5'), reverse([reverse('$4') | '$2']).
   
   % KV
   
  
positive.code:     "to pass an empty block, pass a value instead, such as a nil or an atom").
  
  %% TODO: Make this an error on Elixir v2.0.
  warn_empty_stab_clause({stab_op, {Line, _Begin, _End}, '->'}) ->
    elixir_errors:warn(Line, ?file(),
      "an expression is always required on the right side of ->. "
      "Please provide a value after ->").
  
  %% TODO: Make this an error on Elixir v2.0.
  warn_pipe({arrow_op, {Line, _Begin, _End}, Op}, {_, [_ | _], [_ | _]}) ->
    elixir_errors:warn(Line, ?file(),
      io_lib:format(
        "parentheses are required when piping into a function call. For example:\n\n"
  
negative.code:   );
  warn_pipe(_Token, _) ->
    ok.
  
  %% TODO: Make this an error on Elixir v2.0.
  warn_trailing_comma({',', {Line, _, _}}) ->
    elixir_errors:warn(Line, ?file(),
      "trailing commas are not allowed inside function/macro call arguments"
    ).
  