scala – 如何创建单独的sbt配置或任务以使用WartRemover进行编
WartRemover是一个scalac插件.通常它通过
sbt plugin配置.
我希望能够在我的sbt项目上运行WartRemover作为单独的配置或任务,而不会影响通常的编译运行. 将Wartremover添加到我的plugins.sbt后,我尝试了以下几种变体. lazy val Lint = config("lint").extend(Compile) project("foo"). configs(Lint) settings(inConfig(Lint)(Defaults.compileSettings): _*). settings(inConfig(Linting)(wartremover.wartremoverSettings):_*). settings(inConfig(Linting)(wartremover.wartremoverErrors := wartremover.Warts.all)) 之后scalacOptions大致包含了我在新的lint配置和编译配置中的预期.但是,当我运行lint时:在调试模式下使用sbt进行编译和编译,这样我就可以看到scalac的命令行参数,要么两个命令都导致传递-P:wartremover:…开关.这是令人惊讶的,因为只有lint:scalacOptions显示-P:wartremover:…开关. 如何在不影响compile:compile的情况下创建单独的sbt配置或任务以使用WartRemover进行编译? 解决方法
我觉得你非常接近.以下是一些细节:
> sbt使用Compile配置的更新任务下载库依赖项和编译器插件,该任务使用libraryDependencies设置. addCompilerPlugin是具有CompilerPlugin配置的libraryDependencies的简写. 如果您看到 >使用自动插件(需要sbt 0.13.5)来注入wartremoverSettings,然后从Compile手动删除wartremover编译器插件. 这是第一个选择. 项目/ build.properties sbt.version=0.13.7 项目/ wart.sbt addSbtPlugin("org.brianmckenna" % "sbt-wartremover" % "0.11") build.sbt lazy val Lint = config("lint") extend Compile lazy val foo = project. configs(Lint). settings(inConfig(Lint) { Defaults.compileSettings ++ wartremover.wartremoverSettings ++ Seq( sources in Lint := { val old = (sources in Lint).value old ++ (sources in Compile).value },wartremover.wartremoverErrors := wartremover.Warts.all ) }: _*). settings( scalacOptions in Compile := (scalacOptions in Compile).value filterNot { _ contains "wartremover" } ) 富/ SRC /主/阶/ Foo.scala package foo object Foo extends App { // Won't compile: Inferred type containing Any val any = List(1,true,"three") println("hi") } 样本输出 foo> clean [success] Total time: 0 s,completed Dec 23,2014 9:43:30 PM foo> compile [info] Updating {file:/quick-test/wart/}foo... [info] Resolving org.fusesource.jansi#jansi;1.4 ... [info] Done updating. [info] Compiling 1 Scala source to /quick-test/wart/foo/target/scala-2.10/classes... [success] Total time: 1 s,2014 9:43:33 PM foo> run [info] Running foo.Foo hi [success] Total time: 0 s,2014 9:43:37 PM foo> lint:compile [info] Compiling 1 Scala source to /quick-test/wart/foo/target/scala-2.10/lint-classes... [error] /quick-test/wart/foo/src/main/scala/Foo.scala:5: Inferred type containing Any [error] val any = List(1,"three") [error] ^ [error] /quick-test/wart/foo/src/main/scala/Foo.scala:5: Inferred type containing Any [error] val any = List(1,"three") [error] ^ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |