[ruby/rdoc] Skip parentheses on singleton class declaration

https://github.com/ruby/rdoc/commit/b6c6d4f978
This commit is contained in:
Soutaro Matsumoto 2022-02-08 21:23:13 +09:00 коммит произвёл git
Родитель 88b1d21dbb
Коммит cbd54cba03
2 изменённых файлов: 37 добавлений и 1 удалений

Просмотреть файл

@ -399,6 +399,29 @@ class RDoc::Parser::Ruby < RDoc::Parser
return [container, name_t, given_name, new_modules]
end
##
# Skip opening parentheses and yield the block.
# Skip closing parentheses too when exists.
def skip_parentheses(&block)
left_tk = peek_tk
if :on_lparen == left_tk[:kind]
get_tk
ret = skip_parentheses(&block)
right_tk = peek_tk
if :on_rparen == right_tk[:kind]
get_tk
end
ret
else
yield
end
end
##
# Return a superclass, which can be either a constant of an expression
@ -833,7 +856,7 @@ class RDoc::Parser::Ruby < RDoc::Parser
cls = parse_class_regular container, declaration_context, single,
name_t, given_name, comment
elsif name_t[:kind] == :on_op && name_t[:text] == '<<'
case name = get_class_specification
case name = skip_parentheses { get_class_specification }
when 'self', container.name
read_documentation_modifiers cls, RDoc::CLASS_MODIFIERS
parse_statements container, SINGLE

Просмотреть файл

@ -4345,4 +4345,17 @@ end
assert_equal 'Hello', meth.comment.text
end
def test_parenthesized_cdecl
util_parser <<-RUBY
module DidYouMean
class << (NameErrorCheckers = Object.new)
end
end
RUBY
@parser.scan
refute_predicate @store.find_class_or_module('DidYouMean'), :nil?
refute_predicate @store.find_class_or_module('DidYouMean::NameErrorCheckers'), :nil?
end
end