From 8d02cda60d12e994cd88420ef71a915d5364fe09 Mon Sep 17 00:00:00 2001 From: Maxim Krizhanovski Date: Wed, 29 Jun 2022 17:08:21 +0100 Subject: [PATCH] Fix false negatives when public method is defined after a private one --- ...false_negatives_in_documentation_comment.md | 1 + lib/rubocop.rb | 2 +- lib/rubocop/cop/mixin/def_node.rb | 9 ++------- .../cop/style/documentation_method_spec.rb | 18 ++++++++++++++++++ 4 files changed, 22 insertions(+), 8 deletions(-) create mode 100644 changelog/fix_false_negatives_in_documentation_comment.md 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