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

Use correct range for error in escape #10740

Open
wants to merge 5 commits into
base: 2.13.x
Choose a base branch
from

Conversation

som-snytt
Copy link
Contributor

@som-snytt som-snytt commented Apr 7, 2024

Fixes scala/bug#12981

This was broken since 2.13.0 FastStringInterpolator. The bad position is just a bad caret for ordinary reporting, but causes downstream errors for other tooling.

@scala-jenkins scala-jenkins added this to the 2.13.15 milestone Apr 7, 2024
@som-snytt
Copy link
Contributor Author

som-snytt commented Apr 7, 2024

Apparently, the invariant, that point is in range, is not enforced.

I expected start <= point < end, but "zero extent" ranges are typical, also in dotty spans.

Splitting this commit into the pos fix for interpolator (plus gratuitous refactoring), then the tweak that you can request a spanning pos to include your default.point; otherwise a default.point out of range is ignored.

The tweaks improve point positioning, but as noted on the ancient PR for NamesDefault, it's difficult to code defensively because it's easy to accidentally derive a range via offsetpos.withStart. This PR is not ambitious because of likely interactions with tooling.

For example, NamePos gives the wrong position to a var x under -Yrangepos:false. Perhaps the option to turn off range positioning should be deprecated.

@som-snytt som-snytt force-pushed the issue/12981-error-pos-bloop branch 7 times, most recently from 772bb9f to ee24067 Compare April 13, 2024 22:12
@som-snytt
Copy link
Contributor Author

At any phase.

[info] [info] welcome to sbt 1.9.9 (Oracle Corporation Java 1.8.0_332)
[info] [info] loading project definition from /tmp/sbt_612ad334/project
[info] [info] loading settings for project sbt_612ad334 from common.sbt ...
[info] [info] set current project to sbt_612ad334 (in build file:/tmp/sbt_612ad334/)
[info] [info] compiling 2 Scala sources to /tmp/sbt_612ad334/target/classes ...
[info] [error] ## Exception when compiling 2 sources to /tmp/sbt_612ad334/target/classes
[info] [error] java.lang.NoClassDefFoundError: scala/collection/Seq$
[info] [error] scala.reflect.internal.Definitions$DefinitionsClass.Collection_SeqModule$lzycompute(Definitions.scala:507)
[info] [error] scala.reflect.internal.Definitions$DefinitionsClass.Collection_SeqModule(Definitions.scala:507)
[info] [error] scala.reflect.internal.Definitions$DefinitionsClass$RunDefinitions.Seq_apply$lzycompute(Definitions.scala:1735)
[info] [error] scala.reflect.internal.Definitions$DefinitionsClass$RunDefinitions.Seq_apply(Definitions.scala:1733)
[info] [error] scala.reflect.internal.Definitions$DefinitionsClass$RunDefinitions.isSeqApply(Definitions.scala:1762)
[info] [error] scala.tools.nsc.transform.CleanUp$CleanUpTransformer.transformApply(CleanUp.scala:558)
[info] [error] scala.tools.nsc.transform.CleanUp$CleanUpTransformer.transform(CleanUp.scala:726)
[info] [error] scala.tools.nsc.transform.CleanUp$CleanUpTransformer.transform(CleanUp.scala:37)
[info] [error] scala.reflect.api.Trees$Transformer.$anonfun$transformStats$1(Trees.scala:2625)
[info] [error] scala.reflect.api.Trees$Transformer.transformStats(Trees.scala:2623)
[info] [error] scala.reflect.internal.Trees$Block.transform(Trees.scala:558)
[info] [error] scala.reflect.internal.Trees$InternalTransformer.transform(Trees.scala:1489)
[info] [error] scala.tools.nsc.transform.CleanUp$CleanUpTransformer.transform(CleanUp.scala:732)
[info] [error] scala.tools.nsc.transform.CleanUp$CleanUpTransformer.transform(CleanUp.scala:37)
[info] [error] scala.reflect.internal.Trees$Assign.transform(Trees.scala:659)
[info] [error] scala.reflect.internal.Trees$InternalTransformer.transform(Trees.scala:1489)
[info] [error] scala.tools.nsc.transform.CleanUp$CleanUpTransformer.transform(CleanUp.scala:732)
[info] [error] scala.tools.nsc.transform.CleanUp$CleanUpTransformer.transform(CleanUp.scala:37)
[info] [error] scala.reflect.api.Trees$Transformer.$anonfun$transformStats$1(Trees.scala:2625)
[info] [error] scala.reflect.api.Trees$Transformer.transformStats(Trees.scala:2623)
[info] [error] scala.reflect.internal.Trees$Block.transform(Trees.scala:558)
[info] [error] scala.reflect.internal.Trees$InternalTransformer.transform(Trees.scala:1489)
[info] [error] scala.tools.nsc.transform.CleanUp$CleanUpTransformer.transform(CleanUp.scala:732)
[info] [error] scala.tools.nsc.transform.CleanUp$CleanUpTransformer.transform(CleanUp.scala:37)
[info] [error] scala.reflect.internal.Trees$DefDef.$anonfun$transform$5(Trees.scala:455)
[info] [error] scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:2636)
[info] [error] scala.reflect.internal.Trees$DefDef.transform(Trees.scala:453)
[info] [error] scala.reflect.internal.Trees$InternalTransformer.transform(Trees.scala:1489)
[info] [error] scala.tools.nsc.transform.CleanUp$CleanUpTransformer.transform(CleanUp.scala:732)
[info] [error] scala.tools.nsc.transform.CleanUp$CleanUpTransformer.transform(CleanUp.scala:37)
[info] [error] scala.reflect.api.Trees$Transformer.transformTrees(Trees.scala:2594)
[info] [error] scala.tools.nsc.transform.CleanUp$CleanUpTransformer.transformTemplate(CleanUp.scala:56)
[info] [error] scala.tools.nsc.transform.CleanUp$CleanUpTransformer.transform(CleanUp.scala:710)
[info] [error] scala.tools.nsc.transform.CleanUp$CleanUpTransformer.transform(CleanUp.scala:37)
[info] [error] scala.reflect.api.Trees$Transformer.transformTemplate(Trees.scala:2598)
[info] [error] scala.reflect.internal.Trees$ClassDef.$anonfun$transform$2(Trees.scala:363)
[info] [error] scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:2636)
[info] [error] scala.reflect.internal.Trees$ClassDef.transform(Trees.scala:362)
[info] [error] scala.reflect.internal.Trees$InternalTransformer.transform(Trees.scala:1489)
[info] [error] scala.tools.nsc.transform.CleanUp$CleanUpTransformer.transform(CleanUp.scala:732)
[info] [error] scala.tools.nsc.transform.CleanUp$CleanUpTransformer.transform(CleanUp.scala:37)
[info] [error] scala.reflect.api.Trees$Transformer.$anonfun$transformStats$1(Trees.scala:2625)
[info] [error] scala.reflect.api.Trees$Transformer.transformStats(Trees.scala:2623)
[info] [error] scala.reflect.internal.Trees$PackageDef.$anonfun$transform$1(Trees.scala:344)
[info] [error] scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:2636)
[info] [error] scala.reflect.internal.Trees$PackageDef.transform(Trees.scala:344)
[info] [error] scala.reflect.internal.Trees$InternalTransformer.transform(Trees.scala:1489)
[info] [error] scala.tools.nsc.transform.CleanUp$CleanUpTransformer.transform(CleanUp.scala:732)
[info] [error] scala.tools.nsc.ast.Trees$Transformer.transformUnit(Trees.scala:182)
[info] [error] scala.tools.nsc.transform.Transform$Phase.apply(Transform.scala:32)
[info] [error] scala.tools.nsc.Global$GlobalPhase.applyPhase(Global.scala:481)
[info] [error] scala.tools.nsc.Global$GlobalPhase.run(Global.scala:428)
[info] [error] scala.tools.nsc.Global$Run.compileUnitsInternal(Global.scala:1559)
[info] [error] scala.tools.nsc.Global$Run.compileUnits(Global.scala:1543)
[info] [error] scala.tools.nsc.Global$Run.compileSources(Global.scala:1535)
[info] [error] scala.tools.nsc.Global$Run.compileFiles(Global.scala:1648)
[info] [error] scala.tools.xsbt.CachedCompiler0.run(CompilerBridge.scala:176)
[info] [error] scala.tools.xsbt.CachedCompiler0.run(CompilerBridge.scala:139)
[info] [error] scala.tools.xsbt.CompilerBridge.run(CompilerBridge.scala:43)
[info] [error] sbt.internal.inc.AnalyzingCompiler.compile(AnalyzingCompiler.scala:91)
[info] [error] sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$7(MixedAnalyzingCompiler.scala:193)
[info] [error] scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
[info] [error] sbt.internal.inc.MixedAnalyzingCompiler.timed(MixedAnalyzingCompiler.scala:248)
[info] [error] sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$4(MixedAnalyzingCompiler.scala:183)
[info] [error] sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$4$adapted(MixedAnalyzingCompiler.scala:163)
[info] [error] sbt.internal.inc.JarUtils$.withPreviousJar(JarUtils.scala:239)
[info] [error] sbt.internal.inc.MixedAnalyzingCompiler.compileScala$1(MixedAnalyzingCompiler.scala:163)
[info] [error] sbt.internal.inc.MixedAnalyzingCompiler.compile(MixedAnalyzingCompiler.scala:211)
[info] [error] sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileInternal$1(IncrementalCompilerImpl.scala:534)
[info] [error] sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileInternal$1$adapted(IncrementalCompilerImpl.scala:534)
[info] [error] sbt.internal.inc.Incremental$.$anonfun$apply$5(Incremental.scala:180)
[info] [error] sbt.internal.inc.Incremental$.$anonfun$apply$5$adapted(Incremental.scala:178)
[info] [error] sbt.internal.inc.Incremental$$anon$2.run(Incremental.scala:464)
[info] [error] sbt.internal.inc.IncrementalCommon$CycleState.next(IncrementalCommon.scala:116)
[info] [error] sbt.internal.inc.IncrementalCommon$$anon$1.next(IncrementalCommon.scala:56)
[info] [error] sbt.internal.inc.IncrementalCommon$$anon$1.next(IncrementalCommon.scala:52)
[info] [error] sbt.internal.inc.IncrementalCommon.cycle(IncrementalCommon.scala:263)
[info] [error] sbt.internal.inc.Incremental$.$anonfun$incrementalCompile$8(Incremental.scala:419)
[info] [error] sbt.internal.inc.Incremental$.withClassfileManager(Incremental.scala:506)
[info] [error] sbt.internal.inc.Incremental$.incrementalCompile(Incremental.scala:406)
[info] [error] sbt.internal.inc.Incremental$.apply(Incremental.scala:172)
[info] [error] sbt.internal.inc.IncrementalCompilerImpl.compileInternal(IncrementalCompilerImpl.scala:534)
[info] [error] sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileIncrementally$1(IncrementalCompilerImpl.scala:488)
[info] [error] sbt.internal.inc.IncrementalCompilerImpl.handleCompilationError(IncrementalCompilerImpl.scala:332)
[info] [error] sbt.internal.inc.IncrementalCompilerImpl.compileIncrementally(IncrementalCompilerImpl.scala:425)
[info] [error] sbt.internal.inc.IncrementalCompilerImpl.compile(IncrementalCompilerImpl.scala:137)
[info] [error] sbt.Defaults$.compileIncrementalTaskImpl(Defaults.scala:2371)
[info] [error] sbt.Defaults$.$anonfun$compileIncrementalTask$2(Defaults.scala:2321)
[info] [error] sbt.internal.server.BspCompileTask$.$anonfun$compute$1(BspCompileTask.scala:31)
[info] [error] sbt.internal.io.Retry$.apply(Retry.scala:47)
[info] [error] sbt.internal.io.Retry$.apply(Retry.scala:29)
[info] [error] sbt.internal.io.Retry$.apply(Retry.scala:24)
[info] [error] sbt.internal.server.BspCompileTask$.compute(BspCompileTask.scala:31)
[info] [error] sbt.Defaults$.$anonfun$compileIncrementalTask$1(Defaults.scala:2319)
[info] [error] scala.Function1.$anonfun$compose$1(Function1.scala:49)
[info] [error] sbt.internal.util.$tilde$greater.$anonfun$$u2219$1(TypeFunctions.scala:63)
[info] [error] sbt.std.Transform$$anon$4.work(Transform.scala:69)
[info] [error] sbt.Execute.$anonfun$submit$2(Execute.scala:283)
[info] [error] sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:24)
[info] [error] sbt.Execute.work(Execute.scala:292)
[info] [error] sbt.Execute.$anonfun$submit$1(Execute.scala:283)
[info] [error] sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:265)
[info] [error] sbt.CompletionService$$anon$2.call(CompletionService.scala:65)
[info] [error] java.util.concurrent.FutureTask.run(FutureTask.java:266)
[info] [error] java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
[info] [error] java.util.concurrent.FutureTask.run(FutureTask.java:266)
[info] [error] java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
[info] [error] java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
[info] [error] java.lang.Thread.run(Thread.java:750)

@som-snytt
Copy link
Contributor Author

/rebuild

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