diff --git a/changelog/fix_false_negatives_in_documentation_comment.md b/changelog/fix_false_negatives_in_documentation_comment.md new file mode 100644 index 00000000000..9e91defa743 --- /dev/null +++ b/changelog/fix_false_negatives_in_documentation_comment.md @@ -0,0 +1 @@ +* [#10774](https://github.com/rubocop/rubocop/pull/10774): Fix false negatives in `Style/DocumentationMethod` when a public method is defined after a private one. ([@Darhazer][]) diff --git a/lib/rubocop.rb b/lib/rubocop.rb index 83d25c8d8e6..fa353a09d65 100644 --- a/lib/rubocop.rb +++ b/lib/rubocop.rb @@ -72,7 +72,6 @@ require_relative 'rubocop/cop/mixin/configurable_formatting' require_relative 'rubocop/cop/mixin/configurable_naming' require_relative 'rubocop/cop/mixin/configurable_numbering' -require_relative 'rubocop/cop/mixin/def_node' require_relative 'rubocop/cop/mixin/documentation_comment' require_relative 'rubocop/cop/mixin/duplication' require_relative 'rubocop/cop/mixin/range_help' @@ -130,6 +129,7 @@ require_relative 'rubocop/cop/mixin/unused_argument' require_relative 'rubocop/cop/mixin/visibility_help' require_relative 'rubocop/cop/mixin/comments_help' # relies on visibility_help +require_relative 'rubocop/cop/mixin/def_node' # relies on visibility_help require_relative 'rubocop/cop/utils/format_string' diff --git a/lib/rubocop/cop/mixin/def_node.rb b/lib/rubocop/cop/mixin/def_node.rb index 9e35d3e0ebe..9d385e421d3 100644 --- a/lib/rubocop/cop/mixin/def_node.rb +++ b/lib/rubocop/cop/mixin/def_node.rb @@ -5,8 +5,7 @@ module Cop # Common functionality for checking def nodes. module DefNode extend NodePattern::Macros - - NON_PUBLIC_MODIFIERS = %w[private protected].freeze + include VisibilityHelp private @@ -15,11 +14,7 @@ def non_public?(node) end def preceding_non_public_modifier?(node) - stripped_source_upto(node.first_line).any? { |line| NON_PUBLIC_MODIFIERS.include?(line) } - end - - def stripped_source_upto(index) - processed_source[0..index].map(&:strip) + node_visibility(node) != :public end # @!method non_public_modifier?(node) diff --git a/spec/rubocop/cop/style/documentation_method_spec.rb b/spec/rubocop/cop/style/documentation_method_spec.rb index 74223bf18fc..df7dd1c4f8d 100644 --- a/spec/rubocop/cop/style/documentation_method_spec.rb +++ b/spec/rubocop/cop/style/documentation_method_spec.rb @@ -32,6 +32,24 @@ def method; end ^^^^^^^^^^^^^^^ Missing method documentation comment. CODE end + + it 'registers an offense when method is public, but there were private methods before' do + expect_offense(<<~CODE) + class Foo + private + + def baz + end + + public + + def foo + ^^^^^^^ Missing method documentation comment. + puts 'bar' + end + end + CODE + end end context 'when method is private' do