[前][次][番号順一覧][スレッド一覧]

ruby-changes:71350

From: Peter <ko1@a...>
Date: Wed, 9 Mar 2022 23:39:03 +0900 (JST)
Subject: [ruby-changes:71350] f62f913132 (master): [ruby/rdoc] Support crossref of methods with multiple arguments

https://git.ruby-lang.org/ruby.git/commit/?id=f62f913132

From f62f91313259539e8f0884a0ca99deb3ab8b87d3 Mon Sep 17 00:00:00 2001
From: Peter Zhu <peter@p...>
Date: Tue, 8 Mar 2022 17:02:35 -0500
Subject: [ruby/rdoc] Support crossref of methods with multiple arguments

For example, consider the following markup:

  C1#m(a, b)

Before this patch, it generated this HTML:

  <p><a href=\"C1.html#method-i-m\"><code>C1#m</code></a>(a, b)</p>

Which places the method arguments outside of the link.

Now it generates this HTML:

  <a href=\"C1.html#method-i-m\"><code>C1#m(a, b)</code></a>

https://github.com/ruby/rdoc/commit/05a2b2222b
---
 lib/rdoc/cross_reference.rb                    | 12 +++++++++++-
 test/rdoc/test_rdoc_markup_to_html_crossref.rb |  6 ++++++
 2 files changed, 17 insertions(+), 1 deletion(-)

diff --git a/lib/rdoc/cross_reference.rb b/lib/rdoc/cross_reference.rb
index 7c0b405f3a..0f301dcbb3 100644
--- a/lib/rdoc/cross_reference.rb
+++ b/lib/rdoc/cross_reference.rb
@@ -14,12 +14,22 @@ class RDoc::CrossReference https://github.com/ruby/ruby/blob/trunk/lib/rdoc/cross_reference.rb#L14
 
   CLASS_REGEXP_STR = '\\\\?((?:\:{2})?[A-Z]\w*(?:\:\:\w+)*)'
 
+  ##
+  # Regular expression to match a single method argument.
+
+  METHOD_ARG_REGEXP_STR = '[\w.+*/=<>-]+'
+
+  ##
+  # Regular expression to match method arguments.
+
+  METHOD_ARGS_REGEXP_STR = /(?:\((?:#{METHOD_ARG_REGEXP_STR}(?:,\s*#{METHOD_ARG_REGEXP_STR})*)?\))?/.source
+
   ##
   # Regular expression to match method references.
   #
   # See CLASS_REGEXP_STR
 
-  METHOD_REGEXP_STR = '([A-Za-z]\w*[!?=]?|%|=(?:==?|~)|![=~]|\[\]=?|<(?:<|=>?)?|>[>=]?|[-+!]@?|\*\*?|[/%`|&^~])(?:\([\w.+*/=<>-]*\))?'
+  METHOD_REGEXP_STR = /([A-Za-z]\w*[!?=]?|%|=(?:==?|~)|![=~]|\[\]=?|<(?:<|=>?)?|>[>=]?|[-+!]@?|\*\*?|[\/%`|&^~])#{METHOD_ARGS_REGEXP_STR}/.source
 
   ##
   # Regular expressions matching text that should potentially have
diff --git a/test/rdoc/test_rdoc_markup_to_html_crossref.rb b/test/rdoc/test_rdoc_markup_to_html_crossref.rb
index 1c778a4fad..4b87dd5da5 100644
--- a/test/rdoc/test_rdoc_markup_to_html_crossref.rb
+++ b/test/rdoc/test_rdoc_markup_to_html_crossref.rb
@@ -17,6 +17,12 @@ class TestRDocMarkupToHtmlCrossref < XrefTestCase https://github.com/ruby/ruby/blob/trunk/test/rdoc/test_rdoc_markup_to_html_crossref.rb#L17
     assert_equal para("<a href=\"C1.html\"><code>C1</code></a>"), result
   end
 
+  def test_convert_CROSSREF_method
+    result = @to.convert 'C1#m(foo, bar, baz)'
+
+    assert_equal para("<a href=\"C1.html#method-i-m\"><code>C1#m(foo, bar, baz)</code></a>"), result
+  end
+
   def test_convert_CROSSREF_label
     result = @to.convert 'C1@foo'
     assert_equal para("<a href=\"C1.html#class-C1-label-foo\">foo at <code>C1</code></a>"), result
-- 
cgit v1.2.1


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]