Skip to content

Commit e0e61bd

Browse files
committed
Match Scala 2 -Yimports behaviour
And add its tests.
1 parent 3259ee8 commit e0e61bd

28 files changed

+195
-8
lines changed

compiler/src/dotty/tools/dotc/core/Definitions.scala

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1558,8 +1558,14 @@ class Definitions {
15581558
private val PredefImportFns: RootRef =
15591559
RootRef(() => ScalaPredefModule.termRef, isPredef=true)
15601560

1561-
@tu private lazy val YimportsImportFns: List[RootRef] = ctx.settings.Yimports.value.map { imp =>
1562-
RootRef(() => requiredPackageRef(imp), isPredef = false)
1561+
@tu private lazy val YimportsImportFns: List[RootRef] = ctx.settings.Yimports.value.map { name =>
1562+
val denot =
1563+
getModuleIfDefined(name).suchThat(_.is(Module)) `orElse`
1564+
getPackageClassIfDefined(name).suchThat(_.is(Package))
1565+
if !denot.exists then
1566+
report.error(s"error: bad preamble import $name")
1567+
val termRef = denot.symbol.termRef
1568+
RootRef(() => termRef)
15631569
}
15641570

15651571
@tu private lazy val JavaRootImportFns: List[RootRef] = JavaImportFns

tests/neg/missing-import.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
class annotation extends Annotation // error
22
val s: String = "str"
3-
val regex: Regex = s.r // error
3+
val regex: Regex = s.r // error

tests/neg/noimports-additional.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
// scalac: -Yno-imports -Yimports:scala.annotation,scala.util.matching
22
class annotation extends Annotation
33
val s: String = "str" // error
4-
val regex: Regex = new Regex("str")
4+
val regex: Regex = new Regex("str")

tests/neg/nopredef-additional.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
// scalac: -Yno-predef -Yimports:java.lang,scala.annotation,scala.util.matching
22
class annotation extends Annotation
33
val s: String = "str"
4-
val regex: Regex = s.r // error
4+
val regex: Regex = s.r // error

tests/neg/nopredef.scala

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
// scalac: -Yno-predef
2-
import Predef.{assert as _}
32
object Test {
43
assert("asdf" == "asdf") // error: not found assert
54
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import Predef.{assert as _}
2+
3+
object Test {
4+
assert("asdf" == "asdf") // error: not found assert
5+
}

tests/neg/yimports-custom.check

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
2+
-- [E006] Not Found Error: tests/neg/yimports-custom/C_2.scala:5:16 ----------------------------------------------------
3+
5 | def greet() = println("hello, world!") // error
4+
| ^^^^^^^
5+
| Not found: println
6+
|
7+
| longer explanation available when compiling with `-explain`

tests/neg/yimports-custom/C_2.scala

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
// scalac: -Yimports:hello.world.minidef
2+
3+
class C {
4+
val v: Numb = Magic
5+
def greet() = println("hello, world!") // error
6+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
2+
package hello.world
3+
4+
object minidef {
5+
type Numb = Int
6+
final val Magic = 42
7+
}

tests/neg/yimports-nojava.check

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
-- [E006] Not Found Error: tests/neg/yimports-nojava.scala:5:16 --------------------------------------------------------
2+
5 | def g() = new Integer(42) // error
3+
| ^^^^^^^
4+
| Not found: type Integer
5+
|
6+
| longer explanation available when compiling with `-explain`
7+
-- [E006] Not Found Error: tests/neg/yimports-nojava.scala:6:16 --------------------------------------------------------
8+
6 | def sleep() = Thread.sleep(42000L) // error
9+
| ^^^^^^
10+
| Not found: Thread
11+
|
12+
| longer explanation available when compiling with `-explain`

0 commit comments

Comments
 (0)