diff --git a/data/bitclust/catalog/ja_JP.UTF-8 b/data/bitclust/catalog/ja_JP.UTF-8 index 01b02440..c9b81c20 100644 --- a/data/bitclust/catalog/ja_JP.UTF-8 +++ b/data/bitclust/catalog/ja_JP.UTF-8 @@ -84,6 +84,8 @@ Private Instance Methods privateメソッド Protected Instance Methods protectedメソッド +Redefined Methods +再定義されたメソッド Private Singleton Methods private特異メソッド Required Libraries diff --git a/data/bitclust/template.epub/class b/data/bitclust/template.epub/class index e8b65fbb..c0eb586b 100644 --- a/data/bitclust/template.epub/class +++ b/data/bitclust/template.epub/class @@ -59,6 +59,7 @@ [_('Private Instance Methods'), ents.private_instance_methods ], [_('Protected Instance Methods'),ents.protected_instance_methods ], [_('Module Functions'), ents.module_functions ], + [_('Redefined Methods'), ents.redefined ], [_('Constants'), ents.constants ], [_('Special Variables'), ents.special_variables ,'$']] %> <%= headline(_("Index")) %> diff --git a/data/bitclust/template.lillia/class b/data/bitclust/template.lillia/class index 154b5920..3986e5a6 100644 --- a/data/bitclust/template.lillia/class +++ b/data/bitclust/template.lillia/class @@ -63,6 +63,7 @@ [_('Module Functions'), ents.module_functions ], [_('Constants'), ents.constants ], [_('Special Variables'), ents.special_variables ], + [_('Redefined Methods'), ents.redefined ], [_('Added Methods'), ents.added ] ]\ .each do |label, entries| unless entries.empty? %> diff --git a/data/bitclust/template.offline/class b/data/bitclust/template.offline/class index 00c75dc6..ff93fe2c 100644 --- a/data/bitclust/template.offline/class +++ b/data/bitclust/template.offline/class @@ -122,6 +122,7 @@ [_('Private Instance Methods'), ents.private_instance_methods ], [_('Protected Instance Methods'),ents.protected_instance_methods ], [_('Module Functions'), ents.module_functions ], + [_('Redefined Methods'), ents.redefined ], [_('Undefined Methods for Explanation'), ents.nomethod ], [_('Constants'), ents.constants ], [_('Special Variables'), ents.special_variables ,'$']] %> @@ -148,8 +149,8 @@ <% _myself, *ancestors = @entry.ancestors.reject { |c| %w[Object Kernel BasicObject].include?(c.name) } -displayed_instance_methods = Set.new(ents.instance_methods.flat_map(&:names)) -displayed_singleton_methods = Set.new(ents.singleton_methods.flat_map(&:names)) +displayed_instance_methods = Set.new((ents.instance_methods + ents.redefined.select(&:instance_method?)).flat_map(&:names)) +displayed_singleton_methods = Set.new((ents.singleton_methods + ents.redefined.select(&:singleton_method?)).flat_map(&:names)) undefined_methods = @entry.partitioned_entries.undefined undefined_instance_methods = undefined_methods.select(&:instance_method?) undefined_singleton_methods = undefined_methods.select(&:singleton_method?) diff --git a/data/bitclust/template/class b/data/bitclust/template/class index d4a9f67e..845f68f2 100644 --- a/data/bitclust/template/class +++ b/data/bitclust/template/class @@ -114,6 +114,41 @@

<% end %> +<% + [[_('Redefined Methods'), ents.redefined]]\ + .each do |label, entries| + unless entries.empty? %> +<%= headline(label) %> + + + + + + +<% + headline_push + entries.each do |m| + foreach_method_chunk(m.source) do |sigs, src| %> + + + + + +<% + end + end + headline_pop +%> +
<%= _('Signature') %><%= _('Description') %><%= _('Library') %>
+ + <%= sigs.map {|sig| h(sig.friendly_string) }.join("
") %> +
+
<%= compile_rd(src) %><%= library_link(m.library.name) %>
+<% + end + end +%> + <% [[_('Added Methods'), ents.added]]\ .each do |label, entries| diff --git a/lib/bitclust/classentry.rb b/lib/bitclust/classentry.rb index f2a917eb..8eb9222b 100644 --- a/lib/bitclust/classentry.rb +++ b/lib/bitclust/classentry.rb @@ -257,6 +257,7 @@ def add_method(m) :instance_methods, :private_instance_methods, :protected_instance_methods, :module_functions, :constants, :special_variables, + :redefined, :added, :undefined, :nomethod) def partitioned_entries(level = 0) @@ -268,6 +269,7 @@ def partitioned_entries(level = 0) # @type var mf: Array[MethodEntry] # @type var c: Array[MethodEntry] # @type var v: Array[MethodEntry] + # @type var redefined: Array[MethodEntry] # @type var added: Array[MethodEntry] # @type var undefined: Array[MethodEntry] # @type var nomethod: Array[MethodEntry] @@ -275,12 +277,13 @@ def partitioned_entries(level = 0) i = []; ipv = []; ipt = [] mf = [] c = []; v = [] + redefined = [] added = [] undefined = [] nomethod = [] entries(level).sort_by(&:name).each do |m| case m.kind - when :defined, :redefined + when :defined case m.type when :singleton_method (m.public? ? s : spv).push m @@ -297,6 +300,8 @@ def partitioned_entries(level = 0) else raise "must not happen: m.type=#{m.type.inspect} (#{m.inspect})" end + when :redefined + redefined.push m when :added added.push m when :undefined @@ -306,7 +311,7 @@ def partitioned_entries(level = 0) end end # steep:ignore:start - Parts.new(s,spv, i,ipv,ipt, mf, c, v, added, undefined, nomethod) + Parts.new(s,spv, i,ipv,ipt, mf, c, v, redefined, added, undefined, nomethod) # steep:ignore:end end diff --git a/sig/bitclust/classentry.rbs b/sig/bitclust/classentry.rbs index 4dd38340..2544ae99 100644 --- a/sig/bitclust/classentry.rbs +++ b/sig/bitclust/classentry.rbs @@ -98,6 +98,7 @@ module BitClust attr_accessor module_functions: Array[MethodEntry] attr_accessor constants: Array[MethodEntry] attr_accessor special_variables: Array[MethodEntry] + attr_accessor redefined: Array[MethodEntry] attr_accessor added: Array[MethodEntry] attr_accessor undefined: Array[MethodEntry] attr_accessor nomethod: Array[MethodEntry] @@ -106,6 +107,7 @@ module BitClust Array[MethodEntry] instance_methods, Array[MethodEntry] private_instance_methods, Array[MethodEntry] protected_instance_methods, Array[MethodEntry] module_functions, Array[MethodEntry] constants, Array[MethodEntry] special_variables, + Array[MethodEntry] redefined, Array[MethodEntry] added, Array[MethodEntry] undefined, Array[MethodEntry] nomethod) -> void end diff --git a/test/test_class_screen.rb b/test/test_class_screen.rb index be7e32b4..2c149fd1 100644 --- a/test/test_class_screen.rb +++ b/test/test_class_screen.rb @@ -39,6 +39,11 @@ class TestClassScreen < Test::Unit::TestCase --- explanatory_method {: nomethod} 説明のために記載しているメソッドです。 + += redefine Sub +== Instance Methods +--- redefined_instance_method +redefined instance method HERE def setup @@ -93,4 +98,9 @@ def test_ancestor_instance_methods_include_modules assert_include(@html, 'Mixinから継承しているメソッド') assert_include(@html, 'mixin_instance_method') end + + def test_redefined_method_is_listed_in_its_own_section + assert_include(@html, '再定義されたメソッド') + assert_include(@html, 'redefined_instance_method') + end end diff --git a/test/test_entry.rb b/test/test_entry.rb index a8f580c1..c8dd09ed 100644 --- a/test/test_entry.rb +++ b/test/test_entry.rb @@ -163,6 +163,25 @@ def test_nomethod_is_partitioned_separately assert_equal([], parts.instance_methods.map(&:name)) end + def test_redefined_is_partitioned_separately + klass = parse_class(<