Skip to content

Commit 01089a1

Browse files
committed
WIP disable by default experimental mode on nightly builds
1 parent 6ab1467 commit 01089a1

File tree

128 files changed

+196
-45
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

128 files changed

+196
-45
lines changed

compiler/src/dotty/tools/dotc/Driver.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ class Driver {
7474
val ictx = rootCtx.fresh
7575
val summary = command.distill(args, ictx.settings)(ictx.settingsState)(using ictx)
7676
ictx.setSettings(summary.sstate)
77-
Feature.checkExperimentalSettings(using ictx)
77+
// Feature.checkExperimentalSettings(using ictx)
7878
MacroClassLoader.init(ictx)
7979
Positioned.init(using ictx)
8080

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

Lines changed: 17 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -150,41 +150,35 @@ object Feature:
150150
false
151151

152152
def checkExperimentalFeature(which: String, srcPos: SrcPos, note: => String = "")(using Context) =
153-
if !isExperimentalGloballyEnabled && !isExperimentalByImportEnabled && !isExperimentalUnstableEnabled then
153+
if !isExperimentalGloballyEnabled && !isExperimentalByImportEnabled then
154154
report.error(
155155
em"""Experimental $which may only be used under experimental mode:
156156
| 1. In a definition marked as @experimental
157157
| 2. An experimental language import is in scope or within the current definition
158-
| 3. Compiling with the -experimental compiler flag
159-
| 4. With a nightly or snapshot version of the compiler$note
158+
| Example: import scala.language.experimental.mode
159+
| 3. Compiling with the -experimental compiler flag$note
160160
""", srcPos)
161161

162162
private def ccException(sym: Symbol)(using Context): Boolean =
163163
ccEnabled && defn.ccExperimental.contains(sym)
164164

165165
def checkExperimentalDef(sym: Symbol, srcPos: SrcPos)(using Context) =
166-
if !isExperimentalGloballyEnabled && !isExperimentalByImportEnabled && !isExperimentalUnstableEnabled then
167-
val experimentalSym =
168-
if sym.hasAnnotation(defn.ExperimentalAnnot) then sym
169-
else if sym.owner.hasAnnotation(defn.ExperimentalAnnot) then sym.owner
170-
else NoSymbol
171-
if !ccException(experimentalSym) then
172-
val symMsg =
173-
if experimentalSym.exists
174-
then i"$experimentalSym is marked @experimental"
175-
else i"$sym inherits @experimental"
176-
report.error(em"$symMsg and therefore may only be used in an experimental scope.", srcPos)
166+
val experimentalSym =
167+
if sym.hasAnnotation(defn.ExperimentalAnnot) then sym
168+
else if sym.owner.hasAnnotation(defn.ExperimentalAnnot) then sym.owner
169+
else NoSymbol
170+
if !ccException(experimentalSym) then
171+
val symMsg =
172+
if experimentalSym.exists
173+
then i"$experimentalSym is marked @experimental"
174+
else i"$sym inherits @experimental"
175+
checkExperimentalFeature("definition", srcPos, s"\n\n$symMsg")
177176

178177
/** Check that experimental compiler options are only set for snapshot or nightly compiler versions. */
179-
def checkExperimentalSettings(using Context): Unit =
180-
for setting <- ctx.settings.language.value
181-
if setting.startsWith("experimental.") && setting != "experimental.macros"
182-
do checkExperimentalFeature(s"feature $setting", NoSourcePosition)
183-
184-
185-
/** Experimental mode enabled by default in nightly or snapshot version of the compiler without `-Yno-experimental` */
186-
def isExperimentalUnstableEnabled(using Context): Boolean =
187-
Properties.experimental && !ctx.settings.YnoExperimental.value
178+
// def checkExperimentalSettings(using Context): Unit =
179+
// for setting <- ctx.settings.language.value
180+
// if setting.startsWith("experimental.") && setting != "experimental.macros"
181+
// do checkExperimentalFeature(s"feature $setting", NoSourcePosition)
188182

189183
/** Experimental mode enabled in this compilation unit
190184
* - Compiled with `-experimental`

project/Build.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1056,6 +1056,7 @@ object Build {
10561056
settings(
10571057
moduleName := "scala2-library-cc",
10581058
scalacOptions += "-Ycheck:all",
1059+
scalacOptions += "-language:experimental.mode",
10591060
)
10601061

10611062
lazy val scala2LibraryBootstrappedSettings = Seq(

tests/init-global/warn/i18628_3.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import scala.language.experimental.mode
12
import scala.annotation.init.widen
23

34
object Test:

tests/neg-macros/i18677-a/Macro_1.scala

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
//> using -expermiental
2-
1+
import scala.language.experimental.mode
32
import annotation.MacroAnnotation
43
import quoted.*
54

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//> using -expermiental
1+
import scala.language.experimental.mode
22

33
@extendFoo
44
class AFoo // error

tests/neg-macros/i18677-b/Macro_1.scala

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
//> using -expermiental
2-
1+
import scala.language.experimental.mode
32
import annotation.MacroAnnotation
43
import quoted.*
54

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//> using -expermiental
1+
import scala.language.experimental.mode
22

33
@extendFoo
44
class AFoo // error

tests/neg-macros/newClassExtendsNoParents/Macro_1.scala

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

34
inline def makeClass(inline name: String): Any = ${ makeClassExpr('name) }
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1+
import scala.language.experimental.mode
12
def test: Any = makeClass("foo") // error

tests/neg-macros/newClassExtendsOnlyTrait/Macro_1.scala

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

34
inline def makeClass(inline name: String): Foo = ${ makeClassExpr('name) }
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1+
import scala.language.experimental.mode
2+
13
def test: Foo = makeClass("foo") // error

tests/neg/inline-unstable-accessors.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//> using options -Werror -WunstableInlineAccessors -explain
1+
//> using options -Werror -WunstableInlineAccessors -explain -experimental
22

33
package foo
44
import scala.annotation.publicInBinary

tests/neg/overrides.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import scala.language.experimental.mode
2+
13
class Foo {
24
type A = Int
35
type B >: Int <: Int

tests/neg/publicInBinaryOverride.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import scala.language.experimental.mode
2+
13
import scala.annotation.publicInBinary
24

35
class A:
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import scala.language.experimental.mode
2+
13
@Foo.void
24
@Foo.Bar.void
35
def test = 0
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
1+
import scala.language.experimental.mode
2+
13
@void
24
def test = 0
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
1+
import scala.language.experimental.mode
12
@useInlinedIdentity
23
def test = 0
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1+
import scala.language.experimental.mode
12
def test: "1abc" = mcr

tests/pos-macros/i15413/Macro_1.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
//> using options -Werror -WunstableInlineAccessors
22

3+
import scala.language.experimental.mode
34
import scala.quoted.*
45
import scala.annotation.publicInBinary
56

tests/pos-macros/i15413/Test_2.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
1+
import scala.language.experimental.mode
12
def test =
23
new Macro().foo

tests/pos-macros/i15413b/Macro_1.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
package bar
44

5+
import scala.language.experimental.mode
56
import scala.quoted.*
67
import scala.annotation.publicInBinary
78

tests/pos-macros/i15413b/Test_2.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1+
import scala.language.experimental.mode
12
def test = bar.foo

tests/pos-macros/i19526b/Macro.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
//> using options -language:experimental.mode
2+
13
package crash.test
24

35
import scala.language.dynamics

tests/pos/TupleReverse.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import scala.language.experimental.mode
12
import scala.Tuple.*
23
def test[T1, T2, T3, T4] =
34
summon[Reverse[EmptyTuple] =:= EmptyTuple]

tests/pos/TupleReverseOnto.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import scala.language.experimental.mode
12
import scala.Tuple.*
23
def test[T1, T2, T3, T4] =
34
summon[ReverseOnto[(T1, T2), (T3, T4)] =:= ReverseOnto[(T1, T2), (T3, T4)]]

tests/pos/cc-backwards-compat/A.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
package p
2+
import scala.language.experimental.mode
3+
24
class A(f: Int => Int):
35
def foo(f: Int => Int) = ???
46
def map(other: Iter): Iter = other

tests/pos/i13091.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
import annotation.experimental
22
@experimental class Foo
3-
val foo = new Foo
3+
@experimental val foo = new Foo

tests/pos/i7851.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import scala.language.experimental.mode
2+
13
trait Wrappable[T] { }
24
given Wrappable[Float] with { }
35

tests/pos/tupled-function-instances.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import scala.language.experimental.mode
12
import scala.util.TupledFunction
23
object Test {
34
def main(args: Array[String]): Unit = {

tests/run-deep-subtype/Tuple-reverse.scala

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

34
object Test {

tests/run-macros/Xmacro-settings-compileTimeEnv/Logging.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import scala.compiletime.*
1+
import scala.language.experimental.mode
22
import scala.quoted.*
33

44

tests/run-macros/Xmacro-settings-compileTimeEnv/MacroEnv.scala

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

34
object MacroEnv {

tests/run-macros/Xmacro-settings-compileTimeEnv/Test.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
//> using options -Xmacro-settings:a,b=1,c.b.a=x.y.z=1,myLogger.level=INFO
22

3+
import scala.language.experimental.mode
34
import scala.compiletime.*
45

56
object Test {

tests/run-macros/Xmacro-settings-simple/M1.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package x
22

3+
import scala.language.experimental.mode
34
import scala.quoted.*
45

56
object M:

tests/run-macros/Xmacro-settings-simple/Test.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
//> using options -Xmacro-settings:one,two,three
22

3+
import scala.language.experimental.mode
34
import x.*
45

56
object Test {

tests/run-macros/annot-add-global-class/Test_2.scala

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

34
@addClass def foo(): Unit =

tests/run-macros/annot-add-global-object/Test_2.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import scala.language.experimental.mode
2+
13
@addClass def foo(): Unit =
24
println("macro generated main")
35
println("executed in: " + (new Throwable().getStackTrace().head.getClassName))

tests/run-macros/annot-add-local-class/Test_2.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import scala.language.experimental.mode
2+
13
@main def Test(): Unit =
24
@addClass def foo(): Unit =
35
println("macro generated main")

tests/run-macros/annot-add-local-object/Test_2.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import scala.language.experimental.mode
2+
13
@main def Test(): Unit =
24
@addClass def foo(): Unit =
35
println("macro generated main")

tests/run-macros/annot-add-nested-class/Test_2.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import scala.language.experimental.mode
2+
13
class Foo():
24
@addClass def foo(): Unit =
35
println("macro generated main")

tests/run-macros/annot-add-nested-object/Test_2.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import scala.language.experimental.mode
2+
13
class Foo():
24
@addClass def foo(): Unit =
35
println("macro generated main")

tests/run-macros/annot-annot-order/Test_2.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import scala.language.experimental.mode
2+
13
@print("foo")
24
def foo(): Unit = ()
35

tests/run-macros/annot-bind/Test_2.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import scala.language.experimental.mode
2+
13
@bind("a")
24
val foo: String = "foo"
35

tests/run-macros/annot-changeVal/Test_2.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import scala.language.experimental.mode
2+
13
import ChangeVal._
24

35
class Bar:

tests/run-macros/annot-export/Test_2.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import scala.language.experimental.mode
2+
13
object Bar:
24
@returnClassName
35
def f(): String = ??? // def f(): String = "Bar"

tests/run-macros/annot-generate/Macro_2.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import scala.language.experimental.mode
12
import scala.annotation.{experimental, MacroAnnotation}
23
import scala.quoted._
34

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1+
import scala.language.experimental.mode
12
@mainMacro def Test(): Unit = println("macro generated main")

tests/run-macros/annot-memo/Test_2.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import scala.language.experimental.mode
2+
13
class Bar:
24
@memoize
35
def fib(n: Int): Int =

tests/run-macros/annot-mod-class-add-def/Test_2.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import scala.language.experimental.mode
2+
13
@addIndirectToString("This is Foo")
24
class Foo
35
//> private def string$macro$1: String = "This is Foo"

tests/run-macros/annot-mod-class-add-inner-class/Test_2.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import scala.language.experimental.mode
2+
13
@addInnerClass
24
class Foo
35
//> class Show:

tests/run-macros/annot-mod-class-add-lazy-val/Test_2.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import scala.language.experimental.mode
2+
13
@addMemoToString("This is Foo")
24
class Foo
35
//> private lazy val string$macro$1: String = "This is Foo"

tests/run-macros/annot-mod-class-add-local-class/Test_2.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import scala.language.experimental.mode
2+
13
@addInnerClass
24
class Foo
35
//> def toString(): String =

tests/run-macros/annot-mod-class-add-val/Test_2.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import scala.language.experimental.mode
2+
13
@addMemoToString("This is Foo")
24
class Foo
35
//> private val string$macro$1: String = "This is Foo"

tests/run-macros/annot-mod-class-add-var/Test_2.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import scala.language.experimental.mode
2+
13
@addCountToString("This is Foo: ")
24
class Foo:
35
//> private var count$macro$1: Int = 0

tests/run-macros/annot-mod-class-data/Test_2.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import scala.language.experimental.mode
2+
13
@data class Foo(val a: String, val b: Int)
24
//> override def toString(): String = Seq(this.a, this.b).mkString("Foo(", ", ", ")")
35
//> override def equals(that: Any): Boolean =

tests/run-macros/annot-mod-class-equals/Test_2.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import scala.language.experimental.mode
2+
13
@equals class Foo(val a: String, val b: Int)
24
//> override def equals(that: Any): Boolean =
35
//> that match

tests/run-macros/annot-mod-class-mod-def/Test_2.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import scala.language.experimental.mode
2+
13
@modToString("This is Foo")
24
class Foo:
35
override def toString(): String = "?" //> override def toString(): String = "This is Foo"

tests/run-macros/annot-mod-class-mod-val/Test_2.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import scala.language.experimental.mode
2+
13
@setValue("valDef", "a")
24
@setValue("varDef", "b")
35
@setValue("lazyVarDef", "c")

tests/run-macros/annot-mod-class-override-def/Test_2.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import scala.language.experimental.mode
2+
13
@genToString("This is Foo")
24
class Foo
35
//> override def toString(): String = "This is Foo"

0 commit comments

Comments
 (0)