From cbdd9c7f743764e6df45aec2cc90f37c66fafdeb Mon Sep 17 00:00:00 2001 From: Daniel Vandersluis Date: Tue, 10 Aug 2021 16:19:06 -0400 Subject: [PATCH] [Fix #7422] Treat `casgn` nodes like other assignment nodes in `Layout/SpaceAroundOperators`. --- ...treat_casgn_nodes_like_other_assignment.md | 1 + .../cop/layout/space_around_operators.rb | 9 ++++++- .../cop/layout/space_around_operators_spec.rb | 24 +++++++++++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 changelog/fix_treat_casgn_nodes_like_other_assignment.md diff --git a/changelog/fix_treat_casgn_nodes_like_other_assignment.md b/changelog/fix_treat_casgn_nodes_like_other_assignment.md new file mode 100644 index 00000000000..fbbcda4b721 --- /dev/null +++ b/changelog/fix_treat_casgn_nodes_like_other_assignment.md @@ -0,0 +1 @@ +* [#7422](https://github.com/rubocop/rubocop/issues/7422): Treat constant assignment like other assignment in `Layout/SpaceAroundOperators`. ([@dvandersluis][]) diff --git a/lib/rubocop/cop/layout/space_around_operators.rb b/lib/rubocop/cop/layout/space_around_operators.rb index e03d57b9116..6390242508b 100644 --- a/lib/rubocop/cop/layout/space_around_operators.rb +++ b/lib/rubocop/cop/layout/space_around_operators.rb @@ -108,6 +108,14 @@ def on_assignment(node) check_operator(:assignment, node.loc.operator, rhs.source_range) end + def on_casgn(node) + _, _, right, = *node + + return unless right + + check_operator(:assignment, node.loc.operator, right.source_range) + end + def on_binary(node) _, rhs, = *node @@ -134,7 +142,6 @@ def on_match_pattern(node) alias on_and on_binary alias on_lvasgn on_assignment alias on_masgn on_assignment - alias on_casgn on_special_asgn alias on_ivasgn on_assignment alias on_cvasgn on_assignment alias on_gvasgn on_assignment diff --git a/spec/rubocop/cop/layout/space_around_operators_spec.rb b/spec/rubocop/cop/layout/space_around_operators_spec.rb index a2fa14295d1..a5ae503811e 100644 --- a/spec/rubocop/cop/layout/space_around_operators_spec.rb +++ b/spec/rubocop/cop/layout/space_around_operators_spec.rb @@ -955,4 +955,28 @@ class Foo < Bar RUBY end end + + describe 'when Layout/ExtraSpacing has `ForceEqualSignAlignment` configured to true' do + let(:other_cops) do + { 'Layout/ExtraSpacing' => { 'Enabled' => true, 'ForceEqualSignAlignment' => true } } + end + + it 'allows variables to be aligned' do + expect_no_offenses(<<~RUBY) + first = { + x: y + }.freeze + second = true + RUBY + end + + it 'allows constants to be aligned' do + expect_no_offenses(<<~RUBY) + FIRST = { + x: y + }.freeze + SECOND = true + RUBY + end + end end