Skip to content

Commit 4df528f

Browse files
authored
Merge pull request #1573 from koic/fix_an_error_for_rails_select_map
Fix an error for `Rails/SelectMap`
2 parents c273ea4 + 15c4c74 commit 4df528f

3 files changed

Lines changed: 19 additions & 3 deletions

File tree

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
* [#1473](https://github.com/rubocop/rubocop-rails/pull/1473): Fix an error for `Rails/SelectMap` when `select(:column_name).map(&:column_name)` with parentheses. ([@koic][])

lib/rubocop/cop/rails/select_map.rb

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,13 @@ def find_select_node(node, column_name)
5858

5959
# rubocop:disable Metrics/AbcSize
6060
def autocorrect(corrector, select_node, node, preferred_method)
61-
corrector.remove(select_node.parent.loc.dot)
62-
corrector.remove(select_node.loc.selector.begin.join(select_node.source_range.end))
63-
corrector.replace(node.loc.selector.begin.join(node.source_range.end), preferred_method)
61+
if (parent = select_node.parent).loc?(:dot)
62+
corrector.remove(parent.loc.dot)
63+
corrector.remove(select_node.loc.selector.begin.join(select_node.source_range.end))
64+
corrector.replace(node.loc.selector.begin.join(node.source_range.end), preferred_method)
65+
else
66+
corrector.replace(node, "#{select_node.receiver.source}.#{preferred_method}")
67+
end
6468
end
6569
# rubocop:enable Metrics/AbcSize
6670

spec/rubocop/cop/rails/select_map_spec.rb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,17 @@
1212
RUBY
1313
end
1414

15+
it 'registers an offense when using `select(:column_name).map(&:column_name)` with parentheses' do
16+
expect_offense(<<~RUBY)
17+
(Model.select(:column_name)).map(&:column_name)
18+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Use `pluck(:column_name)` instead of `select` with `map`.
19+
RUBY
20+
21+
expect_correction(<<~RUBY)
22+
Model.pluck(:column_name)
23+
RUBY
24+
end
25+
1526
it "registers an offense when using `select('column_name').map(&:column_name)`" do
1627
expect_offense(<<~RUBY)
1728
Model.select('column_name').map(&:column_name)

0 commit comments

Comments
 (0)