Skip to content

Commit 3c00ba6

Browse files
committed
[Parser] Explicit keyword allow-list for contextual keyword prefixed
1 parent 295997a commit 3c00ba6

File tree

2 files changed

+17
-11
lines changed

2 files changed

+17
-11
lines changed

Sources/SwiftParser/Statements.swift

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -938,14 +938,19 @@ extension TokenConsumer {
938938
return true
939939

940940
case .keyword:
941+
// Some lexer-classified keywords can start expressions.
941942
switch Keyword(next.tokenText) {
942-
case .as, .is, .in:
943-
// E.g. <word> is <expr>
944-
return false
945-
default:
946-
// Other lexer-classified keywords are identifier-like.
947-
// E.g. <word> self
943+
case .Any, .Self, .self, .super, .`init`, .true, .false, .nil:
944+
return true
945+
case .repeat, .try:
946+
return true
947+
case .if, .switch:
948948
return true
949+
case .do where self.experimentalFeatures.contains(.doExpressions):
950+
return true
951+
952+
default:
953+
return false
949954
}
950955

951956
case .binaryOperator, .equal, .arrow, .infixQuestionMark:

Tests/SwiftParserTest/StatementTests.swift

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -609,21 +609,22 @@ final class StatementTests: ParserTestCase {
609609

610610
assertParse(
611611
"""
612-
discard 1️⃣case
612+
discard1️⃣ 2️⃣case
613613
""",
614614
diagnostics: [
615615
DiagnosticSpec(
616616
locationMarker: "1️⃣",
617-
message: "expected expression in 'discard' statement",
618-
fixIts: ["insert expression"]
617+
message: "consecutive statements on a line must be separated by newline or ';'",
618+
fixIts: ["insert newline", "insert ';'"]
619619
),
620620
DiagnosticSpec(
621-
locationMarker: "1️⃣",
621+
locationMarker: "2️⃣",
622622
message: "'case' can only appear inside a 'switch' statement or 'enum' declaration"
623623
),
624624
],
625625
fixedSource: """
626-
discard <#expression#>case
626+
discard
627+
case
627628
"""
628629
)
629630

0 commit comments

Comments
 (0)