summaryrefslogtreecommitdiff
path: root/lib/prism/translation/ripper.rb
diff options
context:
space:
mode:
authorKevin Newton <kddnewton@gmail.com>2024-03-05 07:56:13 -0500
committergit <svn-admin@ruby-lang.org>2024-03-06 16:42:42 +0000
commitc21a50e59656cf36a95e1d7ac8f3c86398e88aae (patch)
tree8ce551dab01c522060768c29ca1c6331ed0105c2 /lib/prism/translation/ripper.rb
parent5422b584571c7715b77cc3083d73e49536e06b1a (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.rb34
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