Skip to content

Commit 3ac13a2

Browse files
committed
Don't generate cross-reference links to non-text source files
RDoc's cross-reference system generates links to files like `array_c.html` when it encounters C filenames in documentation text. However, non-text source files (C, Ruby, etc.) are not meant to have their own documentation pages, so these links are always broken. Filter out non-text `TopLevel` references in `CrossReference#resolve` and `Store#page` so that only files whose parser includes `RDoc::Parser::Text` (markdown, rdoc, txt, etc.) produce links.
1 parent 3c6f5f6 commit 3ac13a2

4 files changed

Lines changed: 22 additions & 2 deletions

File tree

lib/rdoc/cross_reference.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,10 @@ def resolve(name, text)
211211

212212
ref = nil if RDoc::Alias === ref # external alias, can't link to it
213213

214+
# Non-text source files (C, Ruby, etc.) don't get HTML pages generated,
215+
# so don't create links that would point to non-existent pages.
216+
ref = nil if RDoc::TopLevel === ref && !ref.text?
217+
214218
out = if name == '\\' then
215219
name
216220
elsif name =~ /^\\/ then

lib/rdoc/store.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -839,7 +839,7 @@ def modules_hash
839839

840840
def page(name)
841841
@files_hash.each_value.find do |file|
842-
file.page_name == name or file.base_name == name
842+
file.text? and (file.page_name == name or file.base_name == name)
843843
end
844844
end
845845

test/rdoc/markup/to_html_crossref_test.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -387,6 +387,16 @@ def test_to_html_CROSSREF_email_hyperlink_all
387387
assert_equal 'first.last@example.com', result
388388
end
389389

390+
def test_convert_CROSSREF_c_file_not_linked
391+
# C files are not text files, so they don't get HTML pages generated.
392+
# Cross-references to them should not produce links.
393+
c_file = @store.add_file 'array.c'
394+
c_file.parser = RDoc::Parser::C
395+
396+
result = @to.convert 'array.c'
397+
assert_equal para("array.c"), result
398+
end
399+
390400
def test_link
391401
assert_equal 'n', @to.link('n', 'n')
392402

test/rdoc/rdoc_cross_reference_test.rb

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,13 @@ def test_resolve_class
115115
end
116116

117117
def test_resolve_file
118-
assert_ref @top_level, 'xref_data.rb'
118+
# Non-text source files don't get HTML pages generated,
119+
# so they should not be cross-referenced
120+
refute_ref 'xref_data.rb'
121+
end
122+
123+
def test_resolve_text_file
124+
assert_ref @example_md, 'EXAMPLE.md'
119125
end
120126

121127
def test_resolve_method

0 commit comments

Comments
 (0)