diff --git a/CHANGELOG.md b/CHANGELOG.md index 1fed20fa3df..398e9904f07 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,7 @@ * [#7647](https://github.com/rubocop-hq/rubocop/issues/7647): Fix an `undefined method on_numblock` error when using Ruby 2.7's numbered parameters. ([@hanachin][]) * [#7675](https://github.com/rubocop-hq/rubocop/issues/7675): Fix a false negative for `Layout/SpaceBeforeFirstArg` when a vertical argument positions are aligned. ([@koic][]) * [#7688](https://github.com/rubocop-hq/rubocop/issues/7688): Fix a bug in `Style/MethodCallWithArgsParentheses` that made `--auto-gen-config` crash. ([@buehmann][]) +* [#7203](https://github.com/rubocop-hq/rubocop/issues/7203): Fix an infinite loop error for `Style/TernaryParentheses` with `Style/RedundantParentheses` when using `EnforcedStyle: require_parentheses_when_complex`. ([@koic][]) ### Changes diff --git a/lib/rubocop/cop/style/ternary_parentheses.rb b/lib/rubocop/cop/style/ternary_parentheses.rb index 4de20aa66e2..3d78db2c136 100644 --- a/lib/rubocop/cop/style/ternary_parentheses.rb +++ b/lib/rubocop/cop/style/ternary_parentheses.rb @@ -162,7 +162,7 @@ def parenthesized?(node) # `RedundantParentheses` cop is enabled, it will cause an infinite loop # as they compete to add and remove the parentheses respectively. def infinite_loop? - require_parentheses? && + (require_parentheses? || require_parentheses_when_complex?) && redundant_parentheses_enabled? end diff --git a/spec/rubocop/cop/style/ternary_parentheses_spec.rb b/spec/rubocop/cop/style/ternary_parentheses_spec.rb index b51d7990790..bd911b6bdae 100644 --- a/spec/rubocop/cop/style/ternary_parentheses_spec.rb +++ b/spec/rubocop/cop/style/ternary_parentheses_spec.rb @@ -414,14 +414,21 @@ context 'when `RedundantParenthesis` would cause an infinite loop' do let(:redundant_parens_enabled) { true } - let(:cop_config) do - { - 'EnforcedStyle' => 'require_parentheses', - 'SupportedStyles' => %w[require_parentheses require_no_parentheses] - } + + context 'when `EnforcedStyle: require_parentheses`' do + let(:cop_config) do + { 'EnforcedStyle' => 'require_parentheses' } + end + + it_behaves_like 'code without offense', 'foo = bar? ? a : b' end - it_behaves_like 'code without offense', - 'foo = bar? ? a : b' + context 'when `EnforcedStyle: require_parentheses_when_complex`' do + let(:cop_config) do + { 'EnforcedStyle' => 'require_parentheses_when_complex' } + end + + it_behaves_like 'code without offense', '!condition.nil? ? foo : bar' + end end end