Skip to content

Commit dff8620

Browse files
committed
Fix wrong fix it for replacing to module for OriginallyDefinedInArgumentsSyntax
1 parent 35f32cf commit dff8620

File tree

2 files changed

+42
-5
lines changed

2 files changed

+42
-5
lines changed

Sources/SwiftParserDiagnostics/ParseDiagnosticsGenerator.swift

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -993,6 +993,35 @@ public class ParseDiagnosticsGenerator: SyntaxAnyVisitor {
993993
return handleMissingSyntax(node, additionalHandledNodes: [node.placeholder.id])
994994
}
995995

996+
override open func visit(_ node: OriginallyDefinedInArgumentsSyntax) -> SyntaxVisitorContinueKind {
997+
if shouldSkip(node) {
998+
return .skipChildren
999+
}
1000+
if let token = node.unexpectedBetweenModuleLabelAndColon?.onlyToken(where: { $0.tokenKind.isIdentifier }),
1001+
node.moduleLabel.presence == .missing
1002+
{
1003+
addDiagnostic(
1004+
node,
1005+
MissingNodesError(missingNodes: [Syntax(node.moduleLabel)]),
1006+
fixIts: [
1007+
FixIt(
1008+
message: ReplaceTokensFixIt(
1009+
replaceTokens: [token],
1010+
replacements: [node.moduleLabel]
1011+
),
1012+
changes: [
1013+
FixIt.MultiNodeChange.makeMissing(token),
1014+
FixIt.MultiNodeChange.makePresent(node.moduleLabel),
1015+
]
1016+
)
1017+
],
1018+
handledNodes: [node.moduleLabel.id, token.id]
1019+
)
1020+
}
1021+
1022+
return .visitChildren
1023+
}
1024+
9961025
public override func visit(_ node: OperatorDeclSyntax) -> SyntaxVisitorContinueKind {
9971026
if shouldSkip(node) {
9981027
return .skipChildren

Tests/SwiftParserTest/translated/OriginalDefinedInAttrTests.swift

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,15 @@ final class OriginalDefinedInAttrTests: XCTestCase {
3131
public func foo1() {}
3232
"""#,
3333
diagnostics: [
34-
DiagnosticSpec(message: "expected 'module' in @_originallyDefinedIn arguments", fixIts: ["insert 'module'"]),
35-
DiagnosticSpec(message: "unexpected code 'modulename' before @_originallyDefinedIn arguments"),
36-
]
34+
DiagnosticSpec(
35+
message: "expected 'module' in @_originallyDefinedIn arguments",
36+
fixIts: ["replace 'modulename' with 'module'"]
37+
)
38+
],
39+
fixedSource: #"""
40+
@_originallyDefinedIn(module: "foo", OSX 13.13)
41+
public func foo1() {}
42+
"""#
3743
)
3844
}
3945

@@ -53,7 +59,10 @@ final class OriginalDefinedInAttrTests: XCTestCase {
5359
public class ToplevelClass1 {}
5460
"""#,
5561
diagnostics: [
56-
DiagnosticSpec(locationMarker: "1️⃣", message: "expected ',' and version list in @_originallyDefinedIn arguments", fixIts: ["insert ',' and version list"])
62+
DiagnosticSpec(
63+
message: "expected ',' and version list in @_originallyDefinedIn arguments",
64+
fixIts: ["insert ',' and version list"]
65+
)
5766
]
5867
)
5968
}
@@ -200,5 +209,4 @@ final class OriginalDefinedInAttrTests: XCTestCase {
200209
"""
201210
)
202211
}
203-
204212
}

0 commit comments

Comments
 (0)