scala 의 lint tool 에는 대표적으로 Scalastyle, Wartremover, Scalafix 등이 있다.
그 중 Wartremover 에 대해 알아보자.
wart
란 '사마귀' 라는 뜻이다.
사마귀 제거제 라는 이름부터가 lint 를 확실하게 해줄 것 같다.
WartRemover: a flexible scala linter
공식 홈페이지에 scala linter 라고 나와있다.
끔찍한 코드를 제거해서 코드작성시 고통을 덜어준다고 한다.
wartremover 를 설치하려면
project/plugins.sbt
파일에 아래 라인을 추가해 플러그인을 추가해야 한다.
버전은 메이븐 저장소에서 확인 가능하다.
addSbtPlugin("org.wartremover" % "sbt-wartremover" % "3.1.5")
설치는 끝났다. 이제 built.sbt
파일에 lint rule 을 설정할 차례다.
기본적으로 모든 error, warning 은 꺼져있다.
원하는 rule 을 원하는 level 로 사용하기 위해 아래와 같이 룰을 추가해주어야 한다.
wartremoverErrors ++= Warts.unsafe //unsafe 옵션을 error 레벨로 on
wartremoverErrors ++= Warts.all //모든 옵션을 error 레벨로 on
wartremoverWarnings ++= Warts.all //모든 옵션을 warning 레벨로 on
옵션의 커스터마이징을 위해서 아래와 같은 설정도 할 수 있다.
wartremoverErrors ++= Warts.allBut(Wart.Any, Wart.Nothing, Wart.Serializable) // params 로 넘겨진 내용을 제외하고 모두 검사
wartremoverWarnings += Wart.Nothing // 모든 warning off
wartremoverWarnings ++= Seq(Wart.Any, Wart.Serializable) // Seq 안에 있는 옵션들만 on
옵션은 켜고싶지만 특정 코드 라인에 대해서만 린팅을 안하고 싶을 때는 코드 라인 위에 어노테이션을 추가해 끌 수 있다.
@SuppressWarnings(Array("org.wartremover.warts.Var", "org.wartremover.warts.Null"))
var foo = null
build.sbt
파일에 특정 디렉토리를 검사하지 않도록 설정할 수 있다.
wartremoverExcluded += baseDirectory.value / "src" / "main" / "scala" / "SomeFile.scala"
wartremoverExcluded += sourceManaged.value
var, while, return 등을 금지하는 다양한 옵션들이 있다.
모든 옵션들은 공식 문서에서 살펴볼 수 있다.