Ruby
bug
RuboCop
lint

rubocop 0.51のStyle/SafeNavigation (&.)の重大バグ

rubocop -aでRailsアプリのソースコードのスタイルを自動修正したところ、重大なバグに遭遇しました。
Style/SafeNavigation (&.)に関するものですが、rubocop 0.51のバグであって、0.52でFIXされました。

元ファイル

before.rb
if user && user.group.admin?
  puts 'userが管理者です'
else
  puts 'userがnilか、管理者ではないです'
end

if user && !user.group.admin?
  puts 'userが普通ユーザです'
else
  puts 'userがnilか、管理者です'
end

Rubocop v0.51の適用結果

after_rubo51.rb
# rubocop v0.51 の変換結果、正しい
if user&.group&.admin?
  puts 'userが管理者です'
else
  puts 'userがnilか、管理者ではないです'
end

# rubocop v0.51は以下の様に間違って変換
if !user&.group&.admin?
  puts 'userが普通ユーザです'
else
  puts 'userがnilか、管理者です'
end

Rubocop v0.52の適用結果

after_rubo52.rb
# rubocop v0.52 の変換結果、v0.51同様で正しい
if user&.group&.admin?
  puts 'userが管理者です'
else
  puts 'userがnilか、管理者ではないです'
end

# rubocop v0.52 は以下を変更しなかった(正しい判断)
if user && !user.group.admin?
  puts 'userが普通ユーザです'
else
  puts 'userがnilか、管理者です'
end

参考