Skip to content

Commit 36a3a8f

Browse files
committed
Fix #1286: Error on inexistent imports that are not used.
1 parent a27ac72 commit 36a3a8f

File tree

4 files changed

+36
-1
lines changed

4 files changed

+36
-1
lines changed

src/dotty/language.scala

+10
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,16 @@ object language {
44

55
class Feature
66

7+
/** Enable scala.Dynamic */
8+
val dynamics = new Feature
9+
710
/** Keep union types */
811
val keepUnions = new Feature
12+
13+
/** Disable auto tupling */
14+
val noAutoTupling = new Feature
15+
16+
/** Enable Scala 2 compatibility mode */
17+
val Scala2 = new Feature
18+
919
}

src/dotty/tools/dotc/transform/PostTyper.scala

+13
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,19 @@ class PostTyper extends MacroTransform with IdentityDenotTransformer { thisTran
271271
case tpe => tpe
272272
}
273273
)
274+
case Import(expr, selectors) =>
275+
val exprTpe = expr.tpe
276+
def checkIdent(ident: Ident): Unit = {
277+
val name = ident.name.asTermName.encode
278+
if (name != nme.WILDCARD && !exprTpe.member(name).exists && !exprTpe.member(name.toTypeName).exists)
279+
ctx.error(s"${ident.name} is not a member of ${expr.show}", ident.pos)
280+
}
281+
selectors.foreach {
282+
case ident: Ident => checkIdent(ident)
283+
case Pair(ident: Ident, _) => checkIdent(ident)
284+
case _ =>
285+
}
286+
super.transform(tree)
274287
case tree =>
275288
super.transform(tree)
276289
}

tests/neg/i1286.scala

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import scala.idontexist // error
2+
import scala.io.Idontexist // error
3+
4+
import scala.io
5+
import io.Idontexist2 // error
6+
7+
import scala.io.{ AnsiColor, Idontexist3 } // error
8+
9+
import scala.io.{ Idontexist4 => Foo } // error
10+
import scala.io.{ Idontexist5 => _ } // error
11+
12+
object Test

tests/pos/t2913.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ class RichA {
1010
}
1111

1212
object TestNoAutoTupling {
13-
import language.noAutoTupling // try with on and off
13+
import dotty.language.noAutoTupling // try with on and off
1414

1515
implicit def AToRichA(a: A): RichA = new RichA
1616

0 commit comments

Comments
 (0)