summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Hess <adamhess1991@gmail.com>2024-01-18 15:18:14 -0800
committergit <svn-admin@ruby-lang.org>2024-01-19 22:57:45 +0000
commitcfabe9c51cfa11f4020de119aa2bc707db15cf89 (patch)
treeade39caa740b3a96266649d8d32ddc3fd98ff59b
parented50161bd6dd27da21bd18c37b1a52d47c82a997 (diff)
[ruby/prism] Handle stovetop start in constant path fullname
https://github.com/ruby/prism/commit/3a216e63fe
-rw-r--r--lib/prism/node_ext.rb2
-rw-r--r--test/prism/constant_path_node_test.rb11
2 files changed, 12 insertions, 1 deletions
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