Skip to content

Commit b0e1031

Browse files
committed
fewerBraces always enabled from 3.2.x
1 parent 29e4b05 commit b0e1031

23 files changed

+10
-160
lines changed

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ object Feature:
2626
val dependent = experimental("dependent")
2727
val erasedDefinitions = experimental("erasedDefinitions")
2828
val symbolLiterals = deprecated("symbolLiterals")
29-
val fewerBraces = experimental("fewerBraces")
3029
val saferExceptions = experimental("saferExceptions")
3130

3231
/** Is `feature` enabled by by a command-line setting? The enabling setting is

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ trait AllScalaSettings extends CommonScalaSettings, PluginSettings, VerboseSetti
5858
val oldSyntax: Setting[Boolean] = BooleanSetting("-old-syntax", "Require `(...)` around conditions.")
5959
val indent: Setting[Boolean] = BooleanSetting("-indent", "Together with -rewrite, remove {...} syntax when possible due to significant indentation.")
6060
val noindent: Setting[Boolean] = BooleanSetting("-no-indent", "Require classical {...} syntax, indentation is not significant.", aliases = List("-noindent"))
61-
val YindentColons: Setting[Boolean] = BooleanSetting("-Yindent-colons", "(disabled: use -language:experimental.fewerBraces instead)")
61+
val YindentColons: Setting[Boolean] = BooleanSetting("-Yindent-colons", "(disabled: colons can always indent from Scala v3.2.x)")
6262

6363
/* Decompiler settings */
6464
val printTasty: Setting[Boolean] = BooleanSetting("-print-tasty", "Prints the raw tasty.", aliases = List("--print-tasty"))

compiler/src/dotty/tools/dotc/parsing/Parsers.scala

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -757,7 +757,7 @@ object Parsers {
757757
}
758758
})
759759
canRewrite &= (in.isAfterLineEnd || statCtdTokens.contains(in.token)) // test (5)
760-
if (canRewrite && (!underColonSyntax || in.fewerBracesEnabled)) {
760+
if (canRewrite && !underColonSyntax) {
761761
val openingPatchStr =
762762
if !colonRequired then ""
763763
else if testChar(startOpening - 1, Chars.isOperatorPart(_)) then " :"
@@ -2252,8 +2252,8 @@ object Parsers {
22522252
* | SimpleExpr `.` MatchClause
22532253
* | SimpleExpr (TypeArgs | NamedTypeArgs)
22542254
* | SimpleExpr1 ArgumentExprs
2255-
* | SimpleExpr1 `:` IndentedExpr -- under language.experimental.fewerBraces
2256-
* | SimpleExpr1 FunParams (‘=>’ | ‘?=>’) IndentedExpr -- under language.experimental.fewerBraces
2255+
* | SimpleExpr1 `:` IndentedExpr
2256+
* | SimpleExpr1 FunParams (‘=>’ | ‘?=>’) IndentedExpr
22572257
* IndentedExpr ::= indent (CaseClauses | Block) outdent
22582258
* Quoted ::= ‘'’ ‘{’ Block ‘}’
22592259
* | ‘'’ ‘[’ Type ‘]’
@@ -2322,7 +2322,7 @@ object Parsers {
23222322
case LPAREN if canApply =>
23232323
val app = atSpan(startOffset(t), in.offset) {
23242324
val argExprs @ (args, isUsing) = argumentExprs()
2325-
if !isUsing && in.isArrow && location != Location.InGuard && in.fewerBracesEnabled then
2325+
if !isUsing && in.isArrow && location != Location.InGuard then
23262326
val params = convertToParams(Tuple(args))
23272327
if params.forall(_.name != nme.ERROR) then
23282328
applyToClosure(t, in.offset, params)
@@ -2336,13 +2336,13 @@ object Parsers {
23362336
val app = atSpan(startOffset(t), in.offset) { mkApply(t, argumentExprs()) }
23372337
simpleExprRest(app, location, canApply = true)
23382338
case USCORE =>
2339-
if in.lookahead.isArrow && location != Location.InGuard && in.fewerBracesEnabled then
2339+
if in.lookahead.isArrow && location != Location.InGuard then
23402340
val app = applyToClosure(t, in.offset, convertToParams(wildcardIdent()))
23412341
simpleExprRest(app, location, canApply = true)
23422342
else
23432343
atSpan(startOffset(t), in.skipToken()) { PostfixOp(t, Ident(nme.WILDCARD)) }
23442344
case IDENTIFIER
2345-
if !in.isOperator && in.lookahead.isArrow && location != Location.InGuard && in.fewerBracesEnabled =>
2345+
if !in.isOperator && in.lookahead.isArrow && location != Location.InGuard =>
23462346
val app = applyToClosure(t, in.offset, convertToParams(termIdent()))
23472347
simpleExprRest(app, location, canApply = true)
23482348
case _ =>

compiler/src/dotty/tools/dotc/parsing/Scanners.scala

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -202,15 +202,6 @@ object Scanners {
202202
def featureEnabled(name: TermName) = Feature.enabled(name)(using languageImportContext)
203203
def erasedEnabled = featureEnabled(Feature.erasedDefinitions)
204204

205-
private var fewerBracesEnabledCache = false
206-
private var fewerBracesEnabledCtx: Context = NoContext
207-
208-
def fewerBracesEnabled =
209-
if fewerBracesEnabledCtx ne myLanguageImportContext then
210-
fewerBracesEnabledCache = featureEnabled(Feature.fewerBraces)
211-
fewerBracesEnabledCtx = myLanguageImportContext
212-
fewerBracesEnabledCache
213-
214205
/** All doc comments kept by their end position in a `Map`.
215206
*
216207
* Note: the map is necessary since the comments are looked up after an
@@ -655,7 +646,7 @@ object Scanners {
655646
case END =>
656647
if !isEndMarker then token = IDENTIFIER
657648
case COLON =>
658-
if fewerBracesEnabled then observeColonEOL()
649+
observeColonEOL()
659650
case RBRACE | RPAREN | RBRACKET =>
660651
closeIndented()
661652
case EOF =>

compiler/test/dotty/tools/repl/ReplCompilerTests.scala

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -243,24 +243,11 @@ class ReplCompilerTests extends ReplTest:
243243

244244
@Test def i14491 =
245245
initially {
246-
run("import language.experimental.fewerBraces")
247-
} andThen {
248246
run("""|val x = Seq(7,8,9).apply:
249247
| 1
250248
|""".stripMargin)
251249
assertEquals("val x: Int = 8", storedOutput().trim)
252250
}
253-
initially {
254-
run("""|import language.experimental.fewerBraces
255-
|import language.experimental.fewerBraces as _
256-
|""".stripMargin)
257-
} andThen {
258-
run("""|val x = Seq(7,8,9).apply:
259-
| 1
260-
|""".stripMargin)
261-
assert("expected error if fewerBraces is unimported",
262-
lines().exists(_.contains("missing arguments for method apply")))
263-
}
264251

265252
object ReplCompilerTests:
266253

docs/_docs/internals/syntax.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -254,8 +254,8 @@ SimpleExpr ::= SimpleRef
254254
| SimpleExpr ‘.’ MatchClause
255255
| SimpleExpr TypeArgs TypeApply(expr, args)
256256
| SimpleExpr ArgumentExprs Apply(expr, args)
257-
| SimpleExpr ‘:’ IndentedExpr -- under language.experimental.fewerBraces
258-
| SimpleExpr FunParams (‘=>’ | ‘?=>’) IndentedExpr -- under language.experimental.fewerBraces
257+
| SimpleExpr ‘:’ IndentedExpr
258+
| SimpleExpr FunParams (‘=>’ | ‘?=>’) IndentedExpr
259259
| SimpleExpr ‘_’ PostfixOp(expr, _) (to be dropped)
260260
| XmlExpr -- to be dropped
261261
IndentedExpr ::= indent CaseClauses | Block outdent

docs/_docs/reference/experimental/overview.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ All experimental language features can be found under the `scala.language.experi
1010
They are enabled by importing the feature or using the `-language` compiler flag.
1111

1212
* [`erasedDefinitions`](./erased-defs.md): Enable support for `erased` modifier.
13-
* `fewerBraces`: Enable support for using indentation for arguments.
1413
* [`genericNumberLiterals`](./numeric-literals.md): Enable support for generic number literals.
1514
* [`namedTypeArguments`](./named-typeargs.md): Enable support for named type arguments
1615
* [`saferExceptions`](./canthrow.md): Enable support for checked exceptions.

docs/_docs/reference/other-new-features/indentation-experimental.md

Lines changed: 0 additions & 83 deletions
This file was deleted.

docs/_docs/reference/other-new-features/indentation.md

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -416,12 +416,6 @@ The `-indent` option only works on [new-style syntax](./control-syntax.md). So t
416416

417417
Generally, the possible indentation regions coincide with those regions where braces `{...}` are also legal, no matter whether the braces enclose an expression or a set of definitions. There is one exception, though: Arguments to function can be enclosed in braces but they cannot be simply indented instead. Making indentation always significant for function arguments would be too restrictive and fragile.
418418

419-
To allow such arguments to be written without braces, a variant of the indentation scheme is implemented under language import
420-
```scala
421-
import language.experimental.fewerBraces
422-
```
423-
This variant is more contentious and less stable than the rest of the significant indentation scheme. In this variant, a colon `:` at the end of a line is also one of the possible tokens that opens an indentation region. Examples:
424-
425419
```scala
426420
times(10):
427421
println("ah")

library/src/scala/runtime/stdLibPatches/language.scala

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,6 @@ object language:
4848
@compileTimeOnly("`erasedDefinitions` can only be used at compile time in import statements")
4949
object erasedDefinitions
5050

51-
/** Experimental support for using indentation for arguments
52-
*/
53-
@compileTimeOnly("`fewerBraces` can only be used at compile time in import statements")
54-
object fewerBraces
55-
5651
/** Experimental support for typechecked exception capabilities
5752
*
5853
* @see [[https://dotty.epfl.ch/docs/reference/experimental/canthrow]]

tests/neg-custom-args/no-experimental/experimental-imports.scala

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,44 +2,38 @@ import annotation.experimental
22

33
@experimental
44
object Object1:
5-
import language.experimental.fewerBraces
65
import language.experimental.namedTypeArguments
76
import language.experimental.genericNumberLiterals
87
import language.experimental.erasedDefinitions
98
erased def f = 1
109

1110
object Object2:
12-
import language.experimental.fewerBraces // error
1311
import language.experimental.namedTypeArguments // error
1412
import language.experimental.genericNumberLiterals // error
1513
import language.experimental.erasedDefinitions
1614
erased def f = 1
1715

1816
@experimental
1917
object Class1:
20-
import language.experimental.fewerBraces
2118
import language.experimental.namedTypeArguments
2219
import language.experimental.genericNumberLiterals
2320
import language.experimental.erasedDefinitions
2421
erased def f = 1
2522

2623
object Class2:
27-
import language.experimental.fewerBraces // error
2824
import language.experimental.namedTypeArguments // error
2925
import language.experimental.genericNumberLiterals // error
3026
import language.experimental.erasedDefinitions
3127
erased def f = 1
3228

3329
@experimental
3430
def fun1 =
35-
import language.experimental.fewerBraces
3631
import language.experimental.namedTypeArguments
3732
import language.experimental.genericNumberLiterals
3833
import language.experimental.erasedDefinitions
3934
erased def f = 1
4035

4136
def fun2 =
42-
import language.experimental.fewerBraces // error
4337
import language.experimental.namedTypeArguments // error
4438
import language.experimental.genericNumberLiterals // error
4539
import language.experimental.erasedDefinitions

tests/neg-custom-args/no-experimental/experimental-nested-imports-2.scala

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,27 @@
11
import annotation.experimental
22

33
class Class1:
4-
import language.experimental.fewerBraces // error
54
import language.experimental.namedTypeArguments // error
65
import language.experimental.genericNumberLiterals // error
76
import language.experimental.erasedDefinitions // ok: only check at erased definition
87
@experimental def f = 1
98
def g = 1
109

1110
object Object1:
12-
import language.experimental.fewerBraces // error
1311
import language.experimental.namedTypeArguments // error
1412
import language.experimental.genericNumberLiterals // error
1513
import language.experimental.erasedDefinitions // ok: only check at erased definition
1614
@experimental def f = 1
1715
def g = 1
1816

1917
def fun1 =
20-
import language.experimental.fewerBraces // error
2118
import language.experimental.namedTypeArguments // error
2219
import language.experimental.genericNumberLiterals // error
2320
import language.experimental.erasedDefinitions // ok: only check at erased definition
2421
@experimental def f = 1
2522
def g = 1
2623

2724
val value1 =
28-
import language.experimental.fewerBraces // error
2925
import language.experimental.namedTypeArguments // error
3026
import language.experimental.genericNumberLiterals // error
3127
import language.experimental.erasedDefinitions // ok: only check at erased definition
Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,21 @@
11
import annotation.experimental
22

33
class Class1:
4-
import language.experimental.fewerBraces // error
54
import language.experimental.namedTypeArguments // error
65
import language.experimental.genericNumberLiterals // error
76
import language.experimental.erasedDefinitions // ok: only check at erased definition
87

98
object Object1:
10-
import language.experimental.fewerBraces // error
119
import language.experimental.namedTypeArguments // error
1210
import language.experimental.genericNumberLiterals // error
1311
import language.experimental.erasedDefinitions // ok: only check at erased definition
1412

1513
def fun1 =
16-
import language.experimental.fewerBraces // error
1714
import language.experimental.namedTypeArguments // error
1815
import language.experimental.genericNumberLiterals // error
1916
import language.experimental.erasedDefinitions // ok: only check at erased definition
2017

2118
val value1 =
22-
import language.experimental.fewerBraces // error
2319
import language.experimental.namedTypeArguments // error
2420
import language.experimental.genericNumberLiterals // error
2521
import language.experimental.erasedDefinitions // ok: only check at erased definition

tests/neg-custom-args/no-experimental/experimental-nested-imports.scala

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,24 @@
11
import annotation.experimental
22

33
class Class1:
4-
import language.experimental.fewerBraces // error
54
import language.experimental.namedTypeArguments // error
65
import language.experimental.genericNumberLiterals // error
76
import language.experimental.erasedDefinitions // ok: only check at erased definition
87
@experimental def f = 1
98

109
object Object1:
11-
import language.experimental.fewerBraces // error
1210
import language.experimental.namedTypeArguments // error
1311
import language.experimental.genericNumberLiterals // error
1412
import language.experimental.erasedDefinitions // ok: only check at erased definition
1513
@experimental def f = 1
1614

1715
def fun1 =
18-
import language.experimental.fewerBraces // error
1916
import language.experimental.namedTypeArguments // error
2017
import language.experimental.genericNumberLiterals // error
2118
import language.experimental.erasedDefinitions // ok: only check at erased definition
2219
@experimental def f = 1
2320

2421
val value1 =
25-
import language.experimental.fewerBraces // error
2622
import language.experimental.namedTypeArguments // error
2723
import language.experimental.genericNumberLiterals // error
2824
import language.experimental.erasedDefinitions // ok: only check at erased definition

tests/neg-custom-args/no-experimental/experimental-package-imports.scala

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import annotation.experimental
22

33
package foo {
4-
import language.experimental.fewerBraces // error
54
import language.experimental.namedTypeArguments // error
65
import language.experimental.genericNumberLiterals // error
76
import language.experimental.erasedDefinitions // ok: only check at erased definition
@@ -13,7 +12,6 @@ package foo {
1312

1413
package foo2 {
1514
// ok: all definitions are top-level @experimental
16-
import language.experimental.fewerBraces
1715
import language.experimental.namedTypeArguments
1816
import language.experimental.genericNumberLiterals
1917
import language.experimental.erasedDefinitions

tests/neg/closure-args.scala

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import language.experimental.fewerBraces
2-
31
val x = List().map (x: => Int) => // error
42
???
53
val y = List() map x => // error

tests/neg/i7751.scala

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,2 @@
1-
import language.experimental.fewerBraces
21
val a = Some(a=a,)=> // error // error // error
32
val a = Some(x=y,)=>

0 commit comments

Comments
 (0)