From 8fa11a844140a75abe530efec94c7c5e6874d485 Mon Sep 17 00:00:00 2001 From: Koichi ITO Date: Wed, 29 Jul 2020 04:02:16 +0900 Subject: [PATCH] [Fix #8406] Improve `Style/AccessorGrouping`'s auto-correction ## Summary Fixes #8406. This PR improves `Style/AccessorGrouping`'s auto-correction to remove redundant blank lines. ## Other Information This PR doesn't update to `Cop::Base` to make it clear the difference between the changes. Will be updated with other `Style` cops in different PR. --- CHANGELOG.md | 1 + lib/rubocop/cop/style/accessor_grouping.rb | 16 +++++++++------- spec/rubocop/cop/style/accessor_grouping_spec.rb | 8 -------- 3 files changed, 10 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8153795cece..cc6985421bf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,7 @@ * [#8375](https://github.com/rubocop-hq/rubocop/pull/8375): Fix an infinite loop error for `Style/EmptyMethod`. ([@koic][]) * [#8385](https://github.com/rubocop-hq/rubocop/pull/8385): Remove auto-correction for `Lint/EnsureReturn`. ([@marcandre][]) * [#8391](https://github.com/rubocop-hq/rubocop/issues/8391): Mark `Style/ArrayCoercion` as not safe. ([@marcandre][]) +* [#8406](https://github.com/rubocop-hq/rubocop/issues/8406): Improve `Style/AccessorGrouping`'s auto-correction to remove redundant blank lines. ([@koic][]) ### Changes diff --git a/lib/rubocop/cop/style/accessor_grouping.rb b/lib/rubocop/cop/style/accessor_grouping.rb index 25290de1841..bf5dbfd5580 100644 --- a/lib/rubocop/cop/style/accessor_grouping.rb +++ b/lib/rubocop/cop/style/accessor_grouping.rb @@ -33,6 +33,7 @@ module Style # class AccessorGrouping < Cop include ConfigurableEnforcedStyle + include RangeHelp include VisibilityHelp GROUPED_MSG = 'Group together all `%s` attributes.' @@ -52,7 +53,12 @@ def on_class(node) def autocorrect(node) lambda do |corrector| - corrector.replace(node, correction(node)) + if (preferred_accessors = preferred_accessors(node)) + corrector.replace(node, preferred_accessors) + else + range = range_with_surrounding_space(range: node.loc.expression, side: :left) + corrector.remove(range) + end end end @@ -110,14 +116,10 @@ def message(send_node) format(msg, accessor: send_node.method_name) end - def correction(node) + def preferred_accessors(node) if grouped_style? accessors = sibling_accessors(node) - if node == accessors.first - group_accessors(node, accessors) - else - '' - end + group_accessors(node, accessors) if node == accessors.first else separate_accessors(node) end diff --git a/spec/rubocop/cop/style/accessor_grouping_spec.rb b/spec/rubocop/cop/style/accessor_grouping_spec.rb index 59d8b01a300..03c4772396e 100644 --- a/spec/rubocop/cop/style/accessor_grouping_spec.rb +++ b/spec/rubocop/cop/style/accessor_grouping_spec.rb @@ -25,9 +25,7 @@ class Foo expect_correction(<<~RUBY) class Foo attr_reader :bar1, :bar2, :bar3, :bar4 - attr_accessor :quux - other_macro :zoo end RUBY @@ -61,7 +59,6 @@ class Foo expect_correction(<<~RUBY) class Foo attr_reader :bar1, :bar2, :bar3 - protected attr_accessor :quux @@ -69,10 +66,8 @@ class Foo private attr_reader :baz1, :baz2, :baz4 attr_writer :baz3 - public - other_macro :zoo end RUBY @@ -105,12 +100,10 @@ class Foo class << self attr_reader :baz1, :baz2, :baz3 - private attr_reader :quux1, :quux2 - end end RUBY @@ -160,7 +153,6 @@ class Foo attr_reader :three attr_reader :four, :five - end RUBY end