以前作った以下のsbt pluginの0.2.0リリースしました。
https://github.com/xuwei-k/sbt-warning-diff/commit/00f4ec112e3d641c1ba189ec2fe86aa6e4ac23cc
sbt-scalafixは、sbtのTaskとしての値を返してくれません。
scalafixやscalafixAllは InputKey[Unit]
という型になっています。
自作のpluginは、sbtが返してくれた値を使って警告を収集していました。
つまり、sbtの compile
などのTaskは Unit
ではなく CompileAnalysis
というものを返してくれます。
scalafixが返してくれない対策として、自分が考えた限り、何があり得るか?というと
- 1: sbt-scalafix自体にissue報告かpull reqして、値を返してもらうように大改造する
- 2: sbt-scalafix本体のコードはいじらずに、標準出力の結果か何かを無理やりparseする
- 3: sbt-scalafixを経由せずに、独自にscalafixを呼び出す
の3択だったのですが、
理想というか、あるべき姿としては、sbt-scalafixが値を返してくれることが1番嬉しいけれど、 sbt-scalafixが良くも悪くも色々やっていて、その改造が難しそう、仮に出来てpull reqしても、mergeされるか謎だったので、ひとまず諦めました。
標準出力の結果か何かを無理やりparse
も、それはそれで辛そうなので、だったら独自にscalafix呼び出した方がまだマシか???
と考えて、結局その方式でやりました。
制約としては、SyntacticRuleのみサポートで、SemanticRuleは一旦諦めました。
使い方としては、scalafixも収集したい場合は、READMEに書いたように以下の別のsbt plugin
addSbtPlugin("com.github.xuwei-k" % "warning-diff-scalafix-plugin" % "version")
の方を加えれば、既にscalafixの設定がされている場合は、特に追加の設定なしで勝手にscalafixの警告も収集されるはずです。