Skip to content

Commit 0964f07

Browse files
committed
Fix #1286: Error on inexistent imports that are not used.
1 parent f738201 commit 0964f07

File tree

2 files changed

+33
-0
lines changed

2 files changed

+33
-0
lines changed

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

+17
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,23 @@ class PostTyper extends MacroTransform with IdentityDenotTransformer { thisTran
275275
case tpe => tpe
276276
}
277277
)
278+
case Import(expr, selectors) =>
279+
val exprTpe = expr.tpe
280+
def checkIdent(ident: Ident): Unit = {
281+
val name = ident.name.asTermName.encode
282+
def isDottyLanguageFeature = { // TODO Add new language features to scala.language
283+
exprTpe =:= defn.LanguageModuleClass.typeRef &&
284+
name == nme.noAutoTupling // or any other new feature
285+
}
286+
if (name != nme.WILDCARD && !exprTpe.member(name).exists && !exprTpe.member(name.toTypeName).exists && !isDottyLanguageFeature)
287+
ctx.error(s"${ident.name} is not a member of ${expr.show}", ident.pos)
288+
}
289+
selectors.foreach {
290+
case ident: Ident => checkIdent(ident)
291+
case Thicket((ident: Ident) :: _) => checkIdent(ident)
292+
case _ =>
293+
}
294+
super.transform(tree)
278295
case tree =>
279296
super.transform(tree)
280297
}

tests/neg/i1286.scala

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
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+
import scala.language.dynamics
13+
import scala.language.noAutoTupling
14+
import scala.language.idontexist // error
15+
16+
object Test

0 commit comments

Comments
 (0)