From 9876f5185c17b585eb9da0ea610d2eb3fc251555 Mon Sep 17 00:00:00 2001 From: Daniel Vandersluis Date: Wed, 22 Jun 2022 12:31:22 -0400 Subject: [PATCH] [Fix #10737] Fix crash in `Style/ConditionalAssignment` with `EnforcedStyle: assign_inside_condition` when op-assigning a variable inside a `resbody`. --- .../fix_fix_crash_in_styleconditionalassignment.md | 1 + lib/rubocop/cop/style/conditional_assignment.rb | 1 + .../conditional_assignment_assign_in_condition_spec.rb | 10 ++++++++++ 3 files changed, 12 insertions(+) create mode 100644 changelog/fix_fix_crash_in_styleconditionalassignment.md diff --git a/changelog/fix_fix_crash_in_styleconditionalassignment.md b/changelog/fix_fix_crash_in_styleconditionalassignment.md new file mode 100644 index 00000000000..5621f7cc3f5 --- /dev/null +++ b/changelog/fix_fix_crash_in_styleconditionalassignment.md @@ -0,0 +1 @@ +* [#10737](https://github.com/rubocop/rubocop/issues/10737): Fix crash in `Style/ConditionalAssignment` with `EnforcedStyle: assign_inside_condition` when op-assigning a variable inside a `resbody`. ([@dvandersluis][]) diff --git a/lib/rubocop/cop/style/conditional_assignment.rb b/lib/rubocop/cop/style/conditional_assignment.rb index 96a421a79da..4456967aef8 100644 --- a/lib/rubocop/cop/style/conditional_assignment.rb +++ b/lib/rubocop/cop/style/conditional_assignment.rb @@ -237,6 +237,7 @@ class ConditionalAssignment < Base ASSIGNMENT_TYPES.each do |type| define_method "on_#{type}" do |node| return if part_of_ignored_node?(node) + return if node.parent&.shorthand_asgn? check_assignment_to_condition(node) end diff --git a/spec/rubocop/cop/style/conditional_assignment_assign_in_condition_spec.rb b/spec/rubocop/cop/style/conditional_assignment_assign_in_condition_spec.rb index 6c0fe9ad8d3..b103a1b7d41 100644 --- a/spec/rubocop/cop/style/conditional_assignment_assign_in_condition_spec.rb +++ b/spec/rubocop/cop/style/conditional_assignment_assign_in_condition_spec.rb @@ -242,6 +242,16 @@ end RUBY end + + it 'does not crash when used inside rescue' do + expect_no_offenses(<<~RUBY) + begin + bar #{assignment} 2 + rescue + bar #{assignment} 1 + end + RUBY + end end shared_examples 'multiline all variable types offense' do |variable|