From 5d332a4128e9d302dcf260c1cebba0a59be7fa25 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Mon, 7 Feb 2022 22:06:53 +0900 Subject: [PATCH 1/2] Allow cross references to operator methods Make operator methods, e.g., `Regexp#=~`, `Integer#<=>`, cross reference targets. --- lib/rdoc/cross_reference.rb | 2 +- test/rdoc/test_rdoc_cross_reference.rb | 44 ++++++++++++++------------ 2 files changed, 24 insertions(+), 22 deletions(-) diff --git a/lib/rdoc/cross_reference.rb b/lib/rdoc/cross_reference.rb index ef8e21bde8..9e4a6ddf69 100644 --- a/lib/rdoc/cross_reference.rb +++ b/lib/rdoc/cross_reference.rb @@ -19,7 +19,7 @@ class RDoc::CrossReference # # See CLASS_REGEXP_STR - METHOD_REGEXP_STR = '([A-Za-z]\w*[!?=]?|%|===?|\[\]=?|<<|>>|\+@|-@|-|\+|\*)(?:\([\w.+*/=<>-]*\))?' + METHOD_REGEXP_STR = '([A-Za-z]\w*[!?=]?|%|=(?:==?|~)|![=~]|\[\]=?|<(?:<|=>?)?|>[>=]?|[-+!]@?|\*\*?|[/%])(?:\([\w.+*/=<>-]*\))?' ## # Regular expressions matching text that should potentially have diff --git a/test/rdoc/test_rdoc_cross_reference.rb b/test/rdoc/test_rdoc_cross_reference.rb index f73681ebc8..17b8bb34bc 100644 --- a/test/rdoc/test_rdoc_cross_reference.rb +++ b/test/rdoc/test_rdoc_cross_reference.rb @@ -2,6 +2,7 @@ require File.expand_path '../xref_test_case', __FILE__ class TestRDocCrossReference < XrefTestCase + OPERATOR_METHODS = %w'== === != =~ !~ < > <= >= <=> [] []= << >> -@ +@ ! - + * / % ** !@' def setup super @@ -18,9 +19,9 @@ def refute_ref name end def test_METHOD_REGEXP_STR - re = /#{RDoc::CrossReference::METHOD_REGEXP_STR}/ + re = /\A(?:#{RDoc::CrossReference::METHOD_REGEXP_STR})\z/ - %w'== === [] []= << >>'.each do |x| + OPERATOR_METHODS.each do |x| re =~ x assert_equal x, $& end @@ -163,34 +164,35 @@ def test_resolve_the_same_name_in_instance_and_class_method assert_ref @c9_a_c_bar, 'C9::B.bar' end - def test_resolve_method_equals3 - m = RDoc::AnyMethod.new '', '===' - @c1.add_method m - - assert_ref m, '===' - end - def test_resolve_page page = @store.add_file 'README.txt', parser: RDoc::Parser::Simple assert_ref page, 'README' end - def test_resolve_percent - i_percent = RDoc::AnyMethod.new nil, '%' - i_percent.singleton = false - @c1.add_method i_percent + def assert_resolve_oeprator(x) + @c1.methods_hash.clear + + i_op = RDoc::AnyMethod.new nil, x + i_op.singleton = false + @c1.add_method i_op - c_percent = RDoc::AnyMethod.new nil, '%' - c_percent.singleton = true - @c1.add_method c_percent + c_op = RDoc::AnyMethod.new nil, x + c_op.singleton = true + @c1.add_method c_op - assert_ref i_percent, '%' - assert_ref i_percent, '#%' - assert_ref c_percent, '::%' + assert_ref i_op, x + assert_ref i_op, "##{x}" + assert_ref c_op, "::#{x}" - assert_ref i_percent, 'C1#%' - assert_ref c_percent, 'C1::%' + assert_ref i_op, "C1##{x}" + assert_ref c_op, "C1::#{x}" + end + + OPERATOR_METHODS.each do |x| + define_method("test_resolve_operator:#{x}") do + assert_resolve_oeprator(x) + end end def test_resolve_no_ref From 52c33157f19aadd978198e0f76d850dc576bd803 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Wed, 9 Feb 2022 14:58:35 +0900 Subject: [PATCH 2/2] Allow cross references to backtick method --- lib/rdoc/cross_reference.rb | 2 +- test/rdoc/test_rdoc_cross_reference.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/rdoc/cross_reference.rb b/lib/rdoc/cross_reference.rb index 9e4a6ddf69..90c17a52ea 100644 --- a/lib/rdoc/cross_reference.rb +++ b/lib/rdoc/cross_reference.rb @@ -19,7 +19,7 @@ class RDoc::CrossReference # # See CLASS_REGEXP_STR - METHOD_REGEXP_STR = '([A-Za-z]\w*[!?=]?|%|=(?:==?|~)|![=~]|\[\]=?|<(?:<|=>?)?|>[>=]?|[-+!]@?|\*\*?|[/%])(?:\([\w.+*/=<>-]*\))?' + METHOD_REGEXP_STR = '([A-Za-z]\w*[!?=]?|%|=(?:==?|~)|![=~]|\[\]=?|<(?:<|=>?)?|>[>=]?|[-+!]@?|\*\*?|[/%`])(?:\([\w.+*/=<>-]*\))?' ## # Regular expressions matching text that should potentially have diff --git a/test/rdoc/test_rdoc_cross_reference.rb b/test/rdoc/test_rdoc_cross_reference.rb index 17b8bb34bc..a226bf4b11 100644 --- a/test/rdoc/test_rdoc_cross_reference.rb +++ b/test/rdoc/test_rdoc_cross_reference.rb @@ -2,7 +2,7 @@ require File.expand_path '../xref_test_case', __FILE__ class TestRDocCrossReference < XrefTestCase - OPERATOR_METHODS = %w'== === != =~ !~ < > <= >= <=> [] []= << >> -@ +@ ! - + * / % ** !@' + OPERATOR_METHODS = %w'== === != =~ !~ < > <= >= <=> [] []= << >> -@ +@ ! - + * / % ** !@ `' def setup super