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