sbt-tpolecat icon indicating copy to clipboard operation
sbt-tpolecat copied to clipboard

a number of options are being set in (Compile, doc)

Open yurique opened this issue 4 years ago • 12 comments

sbt> show doc / scalacOptions
[info] * -encoding
[info] * utf8
[info] * -deprecation
[info] * -explaintypes
[info] * -feature
[info] * -language:existentials
[info] * -language:experimental.macros
[info] * -language:higherKinds
[info] * -language:implicitConversions
[info] * -unchecked
[info] * -Xcheckinit
[info] * -Xfatal-warnings
[info] * -Xlint:adapted-args
[info] * -Xlint:by-name-right-associative
[info] * -Xlint:constant
[info] * -Xlint:delayedinit-select
[info] * -Xlint:doc-detached
[info] * -Xlint:inaccessible
[info] * -Xlint:infer-any
[info] * -Xlint:missing-interpolator
[info] * -Xlint:nullary-override
[info] * -Xlint:nullary-unit
[info] * -Xlint:option-implicit
[info] * -Xlint:package-object-classes
[info] * -Xlint:poly-implicit-overload
[info] * -Xlint:private-shadow
[info] * -Xlint:stars-align
[info] * -Xlint:type-parameter-shadow
[info] * -Xlint:unsound-match
[info] * -Yno-adapted-args
[info] * -Ywarn-dead-code
[info] * -Ywarn-extra-implicit
[info] * -Ywarn-nullary-override
[info] * -Ywarn-nullary-unit
[info] * -Ywarn-numeric-widen
[info] * -Ywarn-unused:implicits
[info] * -Ywarn-unused:imports
[info] * -Ywarn-unused:locals
[info] * -Ywarn-unused:params
[info] * -Ywarn-unused:patvars
[info] * -Ywarn-unused:privates
[info] * -Ypartial-unification
[info] * -Xplugin:/Users/yurique/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/scala-js/scalajs-compiler_2.12.12/1.3.1/scalajs-compiler_2.12.12-1.3.1.jar

when publishing, this results in warnings:

[warn] bad option '-scalajs' was ignored
[warn] bad option '-deprecation' was ignored
[warn] bad option '-explain-types' was ignored
[warn] bad option '-explain' was ignored
[warn] bad option '-feature' was ignored
[warn] bad option '-language:existentials,experimental.macros,higherKinds,implicitConversions' was ignored
[warn] bad option '-unchecked' was ignored
[warn] bad option '-Xfatal-warnings' was ignored
[warn] bad option '-Ykind-projector' was ignored
[warn] bad option '-from-tasty' was ignored
[warn] bad option '-no-link-warnings' was ignored
[warn] Setting -encoding is currently not supported.

without the plugin:

sbt> show doc / scalacOptions
[info] * -Xplugin:/Users/yurique/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/scala-js/scalajs-compiler_2.13.4/1.3.1/scalajs-compiler_2.13.4-1.3.1.jar

yurique avatar Jan 18 '21 02:01 yurique

I noticed this too. Needs:

    scalacOptions in (Compile, doc) ~= (_.filterNot(
      Set(
        "-scalajs",
        "-deprecation",
        "-explain-types",
        "-explain",
        "-feature",
        "-language:existentials,experimental.macros,higherKinds,implicitConversions",
        "-unchecked",
        "-Xfatal-warnings",
        "-Ykind-projector",
        "-from-tasty",
        "-encoding",
        "utf8"
      )
    ))

Thank you for this fix Yurique.

solarmosaic-kflorence avatar Jan 19 '21 21:01 solarmosaic-kflorence

FYI we are now using the https://github.com/ThoughtWorksInc/sbt-api-mappings plugin and have been able to reduce our necessary configuration to just:

Compile / doc / scalacOptions += "-no-link-warnings"

solarmosaic-kflorence avatar May 21 '21 21:05 solarmosaic-kflorence

I wonder if we can ask an sbt expert like @eed3si9n about this one?

At the moment this plugin simply sets scalacOptions without reference to any specific scope.

It seems like the best solution to this is to set those options only in the compile task, but I don't know enough about how sbt works to know whether that would prevent these options from being applied in other tasks that users would currently expect them to be applied to.

Are there other tasks than compile and doc that are relevant for scalacOptions?

DavidGregory084 avatar Feb 18 '22 13:02 DavidGregory084

The plugin currently appends to unscoped scalacOptions or Zero / Zero / Zero / scalacOptions. As long as other scoped usages keep appending using += your settings will be picked up.

The three major usages of scalacOptions are: <Config>/compile/scalacOptions, <Config>/doc/scalacOptions, and <Config>/console/scalacOptions where <Config> may be Compile, Test, or some custom dependency configuration.

Looks like the plugin already handles Compile / console / scalacOptions and Test / console / scalacOptions. You could probably take a similar approach with Compile / doc / scalacOptions and Test / doc / scalacOptions.

If you only append to Compile / compile / scalacOptions, then Compile / doc and Compile / console won't get the flags, which might be ok. It would also mean that compile task in custom dependency configurations like IntegrationTest won't also get the flags.

Appending to Zero / compile / scalacOptions likely won't work due to scope axis precedence:

  • Rule 1: Scope axes have the following precedence: the subproject axis, the configuration axis, and then the task axis.

eed3si9n avatar Feb 18 '22 15:02 eed3si9n

I just stumbled across this issue via this project ( github.com/objektwerks/scalajs/blob/master/build.sbt ). To avoid getting this error during sbt clean test ( java.lang.AssertionError: assertion failed: asTerm called on not-a-Term val ), I had to add scalacOptions ++= Seq("-scalajs") to the build.sbt. Apparently sbt-tpolecat was removing the -scalajs option added by the Scalajs plugin ( addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.10.1") ).

objektwerks avatar Jul 27 '22 14:07 objektwerks

@objektwerks looks like you are running into #102

DavidGregory084 avatar Jul 28 '22 12:07 DavidGregory084

Very well, then.:) I'll repost the above to #102. Should I remove the above post? Thanks!

objektwerks avatar Jul 28 '22 14:07 objektwerks

No that's ok, it's good to see the history of these bugs and the underlying discussion on the tickets :D

DavidGregory084 avatar Jul 28 '22 14:07 DavidGregory084

I've recently been having issues with doc command and I think -encoding utf8 is getting garbled with other scalac arguments. There's also another -encoding UTF-8 higher up which looks like it's correct. It's in there but getting garbled I think:

IJ]last Compile/doc
[info] Main Scala API documentation to /Users/myuser/projects/my-gh-org/my-project/target/scala-2.13/api...
[debug] Returning already retrieved and compiled bridge: /Users/myuser/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/scala2-sbt-bridge/2.13.13/scala2-sbt-bridge-2.13.13.jar.
[debug] Calling Scaladoc with arguments:
[debug] 	-d
[debug] 	/Users/myuser/projects/my-gh-org/my-project/target/scala-2.13/api
[debug] 	-release
[debug] 	9
[debug] 	-encoding
[debug] 	UTF-8
[debug] 	-explaintypes
[debug] 	-feature
[debug] 	-language:existentials
[debug] 	-language:experimental.macros
[debug] 	-language:higherKinds
[debug] 	-language:implicitConversions
[debug] 	-unchecked
[debug] 	-Xcheckinit
[debug] 	-Xlint:adapted-args
[debug] 	-Xlint:constant
[debug] 	-Xlint:delayedinit-select
[debug] 	-Xlint:deprecation
[debug] 	-Xlint:doc-detached
[debug] 	-Xlint:inaccessible
[debug] 	-Xlint:infer-any
[debug] 	-Xlint:missing-interpolator
[debug] 	-Xlint:nullary-unit
[debug] 	-Xlint:option-implicit
[debug] 	-Xlint:package-object-classes
[debug] 	-Xlint:poly-implicit-overload
[debug] 	-Xlint:private-shadow
[debug] 	-Xlint:stars-align
[debug] 	-Xlint:strict-unsealed-patmat
[debug] 	-Xlint:type-parameter-shadow
[debug] 	-Xlint:-byname-implicit
[debug] 	-Wunused:nowarn
[debug] 	-Wdead-code
[debug] 	-Wextra-implicit
[debug] 	-Wnumeric-widen
[debug] 	-Wunused:implicits
[debug] 	-Wunused:explicits
[debug] 	-Wunused:imports
[debug] 	-Wunused:locals
[debug] 	-Wunused:params
[debug] 	-Wunused:patvars
[debug] 	-Wunused:privates
[debug] 	-Wvalue-discard
[debug] 	-Vimplicits
[debug] 	-Vtype-diffs
[debug] 	-Xsource:3-cross
[debug] 	-quickfix:cat=scala3-migration
[debug] 	-Xplugin:target/scala-2.13/compiler_plugins/wartremover_2.13.13-3.1.6.jar
[debug] 	utf8
[debug] 	-Xlint:implicit-recursion
[debug] 	-Xlint:implicit-not-found
[debug] 	-Wnonunit-statement
[debug] 	-bootclasspath
[debug] 	/Users/myuser/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-library/2.13.13/scala-library-2.13.13.jar
[debug] 	-classpath
[debug] 	/Users/myuser/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/typelevel/cats-core_2.13/2.10.0/cats-core_2.13-2.10.0.jar:/Users/myuser/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/scalacheck/scalacheck_2.13/1.17.0/scalacheck_2.13-1.17.0.jar:/Users/myuser/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/github/chocpanda/scalacheck-magnolia_2.13/0.6.0/scalacheck-magnolia_2.13-0.6.0.jar:/Users/myuser/Library/Caches/Coursier/v1/https/sbt.myco.com/com/mycopackage/core_2.13/2.15.15/core_2.13-2.15.15.jar:/Users/myuser/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/typelevel/cats-kernel_2.13/2.10.0/cats-kernel_2.13-2.10.0.jar:/Users/myuser/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/scala-sbt/test-interface/1.0/test-interface-1.0.jar:/Users/myuser/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/propensive/magnolia_2.13/0.17.0/magnolia_2.13-0.17.0.jar:/Users/myuser/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/typelevel/cats-effect_2.13/3.6-0142603/cats-effect_2.13-3.6-0142603.jar:/Users/myuser/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/io/circe/circe-core_2.13/0.14.6/circe-core_2.13-0.14.6.jar:/Users/myuser/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/io/circe/circe-generic_2.13/0.14.6/circe-generic_2.13-0.14.6.jar:/Users/myuser/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/io/circe/circe-generic-extras_2.13/0.14.3/circe-generic-extras_2.13-0.14.3.jar:/Users/myuser/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/io/circe/circe-parser_2.13/0.14.6/circe-parser_2.13-0.14.6.jar:/Users/myuser/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/io/circe/circe-literal_2.13/0.14.6/circe-literal_2.13-0.14.6.jar:/Users/myuser/Library/Caches/Coursier/v1/https/sbt.myco.com/com/mycopackage/shared-proto-scala_2.13/1.0.354/shared-proto-scala_2.13-1.0.354.jar:/Users/myuser/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/propensive/mercator_2.13/0.2.1/mercator_2.13-0.2.1.jar:/Users/myuser/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/typelevel/cats-effect-kernel_2.13/3.6-0142603/cats-effect-kernel_2.13-3.6-0142603.jar:/Users/myuser/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/typelevel/cats-effect-std_2.13/3.6-0142603/cats-effect-std_2.13-3.6-0142603.jar:/Users/myuser/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/io/circe/circe-numbers_2.13/0.14.6/circe-numbers_2.13-0.14.6.jar:/Users/myuser/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/chuusai/shapeless_2.13/2.3.10/shapeless_2.13-2.3.10.jar:/Users/myuser/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/io/circe/circe-jawn_2.13/0.14.6/circe-jawn_2.13-0.14.6.jar:/Users/myuser/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/thesamet/scalapb/scalapb-runtime_2.13/0.11.15/scalapb-runtime_2.13-0.11.15.jar:/Users/myuser/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/thesamet/scalapb/lenses_2.13/0.11.15/lenses_2.13-0.11.15.jar:/Users/myuser/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/typelevel/jawn-parser_2.13/1.4.0/jawn-parser_2.13-1.4.0.jar:/Users/myuser/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/google/protobuf/protobuf-java/3.19.6/protobuf-java-3.19.6.jar:/Users/myuser/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/modules/scala-collection-compat_2.13/2.11.0/scala-collection-compat_2.13-2.11.0.jar
[debug] 	/Users/myuser/projects/my-gh-org/my-project/src/main/scala/com/my_co_package/models/package.scala
[error] IO error while decoding utf8 with UTF-8: utf8 (No such file or directory)
[error] Please try specifying another one using the -encoding option
[error] one error found
[error] Scaladoc generation failed
[error] 	at scala.tools.xsbt.Runner.run(ScaladocBridge.scala:54)
[error] 	at scala.tools.xsbt.ScaladocBridge.run(ScaladocBridge.scala:25)
[error] 	at sbt.internal.inc.AnalyzingCompiler.doc(AnalyzingCompiler.scala:154)
[error] 	at sbt.internal.inc.AnalyzingCompiler.doc(AnalyzingCompiler.scala:133)
[error] 	at sbt.Doc$.$anonfun$scaladoc$1(Doc.scala:53)
[error] 	at sbt.Doc$.$anonfun$scaladoc$1$adapted(Doc.scala:41)
[error] 	at sbt.RawCompileLike$.$anonfun$prepare$1(RawCompileLike.scala:80)
[error] 	at sbt.RawCompileLike$.$anonfun$prepare$1$adapted(RawCompileLike.scala:73)
[error] 	at sbt.RawCompileLike$.$anonfun$cached$4(RawCompileLike.scala:64)
[error] 	at sbt.RawCompileLike$.$anonfun$cached$4$adapted(RawCompileLike.scala:62)
[error] 	at sbt.util.Tracked$.$anonfun$inputChangedW$1(Tracked.scala:220)
[error] 	at sbt.RawCompileLike$.$anonfun$cached$1(RawCompileLike.scala:69)
[error] 	at sbt.RawCompileLike$.$anonfun$cached$1$adapted(RawCompileLike.scala:53)
[error] 	at sbt.Defaults$.$anonfun$docTaskSettings$4(Defaults.scala:2164)
[error] 	at scala.Function1.$anonfun$compose$1(Function1.scala:49)
[error] 	at sbt.internal.util.$tilde$greater.$anonfun$$u2219$1(TypeFunctions.scala:63)
[error] 	at sbt.std.Transform$$anon$4.work(Transform.scala:69)
[error] 	at sbt.Execute.$anonfun$submit$2(Execute.scala:283)
[error] 	at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:24)
[error] 	at sbt.Execute.work(Execute.scala:292)
[error] 	at sbt.Execute.$anonfun$submit$1(Execute.scala:283)
[error] 	at sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:265)
[error] 	at sbt.CompletionService$$anon$2.call(CompletionService.scala:65)
[error] 	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
[error] 	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
[error] 	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
[error] 	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
[error] 	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
[error] 	at java.base/java.lang.Thread.run(Thread.java:833)
[error] (Compile / doc) Scaladoc generation failed

The only workaround I've found is not to publish docs (Compile / packageDoc / publishArtifact := false).

Here's my relevant settings:

tpolecatScalacOptions += ScalacOptions.release(ScalaSettings.scala213ReleaseValue),
    Compile / tpolecatExcludeOptions += ScalacOptions.fatalWarnings
addSbtPlugin("org.typelevel" % "sbt-tpolecat" % "0.5.1")

cc @DavidGregory084

BusyByte avatar Apr 25 '24 13:04 BusyByte

I think I figured out what is going on, we're adding scalac options outside of the plugin. Ignore the above ^^ it is not a problem if you don't do this.

BusyByte avatar Apr 25 '24 15:04 BusyByte