From 3fb1047af4252db707ad60b4947a7f026f341ee5 Mon Sep 17 00:00:00 2001 From: Samuel Williams Date: Sun, 16 Aug 2026 10:30:03 +1200 Subject: [PATCH] Preserve absolute Ruby constant references --- lib/decode/language/ruby/parser.rb | 5 ++++- test/decode/language/ruby/.fixtures/classes.rb | 6 ++++++ test/decode/language/ruby/parser.rb | 4 ++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/lib/decode/language/ruby/parser.rb b/lib/decode/language/ruby/parser.rb index a556872..782bf85 100644 --- a/lib/decode/language/ruby/parser.rb +++ b/lib/decode/language/ruby/parser.rb @@ -502,7 +502,10 @@ def nested_path_for(node, path = []) end def nested_name_for(node) - nested_path_for(node)&.join("::") + case node&.type + when :constant_read_node, :constant_path_node + return node.full_name + end end def symbol_name_for(node) diff --git a/test/decode/language/ruby/.fixtures/classes.rb b/test/decode/language/ruby/.fixtures/classes.rb index 916b8be..1c2d1c6 100644 --- a/test/decode/language/ruby/.fixtures/classes.rb +++ b/test/decode/language/ruby/.fixtures/classes.rb @@ -14,3 +14,9 @@ class << self class My::Nested::Child end + +class QualifiedChild < My::Parent +end + +class AbsoluteChild < ::Parent +end diff --git a/test/decode/language/ruby/parser.rb b/test/decode/language/ruby/parser.rb index 2cdf7cd..2822fb9 100644 --- a/test/decode/language/ruby/parser.rb +++ b/test/decode/language/ruby/parser.rb @@ -33,6 +33,8 @@ expect(definitions[1].short_form).to be == "class Child" expect(definitions[2].short_form).to be == "class << self" expect(definitions[3].short_form).to be == "class Child" + expect(definitions[4].short_form).to be == "class QualifiedChild" + expect(definitions[5].short_form).to be == "class AbsoluteChild" end it "has long form" do @@ -40,6 +42,8 @@ expect(definitions[1].long_form).to be == "class Child < Parent" expect(definitions[2].long_form).to be == "class << self" expect(definitions[3].long_form).to be == "class My::Nested::Child" + expect(definitions[4].long_form).to be == "class QualifiedChild < My::Parent" + expect(definitions[5].long_form).to be == "class AbsoluteChild < ::Parent" end it "should handle singleton classes" do