Skip to content

Commit fd9f214

Browse files
kimdvCippoX
authored andcommitted
Fix wrong wrapping of quote tokens around identifiers
1 parent fd6318f commit fd9f214

File tree

3 files changed

+63
-12
lines changed

3 files changed

+63
-12
lines changed

Sources/SwiftParser/StringLiterals.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -487,7 +487,7 @@ extension Parser {
487487
// string literal.
488488
guard currentToken.leadingTriviaText.isEmpty else { break }
489489

490-
if let stringSegment = self.consume(if: .stringSegment) {
490+
if let stringSegment = self.consume(if: .stringSegment, TokenSpec(.identifier, remapping: .stringSegment)) {
491491
segments.append(.stringSegment(RawStringSegmentSyntax(content: stringSegment, arena: self.arena)))
492492
} else if let backslash = self.consume(if: .backslash) {
493493
let (unexpectedBeforeDelimiter, delimiter) = self.parsePoundDelimiter(.rawStringDelimiter, matching: openDelimiter)

Tests/SwiftParserTest/AttributeTests.swift

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -422,12 +422,23 @@ final class AttributeTests: XCTestCase {
422422

423423
assertParse(
424424
"""
425-
@_expose(Cxx, 1️⃣baz) func foo() {}
425+
@_expose(Cxx, 1️⃣baz2️⃣) func foo() {}
426426
""",
427427
diagnostics: [
428-
DiagnosticSpec(message: "expected string literal to end @_expose arguments", fixIts: ["insert string literal"]),
429-
DiagnosticSpec(message: "unexpected code 'baz' in attribute"),
430-
]
428+
DiagnosticSpec(
429+
locationMarker: "1️⃣",
430+
message: #"expected '"' in string literal"#,
431+
fixIts: [#"insert '"'"#]
432+
),
433+
DiagnosticSpec(
434+
locationMarker: "2️⃣",
435+
message: #"expected '"' to end string literal"#,
436+
fixIts: [#"insert '"'"#]
437+
),
438+
],
439+
fixedSource: """
440+
@_expose(Cxx, "baz") func foo() {}
441+
"""
431442
)
432443
}
433444

@@ -493,13 +504,25 @@ final class AttributeTests: XCTestCase {
493504

494505
assertParse(
495506
"""
496-
@_unavailableFromAsync(message: 1️⃣abc)
507+
@_unavailableFromAsync(message: 1️⃣abc2️⃣)
497508
func foo() {}
498509
""",
499510
diagnostics: [
500-
DiagnosticSpec(message: "expected string literal to end @_unavailableFromAsync argument", fixIts: ["insert string literal"]),
501-
DiagnosticSpec(message: "unexpected code 'abc' in attribute"),
502-
]
511+
DiagnosticSpec(
512+
locationMarker: "1️⃣",
513+
message: #"expected '"' in string literal"#,
514+
fixIts: [#"insert '"'"#]
515+
),
516+
DiagnosticSpec(
517+
locationMarker: "2️⃣",
518+
message: #"expected '"' to end string literal"#,
519+
fixIts: [#"insert '"'"#]
520+
),
521+
],
522+
fixedSource: """
523+
@_unavailableFromAsync(message: "abc")
524+
func foo() {}
525+
"""
503526
)
504527
}
505528

Tests/SwiftParserTest/translated/OriginalDefinedInAttrTests.swift

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,40 @@ final class OriginalDefinedInAttrTests: XCTestCase {
6161
func testOriginalDefinedInAttr5() {
6262
assertParse(
6363
"""
64-
@_originallyDefinedIn(1️⃣OSX 13.13.3)
64+
@_originallyDefinedIn(1️⃣OSX 2️⃣13.13.3)
6565
public class ToplevelClass2 {}
6666
""",
6767
diagnostics: [
68-
DiagnosticSpec(message: "expected 'module:', string literal, and ',' in @_originallyDefinedIn arguments", fixIts: ["insert 'module:', string literal, and ','"])
69-
]
68+
DiagnosticSpec(
69+
locationMarker: "1️⃣",
70+
message: "expected 'module:' in @_originallyDefinedIn arguments",
71+
fixIts: ["insert 'module:'"]
72+
),
73+
DiagnosticSpec(
74+
locationMarker: "1️⃣",
75+
message: #"expected '"' in string literal"#,
76+
fixIts: [#"insert '"'"#]
77+
),
78+
DiagnosticSpec(
79+
locationMarker: "2️⃣",
80+
message: #"expected '"' to end string literal"#,
81+
fixIts: [#"insert '"'"#]
82+
),
83+
DiagnosticSpec(
84+
locationMarker: "2️⃣",
85+
message: "expected ',' in @_originallyDefinedIn arguments",
86+
fixIts: ["insert ','"]
87+
),
88+
DiagnosticSpec(
89+
locationMarker: "2️⃣",
90+
message: "expected platform in version restriction",
91+
fixIts: ["insert platform"]
92+
),
93+
],
94+
fixedSource: """
95+
@_originallyDefinedIn(module: "OSX" , <#identifier#>13.13.3)
96+
public class ToplevelClass2 {}
97+
"""
7098
)
7199
}
72100

0 commit comments

Comments
 (0)