tek / splain

better implicit errors for scala
MIT License
370 stars 28 forks source link

Splain breaks Scaladoc #52

Closed cunningdefenestrator closed 3 years ago

cunningdefenestrator commented 3 years ago

Splain appears to break Scaladoc

Minimal reproduction:

  1. Create a seed project with sbt new scala/scala-seed.g8
  2. Add some documentation to the Greeting trait (a top-level description suffices)
  3. Run scaladoc with sbt doc
  4. Note that your Greeting documentation is present
  5. Add Splain 0.5.8 to build.sbt
  6. Re-run scaladoc
  7. Note that your Greeting documentation is now gone

Reproduced here with sbt 1.4.7 and Scala 2.13.4, though I've seen this behavior across several real projects with sbt 1.3.x and Scala 2.12, so it doesn't appear to be compiler/build related.

tek commented 3 years ago

yeah, stuff like this is happening a lot due to the hacky way splain ties into the compiler. the workaround is to merge it into the compiler, so let's hope it happens soon: https://github.com/scala/scala/pull/7785

cunningdefenestrator commented 3 years ago

That's unfortunate. If this is a wontfix, maybe it's worth a note in the documentation that this is a known issue? It was quite baffling when I first encountered this.

tek commented 3 years ago

sure thing!

tek commented 3 years ago

fixed by merge of https://github.com/scala/scala/pull/7785

steinybot commented 2 years ago

@tek When you say fixed do you mean that this should no longer happen when using splain or do you mean that now that it is in scalac we don't need to use splain?

I'd like to still use the experimental features of splain such as diverging implicits and I'm getting this error:

sbt:stable-slinky> doc
[info] Main Scala API documentation to /Users/jason/src/goodcover/stable-slinky/target/scala-2.13/api...
[error] stack trace is suppressed; run last Compile / doc for the full output
[error] (Compile / doc) java.lang.reflect.InvocationTargetException
[error] Total time: 1 s, completed 9/07/2022, 12:35:15 pm
sbt:stable-slinky> last
[debug] > Exec(doc, Some(83a20cc8-0007-40c9-a7b3-2abb5870d5f6), Some(CommandSource(console0)))
[debug] Evaluating tasks: Compile / doc
[debug] Running task... Cancel: Signal, check cycles: false, forcegc: true
[info] Main Scala API documentation to /Users/jason/src/goodcover/stable-slinky/target/scala-2.13/api...
[debug] Forcing garbage collection...
[error] java.lang.NullPointerException: Cannot invoke "scala.tools.nsc.typechecker.Analyzer.packageObjects()" because "old" is null
[error]     at splain.SplainAnalyzerShim.migrateFrom(SplainAnalyzerShim.scala:11)
[error]     at splain.SplainAnalyzerShim.migrateFrom$(SplainAnalyzerShim.scala:8)
[error]     at splain.SplainAnalyzer.migrateFrom(SplainAnalyzer.scala:5)
[error]     at splain.SplainPlugin.<init>(SplainPlugin.scala:41)
[error]     at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
[error]     at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
[error]     at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
[error]     at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
[error]     at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
[error]     at scala.tools.nsc.plugins.Plugin$.instantiate(Plugin.scala:178)
[error]     at scala.tools.nsc.plugins.Plugins.$anonfun$loadRoughPluginsList$10(Plugins.scala:56)
[error]     at scala.tools.nsc.plugins.Plugins.loadRoughPluginsList(Plugins.scala:56)
[error]     at scala.tools.nsc.plugins.Plugins.loadRoughPluginsList$(Plugins.scala:36)
[error]     at scala.tools.nsc.Global.loadRoughPluginsList(Global.scala:45)
[error]     at scala.tools.nsc.Global.roughPluginsList$lzycompute(Global.scala:45)
[error]     at scala.tools.nsc.Global.roughPluginsList(Global.scala:45)
[error]     at scala.tools.nsc.plugins.Plugins.loadPlugins(Plugins.scala:140)
[error]     at scala.tools.nsc.plugins.Plugins.loadPlugins$(Plugins.scala:115)
[error]     at scala.tools.nsc.Global.loadPlugins(Global.scala:45)
[error]     at scala.tools.nsc.Global.plugins$lzycompute(Global.scala:45)
[error]     at scala.tools.nsc.Global.plugins(Global.scala:45)
[error]     at scala.tools.nsc.plugins.Plugins.computePluginPhases(Plugins.scala:167)
[error]     at scala.tools.nsc.plugins.Plugins.computePluginPhases$(Plugins.scala:166)
[error]     at scala.tools.nsc.Global.computePluginPhases(Global.scala:45)
[error]     at scala.tools.nsc.Global.computePhaseDescriptors(Global.scala:729)
[error]     at scala.tools.nsc.Global.phaseDescriptors$lzycompute(Global.scala:734)
[error]     at scala.tools.nsc.Global.phaseDescriptors(Global.scala:734)
[error]     at scala.tools.nsc.Global$Run.<init>(Global.scala:1248)
[error]     at scala.tools.nsc.doc.DocFactory.makeUniverse(DocFactory.scala:54)
[error]     at scala.tools.nsc.doc.DocFactory.generate$1(DocFactory.scala:135)
[error]     at scala.tools.nsc.doc.DocFactory.document(DocFactory.scala:142)
[error]     at xsbt.Runner.run(ScaladocBridge.scala:43)
[error]     at xsbt.ScaladocBridge.run(ScaladocBridge.scala:21)
[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:52)
[error]     at sbt.Doc$.$anonfun$scaladoc$1$adapted(Doc.scala:40)
[error]     at sbt.RawCompileLike$.$anonfun$prepare$1(RawCompileLike.scala:79)
[error]     at sbt.RawCompileLike$.$anonfun$prepare$1$adapted(RawCompileLike.scala:72)
[error]     at sbt.RawCompileLike$.$anonfun$cached$4(RawCompileLike.scala:63)
[error]     at sbt.RawCompileLike$.$anonfun$cached$4$adapted(RawCompileLike.scala:61)
[error]     at sbt.util.Tracked$.$anonfun$inputChangedW$1(Tracked.scala:219)
[error]     at sbt.RawCompileLike$.$anonfun$cached$1(RawCompileLike.scala:68)
[error]     at sbt.RawCompileLike$.$anonfun$cached$1$adapted(RawCompileLike.scala:52)
[error]     at sbt.Defaults$.$anonfun$docTaskSettings$4(Defaults.scala:2159)
[error]     at scala.Function1.$anonfun$compose$1(Function1.scala:49)
[error]     at sbt.internal.util.$tilde$greater.$anonfun$$u2219$1(TypeFunctions.scala:62)
[error]     at sbt.std.Transform$$anon$4.work(Transform.scala:68)
[error]     at sbt.Execute.$anonfun$submit$2(Execute.scala:282)
[error]     at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:23)
[error]     at sbt.Execute.work(Execute.scala:291)
[error]     at sbt.Execute.$anonfun$submit$1(Execute.scala:282)
[error]     at sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:265)
[error]     at sbt.CompletionService$$anon$2.call(CompletionService.scala:64)
[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) java.lang.reflect.InvocationTargetException
[error] Total time: 1 s, completed 9/07/2022, 12:35:15 pm
[debug] > Exec(shell, None, None)