From cfabe9c51cfa11f4020de119aa2bc707db15cf89 Mon Sep 17 00:00:00 2001 From: Adam Hess Date: Thu, 18 Jan 2024 15:18:14 -0800 Subject: [PATCH] [ruby/prism] Handle stovetop start in constant path fullname https://github.com/ruby/prism/commit/3a216e63fe --- lib/prism/node_ext.rb | 2 +- test/prism/constant_path_node_test.rb | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/lib/prism/node_ext.rb b/lib/prism/node_ext.rb index 974052e84b..e39579f534 100644 --- a/lib/prism/node_ext.rb +++ b/lib/prism/node_ext.rb @@ -118,7 +118,7 @@ module Prism current = current.parent end - unless current.is_a?(ConstantReadNode) + unless current.is_a?(ConstantReadNode) || current == nil raise DynamicPartsInConstantPathError, "Constant path contains dynamic parts. Cannot compute full name" end diff --git a/test/prism/constant_path_node_test.rb b/test/prism/constant_path_node_test.rb index 9842be0c49..aeab6e01e9 100644 --- a/test/prism/constant_path_node_test.rb +++ b/test/prism/constant_path_node_test.rb @@ -52,5 +52,16 @@ module Prism node = Prism.parse(source).value.statements.body.first assert_equal("Foo::Bar::Baz::Qux", node.lefts.first.full_name) end + + def test_full_name_for_constant_path_with_stovetop_start + source = <<~RUBY + ::Foo:: # comment + Bar::Baz:: + Qux, Something = [1, 2] + RUBY + + node = Prism.parse(source).value.statements.body.first + assert_equal("::Foo::Bar::Baz::Qux", node.lefts.first.full_name) + end end end