LoginSignup
6
1

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-12-24

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

参考

6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1