Skip to content

Commit 3f22b9d

Browse files
committed
Print warnings for rdoc-ref links that can't be resolved
1 parent dba9474 commit 3f22b9d

File tree

2 files changed

+41
-13
lines changed

2 files changed

+41
-13
lines changed

lib/rdoc/markup/to_html_crossref.rb

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ def init_link_notation_regexp_handlings
5858
# Creates a link to the reference +name+ if the name exists. If +text+ is
5959
# given it is used as the link text, otherwise +name+ is used.
6060

61-
def cross_reference name, text = nil, code = true
61+
def cross_reference name, text = nil, code = true, rdoc_ref: false
6262
lookup = name
6363

6464
name = name[1..-1] unless @show_hash if name[0, 1] == '#'
@@ -70,7 +70,7 @@ def cross_reference name, text = nil, code = true
7070
text ||= name
7171
end
7272

73-
link lookup, text, code
73+
link lookup, text, code, rdoc_ref: rdoc_ref
7474
end
7575

7676
##
@@ -92,17 +92,22 @@ def handle_regexp_CROSSREF(target)
9292
return name if name =~ /\A[a-z]*\z/
9393
end
9494

95-
cross_reference name
95+
cross_reference name, rdoc_ref: false
9696
end
9797

9898
##
9999
# Handles <tt>rdoc-ref:</tt> scheme links and allows RDoc::Markup::ToHtml to
100100
# handle other schemes.
101101

102102
def handle_regexp_HYPERLINK target
103-
return cross_reference $' if target.text =~ /\Ardoc-ref:/
103+
url = target.text
104104

105-
super
105+
case url
106+
when /\Ardoc-ref:/
107+
cross_reference $', rdoc_ref: true
108+
else
109+
super
110+
end
106111
end
107112

108113
##
@@ -117,8 +122,8 @@ def handle_regexp_RDOCLINK target
117122
url = target.text
118123

119124
case url
120-
when /\Ardoc-ref:/ then
121-
cross_reference $'
125+
when /\Ardoc-ref:/
126+
cross_reference $', rdoc_ref: true
122127
else
123128
super
124129
end
@@ -129,16 +134,18 @@ def handle_regexp_RDOCLINK target
129134
# RDoc::Markup::ToHtml to handle other schemes.
130135

131136
def gen_url url, text
132-
return super unless url =~ /\Ardoc-ref:/
133-
134-
name = $'
135-
cross_reference name, text, name == text
137+
if url =~ /\Ardoc-ref:/
138+
name = $'
139+
cross_reference name, text, name == text, rdoc_ref: true
140+
else
141+
super
142+
end
136143
end
137144

138145
##
139146
# Creates an HTML link to +name+ with the given +text+.
140147

141-
def link name, text, code = true
148+
def link name, text, code = true, rdoc_ref: false
142149
if !(name.end_with?('+@', '-@')) and name =~ /(.*[^#:])?@/
143150
name = $1
144151
label = $'
@@ -148,6 +155,9 @@ def link name, text, code = true
148155

149156
case ref
150157
when String then
158+
if rdoc_ref
159+
puts "rdoc-ref target `#{name}` can't be resolved for `#{text}` in #{@from_path}"
160+
end
151161
ref
152162
else
153163
path = ref ? ref.as_href(@from_path) : +""

test/rdoc/test_rdoc_markup_to_html_crossref.rb

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# frozen_string_literal: true
22
require_relative 'xref_test_case'
33

4-
class TestRDocMarkupToHtmlCrossref < XrefTestCase
4+
class RDocMarkupToHtmlCrossrefTest < XrefTestCase
55

66
def setup
77
super
@@ -67,6 +67,16 @@ def test_convert_RDOCLINK_rdoc_ref
6767
assert_equal para("<a href=\"C1.html\"><code>C1</code></a>"), result
6868
end
6969

70+
def test_convert_RDOCLINK_rdoc_ref_not_found
71+
result = nil
72+
stdout, _ = capture_output do
73+
result = @to.convert 'rdoc-ref:FOO'
74+
end
75+
76+
assert_equal para("FOO"), result
77+
assert_include stdout, "rdoc-ref target `FOO` can't be resolved for `FOO` in index.html"
78+
end
79+
7080
def test_convert_RDOCLINK_rdoc_ref_method
7181
result = @to.convert 'rdoc-ref:C1#m'
7282

@@ -153,6 +163,14 @@ def test_gen_url
153163
@to.gen_url('http://example', 'HTTP example')
154164
end
155165

166+
def test_gen_url_rdoc_ref_not_found
167+
stdout, _ = capture_output do
168+
@to.gen_url 'rdoc-ref:FOO', 'FOO'
169+
end
170+
171+
assert_include stdout, "rdoc-ref target `FOO` can't be resolved for `FOO` in index.html"
172+
end
173+
156174
def test_handle_regexp_CROSSREF
157175
assert_equal "<a href=\"C2/C3.html\"><code>C2::C3</code></a>", REGEXP_HANDLING('C2::C3')
158176
end

0 commit comments

Comments
 (0)