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