Skip to content

Commit cc501f3

Browse files
authored
Merge pull request #9982 from dotty-staging/drop-named-typeargs
Disable named type arguments by default
2 parents 8392ad8 + 3e6ec10 commit cc501f3

25 files changed

+41
-9
lines changed

compiler/src/dotty/tools/dotc/config/Feature.scala

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,9 @@ object Feature:
6060
def dependentEnabled(using Context) =
6161
enabled(nme.dependent, defn.LanguageExperimentalModule.moduleClass)
6262

63+
def namedTypeArgsEnabled(using Context) =
64+
enabled(nme.namedTypeArguments, defn.LanguageExperimentalModule.moduleClass)
65+
6366
def scala2ExperimentalMacroEnabled(using Context) =
6467
enabled("macros".toTermName, defn.LanguageExperimentalModule.moduleClass)
6568

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -527,6 +527,7 @@ object StdNames {
527527
val moduleClass : N = "moduleClass"
528528
val name: N = "name"
529529
val nameDollar: N = "$name"
530+
val namedTypeArguments: N = "namedTypeArguments"
530531
val ne: N = "ne"
531532
val newFreeTerm: N = "newFreeTerm"
532533
val newFreeType: N = "newFreeType"

compiler/src/dotty/tools/dotc/typer/Applications.scala

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1057,6 +1057,11 @@ trait Applications extends Compatibility {
10571057

10581058
def typedNamedArgs(args: List[untpd.Tree])(using Context): List[NamedArg] =
10591059
for (arg @ NamedArg(id, argtpt) <- args) yield {
1060+
if !Feature.namedTypeArgsEnabled then
1061+
report.error(
1062+
i"""Named type arguments are experimental,
1063+
|they must be enabled with a `experimental.namedTypeArguments` language import or setting""",
1064+
arg.srcPos)
10601065
val argtpt1 = typedType(argtpt)
10611066
cpy.NamedArg(arg)(id, argtpt1).withType(argtpt1.tpe)
10621067
}

docs/docs/internals/syntax.md

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ SimpleType ::= SimpleLiteral
161161
SimpleType1 ::= id Ident(name)
162162
| Singleton ‘.’ id Select(t, name)
163163
| Singleton ‘.’ ‘type’ SingletonTypeTree(p)
164-
| ‘(’ ArgTypes ‘)’ Tuple(ts)
164+
| ‘(’ Types ‘)’ Tuple(ts)
165165
| Refinement RefinedTypeTree(EmptyTree, refinement)
166166
| ‘$’ ‘{’ Block ‘}’
167167
| SimpleType1 TypeArgs AppliedTypeTree(t, args)
@@ -170,16 +170,13 @@ Singleton ::= SimpleRef
170170
| SimpleLiteral
171171
| Singleton ‘.’ id
172172
-- not yet | Singleton ‘(’ Singletons ‘)’
173-
-- not yet | Singleton ‘[’ ArgTypes ‘]’
173+
-- not yet | Singleton ‘[’ Types ‘]’
174174
Singletons ::= Singleton { ‘,’ Singleton }
175-
ArgTypes ::= Types
176175
FunArgType ::= Type
177176
| ‘=>’ Type PrefixOp(=>, t)
178177
ParamType ::= [‘=>’] ParamValueType
179178
ParamValueType ::= Type [‘*’] PostfixOp(t, "*")
180-
TypeArgs ::= ‘[’ ArgTypes ‘]’ ts
181-
NamedTypeArg ::= id ‘=’ Type NamedArg(id, t)
182-
NamedTypeArgs ::= ‘[’ NamedTypeArg {‘,’ NamedTypeArg} ‘]’ nts
179+
TypeArgs ::= ‘[’ Types ‘]’ ts
183180
Refinement ::= ‘{’ [RefineDcl] {semi [RefineDcl]} ‘}’ ds
184181
TypeBounds ::= [‘>:’ Type] [‘<:’ Type] TypeBoundsTree(lo, hi)
185182
TypeParamBounds ::= TypeBounds {‘:’ Type} ContextBounds(typeBounds, tps)

library/src/scalaShadowing/language.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,9 @@ object language {
213213

214214
/** Experimental support for richer dependent types */
215215
object dependent
216+
217+
/** Experimental support for named type arguments */
218+
object namedTypeArguments
216219
}
217220

218221
/** Where imported, a backwards compatibility mode for Scala2 is enabled */
@@ -242,9 +245,6 @@ object language {
242245
*/
243246
object adhocExtensions
244247

245-
/** Experimental support for richer dependent types */
246-
object dependent
247-
248248
/** Source version */
249249
object `3.0-migration`
250250
object `3.0`

tests/neg/i2771.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import language.experimental.namedTypeArguments
12
trait A { type L[X] }
23
trait B { type L }
34
trait C { type M <: A }

tests/neg/i5328.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import language.experimental.namedTypeArguments
12
class C[X, Y] { def apply[Z](x: X, y: Y, z: Z) = (x, y, z) }
23

34
object Test {

tests/neg/namedTypeParams.scala

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
class C[T]
22
class D[type T] // error: identifier expected, but `type` found
33

4+
object Test0:
5+
def f[X, Y](x: X, y: Y): Int = ???
6+
f[X = Int, Y = Int](1, 2) // error: experimental // error: experimental
7+
48
object Test {
9+
import language.experimental.namedTypeArguments
510

611
val x: C[T = Int] = // error: ']' expected, but `=` found // error
712
new C[T = Int] // error: ']' expected, but `=` found // error

tests/pos-custom-args/erased/i7868.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import language.experimental.namedTypeArguments
12
import scala.compiletime._
23

34
final case class Coproduct[+Set, +Value, Index <: Int](value: Value & Set, index: Index)

tests/pos/gadt-GadtStlc.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import language.experimental.namedTypeArguments
12
object GadtStlc {
23
// creates type-level "strings" like M[M[M[W]]]
34
object W

tests/pos/gadt-TypeSafeLambda.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import language.experimental.namedTypeArguments
12
object TypeSafeLambda {
23

34
trait Category[Arr[_, _]] {

tests/pos/i3666-gadt.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import language.experimental.namedTypeArguments
12
object i3666 {
23
sealed trait Exp[T]
34
case class Num(n: Int) extends Exp[Int]

tests/pos/i3955.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import language.experimental.namedTypeArguments
12
object Foo {
23
inline def f[S, T](x: S): T = ???
34
def g(x: Int) = f[T = Any](x)

tests/pos/i5328.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import language.experimental.namedTypeArguments
12
class C[X, Y] { def apply[Z](x: X, y: Y, z: Z) = (x, y, z) }
23

34
object Test {

tests/pos/kindPolySemiGroup.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
// Adapted from github:mandubian/kind-polymorphic-semigroup.scala
2+
import language.experimental.namedTypeArguments
23
sealed trait HList
34
case class HCons[+HD, +TL](hd: HD, tl: TL) extends HList
45
case object HNil extends HList

tests/pos/reference/named-typeargs.scala renamed to tests/pos/named-typeargs.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import language.experimental.namedTypeArguments
12
package namedTypeArgsR {
23

34
object t1 {

tests/pos/namedTypeParams.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import language.experimental.namedTypeArguments
12
object Test {
23

34
def f[X, Y](x: X, y: Y): Int = ???

tests/pos/t1513a.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import language.experimental.namedTypeArguments
12
object Test {
23
// Heterogeneous lists and natural numbers as defined in shapeless.
34

tests/pos/t1513b.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import language.experimental.namedTypeArguments
12
object Test {
23
def f[
34
T1 <: String,

tests/pos/typeclass-encoding3.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import language.experimental.namedTypeArguments
12
object Test {
23

34
/* --------------------------------------------------------------------------

tests/run-staging/staged-streams_1.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import scala.quoted._
22
import scala.quoted.staging._
33
import scala.quoted.util._
4+
import language.experimental.namedTypeArguments
5+
46
/**
57
* Port of the strymonas library as described in O. Kiselyov et al., Stream fusion, to completeness (POPL 2017)
68
*/

tests/run/creator-applys.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import language.experimental.namedTypeArguments
12
object Test extends App {
23
class A {
34
def run = "A"

tests/run/hmap-covariant.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import language.experimental.namedTypeArguments
12
trait Tuple
23
case class TCons[+H, +T <: Tuple](h: H, t: T) extends Tuple
34
case object TNil extends Tuple

tests/run/hmap.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import language.experimental.namedTypeArguments
2+
13
trait Tuple
24
case class TCons[H, T <: Tuple](h: H, t: T) extends Tuple
35
case object TNil extends Tuple

tests/run/polymorphic-functions.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import language.experimental.namedTypeArguments
12
object Test extends App {
23
// Types
34
type F0 = [T] => List[T] => Option[T]

0 commit comments

Comments
 (0)