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

おそらく次のリリースとなる RuboCop 0.69 のリリースで、Ruby 2.2 のサポートを外すことになった。

RuboCop の実装として safe navigation operator や squiggly heredoc など使うようにしているので、構文上も Ruby 2.2 は動かなくなる。

今回サポート対象をどうするかについては以下のイシューがベースになっていて、Ruby 2.3 は様子見をしたいので保留し Ruby 2.2 のみを外した。

github.com

加えて Ruby 2.3 に関する PR が最近来たりなどしてもいたので、しばらくサポートする見込み。

他に特筆しておく点としては Ruby 2.2 を外したことにより、以下の Cop に変更が入る。Ruby 2.2 以前をターゲットにしていた場合は Breaking change になる。

まず Layout/IndentHeredoc cop だが、Ruby 2.2 以下で Rails を有効にしている場合と Ruby 2.3 以上の場合で処理を分けていた auto_detection オプションは、今後必ず Ruby 2.3 以上ので廃止。これまで Ruby 2.3 以上の振る舞いとなっていた squiggly オプションを新たなデフォルトとした。言い換えると Active Support の String#strip_heredocRuby 2.3 以上の <<~ かの判定はなくなり、デフォルトとでは <<~ が選ばれることになる。

次にStyle/FrozenStringLiteralComment cop となるが、Ruby 2.3 以上のときのみに frozen string literal マジックコメントを有効としていた when_needed オプションは廃止して、これまで Ruby 2.3 以上の振る舞いとなっていた always オプションを新たなデフォルトとした。つまり frozen string literal マジックコメントがデフォルトで要求されるようになる。この関係で RuboCop 本体のテストコードの改修が骨だったのは裏話。

あとは流れで squiggly heredoc に関する JRuby の非互換を見つけて jruby/jruby の既存イシューにコメントしていたりした。