Skip to content

Commit 0299ae1

Browse files
committed
Fix superclass override when class Object is documented
1 parent 25f1df9 commit 0299ae1

File tree

2 files changed

+45
-1
lines changed

2 files changed

+45
-1
lines changed

lib/rdoc/parser/prism_ruby.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -689,7 +689,7 @@ def add_module_or_class(module_name, start_line, end_line, is_class: false, supe
689689
if superclass_name
690690
if superclass
691691
mod.superclass = superclass
692-
elsif mod.superclass.is_a?(String) && mod.superclass != superclass_full_path
692+
elsif (mod.superclass.is_a?(String) || mod.superclass.name == 'Object') && mod.superclass != superclass_full_path
693693
mod.superclass = superclass_full_path
694694
end
695695
end

test/rdoc/test_rdoc_parser_prism_ruby.rb

+44
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,50 @@ def m2; end
173173
assert_equal ['m1', 'm2'], c.method_list.map(&:name)
174174
end
175175

176+
def test_open_class_with_superclass_specified_later
177+
util_parser <<~RUBY
178+
# file_2
179+
require 'file_1'
180+
class A; end
181+
class B; end
182+
class C; end
183+
RUBY
184+
_a, b, c = @top_level.classes
185+
assert_equal 'Object', b.superclass
186+
assert_equal 'Object', c.superclass
187+
188+
util_parser <<~RUBY
189+
# file_1
190+
class B < A; end
191+
class C < Unknown; end
192+
RUBY
193+
assert_equal 'A', b.superclass.full_name
194+
assert_equal 'Unknown', c.superclass
195+
end
196+
197+
def test_open_class_with_superclass_specified_later_with_object_defined
198+
util_parser <<~RUBY
199+
# file_2
200+
require 'file_1'
201+
class Object; end
202+
class A; end
203+
class B; end
204+
class C; end
205+
RUBY
206+
_object, _a, b, c = @top_level.classes
207+
# If Object exists, superclass will be a NormalClass(Object) instead of string "Object"
208+
assert_equal 'Object', b.superclass.full_name
209+
assert_equal 'Object', c.superclass.full_name
210+
211+
util_parser <<~RUBY
212+
# file_1
213+
class B < A; end
214+
class C < Unknown; end
215+
RUBY
216+
assert_equal 'A', b.superclass.full_name
217+
assert_equal 'Unknown', c.superclass
218+
end
219+
176220
def test_confusing_superclass
177221
util_parser <<~RUBY
178222
module A

0 commit comments

Comments
 (0)