File tree Expand file tree Collapse file tree 2 files changed +33
-3
lines changed
Tests/SwiftParserTest/translated Expand file tree Collapse file tree 2 files changed +33
-3
lines changed Original file line number Diff line number Diff line change @@ -465,7 +465,7 @@ extension Parser {
465
465
}
466
466
467
467
precondition ( self . currentToken. starts ( with: " < " ) )
468
- let langle = self . consumeAnyToken ( remapping : . leftAngle)
468
+ let langle = self . consumePrefix ( " < " , as : . leftAngle)
469
469
var elements = [ RawGenericParameterSyntax] ( )
470
470
do {
471
471
var keepGoing : RawTokenSyntax ? = nil
@@ -477,7 +477,7 @@ extension Parser {
477
477
var each = self . consume ( if: . keyword( . each) )
478
478
479
479
let ( unexpectedBetweenEachAndName, name) = self . expectIdentifier ( allowSelfOrCapitalSelfAsIdentifier: true )
480
- if attributes == nil && each == nil && unexpectedBetweenEachAndName == nil && name. isMissing && elements. isEmpty {
480
+ if attributes == nil && each == nil && unexpectedBetweenEachAndName == nil && name. isMissing && elements. isEmpty && ! self . currentToken . starts ( with : " > " ) {
481
481
break
482
482
}
483
483
Original file line number Diff line number Diff line change @@ -1031,7 +1031,7 @@ final class RecoveryTests: XCTestCase {
1031
1031
assertParse (
1032
1032
"""
1033
1033
// Note: Don't move braces to a different line here.
1034
- struct ErrorGenericParameterList4< 1️⃣
1034
+ struct ErrorGenericParameterList4<1️⃣
1035
1035
{
1036
1036
}
1037
1037
""" ,
@@ -2245,4 +2245,34 @@ final class RecoveryTests: XCTestCase {
2245
2245
)
2246
2246
}
2247
2247
2248
+ // https://github.com/apple/swift-syntax/issues/1483
2249
+ func testRecovery183( ) {
2250
+ // Can be parsed and produces no diagnostics.
2251
+ assertParse (
2252
+ " func f< 1️⃣>() {} " ,
2253
+ diagnostics: [
2254
+ DiagnosticSpec (
2255
+ message: " expected generic parameter in generic parameter clause " ,
2256
+ fixIts: [ " insert generic parameter " ]
2257
+ )
2258
+ ] ,
2259
+ fixedSource: """
2260
+ func f<<#identifier#> >() {}
2261
+ """
2262
+ )
2263
+
2264
+ // Can be parsed. Printing the node or asking for the diagnostics leads to a crash.
2265
+ assertParse (
2266
+ " func f<1️⃣>() {} " ,
2267
+ diagnostics: [
2268
+ DiagnosticSpec (
2269
+ message: " expected generic parameter in generic parameter clause " ,
2270
+ fixIts: [ " insert generic parameter " ]
2271
+ )
2272
+ ] ,
2273
+ fixedSource: """
2274
+ func f<<#identifier#>>() {}
2275
+ """
2276
+ )
2277
+ }
2248
2278
}
You can’t perform that action at this time.
0 commit comments