[2.x] Specific error message for defining types (#9579)

This commit is contained in:
kenji yoshida 2026-08-13 00:51:25 +09:00 committed by GitHub
parent 0ac15531a8
commit 784d116bd4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 36 additions and 2 deletions

View File

@ -5,8 +5,9 @@ import dotty.tools.dotc.ast
import dotty.tools.dotc.ast.tpd import dotty.tools.dotc.ast.tpd
import dotty.tools.dotc.CompilationUnit import dotty.tools.dotc.CompilationUnit
import dotty.tools.dotc.core.Contexts.{ atPhase, Context } import dotty.tools.dotc.core.Contexts.{ atPhase, Context }
import dotty.tools.dotc.core.{ Flags, NameKinds, Names, Phases, Symbols, Types } import dotty.tools.dotc.core.{ Flags, NameKinds, Names, Phases, Symbols, Types, Constants }
import dotty.tools.dotc.core.Periods.Period import dotty.tools.dotc.core.Periods.Period
import dotty.tools.dotc.reporting.Diagnostic
import dotty.tools.dotc.Driver import dotty.tools.dotc.Driver
import dotty.tools.dotc.Run import dotty.tools.dotc.Run
import dotty.tools.dotc.util.SourceFile import dotty.tools.dotc.util.SourceFile
@ -267,8 +268,41 @@ class Eval(
val run = driver.compiler.newRun val run = driver.compiler.newRun
val source = ev.makeSource(moduleName) val source = ev.makeSource(moduleName)
run.compileSources(source :: Nil) run.compileSources(source :: Nil)
checkError("an error in expression")
val unit = run.units.head val unit = run.units.head
val traverser = new tpd.TreeTraverser {
override def traverse(tree: tpd.Tree)(using Context): Unit = {
tree match {
case x: tpd.TypeDef
if x.name.mangledString == s"${moduleName}${NameTransformer.MODULE_SUFFIX_STRING}" =>
x.rhs match {
case template: tpd.Template =>
template.body.foreach {
case defdef: tpd.DefDef if defdef.name.mangledString == WrapValName =>
defdef.rhs match {
case tpd.Block(
(typeDef: tpd.TypeDef) :: Nil,
ast.untpd.Literal(Constants.Constant(()))
) =>
reporter.report(
Diagnostic.Error(
"Defining types in *.sbt file is not supported",
typeDef.sourcePos
)
)
case _ =>
}
case _ =>
}
case _ =>
}
case _: tpd.PackageDef =>
traverseChildren(tree)
case _ =>
}
}
}
traverser.traverse(unit.tpdTree)
checkError("an error in expression")
val extra: A = ev.extract(run, unit) val extra: A = ev.extract(run, unit)
backingDir.foreach { backing => backingDir.foreach { backing =>
ev.write(extra, cacheFile(backing, moduleName)) ev.write(extra, cacheFile(backing, moduleName))