rubocop

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 …

RuboCop Performance 1.5.1 をリリースした

RuboCop Performance 1.5.1 をリリースした。 ユーザー影響のある形で適用しているのは以下の PR で、Performance/StartWith cop と Performance/EndWith cop の偽陰性を解決したもの。 github.com サッとアップデートすると、これまで当該 cop で見つかって…

RuboCop Faker を作った

以前の日記に書いた Faker 2 での破壊的変更となる positional arguments から keyword arguments への移行をサポートする Gem を作った。 github.com RuboCop の 3rd party gem として作っているので、gem i rubocop-faker などして以下のように使う。 非推…

RuboCop Minitest 0.1.0 をリリースした

最初の cop 実装としてもらっていた PR のレビューが終わったのでマージして、RuboCop Minitest 0.1.0 をリリースした。 rubygems.org 現在導入されている Minitest/AssertNil cop は assert_equal(nil, actual) に対して assert_nil(actual) を使うよう Min…

RuboCop Rails 2.3.0 をリリースした

RuboCop Rails 2.3.0 をリリースした。 github.com New features #78: Add new Rails/EnumHash cop. (@fedeagripa, @brunvez, @santib) pocke さんによる提案を Rootstrap 社のオープンソースハッカソンで実装された cop となる。 Happy to have participate…

RuboCop Rails 2.2.1 をリリースした

Rails/TimeZone cop で DateTime まで警告の対象に含んでいたことで困っている声が多かったので、七夕にリリースしていた RuboCop Rails 2.2 系でその auto-correct も改善したバージョン。 github.com いまのところ RuboCop Rails 2.2 系は 7月の Rails/OSS…

RuboCop 0.72がリリースされた

主な変更は以下です。 非互換の変更 Rails cops が削除された 移行期間にしていた RuboCop 0.71 が終わったことから、当初の予定どおり Rails cops が削除されました。 引き続き Rails cops を使う場合の代替は rubocop-rails gem を使うようにしてください…

RuboCop 本体から Rails Cops が外される

次の RuboCop マイナーバージョンアップとなる 0.72 から Rails Cops が外されます。今後 Rails Cops を使う場合は Gemify された rubocop-rails gem を使うことになるため、昨日リリースされた RuboCop 0.71 から警告が出るようにしています。 github.com …

RuboCop 0.69がリリースされた

RuboCop 0.69がリリースされた。このバージョンから Ruby 2.2 以下をサポートから切っているので、サポート対象は Ruby 2.3 以上になる。 あわせて Ruby 2.2 以下のサポートを切った RuboCop Performance 1.3.0 もリリースしておいた。RuboCop RSpec も同様…

RuboCop (>= 0.69) からRuby 2.2サポートを外した

おそらく次のリリースとなる RuboCop 0.69 のリリースで、Ruby 2.2 のサポートを外すことになった。 RuboCop の実装として safe navigation operator や squiggly heredoc など使うようにしているので、構文上も Ruby 2.2 は動かなくなる。 今回サポート対象…

RuboCop Performance 1.2.0 をリリースした

RuboCop Performance 1.2.0 をリリースした。ミネアポリス時間で朝7時前だったので健康的。 RuboCop 0.68 での NodePattern への拡張にともなって、RuboCop Performance 1.1.0 までリグレッションになった以下のようなコードにおける偽陰性の修正を含んでい…

`rubocop` コマンドに `--init` オプションを用意した

rubocop コマンドに --init オプションを用意した。次のリリースとなる RuboCop 0.68 で有効になる予定。 github.com 使い方 % rubocop --init Writing new .rubocop.yml to /private/tmp/example/.rubocop.yml rubocop --init を実行すると、カレントディレ…

RuboCop 本体から Performance Cops が外される

次の RuboCop バージョンとして予定されている 0.68 から Performance Cops が外されます。今後 Performance Cops を使う場合は Gemify された rubocop-performance gem を使うことになるため、RuboCop 0.67 から警告が出るようにしています。 github.com こ…

Rails/OSSパッチ会 (2019年2月)

Rails/OSSパッチ会 (2019年2月) だった。 個人的に今回のパッチ会については、うなすけメンバーがくれている PR について Rails コミッターに意見を伺うのが目的のひとつだった。 github.com 断言できるような回答はないものの、文字列の方が好ましい上で、…

RuboCop 0.65.0 のリリース予定内容

今晩 (2/19) くらいにリリースされる予定である RuboCop 0.65.0 のざっくり内容です。 github.com New features #6126: Add an experimental strict mode to Style/MutableConstant that will freeze all constants, rather than just literals. ([@rrosenbl…