Skip to content

Commit efb9356

Browse files
committed
List all class ancestors
1 parent 7fb0e50 commit efb9356

File tree

4 files changed

+41
-8
lines changed

4 files changed

+41
-8
lines changed

lib/rdoc/code_object/class_module.rb

+14
Original file line numberDiff line numberDiff line change
@@ -711,6 +711,20 @@ def superclass=(superclass)
711711
@superclass = superclass
712712
end
713713

714+
##
715+
# Get all super classes of this class in an array. The last element might be
716+
# a string if the name is unknown.
717+
718+
def super_classes
719+
result = []
720+
parent = self
721+
while parent = parent.superclass
722+
result << parent
723+
return result if parent.is_a?(String)
724+
end
725+
result
726+
end
727+
714728
def to_s # :nodoc:
715729
if is_alias_for then
716730
"#{self.class.name} #{self.full_name} -> #{is_alias_for}"

lib/rdoc/generator/darkfish.rb

+18
Original file line numberDiff line numberDiff line change
@@ -795,4 +795,22 @@ def excerpt(content)
795795

796796
extracted_text[0...150].gsub(/\n/, " ").squeeze(" ")
797797
end
798+
799+
def generate_ancestor_list(ancestors, klass)
800+
return '' if ancestors.empty?
801+
802+
ancestor = ancestors.shift
803+
content = +'<ul><li>'
804+
805+
if ancestor.is_a?(RDoc::NormalClass)
806+
content << "<a href=\"#{klass.aref_to ancestor.path}\">#{ancestor.full_name}</a>"
807+
else
808+
content << ancestor.to_s
809+
end
810+
811+
# Recursively call the method for the remaining ancestors
812+
content << generate_ancestor_list(ancestors, klass)
813+
814+
content << '</li></ul>'
815+
end
798816
end
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,6 @@
1-
<%- if klass.type == 'class' then %>
1+
<%- if klass.type == 'class' && (ancestors = klass.super_classes).any? -%>
22
<div id="parent-class-section" class="nav-section">
3-
<h3>Parent</h3>
4-
5-
<%- if klass.superclass and not String === klass.superclass then -%>
6-
<p class="link"><a href="<%= klass.aref_to klass.superclass.path %>"><%= klass.superclass.full_name %></a>
7-
<%- else -%>
8-
<p class="link"><%= klass.superclass %>
9-
<%- end -%>
3+
<h3>Ancestors</h3>
4+
<%= generate_ancestor_list(ancestors, klass) %>
105
</div>
116
<%- end -%>

test/rdoc/test_rdoc_class_module.rb

+6
Original file line numberDiff line numberDiff line change
@@ -1279,6 +1279,12 @@ def test_superclass
12791279
assert_equal @c3_h1, @c3_h2.superclass
12801280
end
12811281

1282+
def test_super_classes
1283+
rdoc_c3_h1 = @xref_data.find_module_named('C3::H1')
1284+
rdoc_object = @xref_data.find_module_named('Object')
1285+
assert_equal [rdoc_c3_h1, rdoc_object, "BasicObject"], @c3_h2.super_classes
1286+
end
1287+
12821288
def test_update_aliases_class
12831289
n1 = @xref_data.add_module RDoc::NormalClass, 'N1'
12841290
n1_k2 = n1.add_module RDoc::NormalClass, 'N2'

0 commit comments

Comments
 (0)