RuboCop 0.52.0 のCHANGELOGを読む
RuboCop のバージョン 0.52.0 がリリースされました。
https://github.com/bbatsov/rubocop/releases/tag/v0.52.0
めんどいので駆け足で。
TL;DR
追加されたCop
Style/StringHashKeysStyle/RandomWithOffsetLint/ShadowedArgumentLint/MissingCopEnableDirectiveRails/EnvironmentComparisonStyle/EmptyBlockParameterStyle/EmptyLambdaParameterStyle/TrailingBodyOnMethodDefinitionRails/InverseOfStyle/TrailingMethodEndStatementGemspec/RequiredRubyVersionLint/NestedPercentLiteralGemspec/DuplicatedAssignmentStyle/ColonMethodDefinitionLayout/ClassStructureRails/CreateTableWithTimestampsStyle/ExtendSelf- 多分revertされる https://github.com/bbatsov/rubocop/pull/5233
 
Rails/RedundantReceiverInWithOptionsStyle/EvalWithLocationLayout/EmptyLinesAroundArgumentsLayout/SpaceInsideReferenceBracketsLayout/SpaceInsideArrayLiteralBracketsRails/LexicallyScopedActionFilterRails/Presence
リネームされたCop
Lint/RescueWithoutErrorClass=>Style/RescueStandardError
リネーム、新規追加Copに対応するにはmryを使うと便利です。
$ gem install rubocop -v 0.52.0 $ gem install mry -v 0.52.0.0 $ mry --target 0.52.0 --from 0.51.0 .rubocop.yml
新規追加Cop
特にコメントしておきたいやつについてのみ書きます。
Style/ExtendSelf
これは、すでに全く同じ目的のCopがStyle/ModuleFunctionという名前で存在したので、恐らくrevertされます。 See https://github.com/bbatsov/rubocop/pull/5233
まあ、これを気に実装が見直されていい感じになったりするのでは。
Style/StringHashKeys
https://github.com/bbatsov/rubocop/pull/4946
{"foo" => 'bar'}のような文字列がキーとなったHashにたいして{foo: 'bar'}のようにSymbolをキーにしましょうと怒るCop。
これの二つは意味が違うし、文字列をキーとしなければいけないケースでSymbolを使えと言ってしまう可能性も高いのでデフォルトでは無効になっています。
ナンセンスな警告を気軽に無視できるような環境を持っている人は有効にしてみてもいいのでは、と思っています。例えばSideCIを使っているとか。
Style/EvalWithLocation
私が追加したCopです。 See Style/EvalWithLocation Copを作った - pockestrap
Style/EmptyBlockParameter, Style/EmptyLambdaParameter
私が追加したCopです。 See `Style/EmptyBlockParameter`(と`Style/EmptyLambdaParameter`)を作った - pockestrap
Rails/Presence
仕事で「これCopにできそうだなー」という事案を発見したのでとりあえずRuboCop-JPにIssueを挙げておいたら、wata727がさくっと対応してくれた。
foo.present? ? foo : nilのようなコードは単純にfoo.presenceで良いので、そう書きましょうと言うCop
Gemspec/DuplicatedAssignment
これもRuboCop-JPに登録していたら、koicさんが対応してくれた。
Gemspec/RequiredRubyVersion
これもkoicさんが対応してくれた。
RuboCopのTargetRubyVersionって実はあまり理解されていないのでは、と感じたのでこのCopが欲しいなーと思っていた。
TargetRubyVersionはRailsアプリケーションなどの場合はそのアプリケーションが動いているRubyのバージョンをかけばいいから素直で良いのだけど、ライブラリなどの場合は「そのライブラリがサポートする最小のRubyのバージョン」を書かなくてはいけない。
これが周知されている気がしなかったのと、gemspecのバージョンを上げても.rubocop.ymlのバージョンを上げるのは忘れるといったことは容易に想像がつくため、Copとしてあればいいなーと思ってIssueを起票した。
過去のリリース
- RuboCop 0.51.0 のCHANGELOGを読む - pockestrap
 - RuboCop 0.50.0 のCHANGELOGを読む - pockestrap
 - RuboCop 0.49.0 のCHANGELOGを読む - pockestrap
 - RuboCop 0.48.0 のCHANGELOGを読む - Qiita
 - RuboCop 0.47.0 のCHANGELOGを読む - Qiita
 - RuboCop 0.46.0 のCHANGELOGを読む - SideCI TechBlog
 - RuboCop 0.45.0 のCHANGELOGを読む - SideCI TechBlog
 - RuboCop 0.44.0 / 0.44.1 のCHANGELOGを読む - SideCI TechBlog
 - RuboCop 0.43.0 の CHANGELOG を読む - SideCI TechBlog
 - RuboCop 0.41 / 0.41.1 がリリースされました。 - SideCI TechBlog