diff options
author | Kevin Newton <kddnewton@gmail.com> | 2024-03-05 07:56:13 -0500 |
---|---|---|
committer | git <svn-admin@ruby-lang.org> | 2024-03-06 16:42:42 +0000 |
commit | c21a50e59656cf36a95e1d7ac8f3c86398e88aae (patch) | |
tree | 8ce551dab01c522060768c29ca1c6331ed0105c2 /lib/prism/translation/ripper.rb | |
parent | 5422b584571c7715b77cc3083d73e49536e06b1a (diff) |
[ruby/prism] Implement def for ripper translation
https://github.com/ruby/prism/commit/a3c8c27c20
Diffstat (limited to 'lib/prism/translation/ripper.rb')
-rw-r--r-- | lib/prism/translation/ripper.rb | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/lib/prism/translation/ripper.rb b/lib/prism/translation/ripper.rb index 692d3f3723..6bbc8e286c 100644 --- a/lib/prism/translation/ripper.rb +++ b/lib/prism/translation/ripper.rb @@ -781,7 +781,39 @@ module Prism # def self.foo; end # ^^^^^^^^^^^^^^^^^ def visit_def_node(node) - raise NoMethodError, __method__ + bounds(node.name_loc) + name = visit_token(node.name_loc.slice) + + parameters = + if node.parameters.nil? + bounds(node.location) + on_params(nil, nil, nil, nil, nil, nil, nil) + else + visit(node.parameters) + end + + if !node.lparen_loc.nil? + bounds(node.lparen_loc) + parameters = on_paren(parameters) + end + + bodystmt = + case node.body + when nil + bounds(node.location) + on_bodystmt(visit_statements_node_body([nil]), nil, nil, nil) + when StatementsNode + body = visit(node.body) + + bounds(node.body.location) + on_bodystmt(body, nil, nil, nil) + when BeginNode + visit_begin_node_clauses(node.body) + else + raise + end + + on_def(name, parameters, bodystmt) end # defined? a |