File tree Expand file tree Collapse file tree 3 files changed +20
-26
lines changed
Sources/SwiftParserDiagnostics Expand file tree Collapse file tree 3 files changed +20
-26
lines changed Original file line number Diff line number Diff line change @@ -281,6 +281,12 @@ public struct MissingNodesError: ParserError {
281
281
return nil
282
282
}
283
283
284
+ if missingNodes. count == 2 ,
285
+ missingNodes. allSatisfy ( { $0. as ( TokenSyntax . self) ? . tokenKind == . stringQuote } )
286
+ {
287
+ return " in \( anchorTypeName) "
288
+ }
289
+
284
290
let isFirstTokenStartMarker = missingNodes. first? . as ( TokenSyntax . self) ? . tokenKind. isStartMarker ?? false
285
291
let isLastTokenEndMarker = missingNodes. last? . as ( TokenSyntax . self) ? . tokenKind. isEndMarker ?? false
286
292
switch ( isFirstTokenStartMarker, isLastTokenEndMarker) {
@@ -364,7 +370,10 @@ extension ParseDiagnosticsGenerator {
364
370
missingNodes += [ sibling]
365
371
} else if sibling. isMissingAllTokens && sibling. hasTokens {
366
372
missingNodes += [ sibling]
367
- } else if sibling. kind. isSyntaxCollection && sibling. children ( viewMode: . sourceAccurate) . count == 0 {
373
+ } else if sibling. kind. isSyntaxCollection
374
+ && ( sibling. children ( viewMode: . sourceAccurate) . count == 0
375
+ || sibling. children ( viewMode: . sourceAccurate) . only? . kind == . stringSegment)
376
+ {
368
377
// Skip over any syntax collections without any elements while looking ahead for further missing nodes.
369
378
} else {
370
379
// Otherwise we have found a present node, so stop looking ahead.
Original file line number Diff line number Diff line change @@ -454,19 +454,14 @@ final class AttributeTests: XCTestCase {
454
454
455
455
assertParse (
456
456
"""
457
- @_expose(Cxx, 1️⃣baz2️⃣ ) func foo() {}
457
+ @_expose(Cxx, 1️⃣baz ) func foo() {}
458
458
""" ,
459
459
diagnostics: [
460
460
DiagnosticSpec (
461
461
locationMarker: " 1️⃣ " ,
462
- message: #"expected '"' in string literal"# ,
463
- fixIts: [ #"insert '"'"# ]
464
- ) ,
465
- DiagnosticSpec (
466
- locationMarker: " 2️⃣ " ,
467
- message: #"expected '"' to end string literal"# ,
468
- fixIts: [ #"insert '"'"# ]
469
- ) ,
462
+ message: #"expected '""' in string literal"# ,
463
+ fixIts: [ #"insert '""'"# ]
464
+ )
470
465
] ,
471
466
fixedSource: """
472
467
@_expose(Cxx, " baz " ) func foo() {}
@@ -543,20 +538,15 @@ final class AttributeTests: XCTestCase {
543
538
544
539
assertParse (
545
540
"""
546
- @_unavailableFromAsync(message: 1️⃣abc2️⃣ )
541
+ @_unavailableFromAsync(message: 1️⃣abc )
547
542
func foo() {}
548
543
""" ,
549
544
diagnostics: [
550
545
DiagnosticSpec (
551
546
locationMarker: " 1️⃣ " ,
552
- message: #"expected '"' in string literal"# ,
553
- fixIts: [ #"insert '"'"# ]
554
- ) ,
555
- DiagnosticSpec (
556
- locationMarker: " 2️⃣ " ,
557
- message: #"expected '"' to end string literal"# ,
558
- fixIts: [ #"insert '"'"# ]
559
- ) ,
547
+ message: #"expected '""' in string literal"# ,
548
+ fixIts: [ #"insert '""'"# ]
549
+ )
560
550
] ,
561
551
fixedSource: """
562
552
@_unavailableFromAsync(message: " abc " )
Original file line number Diff line number Diff line change @@ -86,13 +86,8 @@ final class OriginalDefinedInAttrTests: XCTestCase {
86
86
) ,
87
87
DiagnosticSpec (
88
88
locationMarker: " 1️⃣ " ,
89
- message: #"expected '"' in string literal"# ,
90
- fixIts: [ #"insert '"'"# ]
91
- ) ,
92
- DiagnosticSpec (
93
- locationMarker: " 2️⃣ " ,
94
- message: #"expected '"' to end string literal"# ,
95
- fixIts: [ #"insert '"'"# ]
89
+ message: #"expected '""' in string literal"# ,
90
+ fixIts: [ #"insert '""'"# ]
96
91
) ,
97
92
DiagnosticSpec (
98
93
locationMarker: " 2️⃣ " ,
You can’t perform that action at this time.
0 commit comments