rubocop

RuboCop 1.30 で非推奨になった自動修正オプション名

RuboCop 1.30 で、自動修正する際のオプションである --auto-correct と --auto-correct-all は非推奨になり、それぞれ --autocorrect と --autocorrect-all になりました。 変更対象のオプション名は long name のみで、short name である -a と -A に変更…

RuboCopの解析バージョンサポートを見直した

RuboCop は Ruby の EOL バージョンについて、EOL の 1年後までサポートしています。 RuboCop の Ruby バージョンサポートといった時に「ランタイムバージョン」と「解析バージョン」の 2 つがあり、このエントリを書いている時点の最新 RuboCop 1.30 リリー…

`Lint/InheritException` copにテコ入れした

Standard gem でのイシューについてジャスティンからメンションをもらったのがきっかけで、Lint/InheritException がいろいろとだったのでテコ入れした。対象となる以下の PR に書いていることのサマリーとなる。 https://github.com/rubocop/rubocop/pull/1…

RuboCop 1.24.0 と Ruby 3.1 対応

RuboCop 1.24.0 がリリースされました。 github.com このリリースでは Ruby 3.1 のリリースに先行して、いくつかの Ruby 3.1 対応が入っています。 RuboCop の Ruby 3.1 対応の主だったものについて、ユーザー影響のありそうなものをピックアップして記して…

`String#split`と`String#chars`の小咄

最近、String#split と String#chars まわりの Cop をメンテナンスしたり実装した際の、それらメソッドに関する知見を書き残しておきます。 String#split の小咄 RuboCop Performance に string.split(/re/) より string.split('re') の方が速いので、Cop に…

RuboCop Performance 1.10 をリリースした

RuboCop Performance 1.10 をリリースした。 JST で 3月1日に 1.10.0 をリリースして、3月2日に 1.10.1 をバグフィックスリリースした。以下、2つの新 Cop が目玉です。 Performance/RedundantSplitRegexpArgument cop 機能リクエストがあがっていた Cop を…

RuboCopのGitHubオーガニゼーションがrubocopになった

「RuboCopのGitHubオーガニゼーションがrubocopになった」とか、どういうタイトルだと思うけれど、表題のまま。 歴史的には、bbatsov/rubocop だったものが、RubyKaigi 2018 のときに rubocop-hq/rubocop になって、今回念願の rubocop/rubocop に至ったとい…

RuboCop の Ruby 3.0 対応

構文解析まわりは Ruby 3.0 リリース以前に概ね対応されていると思うので、うまく解析できなかったらバグの可能性があります。その場合の初手としては Parser gem を 3.0.0.0 以上にすると解決するかもしれないので、bundle update parser をしても再現する…

Rails 6.1で生成コードをRuboCop適用済みにする

Rails 6.1 がリリースされたので、y-yagi さんによる待望のパッチが使えるようになった。 PR にあるように使い方はシンプルで、Rails 6.1 での config/environments/development.rb に以下の設定を足す。 config.generators.after_generate do |files| parsa…

RuboCop 1.5で導入された`SuggestExtensions`パラメータ

RuboCop 1.5で導入されたSuggestExtensionsパラメータについて記しておきます。 導入されたパッチは以下です。 github.com たとえば Bundler を使って RSpec を依存指定している一方で、RuboCop RSpec を使っていない場合は、以下のように RSpec に対応した…

RuboCop 1.0 がリリースされた

RuboCop 1.0 がリリースされた。 github.com 自分が最初にリリースを行った 0.93.1 が RuboCop 1.0 より前の最後のリリースになったというのも感慨深いものがあるけれど、さておきついに 1.0 になった。 よい節目なので RuboCop 1.0 と周辺に関するエントリ…

Parser gem のバージョニングと RuboCop の TargetRubyVersion

Ruby 2.7.2 にあわせた Parser 2.7.2.0 がリリースされた。 Parser と RuboCop の繋がりは大きいので、この機会に RuboCop で解析する Ruby のバージョン指定との関係も書いておく。 Parser のバージョニング Parser のバージョニングは、最新の安定版 Ruby …

RubyKaigi Takeout 2020 に登壇した

RubyKaigi Takeout 2020 に登壇した。 本編登壇は RubyKaigi 2018 以来 2 回目。去年 RubyKaigi 2019 では LT 登壇で TracePoint を使うことによって仕込んでしまったバグの話をしていた。 今回のスライドは以下です。 RuboCop 1.0 に向けた話 本編から Rubo…

rubocop -a と rubocop -A オプション

RuboCop 0.87 がリリースされた。 github.com 今回の目玉は rubocop -a コマンドラインオプションへの非互換変更となる。 これまでは rubocop -a オプション (rubocop --auto-correct も同義) を使った場合に、自動修正を備えたすべての Cop が適用されたて…

pluck.uniqをdistinct.pluckに置換する

先日リリースした RuboCop Rails 2.6.0 でバグフィックスされた Rails/UniqBeforePluck についての話。 この Cop は RuboCop Rails に細かな部署があるなら、スタイルではなくパフォーマンスに属するもの。RDBMS から結果を取得したあとに Ruby の uniq で一…

`Layout/LineLength` のデフォルトを 120 にした

RuboCop の LineLength のデフォルトが 80 ではつらいという声はずっと聞いていて、そもそも RuboCop にパッチを送り始めた頃は、いつかこの変更をするのが目標のひとつだった。 今回 3年半越しに実現することができた。現在の最新版の RuboCop 0.84.0 に適…

RuboCopドキュメントのAsciiDoc化

今日は代休をとっていた。RuboCop の方で公式サイトというかランディングページが刷新された。 rubocop.org サイトといえばドキュメントいうわけで、そちらは Markdown から AsciiDoc に置き換えようという動きがあって、ドキュメント生成タスクまわりを Asc…

Railsでcontent_tagメソッドの代わりにtagメソッドに使う

Rails で content_tag メソッドの代わりに tag メソッドに使うように促す cop を次の RuboCop Rails 2.6.0 で導入する予定です。 github.com 以下、bad ケースと good ケースをサンプルから抜粋します。 # bad content_tag(:p, 'Hello world!') content_tag(…

GW にやったこと (2020年)

GW にやったことについて、GitHub から辿れることを中心に書き残しておく。 .rubocop.yml で ERB を書けるようになるパッチをレビューしてマージした。 こんな書き方ができるようになる。 AllCops: Exclude: <% `git status --ignored --porcelain`.lines.gr…

RuboCop Faker 1.0 をリリースした

Faker::Base.unique メソッドが使われている際の false negative に対応した RuboCop Faker 1.0 をリリースした。 rubygems.org もともと Faker 1 系から Faker 2 系へのインタフェースマイグレーションをゴールとした Gem で API としては安定していたので…

RuboCop の Cop 名をマイグレーションする

RuboCop では Cop が所属する先の部署や Cop 名が変更されることがある。 変更された際に所属先の部署や Cop 名をマイグレーションする仕組みが用意されているものについて紹介する。 Migration/DepartmentName cop 現状の RuboCop では部署名が省略されいて…

RuboCop に JUnit フォーマッタを組み込んだ

JUnit の XML フォーマッタが CircleCI 利用時に有用だけれど gem の方がメンテナンスされていなくて、コアで巻き取ってもらえないかというイシューに対応した。 github.com 次にリリースされる予定の RuboCop 0.80 から --format junit オプション (あるい…

Code Climate Test ReporterとSimpleCov 0.18で起きるエラーを回避する

昨日あたりから RuboCop の master で CI が落ちていて、見てみたら Code Climate の cc-test-reporter でエラーが起きていることが原因だった。 $ #!/bin/bash -eo pipefail ./tmp/cc-test-reporter before-build COVERAGE=true bundle exec rake spec ./tm…

Ruby 2.7.0 で導入された Arguments Forwarding

Ruby 2.7.0 で導入された Arguments Forwarding について、RuboCop でスタイル部署の新たな Cop として開発中なので、Cop 開発の過程で得ている知見やらを進捗を記しておきます。 Arguments Forwarding とは def foo(...) といった形で引数への構文拡張がさ…

RuboCop 0.79.0 リリース解説

RuboCop 0.79.0 がリリースされたので、概要をざっくり記しておきます。 github.com 今回は RoboCop 1.0 に向けた新たな Enable オプションへの新たな値 pending が導入されたのと、Ruby 2.7 の初期サポートが含まれたリリースです。 ちなみにレビュー以外で…

RuboCop Performance 1.5.2, RuboCop Rails 2.4.1, RuboCop Minitest 0.5.1 をリリースした

RuboCop Performance 1.5.2, RuboCop Rails 2.4.1, RuboCop Minitest 0.5.1 をまとめてリリースした。 github.com github.com github.com これらの master ブランチにあるバグフィックスについて、年またぎで溜めていてもなのでクリスマスということでリリー…

RuboCop 0.78.0 リリース解説

RuboCop 0.78.0 がリリースされたので、概要をざっくり記しておきます。 github.com 今回は新たな cop の追加と LineLength cop の部署変更が行われたリリースです。 LineLength cop の部署変更については自分が入れた Breaking Change で、LineLength の警…

Rails/OSSパッチ会 2019年11月

Rails/OSSパッチ会 2019年11月を開催した。 いくつか行なっていたことがあり、まずは RuboCop Rails にマイグレーションで decimal 型を指定する際に precision と scale を必須にしないと警告を出す提案が来ていて、Active Record メンテナーの kamipo さん…

RuboCop 0.77.0 リリース解説

RuboCop 0.77.0 がリリースされたので、概要をざっくり記しておきます。 今回は cop 名やオプション名などで、以下の理由から多くの名称変更が加えられたリリースです。 例えば Unneeded と Redundant など cop 名に対してバラバラに使われていた用語を Redu…

RuboCop Rails 2.4.0 リリース解説

RuboCop 2.4 系の最初のリリースとなる 2.4.0 をリリースしたので、概要をざっくり記しておきます。 github.com Rails 部署に新たに追加された cop は以下の4つ。 Rails/ApplicationController cop Rails/ApplicationRecord の Controller 版。 # bad class …