Skip to content

Commit 60b01b7

Browse files
authored
Merge pull request swiftlang#2978 from DougGregor/se-0458-enable-by-default
[SE-0458] Enable `unsafe` expressions and for..in effects everywhere
2 parents da8362a + 7262c1a commit 60b01b7

16 files changed

+18
-47
lines changed

CodeGeneration/Sources/SyntaxSupport/ExprNodes.swift

-1
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,6 @@ public let EXPR_NODES: [Node] = [
183183
Node(
184184
kind: .unsafeExpr,
185185
base: .expr,
186-
experimentalFeature: .unsafeExpression,
187186
nameForDiagnostics: "'unsafe' expression",
188187
children: [
189188
Child(

CodeGeneration/Sources/SyntaxSupport/StmtNodes.swift

-1
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,6 @@ public let STMT_NODES: [Node] = [
287287
Child(
288288
name: "unsafeKeyword",
289289
kind: .token(choices: [.keyword(.unsafe)]),
290-
experimentalFeature: .unsafeExpression,
291290
isOptional: true
292291
),
293292
Child(

Sources/SwiftParser/Expressions.swift

+4
Original file line numberDiff line numberDiff line change
@@ -445,6 +445,10 @@ extension Parser {
445445
)
446446
)
447447
case (.unsafe, let handle)?:
448+
if self.peek().isAtStartOfLine || self.peek(isAt: .rightParen) {
449+
break EXPR_PREFIX
450+
}
451+
448452
let unsafeTok = self.eat(handle)
449453
let sub = self.parseSequenceExpressionElement(
450454
flavor: flavor,

Sources/SwiftParser/TokenSpecSet.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -714,7 +714,7 @@ enum ExpressionModifierKeyword: TokenSpecSet {
714714
case TokenSpec(.repeat): self = .repeat
715715
case TokenSpec(.each): self = .each
716716
case TokenSpec(.any): self = .any
717-
case TokenSpec(.unsafe) where experimentalFeatures.contains(.unsafeExpression): self = .unsafe
717+
case TokenSpec(.unsafe): self = .unsafe
718718
default: return nil
719719
}
720720
}

Sources/SwiftSyntax/Documentation.docc/generated/SwiftSyntax.md

+1
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ allows Swift tools to parse, inspect, generate, and transform Swift source code.
135135
- <doc:SwiftSyntax/UnresolvedAsExprSyntax>
136136
- <doc:SwiftSyntax/UnresolvedIsExprSyntax>
137137
- <doc:SwiftSyntax/UnresolvedTernaryExprSyntax>
138+
- <doc:SwiftSyntax/UnsafeExprSyntax>
138139

139140
### Patterns
140141

Sources/SwiftSyntax/generated/SyntaxAnyVisitor.swift

-2
Original file line numberDiff line numberDiff line change
@@ -2294,12 +2294,10 @@ open class SyntaxAnyVisitor: SyntaxVisitor {
22942294
visitAnyPost(node._syntaxNode)
22952295
}
22962296

2297-
@_spi(ExperimentalLanguageFeatures)
22982297
override open func visit(_ node: UnsafeExprSyntax) -> SyntaxVisitorContinueKind {
22992298
return visitAny(node._syntaxNode)
23002299
}
23012300

2302-
@_spi(ExperimentalLanguageFeatures)
23032301
override open func visitPost(_ node: UnsafeExprSyntax) {
23042302
visitAnyPost(node._syntaxNode)
23052303
}

Sources/SwiftSyntax/generated/SyntaxBaseNodes.swift

+1
Original file line numberDiff line numberDiff line change
@@ -506,6 +506,7 @@ extension Syntax {
506506
/// - ``UnresolvedAsExprSyntax``
507507
/// - ``UnresolvedIsExprSyntax``
508508
/// - ``UnresolvedTernaryExprSyntax``
509+
/// - ``UnsafeExprSyntax``
509510
public struct ExprSyntax: ExprSyntaxProtocol, SyntaxHashable {
510511
public let _syntaxNode: Syntax
511512

Sources/SwiftSyntax/generated/SyntaxEnum.swift

-2
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,6 @@ public enum SyntaxEnum: Sendable {
303303
case unresolvedAsExpr(UnresolvedAsExprSyntax)
304304
case unresolvedIsExpr(UnresolvedIsExprSyntax)
305305
case unresolvedTernaryExpr(UnresolvedTernaryExprSyntax)
306-
@_spi(ExperimentalLanguageFeatures)
307306
case unsafeExpr(UnsafeExprSyntax)
308307
case valueBindingPattern(ValueBindingPatternSyntax)
309308
case variableDecl(VariableDeclSyntax)
@@ -1051,7 +1050,6 @@ public enum ExprSyntaxEnum {
10511050
case unresolvedAsExpr(UnresolvedAsExprSyntax)
10521051
case unresolvedIsExpr(UnresolvedIsExprSyntax)
10531052
case unresolvedTernaryExpr(UnresolvedTernaryExprSyntax)
1054-
@_spi(ExperimentalLanguageFeatures)
10551053
case unsafeExpr(UnsafeExprSyntax)
10561054
}
10571055

Sources/SwiftSyntax/generated/SyntaxKind.swift

-1
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,6 @@ public enum SyntaxKind: Sendable {
303303
case unresolvedAsExpr
304304
case unresolvedIsExpr
305305
case unresolvedTernaryExpr
306-
@_spi(ExperimentalLanguageFeatures)
307306
case unsafeExpr
308307
case valueBindingPattern
309308
case variableDecl

Sources/SwiftSyntax/generated/SyntaxRewriter.swift

+1-2
Original file line numberDiff line numberDiff line change
@@ -2048,10 +2048,9 @@ open class SyntaxRewriter {
20482048
return ExprSyntax(UnresolvedTernaryExprSyntax(unsafeCasting: visitChildren(node._syntaxNode)))
20492049
}
20502050

2051-
/// Visit a `UnsafeExprSyntax`.
2051+
/// Visit a ``UnsafeExprSyntax``.
20522052
/// - Parameter node: the node that is being visited
20532053
/// - Returns: the rewritten node
2054-
@_spi(ExperimentalLanguageFeatures)
20552054
open func visit(_ node: UnsafeExprSyntax) -> ExprSyntax {
20562055
return ExprSyntax(UnsafeExprSyntax(unsafeCasting: visitChildren(node._syntaxNode)))
20572056
}

Sources/SwiftSyntax/generated/SyntaxVisitor.swift

+2-4
Original file line numberDiff line numberDiff line change
@@ -3380,17 +3380,15 @@ open class SyntaxVisitor {
33803380
open func visitPost(_ node: UnresolvedTernaryExprSyntax) {
33813381
}
33823382

3383-
/// Visiting `UnsafeExprSyntax` specifically.
3383+
/// Visiting ``UnsafeExprSyntax`` specifically.
33843384
/// - Parameter node: the node we are visiting.
33853385
/// - Returns: how should we continue visiting.
3386-
@_spi(ExperimentalLanguageFeatures)
33873386
open func visit(_ node: UnsafeExprSyntax) -> SyntaxVisitorContinueKind {
33883387
return .visitChildren
33893388
}
33903389

3391-
/// The function called after visiting `UnsafeExprSyntax` and its descendants.
3390+
/// The function called after visiting ``UnsafeExprSyntax`` and its descendants.
33923391
/// - node: the node we just finished visiting.
3393-
@_spi(ExperimentalLanguageFeatures)
33943392
open func visitPost(_ node: UnsafeExprSyntax) {
33953393
}
33963394

Sources/SwiftSyntax/generated/raw/RawSyntaxNodesTUVWXYZ.swift

-1
Original file line numberDiff line numberDiff line change
@@ -1951,7 +1951,6 @@ public struct RawUnresolvedTernaryExprSyntax: RawExprSyntaxNodeProtocol {
19511951
}
19521952
}
19531953

1954-
@_spi(ExperimentalLanguageFeatures)
19551954
@_spi(RawSyntax)
19561955
public struct RawUnsafeExprSyntax: RawExprSyntaxNodeProtocol {
19571956
@_spi(RawSyntax)

Sources/SwiftSyntax/generated/syntaxNodes/SyntaxNodesEF.swift

-3
Original file line numberDiff line numberDiff line change
@@ -2841,7 +2841,6 @@ public struct ForStmtSyntax: StmtSyntaxProtocol, SyntaxHashable, _LeafStmtSyntax
28412841
}
28422842
}
28432843

2844-
@_spi(ExperimentalLanguageFeatures)
28452844
public var unexpectedBetweenAwaitKeywordAndUnsafeKeyword: UnexpectedNodesSyntax? {
28462845
get {
28472846
return Syntax(self).child(at: 6)?.cast(UnexpectedNodesSyntax.self)
@@ -2854,7 +2853,6 @@ public struct ForStmtSyntax: StmtSyntaxProtocol, SyntaxHashable, _LeafStmtSyntax
28542853
/// ### Tokens
28552854
///
28562855
/// For syntax trees generated by the parser, this is guaranteed to be `unsafe`.
2857-
@_spi(ExperimentalLanguageFeatures)
28582856
public var unsafeKeyword: TokenSyntax? {
28592857
get {
28602858
return Syntax(self).child(at: 7)?.cast(TokenSyntax.self)
@@ -2864,7 +2862,6 @@ public struct ForStmtSyntax: StmtSyntaxProtocol, SyntaxHashable, _LeafStmtSyntax
28642862
}
28652863
}
28662864

2867-
@_spi(ExperimentalLanguageFeatures)
28682865
public var unexpectedBetweenUnsafeKeywordAndCaseKeyword: UnexpectedNodesSyntax? {
28692866
get {
28702867
return Syntax(self).child(at: 8)?.cast(UnexpectedNodesSyntax.self)

Sources/SwiftSyntax/generated/syntaxNodes/SyntaxNodesTUVWXYZ.swift

-3
Original file line numberDiff line numberDiff line change
@@ -3272,13 +3272,10 @@ public struct UnresolvedTernaryExprSyntax: ExprSyntaxProtocol, SyntaxHashable, _
32723272

32733273
// MARK: - UnsafeExprSyntax
32743274

3275-
/// - Note: Requires experimental feature `unsafeExpression`.
3276-
///
32773275
/// ### Children
32783276
///
32793277
/// - `unsafeKeyword`: `unsafe`
32803278
/// - `expression`: ``ExprSyntax``
3281-
@_spi(ExperimentalLanguageFeatures)
32823279
public struct UnsafeExprSyntax: ExprSyntaxProtocol, SyntaxHashable, _LeafExprSyntaxNodeProtocol {
32833280
public let _syntaxNode: Syntax
32843281

Tests/SwiftParserTest/ExpressionTests.swift

+4-18
Original file line numberDiff line numberDiff line change
@@ -2194,31 +2194,17 @@ final class StatementExpressionTests: ParserTestCase {
21942194
func f() {
21952195
let x = unsafe y
21962196
}
2197-
""",
2198-
experimentalFeatures: .unsafeExpression
2197+
"""
21992198
)
22002199

22012200
assertParse(
22022201
"""
22032202
func f() {
2204-
let x = unsafe1️⃣ y
2203+
let x = unsafe
2204+
y
22052205
}
22062206
""",
2207-
diagnostics: [
2208-
DiagnosticSpec(
2209-
message: "consecutive statements on a line must be separated by newline or ';'",
2210-
fixIts: [
2211-
"insert newline",
2212-
"insert ';'",
2213-
]
2214-
)
2215-
],
2216-
fixedSource: """
2217-
func f() {
2218-
let x = unsafe
2219-
y
2220-
}
2221-
"""
2207+
substructure: DeclReferenceExprSyntax(baseName: .identifier("unsafe"))
22222208
)
22232209
}
22242210

Tests/SwiftParserTest/StatementTests.swift

+4-8
Original file line numberDiff line numberDiff line change
@@ -960,23 +960,19 @@ final class StatementTests: ParserTestCase {
960960

961961
func testForUnsafeStatement() {
962962
assertParse(
963-
"for try await unsafe x in e { }",
964-
experimentalFeatures: [.unsafeExpression]
963+
"for try await unsafe x in e { }"
965964
)
966965

967966
assertParse(
968-
"for try await unsafe in e { }",
969-
experimentalFeatures: [.unsafeExpression]
967+
"for try await unsafe in e { }"
970968
)
971969

972970
assertParse(
973-
"for unsafe in e { }",
974-
experimentalFeatures: [.unsafeExpression]
971+
"for unsafe in e { }"
975972
)
976973

977974
assertParse(
978-
"for unsafe: Int in e { }",
979-
experimentalFeatures: [.unsafeExpression]
975+
"for unsafe: Int in e { }"
980976
)
981977
}
982978
}

0 commit comments

Comments
 (0)