From dc4d1a1db20af1ed6633dcd6a1788816df18236c Mon Sep 17 00:00:00 2001 From: tompng Date: Sat, 20 Dec 2025 15:29:52 +0900 Subject: [PATCH] Fix class/module alias document having wrong name Stop aliased class/module document file overwrite original one. Fix aliasing-to-toplevel check. --- lib/rdoc/code_object/class_module.rb | 8 +++++--- lib/rdoc/generator/darkfish.rb | 4 +++- test/rdoc/generator/aliki_test.rb | 13 +++++++++++++ test/rdoc/generator/darkfish_test.rb | 8 +++++--- 4 files changed, 26 insertions(+), 7 deletions(-) diff --git a/lib/rdoc/code_object/class_module.rb b/lib/rdoc/code_object/class_module.rb index a4c5fec8c8..b05247cab8 100644 --- a/lib/rdoc/code_object/class_module.rb +++ b/lib/rdoc/code_object/class_module.rb @@ -807,11 +807,13 @@ def update_aliases cm_alias = cm.dup cm_alias.name = const.name - # Don't move top-level aliases under Object, they look ugly there - unless RDoc::TopLevel === cm_alias.parent then + if full_name == 'Object' + # Don't move top-level aliases under Object, they look ugly there + cm_alias.parent = top_level + else cm_alias.parent = self - cm_alias.full_name = nil # force update for new parent end + cm_alias.full_name = nil # force update for new parent cm_alias.aliases.clear cm_alias.is_alias_for = cm diff --git a/lib/rdoc/generator/darkfish.rb b/lib/rdoc/generator/darkfish.rb index 9679216b95..b31c1e4b7d 100644 --- a/lib/rdoc/generator/darkfish.rb +++ b/lib/rdoc/generator/darkfish.rb @@ -356,7 +356,9 @@ def generate_class_files current = nil - @classes.each do |klass| + # Document files are generated only for non-alias classes/modules + @classes.reject(&:is_alias_for).each do |klass| + current = klass generate_class klass, template_file diff --git a/test/rdoc/generator/aliki_test.rb b/test/rdoc/generator/aliki_test.rb index 44bac32407..387e541a07 100644 --- a/test/rdoc/generator/aliki_test.rb +++ b/test/rdoc/generator/aliki_test.rb @@ -34,6 +34,13 @@ def setup @top_level.parser = RDoc::Parser::Ruby @klass = @top_level.add_class RDoc::NormalClass, 'Klass' + @alias_constant = RDoc::Constant.new 'A', nil, '' + @alias_constant.record_location @top_level + + @top_level.add_constant @alias_constant + + @klass.add_module_alias @klass, @klass.name, @alias_constant, @top_level + @meth = RDoc::AnyMethod.new nil, 'method' @meth_with_html_tag_yield = RDoc::AnyMethod.new nil, 'method_with_html_tag_yield' @meth_with_html_tag_yield.block_params = '%<>, yield_arg' @@ -57,6 +64,12 @@ def test_inheritance_and_template_dir assert_match %r{/template/aliki\z}, @g.template_dir.to_s end + def test_aliased_classes_full_name + @g.generate + + assert_equal(%w[Klass Klass::A Object], @g.classes.map(&:full_name).sort) + end + def test_write_style_sheet_copies_css_and_js_only @g.generate diff --git a/test/rdoc/generator/darkfish_test.rb b/test/rdoc/generator/darkfish_test.rb index 1f0236ad8f..87ce9d9309 100644 --- a/test/rdoc/generator/darkfish_test.rb +++ b/test/rdoc/generator/darkfish_test.rb @@ -297,11 +297,13 @@ def test_install_rdoc_static_file_missing def test_setup @g.setup - assert_equal [@klass_alias, @ignored, @klass, @object], + assert_equal %w[Ignored Klass Klass::A Object], + [@ignored, @klass, @klass_alias, @object].map(&:full_name) + assert_equal [@ignored, @klass, @klass_alias, @object], @g.classes.sort_by { |klass| klass.full_name } assert_equal [@top_level], @g.files assert_equal [@meth, @meth, @meth_bang, @meth_bang, @meth_with_html_tag_yield, @meth_with_html_tag_yield], @g.methods - assert_equal [@klass_alias, @klass, @object], @g.modsort + assert_equal [@klass, @klass_alias, @object], @g.modsort end def test_template_for @@ -338,7 +340,7 @@ def test_generated_method_with_html_tag_yield @g.generate - path = File.join @tmpdir, 'A.html' + path = File.join @tmpdir, 'Klass.html' f = open(path) internal_file = f.read