diff --git a/changelog/fix_make_styleidenticalconditionalbranches.md b/changelog/fix_make_styleidenticalconditionalbranches.md new file mode 100644 index 00000000000..e2fd61e4d68 --- /dev/null +++ b/changelog/fix_make_styleidenticalconditionalbranches.md @@ -0,0 +1 @@ +* [#9959](https://github.com/rubocop/rubocop/issues/9959): Make `Style/IdenticalConditionalBranches` able to handle ternary `if`s. ([@dvandersluis][]) diff --git a/lib/rubocop/cop/style/identical_conditional_branches.rb b/lib/rubocop/cop/style/identical_conditional_branches.rb index dfdd226ad2f..0eaf35d3367 100644 --- a/lib/rubocop/cop/style/identical_conditional_branches.rb +++ b/lib/rubocop/cop/style/identical_conditional_branches.rb @@ -134,11 +134,13 @@ def duplicated_expressions?(expressions) expressions.size > 1 && expressions.uniq.one? end - def check_expressions(node, expressions, insert_position) + def check_expressions(node, expressions, insert_position) # rubocop:disable Metrics/MethodLength inserted_expression = false expressions.each do |expression| add_offense(expression) do |corrector| + next if node.if_type? && node.ternary? + range = range_by_whole_lines(expression.source_range, include_final_newline: true) corrector.remove(range) next if inserted_expression diff --git a/spec/rubocop/cop/style/identical_conditional_branches_spec.rb b/spec/rubocop/cop/style/identical_conditional_branches_spec.rb index 61caf99e867..2a9d993727b 100644 --- a/spec/rubocop/cop/style/identical_conditional_branches_spec.rb +++ b/spec/rubocop/cop/style/identical_conditional_branches_spec.rb @@ -382,4 +382,16 @@ RUBY end end + + context 'with a ternary' do + it 'registers an offense' do + expect_offense(<<~RUBY) + x ? y : y + ^ Move `y` out of the conditional. + ^ Move `y` out of the conditional. + RUBY + + expect_no_corrections + end + end end