pockestrap

Programmer's memo

RuboCop 0.52.0 のCHANGELOGを読む

RuboCop のバージョン 0.52.0 がリリースされました。

https://github.com/bbatsov/rubocop/releases/tag/v0.52.0

めんどいので駆け足で。

TL;DR

追加されたCop

  • Style/StringHashKeys
  • Style/RandomWithOffset
  • Lint/ShadowedArgument
  • Lint/MissingCopEnableDirective
  • Rails/EnvironmentComparison
  • Style/EmptyBlockParameter
  • Style/EmptyLambdaParameter
  • Style/TrailingBodyOnMethodDefinition
  • Rails/InverseOf
  • Style/TrailingMethodEndStatement
  • Gemspec/RequiredRubyVersion
  • Lint/NestedPercentLiteral
  • Gemspec/DuplicatedAssignment
  • Style/ColonMethodDefinition
  • Layout/ClassStructure
  • Rails/CreateTableWithTimestamps
  • Style/ExtendSelf
  • Rails/RedundantReceiverInWithOptions
  • Style/EvalWithLocation
  • Layout/EmptyLinesAroundArguments
  • Layout/SpaceInsideReferenceBrackets
  • Layout/SpaceInsideArrayLiteralBrackets
  • Rails/LexicallyScopedActionFilter
  • Rails/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

github.com

仕事で「これCopにできそうだなー」という事案を発見したのでとりあえずRuboCop-JPにIssueを挙げておいたら、wata727がさくっと対応してくれた。 foo.present? ? foo : nilのようなコードは単純にfoo.presenceで良いので、そう書きましょうと言うCop

Gemspec/DuplicatedAssignment

github.com

これもRuboCop-JPに登録していたら、koicさんが対応してくれた。

Gemspec/RequiredRubyVersion

github.com

これもkoicさんが対応してくれた。

RuboCopのTargetRubyVersionって実はあまり理解されていないのでは、と感じたのでこのCopが欲しいなーと思っていた。 TargetRubyVersionRailsアプリケーションなどの場合はそのアプリケーションが動いているRubyのバージョンをかけばいいから素直で良いのだけど、ライブラリなどの場合は「そのライブラリがサポートする最小のRubyのバージョン」を書かなくてはいけない。 これが周知されている気がしなかったのと、gemspecのバージョンを上げても.rubocop.ymlのバージョンを上げるのは忘れるといったことは容易に想像がつくため、Copとしてあればいいなーと思ってIssueを起票した。

過去のリリース