Skip to content

Commit db58bb5

Browse files
committed
Allow cross references to methods including underscores
As underscores are masked to "protect" from the conversion, consider also `PROTECT_ATTR` as a word character.
1 parent bf519a6 commit db58bb5

File tree

2 files changed

+15
-7
lines changed

2 files changed

+15
-7
lines changed

lib/rdoc/cross_reference.rb

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
# frozen_string_literal: true
2+
3+
require_relative 'markup/attribute_manager' # for PROTECT_ATTR
4+
25
##
36
# RDoc::CrossReference is a reusable way to create cross references for names.
47

@@ -29,7 +32,10 @@ class RDoc::CrossReference
2932
#
3033
# See CLASS_REGEXP_STR
3134

32-
METHOD_REGEXP_STR = /([A-Za-z]\w*[!?=]?|%|=(?:==?|~)|![=~]|\[\]=?|<(?:<|=>?)?|>[>=]?|[-+!]@?|\*\*?|[\/%`|&^~])#{METHOD_ARGS_REGEXP_STR}/.source
35+
METHOD_REGEXP_STR = /(
36+
(?!\d)[\w#{RDoc::Markup::AttributeManager::PROTECT_ATTR}]+[!?=]?|
37+
%|=(?:==?|~)|![=~]|\[\]=?|<(?:<|=>?)?|>[>=]?|[-+!]@?|\*\*?|[\/%\`|&^~]
38+
)#{METHOD_ARGS_REGEXP_STR}/.source.delete("\n ").freeze
3339

3440
##
3541
# Regular expressions matching text that should potentially have

test/rdoc/test_rdoc_cross_reference.rb

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22
require_relative 'xref_test_case'
33

44
class TestRDocCrossReference < XrefTestCase
5-
OPERATOR_METHODS = %w'== === != =~ !~ < > <= >= <=> [] []= << >> -@ +@ ! - + * / % ** !@ ` | & ^ ~'
5+
EXAMPLE_METHODS = %w'== === != =~ !~ < > <= >= <=> [] []= << >>
6+
-@ +@ ! - + * / % ** !@ ` | & ^ ~ __id__
7+
'
68

79
def setup
810
super
@@ -21,7 +23,7 @@ def refute_ref name
2123
def test_METHOD_REGEXP_STR
2224
re = /\A(?:#{RDoc::CrossReference::METHOD_REGEXP_STR})\z/
2325

24-
OPERATOR_METHODS.each do |x|
26+
EXAMPLE_METHODS.each do |x|
2527
re =~ x
2628
assert_equal x, $&
2729
end
@@ -170,7 +172,7 @@ def test_resolve_page
170172
assert_ref page, 'README'
171173
end
172174

173-
def assert_resolve_oeprator(x)
175+
def assert_resolve_method(x)
174176
@c1.methods_hash.clear
175177

176178
i_op = RDoc::AnyMethod.new nil, x
@@ -189,9 +191,9 @@ def assert_resolve_oeprator(x)
189191
assert_ref c_op, "C1::#{x}"
190192
end
191193

192-
OPERATOR_METHODS.each do |x|
193-
define_method("test_resolve_operator:#{x}") do
194-
assert_resolve_oeprator(x)
194+
EXAMPLE_METHODS.each do |x|
195+
define_method("test_resolve_method:#{x}") do
196+
assert_resolve_method(x)
195197
end
196198
end
197199

0 commit comments

Comments
 (0)