「scalafixのような」とは
build.sbt
を編集しなくても、input taskで実行するruleを任意の数、動的に指定可能- ローカルのfileのpathや、urlも指定可能
- 動的に
.scala
fileをcompileして、それを実行してくれる - url指定したらそれをダウンロードしてくる
- urlやfileも複数指定可能なので、1 fileで完結せずに相互依存してるものでも(あまりしっかりテストしてないが)原理上動くはず
- ローカルのpathの場合、directory指定すると、そのdirectory直下のScalaファイル全部compileする機能などもつけた
- compile後にどういうruleがあるか?の抽出も勝手に実行する(無理矢理なリフレクションで頑張った)
- 動的にcompileしたものは雑にcacheするようにもして、毎回compileされないようにした
- 動的に
- それらのsbtのshell上でのtab補間もできるだけ実装した
- 結果をerrorにするか?warningにするか?をそれぞれ指定可能にした
- これはscalafixにはない・・・?うろ覚え
sbt-scalafixのinput taskと同じように、引数で
— Kenji Yoshida (@xuwei_k) April 1, 2023
- rule名
- file
- url
などを柔軟に渡してその場でruleをcompileしてwartremover inspectorを実行する機能が大体作れたな pic.twitter.com/TycquGqCln
上記は作成途中のtweetで、撮り直すのが面倒なのでそのまま載せてますが、開発中は wartremoverInspectRun
などとしていましたが、結局scalafixを真似して、単に wartremover
というinputTask名にしました。
https://github.com/wartremover/wartremover/commit/427542d6dab7780604a56909ccfd2e5ec15a58ec
これの注意点というか重要な制限としては、Scala 3のTASTy inspectorに頼ることにしたので、Scala 3でしか動きません。Scala 2では無理です。
Scala 2でも同じようなことをやろうとしたけど、綺麗に実装するのが相当難しかったので一旦諦めました。
ちなみに、以前からTASTy Inspectorで実行する機能自体は入れてありましたが
それが(build.sbtいじってreloadせずとも)より気軽に実行可能になった、外部のruleもその場でcompileしてくれるので、格段に楽になった、ということです。