RuboCop 2.4 系の最初のリリースとなる 2.4.0 をリリースしたので、概要をざっくり記しておきます。
github.com
Rails
部署に新たに追加された cop は以下の4つ。
Rails/ApplicationController
cop
Rails/ApplicationRecord
の Controller 版。
class MyController < ActionController::Base
end
class MyController < ApplicationController
end
Rails/ApplicationMailer
cop
Rails/ApplicationRecord
の Mailer 版。ApplicationMailer
クラス層が導入された Rails 5.0 以上のアプリケーションが検査対象となる。
class MyMailer < ActionMailer::Base
end
class MyMailer < ApplicationMailer
end
Rails/RakeEnvironment
cop
Rails アプリケーションにおける Rake ファイルのタスク定義で :environment
タスクに依存しているか検査する。
task :foo do
end
task foo: :environment do
end
:environment
タスクへの依存を失念するというケースがなるほどの一方で、振る舞いを変える可能性があるため auto-correct はデフォルトで unsafe としている。
Rails/SafeNavigationWithBlank
cop
以下について検査する cop で少し説明が必要なので後述。
do_something if foo&.blank?
do_something unless foo&.blank?
do_something if foo.blank?
do_something unless foo.blank?
これは以下のようにレシーバーが nil の場合に safe navigation operator で blank?
メソッドを呼び出した結果 falsy になるので、意図に反している可能性を示唆する cop となる。
nil.blank?
nil&.blank?
そのため auto-correct はデフォルトで unsafe としている。
Rails/UnknownEnv
の拡張
Rails/UnknownEnv
について以下のケースも検知するようになった。
# bad
Rails.env.proudction?
+Rails.env == 'proudction'
# good
- Rails.env.production?
+ Rails.env == 'production'
Rails/FilePath
cop のデフォルトスタイル変更
このリリースでの大きな変更として Rails/FilePath
のデフォルトの EnforcedStyle
の変更がある。これまでの bad
と good
が反転してデフォルトの EnforcedStyle: slashes
では以下のようになる。
Rails.root.join('app', 'models', 'goober')
File.join(Rails.root, 'app/models/goober')
"#{Rails.root}/app/models/goober"
Rails.root.join('app/models/goober')
もともと Windows 環境でのファイルパスセパレータとの互換を考慮して配列引数で渡しましょうといった流れだったようだが、Rails.root
の戻り値となる Pathname
オブジェクトはファイルパスセパレータに対する環境差異を吸収してくれているので、文字列引数で問題がなかった。また、生成する文字列の数も減らせそう、かつ、引数はひとつで固定されるなどの理由からデフォルトを変更した。これは Rails/OSS パッチ会で松田さんからデフォルト変更の提案があったことがきっかけになっている。
もし従来のスタイルの方が好ましい場合は EnforcedStyle: arguments
を指定してください。
その他に Rails/ReversibleMigration
, Rails/EnumHash
, Rails/Presence
, Rails/SaveBang
といった cop へのバグ修正が含まれています。
エンジョイ!