[Scala] WartRemover

Sangwoo Park·2023년 11월 11일
0

scala 의 lint tool 에는 대표적으로 Scalastyle, Wartremover, Scalafix 등이 있다.

그 중 Wartremover 에 대해 알아보자.

wart 란 '사마귀' 라는 뜻이다.
사마귀 제거제 라는 이름부터가 lint 를 확실하게 해줄 것 같다.

WartRemover: a flexible scala linter

공식 홈페이지에 scala linter 라고 나와있다.
끔찍한 코드를 제거해서 코드작성시 고통을 덜어준다고 한다.

Setup

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 등을 금지하는 다양한 옵션들이 있다.

모든 옵션들은 공식 문서에서 살펴볼 수 있다.

profile
going up

0개의 댓글