Skip to content

Commit cfa069b

Browse files
committed
Resolve issue where standalone return statemente incorrectly expected an expression
1 parent bbbcf59 commit cfa069b

File tree

3 files changed

+14
-3
lines changed

3 files changed

+14
-3
lines changed

Sources/SwiftParser/Declarations.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
@_spi(RawSyntax) import SwiftSyntax
1414

1515
extension TokenConsumer {
16-
func atStartOfDeclaration(isAtTopLevel: Bool = false, allowRecovery: Bool = false) -> Bool {
16+
func atStartOfDeclaration(isAtTopLevel: Bool = false, allowRecovery: Bool = false, allowCase: Bool = false) -> Bool {
1717
if self.at(anyIn: PoundDeclarationStart.self) != nil {
1818
return true
1919
}

Sources/SwiftParser/Statements.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -828,8 +828,8 @@ extension Parser {
828828
// followed by a '}', '', statement or decl start keyword sequence.
829829
let expr: RawExprSyntax?
830830
if
831-
self.at(any: [
832-
RawTokenKind.rightBrace, .semicolon, .eof,
831+
!self.at(any: [
832+
.rightBrace, .caseKeyword, .semicolon, .eof,
833833
.poundIfKeyword, .poundErrorKeyword, .poundWarningKeyword,
834834
.poundEndifKeyword, .poundElseKeyword, .poundElseifKeyword
835835
])

Tests/SwiftParserTest/Statements.swift

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,4 +227,15 @@ final class StatementTests: XCTestCase {
227227
]
228228
)
229229
}
230+
231+
func testReturnBeforeCase() {
232+
AssertParse("""
233+
switch value {
234+
case 1:
235+
return
236+
case 2:
237+
return
238+
}
239+
""")
240+
}
230241
}

0 commit comments

Comments
 (0)