diff --git a/lib/rdoc/parser/ruby.rb b/lib/rdoc/parser/ruby.rb index 39c3bae4c4..2cc629ebdf 100644 --- a/lib/rdoc/parser/ruby.rb +++ b/lib/rdoc/parser/ruby.rb @@ -1453,6 +1453,12 @@ def parse_method(container, single, tk, comment) meth = RDoc::AnyMethod.new get_tkread, name look_for_directives_in meth, comment meth.singleton = single == SINGLE ? true : singleton + if singleton + # `current_line_visibility' is useless because it works against + # the normal method named as same as the singleton method, after + # the latter was defined. Of course these are different things. + container.current_line_visibility = :public + end record_location meth meth.line = line_no @@ -1776,6 +1782,7 @@ def parse_statements(container, single = NORMAL, current_method = nil, nest = 1 save_visibility = container.visibility + container.visibility = :public unless current_method non_comment_seen = true diff --git a/test/rdoc/test_rdoc_context.rb b/test/rdoc/test_rdoc_context.rb index 85665599fb..c4de04e083 100644 --- a/test/rdoc/test_rdoc_context.rb +++ b/test/rdoc/test_rdoc_context.rb @@ -927,6 +927,12 @@ def test_visibility_def assert_equal :private, @c6.find_method_named('priv6').visibility assert_equal :protected, @c6.find_method_named('prot6').visibility assert_equal :public, @c6.find_method_named('pub6').visibility + assert_equal :public, @c6.find_method_named('s_pub1').visibility + assert_equal :public, @c6.find_method_named('s_pub2').visibility + assert_equal :public, @c6.find_method_named('s_pub3').visibility + assert_equal :public, @c6.find_method_named('s_pub4').visibility + assert_equal :private, @c6.find_method_named('s_priv1').visibility + assert_equal :protected, @c6.find_method_named('s_prot1').visibility end def util_visibilities diff --git a/test/rdoc/xref_data.rb b/test/rdoc/xref_data.rb index c9315b7806..257b821f4f 100644 --- a/test/rdoc/xref_data.rb +++ b/test/rdoc/xref_data.rb @@ -74,6 +74,12 @@ def priv3() end def priv4() end public def pub5() end def priv5() end + def self.s_pub1() end + class << self + def s_pub2() end + private + def s_priv1() end + end protected private def priv6() end @@ -82,6 +88,12 @@ def prot3() end def prot5() end public def pub6() end def prot6() end + def self.s_pub3() end + class << self + def s_pub4() end + protected + def s_prot1() end + end end class C7