File tree 3 files changed +13
-4
lines changed 3 files changed +13
-4
lines changed Original file line number Diff line number Diff line change @@ -1835,10 +1835,10 @@ object messages {
1835
1835
}
1836
1836
}
1837
1837
1838
- case class OnlyFunctionsCanBeFollowedByUnderscore (pt : Type )(implicit ctx : Context )
1838
+ case class OnlyFunctionsCanBeFollowedByUnderscore (tp : Type )(implicit ctx : Context )
1839
1839
extends Message (OnlyFunctionsCanBeFollowedByUnderscoreID ) {
1840
1840
val kind = " Syntax"
1841
- val msg = hl " Not a function: $pt : cannot be followed by ${" _" }"
1841
+ val msg = hl " Only function types can be followed by ${" _" } but the current expression has type $tp "
1842
1842
val explanation =
1843
1843
hl """ The syntax ${" x _" } is no longer supported if ${" x" } is not a function.
1844
1844
|To convert to a function value, you need to explicitly write ${" () => x" }"""
Original file line number Diff line number Diff line change @@ -1645,9 +1645,10 @@ class Typer extends Namer
1645
1645
val nestedCtx = ctx.fresh.setNewTyperState()
1646
1646
val res = typed(qual, pt1)(nestedCtx)
1647
1647
res match {
1648
- case res @ closure(_, _, _) =>
1648
+ case closure(_, _, _) =>
1649
1649
case _ =>
1650
- ctx.errorOrMigrationWarning(OnlyFunctionsCanBeFollowedByUnderscore (res.tpe), tree.pos)
1650
+ val recovered = typed(qual)(ctx.fresh.setExploreTyperState())
1651
+ ctx.errorOrMigrationWarning(OnlyFunctionsCanBeFollowedByUnderscore (recovered.tpe.widen), tree.pos)
1651
1652
if (ctx.scala2Mode) {
1652
1653
// Under -rewrite, patch `x _` to `(() => x)`
1653
1654
patch(Position (tree.pos.start), " (() => " )
Original file line number Diff line number Diff line change @@ -72,3 +72,11 @@ scala> val a: iDontExist = 1
72
72
1 | val a: iDontExist = 1
73
73
| ^^^^^^^^^^
74
74
| not found: type iDontExist
75
+ scala> def foo1(x: => Int) = x _
76
+ 1 | def foo1(x: => Int) = x _
77
+ | ^^^
78
+ |Only function types can be followed by _ but the current expression has type Int
79
+ scala> def foo2(x: => Int): () => Int = x _
80
+ 1 | def foo2(x: => Int): () => Int = x _
81
+ | ^^^
82
+ |Only function types can be followed by _ but the current expression has type Int
You can’t perform that action at this time.
0 commit comments