summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin Newton <kddnewton@gmail.com>2024-03-05 08:10:57 -0500
committergit <svn-admin@ruby-lang.org>2024-03-06 16:42:42 +0000
commit524e93b84e1a08e5f8dabaad123cecd6b85cf82a (patch)
tree1ad737826759f1513d7b0bb475d76386f4e9c7a4
parent3bdb0fecd103a5901a7ee1ab7ff6105a4e916fe5 (diff)
[ruby/prism] Implement find pattern for ripper translation
https://github.com/ruby/prism/commit/ef9dca2a4c
-rw-r--r--lib/prism/translation/ripper.rb21
-rw-r--r--test/prism/ripper_test.rb3
2 files changed, 20 insertions, 4 deletions
diff --git a/lib/prism/translation/ripper.rb b/lib/prism/translation/ripper.rb
index 0872ed9f9e..5f6200cbe8 100644
--- a/lib/prism/translation/ripper.rb
+++ b/lib/prism/translation/ripper.rb
@@ -931,7 +931,26 @@ module Prism
# foo => [*, bar, *]
# ^^^^^^^^^^^
def visit_find_pattern_node(node)
- raise NoMethodError, __method__
+ constant = visit(node.constant)
+ left =
+ if node.left.expression.nil?
+ bounds(node.left.location)
+ on_var_field(nil)
+ else
+ visit(node.left.expression)
+ end
+
+ requireds = visit_all(node.requireds) if node.requireds.any?
+ right =
+ if node.right.expression.nil?
+ bounds(node.right.location)
+ on_var_field(nil)
+ else
+ visit(node.right.expression)
+ end
+
+ bounds(node.location)
+ on_fndptn(constant, left, requireds, right)
end
# if foo .. bar; end
diff --git a/test/prism/ripper_test.rb b/test/prism/ripper_test.rb
index 4636fa6d58..9f6a8a3c9f 100644
--- a/test/prism/ripper_test.rb
+++ b/test/prism/ripper_test.rb
@@ -371,8 +371,6 @@ module Prism
seattlerb/case_in.txt
seattlerb/case_in_37.txt
seattlerb/case_in_else.txt
- seattlerb/case_in_find.txt
- seattlerb/case_in_find_array.txt
seattlerb/case_in_hash_pat.txt
seattlerb/case_in_hash_pat_assign.txt
seattlerb/case_in_hash_pat_paren_assign.txt
@@ -590,7 +588,6 @@ module Prism
unparser/corpus/literal/rescue.txt
unparser/corpus/literal/send.txt
unparser/corpus/literal/since/27.txt
- unparser/corpus/literal/since/30.txt
unparser/corpus/literal/since/31.txt
unparser/corpus/literal/since/32.txt
unparser/corpus/literal/super.txt