doilux’s tech blog

ITに関する備忘録。 DDP : http://doiluxng.hatenablog.com/entry/2018/01/01/195409

sbtでScapegoatを使う

Scapegoatとは

静的コードアナライザでFindBugscheckstyleScalaのScalastyleと同様の機能を提供する((公式)https://github.com/sksamuel/scapegoatより)

なんでScapegoatか

FindbugsScalaで使えるが、Scalaで使うとノイズが入る。 例えば、以下のようなコードで解析すると、バグも検出してくれるけど、それ以外の対応不要と思われるものも検出される。

object Main extends App {
  val test: String = null

  if (test == null) {
    new RuntimeException(test)
  }
}

f:id:doiluxng:20180708234401p:plain

これは以下でも指摘されている。

github.com

類似ツールは

以下参照。ただし、WartRemoverは公式にメンテナンスやめたってかいてあるのでアウト

qiita.com

使い方

plugins.sbtに以下記述

addSbtPlugin("com.sksamuel.scapegoat" %% "sbt-scapegoat" % "1.0.7")

バージョンにもよるかもだけど、build.sbtに以下を記述しないと動かなかった

scapegoatVersion in ThisBuild := "1.3.2"
scalaBinaryVersion in ThisBuild := "2.12"

以下、参考

module not found: com.sksamuel.scapegoat#scalac-scapegoat-plugin_2.12;1.1.0 · Issue #53 · sksamuel/sbt-scapegoat · GitHub

あとはタスク実行

sbt clean scapegoat

target/scala-2.12/scapegoat-report/scapegoat.htmlにレポートができる。

f:id:doiluxng:20180708235230p:plain

throwしてないのはレポートしてくれなかったorz