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

ruby-changes:68490

From: Mike <ko1@a...>
Date: Sat, 16 Oct 2021 06:31:22 +0900 (JST)
Subject: [ruby-changes:68490] 4ffc3fb019 (master): [ruby/rdoc] fix: alias to method with call-seq

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

From 4ffc3fb019bd1373991ca9278299f6d7c44c3024 Mon Sep 17 00:00:00 2001
From: Mike Dalessio <mike.dalessio@g...>
Date: Mon, 20 Sep 2021 10:09:14 -0400
Subject: [ruby/rdoc] fix: alias to method with call-seq

This change fixes alias call-seq to return nil if the method's
call-seq does not specify the alias.

Previously, the alias's call-seq would be an empty string in this case
which broke darkfish rendering.

This change also backfills test coverage for 0ead786 which moved
call-seq deduplication into AnyMethod.

https://github.com/ruby/rdoc/commit/5ce2789b6f
---
 lib/rdoc/any_method.rb            |  2 +-
 test/rdoc/test_rdoc_any_method.rb | 48 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 49 insertions(+), 1 deletion(-)

diff --git a/lib/rdoc/any_method.rb b/lib/rdoc/any_method.rb
index 3d0b60790d..0b7dd717ab 100644
--- a/lib/rdoc/any_method.rb
+++ b/lib/rdoc/any_method.rb
@@ -359,6 +359,6 @@ class RDoc::AnyMethod < RDoc::MethodAttr https://github.com/ruby/ruby/blob/trunk/lib/rdoc/any_method.rb#L359
         entry =~ /\s#{ignore}\s/
     end
 
-    matching.join "\n"
+    matching.empty? ? nil : matching.join("\n")
   end
 end
diff --git a/test/rdoc/test_rdoc_any_method.rb b/test/rdoc/test_rdoc_any_method.rb
index 615789dfb3..caff86b059 100644
--- a/test/rdoc/test_rdoc_any_method.rb
+++ b/test/rdoc/test_rdoc_any_method.rb
@@ -72,6 +72,54 @@ method(a, b) { |c, d| ... } https://github.com/ruby/ruby/blob/trunk/test/rdoc/test_rdoc_any_method.rb#L72
     assert_nil m1.is_alias_for, 'missing alias'
   end
 
+  def test_call_seq_handles_aliases
+    # see 0ead786
+    @store.path = Dir.tmpdir
+    top_level = @store.add_file 'file.rb'
+    cm = top_level.add_class RDoc::ClassModule, 'Klass'
+
+    method_with_call_seq = RDoc::AnyMethod.new(nil, "method_with_call_seq")
+    method_with_call_seq.call_seq = <<~SEQ
+      method_with_call_seq(a)
+      method_with_call_seq(a, b)
+      alias_to_method(a)
+      alias_to_method(a, b)
+    SEQ
+    cm.add_method(method_with_call_seq)
+
+    alias_to_method = method_with_call_seq.add_alias(
+      RDoc::Alias.new(nil, "method_with_call_seq", "alias_to_method", "comment"),
+      cm
+    )
+
+    assert_equal("method_with_call_seq(a)\nmethod_with_call_seq(a, b)",
+                 method_with_call_seq.call_seq)
+    assert_equal("alias_to_method(a)\nalias_to_method(a, b)",
+                 alias_to_method.call_seq)
+  end
+
+  def test_call_seq_returns_nil_if_alias_is_missing_from_call_seq
+    @store.path = Dir.tmpdir
+    top_level = @store.add_file 'file.rb'
+    cm = top_level.add_class RDoc::ClassModule, 'Klass'
+
+    method_with_call_seq = RDoc::AnyMethod.new(nil, "method_with_call_seq")
+    method_with_call_seq.call_seq = <<~SEQ
+      method_with_call_seq(a)
+      method_with_call_seq(a, b)
+    SEQ
+    cm.add_method(method_with_call_seq)
+
+    alias_to_method = method_with_call_seq.add_alias(
+      RDoc::Alias.new(nil, "method_with_call_seq", "alias_to_method", "comment"),
+      cm
+    )
+
+    assert_equal("method_with_call_seq(a)\nmethod_with_call_seq(a, b)",
+                 method_with_call_seq.call_seq)
+    assert_nil(alias_to_method.call_seq)
+  end
+
   def test_markup_code
     tokens = [
       { :line_no => 0, :char_no => 0, :kind => :on_const, :text => 'CONSTANT' },
-- 
cgit v1.2.1


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

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