Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ignoring files doesn't work via. wartremoverExcluded #492

Open
askmrsinh opened this issue Nov 29, 2020 · 6 comments
Open

Ignoring files doesn't work via. wartremoverExcluded #492

askmrsinh opened this issue Nov 29, 2020 · 6 comments

Comments

@askmrsinh
Copy link

I am having a hard time trying to exclude files. As per the docs, I can use wartremoverExcluded.
However this doesn't work:

lazy val wartremoverSettings = Seq(
  wartremoverWarnings in (Compile, compile) ++= Warts.allBut(Wart.Throw),
  wartremoverExcluded ++= Seq(
    sourceManaged.value,
    baseDirectory.value / "common" / "src" / "main" / "scala" / "com" / "tango" / "charlie" / "clients" / "Github.scala"
  )
)

It's a multi project build. What am I doing wrong?

@ksonj
Copy link

ksonj commented Nov 30, 2020

I noticed the same thing in a multi-project build. 2.4.10 appears to be the last version for which this works as expected

@askmrsinh
Copy link
Author

I am on 2.4.10, with this issue.

@iwamatsu0430
Copy link

I solved this problem like this.

Before

wartremoverExcluded += baseDirectory.value / "foo" / "Bar.scala"

After

wartremoverExcluded += (LocalRootProject / baseDirectory).value / "foo" / "Bar.scala"

It looks like base directory was changed. before => after

@sndnv
Copy link

sndnv commented Jan 12, 2021

I am experiencing the same issue with sbt 1.4.6, Scala 2.13.4 and wartremover 2.4.13.

With wartremoverExcluded in (Compile, compile) += sourceManaged.value, scalac is invoked with the following:

[debug] [zinc] Running cached compiler 5204fcec for Scala compiler version 2.13.4
[debug] [zinc] The Scala compiler is invoked with:
[debug] 	-encoding
[debug] 	UTF-8
[debug] 	-unchecked
[debug] 	-deprecation
[debug] 	-feature
[debug] 	-Xcheckinit
[debug] 	-Ywarn-dead-code
[debug] 	-Ywarn-numeric-widen
[debug] 	-Ywarn-unused
[debug] 	-Ywarn-extra-implicit
[debug] 	-Ywarn-unused:implicits
[debug] 	-Xlint:constant
[debug] 	-Xlint:delayedinit-select
[debug] 	-Xlint:doc-detached
[debug] 	-Xlint:inaccessible
[debug] 	-Xlint:infer-any
[debug] 	-Xplugin:target/compiler_plugins/wartremover_2.13.4-2.4.13.jar
[debug] 	-P:wartremover:only-warn-traverser:org.wartremover.warts.AsInstanceOf
[debug] 	-P:wartremover:only-warn-traverser:org.wartremover.warts.DefaultArguments
[debug] 	-P:wartremover:only-warn-traverser:org.wartremover.warts.EitherProjectionPartial
[debug] 	-P:wartremover:only-warn-traverser:org.wartremover.warts.IsInstanceOf
[debug] 	-P:wartremover:only-warn-traverser:org.wartremover.warts.NonUnitStatements
[debug] 	-P:wartremover:only-warn-traverser:org.wartremover.warts.Null
[debug] 	-P:wartremover:only-warn-traverser:org.wartremover.warts.OptionPartial
[debug] 	-P:wartremover:only-warn-traverser:org.wartremover.warts.Product
[debug] 	-P:wartremover:only-warn-traverser:org.wartremover.warts.Return
[debug] 	-P:wartremover:only-warn-traverser:org.wartremover.warts.Serializable
[debug] 	-P:wartremover:only-warn-traverser:org.wartremover.warts.StringPlusAny
[debug] 	-P:wartremover:only-warn-traverser:org.wartremover.warts.Throw
[debug] 	-P:wartremover:only-warn-traverser:org.wartremover.warts.TraversableOps
[debug] 	-P:wartremover:only-warn-traverser:org.wartremover.warts.TryPartial
[debug] 	-P:wartremover:only-warn-traverser:org.wartremover.warts.Var
[debug] 	-bootclasspath
[debug] 	<home dir>/.cache/coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-library/2.13.4/scala-library-2.13.4.jar
[debug] 	-classpath ...

which does not have any -P:wartremover:excluded entries, as I would expect.

If, however, I put s"-P:wartremover:excluded:${(sourceManaged in Compile).value}" in my scalacOptions (and remove wartremoverExcluded += ...) the exclusions start working as expected, the managed code no longer reports warnings and scalac is invoked with:

[debug] [zinc] Running cached compiler 613cdd3e for Scala compiler version 2.13.4
[debug] [zinc] The Scala compiler is invoked with:
[debug] 	-encoding
[debug] 	UTF-8
[debug] 	-unchecked
[debug] 	-deprecation
[debug] 	-feature
[debug] 	-Xcheckinit
[debug] 	-Ywarn-dead-code
[debug] 	-Ywarn-numeric-widen
[debug] 	-Ywarn-unused
[debug] 	-Ywarn-extra-implicit
[debug] 	-Ywarn-unused:implicits
[debug] 	-Xlint:constant
[debug] 	-Xlint:delayedinit-select
[debug] 	-Xlint:doc-detached
[debug] 	-Xlint:inaccessible
[debug] 	-Xlint:infer-any
[debug] 	-P:wartremover:excluded:<home dir>/repos/stasis/client/target/scala-2.13/src_managed/main
[debug] 	-Xplugin:target/compiler_plugins/wartremover_2.13.4-2.4.13.jar
[debug] 	-P:wartremover:only-warn-traverser:org.wartremover.warts.AsInstanceOf
[debug] 	-P:wartremover:only-warn-traverser:org.wartremover.warts.DefaultArguments
[debug] 	-P:wartremover:only-warn-traverser:org.wartremover.warts.EitherProjectionPartial
[debug] 	-P:wartremover:only-warn-traverser:org.wartremover.warts.IsInstanceOf
[debug] 	-P:wartremover:only-warn-traverser:org.wartremover.warts.NonUnitStatements
[debug] 	-P:wartremover:only-warn-traverser:org.wartremover.warts.Null
[debug] 	-P:wartremover:only-warn-traverser:org.wartremover.warts.OptionPartial
[debug] 	-P:wartremover:only-warn-traverser:org.wartremover.warts.Product
[debug] 	-P:wartremover:only-warn-traverser:org.wartremover.warts.Return
[debug] 	-P:wartremover:only-warn-traverser:org.wartremover.warts.Serializable
[debug] 	-P:wartremover:only-warn-traverser:org.wartremover.warts.StringPlusAny
[debug] 	-P:wartremover:only-warn-traverser:org.wartremover.warts.Throw
[debug] 	-P:wartremover:only-warn-traverser:org.wartremover.warts.TraversableOps
[debug] 	-P:wartremover:only-warn-traverser:org.wartremover.warts.TryPartial
[debug] 	-P:wartremover:only-warn-traverser:org.wartremover.warts.Var
[debug] 	-bootclasspath
[debug] 	<home dir>/.cache/coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-library/2.13.4/scala-library-2.13.4.jar
[debug] 	-classpath ...

I've managed to trace the issue to this section of code but I have no idea why this would not work:

    scalacOptions ++= {
      // use relative path
      // https://github.com/sbt/sbt/issues/6027
      autoImport.wartremoverExcluded.value.distinct.map { c =>
        val base = (LocalRootProject / baseDirectory).value
        val x = base.toPath.relativize(c.toPath)
        s"-P:wartremover:excluded:$x"
      }
    }

@ericdotdata
Copy link

The issue is that it shouldn't necessarily be the LocalRootProject if the working directory is say one parent directory up.

I fixed with:

    // TODO: This is a hack to support running via <root>/build.sbt
    //       Ref: https://github.com/wartremover/wartremover/issues/492
    Compile / compile / scalacOptions ++= {
      (Compile / routes).value.map{ _.getAbsoluteFile }.map { file =>
        s"-P:wartremover:excluded:$file"
      }
    },
    //Compile / compile / wartremoverExcluded ++= (Compile / routes).value

@hagay3
Copy link

hagay3 commented Apr 13, 2023

Using the following solution solved the issue for me
In that case, disabling warts for all test sources

    scalacOptions += s"-P:wartremover:excluded:${(Test / scalaSource).value}",

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

No branches or pull requests

6 participants