Skip to content

Commit 64ee567

Browse files
Add call to skipSingle in canRecoverTo when a closing delimiter is found at the same line
1 parent b2c6854 commit 64ee567

File tree

2 files changed

+19
-10
lines changed

2 files changed

+19
-10
lines changed

Sources/SwiftParser/Recovery.swift

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,13 +123,29 @@ extension Parser.Lookahead {
123123
if currentTokenPrecedence >= recoveryPrecedence {
124124
break
125125
}
126-
self.consumeAnyToken()
127126
if let closingDelimiter = currentTokenPrecedence.closingTokenKind {
128127
let closingDelimiterSpec = TokenSpec(closingDelimiter)
128+
let canSkipSingleAtSameLine = self.withLookahead { lookahead in
129+
while !lookahead.at(.endOfFile), !lookahead.currentToken.isAtStartOfLine {
130+
if lookahead.at(closingDelimiterSpec) {
131+
return true
132+
} else {
133+
lookahead.consumeAnyToken()
134+
}
135+
}
136+
return false
137+
}
138+
if canSkipSingleAtSameLine {
139+
skipSingle()
140+
continue
141+
}
142+
self.consumeAnyToken()
129143
guard self.canRecoverTo(closingDelimiterSpec) != nil else {
130144
continue
131145
}
132146
self.eat(closingDelimiterSpec)
147+
} else {
148+
self.consumeAnyToken()
133149
}
134150
}
135151

Tests/SwiftParserTest/translated/RecoveryTests.swift

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1935,19 +1935,12 @@ final class RecoveryTests: ParserTestCase {
19351935
assertParse(
19361936
"""
19371937
struct ErrorInFunctionSignatureResultArrayType11 {
1938-
func foo() -> Int1️⃣[(a){a++}2️⃣] {
1938+
func foo() -> Int1️⃣[(a){a++}] {
19391939
}
19401940
}
19411941
""",
19421942
diagnostics: [
1943-
DiagnosticSpec(
1944-
locationMarker: "1️⃣",
1945-
message: "unexpected code '[(a)' in function"
1946-
),
1947-
DiagnosticSpec(
1948-
locationMarker: "2️⃣",
1949-
message: "unexpected code in struct"
1950-
)
1943+
DiagnosticSpec(message: "unexpected code '[(a){a++}]' in function")
19511944
]
19521945
)
19531946
}

0 commit comments

Comments
 (0)