summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/rdoc/parser/changelog.rb20
-rw-r--r--test/rdoc/test_rdoc_parser_changelog.rb36
2 files changed, 54 insertions, 2 deletions
diff --git a/lib/rdoc/parser/changelog.rb b/lib/rdoc/parser/changelog.rb
index 763ba03d2c..eca4b56ec9 100644
--- a/lib/rdoc/parser/changelog.rb
+++ b/lib/rdoc/parser/changelog.rb
@@ -229,11 +229,29 @@ class RDoc::Parser::ChangeLog < RDoc::Parser
out = []
entries.each do |entry, (author, date, body)|
title = RDoc::Markup::Heading.new(3, "#{date} #{author}")
+ title.extend(Aref)
+ title.aref = "label-#{entry}"
out << title
- out.concat RDoc::Markdown.parse(body).parts
+ out.concat parse_log_entry(body, entry)
end
out
end
+
+ def parse_log_entry(content, sha)
+ RDoc::Markdown.parse(content).parts.each do |body|
+ case body
+ when RDoc::Markup::Heading
+ body.level += 3
+ label = body.aref.sub(/\Alabel-/, "label-#{sha}-")
+ body.extend(Aref)
+ body.aref = label
+ end
+ end
+ end
+
+ module Aref
+ attr_accessor :aref
+ end
end
end
diff --git a/test/rdoc/test_rdoc_parser_changelog.rb b/test/rdoc/test_rdoc_parser_changelog.rb
index 220f008aec..5f43811c03 100644
--- a/test/rdoc/test_rdoc_parser_changelog.rb
+++ b/test/rdoc/test_rdoc_parser_changelog.rb
@@ -340,6 +340,29 @@ commit\ a8dc5156e183489c5121fb1759bda5d9406d9175
Date: 2021-01-20 01:58:26 +0900
* 2021-01-20 [ci skip]
+
+commit de5f8a92d5001799bedb3b1a271a2d9b23c6c8fb
+ Author: Masataka Pocke Kuwabara <kuwabara@pocke.me>
+ Date: 2021-01-01 14:25:08 +0900
+
+ Make args info for RubyVM::AST to available on endless method without parens
+
+ Problem
+ ===
+
+ Arguments information is missing for endless method without parens.
+ For example:
+
+ ```ruby
+ # ok
+ ```
+
+ It causes an error if a program expects `args` node exists.
+
+ Solution
+ ===
+
+ Call `new_args` on this case.
ChangeLog
parser.scan
@@ -354,7 +377,18 @@ ChangeLog
head(2, '2021-01-20'),
blank_line,
head(3, '2021-01-20 01:58:26 +0900 git <svn-admin@ruby-lang.org>'),
- list(:BULLET, item(nil, para('2021-01-20 [ci skip]'))))
+ list(:BULLET, item(nil, para('2021-01-20 [ci skip]'))),
+ head(2, '2021-01-01'),
+ blank_line,
+ head(3, '2021-01-01 14:25:08 +0900 Masataka Pocke Kuwabara <kuwabara@pocke.me>'),
+ para('Make args info for RubyVM::AST to available on endless method without parens'),
+ head(4, 'Problem'),
+ para("Arguments information is missing for endless method without parens.\n" +
+ "For example:"),
+ verb("# ok\n").tap {|v| v.format = :ruby},
+ para('It causes an error if a program expects <code>args</code> node exists.'),
+ head(4, 'Solution'),
+ para('Call <code>new_args</code> on this case.'))
expected.file = @top_level