Skip to content

MatchError in presentation compiler on import and recompilations #7844

@majk-p

Description

@majk-p

Error description

Presentation compiler error on freshly imported code, on re-imports and each file change. This can happen at random with 2.12.20 sources, when developing sbt plugin. The affected code is proprietary, the affected file is pretty long, but here's a similar code snippet. The offset in the exception points to the end of the last occurance of secrets: inherit.

private def deployAndTestWorkflowJob(
    envLower: String,
    runTests: Boolean
): String = {

  val deploy = s"""
     |  deploy-$envLower:
     |    needs: synthesize
     |    uses: some/reusable/workflow.yml@v1
     |    with:
     |      strategy: matrix
     |      stage: $envLower
     |      aws-regions: foo
     |      cdk-substage: app
     |      run-codedeploy: false
     |    secrets: inherit
     |""".stripMargin

  val test = s"""
     |  test-$envLower-with-infra:
     |    strategy:
     |      fail-fast: false
     |      matrix:
     |        regionConfigs: bar
     |    needs: [deploy-$envLower]
     |    uses: ./.github/workflows/run-tests.yml
     |    with:
     |      targetEnvironment: $envLower
     |      targetRegion: $${{ matrix.regionConfigs.targetRegion }}
     |      useGlobalEdge: $${{ matrix.regionConfigs.useGlobalEdge }}
     |    secrets: inherit
     |
     |  test-$envLower:
     |    strategy:
     |      fail-fast: false
     |      matrix:
     |        regionConfigs: bar
     |    uses: ./.github/workflows/run-tests.yml
     |    with:
     |      targetEnvironment: $envLower
     |      targetRegion: $${{ matrix.regionConfigs.targetRegion }}
     |      useGlobalEdge: $${{ matrix.regionConfigs.useGlobalEdge }}
     |    secrets: inherit
     |""".stripMargin

  if (runTests) deploy + test else deploy
}

Short summary:

scala.MatchError: (of class scala.reflect.internal.Types$ErrorType$)

Error stacktrace:

scala.reflect.internal.Definitions$DefinitionsClass.fixupAsAnyTrait(Definitions.scala:287)
	scala.reflect.internal.Definitions$DefinitionsClass.$anonfun$ComparableClass$1(Definitions.scala:411)
	scala.reflect.internal.Symbols$Symbol.modifyInfo(Symbols.scala:1572)
	scala.reflect.internal.Definitions$DefinitionsClass.ComparableClass$lzycompute(Definitions.scala:411)
	scala.reflect.internal.Definitions$DefinitionsClass.ComparableClass(Definitions.scala:411)
	scala.reflect.internal.Definitions$DefinitionsClass.hijackedCoreClasses$lzycompute(Definitions.scala:1449)
	scala.reflect.internal.Definitions$DefinitionsClass.hijackedCoreClasses(Definitions.scala:1448)
	scala.reflect.internal.Definitions$DefinitionsClass.symbolsNotPresentInBytecode$lzycompute(Definitions.scala:1457)
	scala.reflect.internal.Definitions$DefinitionsClass.symbolsNotPresentInBytecode(Definitions.scala:1457)
	scala.reflect.internal.Definitions$DefinitionsClass.init(Definitions.scala:1513)
	scala.tools.nsc.Global$Run.<init>(Global.scala:1225)
	scala.tools.nsc.interactive.Global$TyperRun.<init>(Global.scala:1323)
	scala.tools.nsc.interactive.Global.newTyperRun(Global.scala:1346)
	scala.tools.nsc.interactive.Global.<init>(Global.scala:294)
	scala.meta.internal.pc.MetalsGlobal.<init>(MetalsGlobal.scala:49)
	scala.meta.internal.pc.ScalaPresentationCompiler.newCompiler(ScalaPresentationCompiler.scala:627)
	scala.meta.internal.pc.ScalaPresentationCompiler.$anonfun$compilerAccess$1(ScalaPresentationCompiler.scala:147)
	scala.meta.internal.pc.CompilerAccess.loadCompiler(CompilerAccess.scala:40)
	scala.meta.internal.pc.CompilerAccess.retryWithCleanCompiler(CompilerAccess.scala:182)
	scala.meta.internal.pc.CompilerAccess.$anonfun$withSharedCompiler$1(CompilerAccess.scala:155)
	scala.Option.map(Option.scala:230)
	scala.meta.internal.pc.CompilerAccess.withSharedCompiler(CompilerAccess.scala:154)
	scala.meta.internal.pc.CompilerAccess.$anonfun$withInterruptableCompiler$1(CompilerAccess.scala:92)
	scala.meta.internal.pc.CompilerAccess.$anonfun$onCompilerJobQueue$1(CompilerAccess.scala:209)
	scala.meta.internal.pc.CompilerJobQueue$Job.run(CompilerJobQueue.scala:152)
	java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
	java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
	java.base/java.lang.Thread.run(Thread.java:1583)

Compiler options:

-deprecation -encoding UTF-8 -feature -unchecked -Ywarn-numeric-widen -Xlint:_,-unused -Ywarn-unused:_,-nowarn,-privates -Ywarn-dead-code -Ypartial-unification -Ybackend-parallelism 12 -language:_ -Xsource:3 -release 17 -target:jvm-1.8 -Wconf:cat=unused-nowarn:s -Xsource:3 -Xplugin:<HOME>/.cache/coursier/v1/https/repo1.maven.org/maven2/com/olegpy/better-monadic-for_2.12/0.3.1/better-monadic-for_2.12-0.3.1.jar -Xplugin:<HOME>/.cache/coursier/v1/https/repo1.maven.org/maven2/org/typelevel/kind-projector_2.12.20/0.13.3/kind-projector_2.12.20-0.13.3.jar -Yrangepos -Xplugin-require:semanticdb

Expected behaviour:

The file compiles, as it does in sbt.

Additionally, metals produces the error on each file edit, spamming with the same error reports.

Operating system:
Linux

Java version:
21.0.8

Editor/extension:
VSCodium v1.100.3

Metals version:
1.6.2

Extra context or search terms:

Workspace information:

  • Scala versions: 2.12.20
  • Build tools: sbt
  • Build servers: Bloop v2.0.13
  • All build tools in workspace: Bloop; sbt

Metadata

Metadata

Assignees

No one assigned

    Labels

    Scala 2bugSomething that is making a piece of functionality unusable

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions