Fix an infinite loop at autocorrect for Layout/CaseIndentation
Fix an infinite loop at autocorrect for Layout/CaseIndentation
https://github.com/rubocop/rubocop/pull/10533
以下のrubocop.yml
がある状態で rubocop を走らせると無限ループに陥るケースがあった。
Layout/BeginEndAlignment:
EnforcedStyleAlignWith: start_of_line
AutoCorrect: true
Layout/CaseIndentation:
EnforcedStyle: end
これは常に発生するわけではなく、エッジケースではあるのだが、次のコードのように、when と end が同じ行にあるときに発生していた。
# frozen_string_literal: true
case thing
when 3 then 1
when 2 then 2
else 3 end
Layout/CaseIndentation
が EnforcedStyle: end
で、かつ、else
が end
と同じ行にある場合、
else
のインデントを end
のインデントと一致させようとするが同一行に存在する end とインデントを合わせられることはないので無限にLayout/CaseIndentation
が走るという問題だった。
そこで、when
or else
が end
と同じ行にあり、Layout/CaseIndentation
が EnforcedStyle: end
の場合は、自動補正をしないように修正した。