JUnit の XML フォーマッタが CircleCI 利用時に有用だけれど gem の方がメンテナンスされていなくて、コアで巻き取ってもらえないかというイシューに対応した。
次にリリースされる予定の RuboCop 0.80 から --format junit
オプション (あるいは --format ju
) で使えるようになる。
% rubocop --format junit <?xml version='1.0'?> <testsuites> <testsuite name='rubocop'> <testcase classname='example' name='Style/FrozenStringLiteralComment'> <failure type='Style/FrozenStringLiteralComment' message='Style/FrozenStringLiteralComment: Missing frozen string literal comment.'> /tmp/src/example.rb:1:1 </failure> </testcase> <testcase classname='example' name='Naming/MethodName'> <failure type='Naming/MethodName' message='Naming/MethodName: Use snake_case for method names.'> /tmp/src/example.rb:1:5 </failure> </testcase> <testcase classname='example' name='Lint/DeprecatedClassMethods'> <failure type='Lint/DeprecatedClassMethods' message='Lint/DeprecatedClassMethods: `File.exists?` is deprecated in favor of `File.exist?`.'> /tmp/src/example.rb:2:8 </failure> </testcase> </testsuite> </testsuites>
これまでの JUnit フォーマットプラグインを見たところでは以下のふたつがあり、今回は報告のあったのと利用量が多そうだった前者をベースに組み込んでいる。
master ブランチにマージされているので、次の RuboCop のリリースで入る予定。個人的には JUnit という古来からのフォーマットの活用事例ということは、コアでメンテナンスして良いという大きな判断要素だった。
本体でサポートすることになったので、gem 依存で使っているアプリケーションでは Gemfile 記載の依存を減らせるかなと思います。一方で実装としては Ruby 2.8.0-dev (Ruby 3.0) で添付から外された REXML に依存するので、以降内部的には REXML への依存が入ります。