Actions
Feature #12387
closedripper: new parser event for kwrest parameter
Description
Ripper does not handle unnamed kwrest parameter well.
$ ruby -rpp -rripper -e'pp Ripper.sexp("def a(*x, **y) end")'
[:program,
[[:def,
[:@ident, "a", [1, 4]],
[:paren,
[:params,
nil,
nil,
[:rest_param, [:@ident, "x", [1, 7]]],
nil,
nil,
[:@ident, "y", [1, 12]],
nil]],
[:bodystmt, [[:void_stmt]], nil, nil, nil]]]]
$ ruby -rpp -rripper -e'pp Ripper.sexp("def a(*, **) end")'
[:program,
[[:def,
[:@ident, "a", [1, 4]],
[:paren, [:params, nil, nil, [:rest_param, nil], nil, nil, 183, nil]],
[:bodystmt, [[:void_stmt]], nil, nil, nil]]]]
I expected something meaningful instead of the mysterious number 183. This comes from internal_id() (in parse.y).
There is already 'rest_param' paraer event for non-keyword rest params, so I suggest adding new event 'kwrest_param'. They should work in the same way.
I've attached a patch. With this the parse result will be:
$ ruby -rpp -rripper -e'pp Ripper.sexp("def a(*x, **y) end")'
[:program,
[[:def,
[:@ident, "a", [1, 4]],
[:paren,
[:params,
nil,
nil,
[:rest_param, [:@ident, "x", [1, 7]]],
nil,
nil,
[:kwrest_param, [:@ident, "y", [1, 12]]],
nil]],
[:bodystmt, [[:void_stmt]], nil, nil, nil]]]]
$ ruby -rpp -rripper -e'pp Ripper.sexp("def a(*, **) end")'
[:program,
[[:def,
[:@ident, "a", [1, 4]],
[:paren,
[:params,
nil,
nil,
[:rest_param, nil],
nil,
nil,
[:kwrest_param, nil],
nil]],
[:bodystmt, [[:void_stmt]], nil, nil, nil]]]]
Files
Actions
Like0
Like0Like0Like0