Issue #12387 has been updated by Nobuyoshi Nakada.

Status changed from Open to Assigned
Assignee set to Kazuki Yamaguchi

Seems OK.

----------------------------------------
Feature #12387: ripper: new parser event for kwrest parameter
https://bugs.ruby-lang.org/issues/12387#change-62518

* Author: Kazuki Yamaguchi
* Status: Assigned
* Priority: Normal
* Assignee: Kazuki Yamaguchi
* Target version: 
----------------------------------------
Ripper does not handle unnamed kwrest parameter well.

~~~ruby
$ 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
$ 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--------------------------------
0001-ripper-dispatch-new-parser-event-kwrest_param-on-f_k.patch (3.6 KB)


-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>