From bab5af93af8a839b56252022acbdfe483920580a Mon Sep 17 00:00:00 2001 From: Vinicius Stock Date: Fri, 3 Mar 2023 15:39:28 -0500 Subject: [PATCH] Handle `nil` symbol in BasicVisitor#visit --- lib/syntax_tree/basic_visitor.rb | 4 +++- test/visitor_test.rb | 20 ++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/lib/syntax_tree/basic_visitor.rb b/lib/syntax_tree/basic_visitor.rb index bd8ea5f2..07b72e31 100644 --- a/lib/syntax_tree/basic_visitor.rb +++ b/lib/syntax_tree/basic_visitor.rb @@ -103,7 +103,9 @@ def visit_methods end def visit(node) - node&.accept(self) + return if node.nil? || node.is_a?(Symbol) + + node.accept(self) end def visit_all(nodes) diff --git a/test/visitor_test.rb b/test/visitor_test.rb index d9637df0..b8110ff4 100644 --- a/test/visitor_test.rb +++ b/test/visitor_test.rb @@ -22,6 +22,26 @@ def baz; end assert_equal(%w[Foo foo Bar bar baz], visitor.visited_nodes) end + def test_visit_for_symbols + parsed_tree = SyntaxTree.parse(<<~RUBY) + def foo(**nil) + end + + foo do |**nil| + end + + ->(**nil) {} + + case foo + in **nil + end + RUBY + + visitor = DummyVisitor.new + visitor.visit(parsed_tree) + assert_equal(%w[foo], visitor.visited_nodes) + end + class DummyVisitor < Visitor attr_reader :visited_nodes