Skip to content

Commit 9d22af9

Browse files
committed
Apply changes from review
1 parent c0bce0d commit 9d22af9

File tree

2 files changed

+24
-36
lines changed

2 files changed

+24
-36
lines changed

Diff for: Sources/SwiftSyntaxMacroExpansion/MacroReplacement.swift

+6-18
Original file line numberDiff line numberDiff line change
@@ -188,8 +188,7 @@ fileprivate class ParameterReplacementVisitor: SyntaxAnyVisitor {
188188

189189
override func visit(_ node: GenericArgumentSyntax) -> SyntaxVisitorContinueKind {
190190
guard let baseName = node.argument.as(IdentifierTypeSyntax.self)?.name else {
191-
// Handle error
192-
return .visitChildren
191+
return .skipChildren
193192
}
194193

195194
guard let genericParameterClause = macro.genericParameterClause else {
@@ -300,7 +299,6 @@ extension MacroDeclSyntax {
300299
private final class MacroExpansionRewriter: SyntaxRewriter {
301300
let parameterReplacements: [DeclReferenceExprSyntax: Int]
302301
let arguments: [ExprSyntax]
303-
// let genericParameterReplacements: [DeclReferenceExprSyntax: Int]
304302
let genericParameterReplacements: [GenericArgumentSyntax: Int]
305303
let genericArguments: [TypeSyntax]
306304

@@ -336,17 +334,9 @@ private final class MacroExpansionRewriter: SyntaxRewriter {
336334
}
337335

338336
// Swap in the argument for type parameter
339-
return GenericArgumentSyntax(
340-
leadingTrivia: node.leadingTrivia,
341-
node.unexpectedBeforeArgument,
342-
argument: genericArguments[parameterIndex].trimmed,
343-
node.unexpectedBetweenArgumentAndTrailingComma,
344-
trailingComma: node.trailingComma,
345-
node.unexpectedAfterTrailingComma
346-
// TODO: seems we're getting spurious trailing " " here,
347-
// skipping trailing trivia for now
348-
// trailingTrivia: node.trailingTrivia
349-
)
337+
var node = node
338+
node.argument = genericArguments[parameterIndex].trimmed
339+
return node
350340
}
351341
}
352342

@@ -380,11 +370,9 @@ extension MacroDeclSyntax {
380370
uniquingKeysWith: { l, r in l }
381371
)
382372
let genericArguments: [TypeSyntax] =
383-
genericArgumentList?.arguments.map { element in
384-
element.argument
385-
} ?? []
373+
genericArgumentList?.arguments.map { $0.argument } ?? []
386374

387-
let rewriter: MacroExpansionRewriter = MacroExpansionRewriter(
375+
let rewriter = MacroExpansionRewriter(
388376
parameterReplacements: parameterReplacements,
389377
arguments: arguments,
390378
genericReplacements: genericReplacements,

Diff for: Tests/SwiftSyntaxMacroExpansionTest/MacroReplacementTests.swift

+18-18
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ final class MacroReplacementTests: XCTestCase {
2424
macro expand1(a: Int, b: Int) = #otherMacro(first: b, second: ["a": a], third: [3.14159, 2.71828], fourth: 4)
2525
"""
2626

27-
let definition = try macro.as(MacroDeclSyntax.self)!.checkDefinition()
27+
let definition = try macro.cast(MacroDeclSyntax.self).checkDefinition()
2828
guard case let .expansion(_, replacements, _) = definition else {
2929
XCTFail("not an expansion definition")
3030
fatalError()
@@ -43,7 +43,7 @@ final class MacroReplacementTests: XCTestCase {
4343

4444
let diags: [Diagnostic]
4545
do {
46-
_ = try macro.as(MacroDeclSyntax.self)!.checkDefinition()
46+
_ = try macro.cast(MacroDeclSyntax.self).checkDefinition()
4747
XCTFail("should have failed with an error")
4848
fatalError()
4949
} catch let diagError as DiagnosticsError {
@@ -69,7 +69,7 @@ final class MacroReplacementTests: XCTestCase {
6969

7070
let diags: [Diagnostic]
7171
do {
72-
_ = try macro.as(MacroDeclSyntax.self)!.checkDefinition()
72+
_ = try macro.cast(MacroDeclSyntax.self).checkDefinition()
7373
XCTFail("should have failed with an error")
7474
fatalError()
7575
} catch let diagError as DiagnosticsError {
@@ -94,7 +94,7 @@ final class MacroReplacementTests: XCTestCase {
9494
#expand1(a: 5, b: 17)
9595
"""
9696

97-
let macroDecl = macro.as(MacroDeclSyntax.self)!
97+
let macroDecl = macro.cast(MacroDeclSyntax.self)
9898
let definition = try macroDecl.checkDefinition()
9999
guard case let .expansion(expansion, replacements, genericReplacements) = definition else {
100100
XCTFail("not a normal expansion")
@@ -115,7 +115,7 @@ final class MacroReplacementTests: XCTestCase {
115115
)
116116
}
117117

118-
func testMacroGenericArgumentExpansion_base() throws {
118+
func testMacroGenericArgumentExpansionBase() throws {
119119
let macro: DeclSyntax =
120120
"""
121121
macro gen<A, B>(a: A, b: B) = #otherMacro<A, B>(first: a, second: b)
@@ -126,7 +126,7 @@ final class MacroReplacementTests: XCTestCase {
126126
#gen<Int, String>(a: 5, b: "Hello")
127127
"""
128128

129-
let macroDecl = macro.as(MacroDeclSyntax.self)!
129+
let macroDecl = macro.cast(MacroDeclSyntax.self)
130130
let definition = try macroDecl.checkDefinition()
131131
guard case let .expansion(expansion, replacements, genericReplacements) = definition else {
132132
XCTFail("not a normal expansion")
@@ -158,7 +158,7 @@ final class MacroReplacementTests: XCTestCase {
158158
)
159159
}
160160

161-
func testMacroGenericArgumentExpansion_ignoreTrivia() throws {
161+
func testMacroGenericArgumentExpansionIgnoreTrivia() throws {
162162
let macro: DeclSyntax =
163163
"""
164164
macro gen<A, B /* some comment */>(a: A, b: B) = #otherMacro<A, B>(first: a, second: b)
@@ -169,7 +169,7 @@ final class MacroReplacementTests: XCTestCase {
169169
#gen<Int, String>(a: 5, b: "Hello")
170170
"""
171171

172-
let macroDecl = macro.as(MacroDeclSyntax.self)!
172+
let macroDecl = macro.cast(MacroDeclSyntax.self)
173173
let definition = try macroDecl.checkDefinition()
174174
guard case let .expansion(expansion, replacements, genericReplacements) = definition else {
175175
XCTFail("not a normal expansion")
@@ -200,7 +200,7 @@ final class MacroReplacementTests: XCTestCase {
200200
)
201201
}
202202

203-
func testMacroGenericArgumentExpansion_notVisitGenericParameterArguments() throws {
203+
func testMacroGenericArgumentExpansionNotVisitGenericParameterArguments() throws {
204204
let macro: DeclSyntax =
205205
"""
206206
macro gen(a: Array<Int>) = #otherMacro(first: a)
@@ -211,7 +211,7 @@ final class MacroReplacementTests: XCTestCase {
211211
#gen(a: [1, 2, 3])
212212
"""
213213

214-
let macroDecl = macro.as(MacroDeclSyntax.self)!
214+
let macroDecl = macro.cast(MacroDeclSyntax.self)
215215
let definition = try macroDecl.checkDefinition()
216216
guard case let .expansion(expansion, replacements, genericReplacements) = definition else {
217217
XCTFail("not a normal expansion")
@@ -234,7 +234,7 @@ final class MacroReplacementTests: XCTestCase {
234234
)
235235
}
236236

237-
func testMacroGenericArgumentExpansion_replaceInner() throws {
237+
func testMacroGenericArgumentExpansionReplaceInner() throws {
238238
let macro: DeclSyntax =
239239
"""
240240
macro gen<A>(a: Array<A>) = #reduce<A>(first: a)
@@ -245,7 +245,7 @@ final class MacroReplacementTests: XCTestCase {
245245
#gen<Int>(a: [1, 2, 3])
246246
"""
247247

248-
let macroDecl = macro.as(MacroDeclSyntax.self)!
248+
let macroDecl = macro.cast(MacroDeclSyntax.self)
249249
let definition = try macroDecl.checkDefinition()
250250
guard case let .expansion(expansion, replacements, genericReplacements) = definition else {
251251
XCTFail("not a normal expansion")
@@ -268,18 +268,18 @@ final class MacroReplacementTests: XCTestCase {
268268
)
269269
}
270270

271-
func testMacroGenericArgumentExpansion_array() throws {
271+
func testMacroGenericArgumentExpansionArray() throws {
272272
let macro: DeclSyntax =
273273
"""
274274
macro gen(a: Array<Int>) = #other<A>(first: a)
275275
"""
276276

277277
let use: ExprSyntax =
278278
"""
279-
#otheren<Int>(a: [1, 2, 3])
279+
#gen<Int>(a: [1, 2, 3])
280280
"""
281281

282-
let macroDecl = macro.as(MacroDeclSyntax.self)!
282+
let macroDecl = macro.cast(MacroDeclSyntax.self)
283283
let definition = try macroDecl.checkDefinition()
284284
guard case let .expansion(expansion, replacements, genericReplacements) = definition else {
285285
XCTFail("not a normal expansion")
@@ -302,18 +302,18 @@ final class MacroReplacementTests: XCTestCase {
302302
)
303303
}
304304

305-
func testMacroExpansion_dontCrashOnDuplicates() throws {
305+
func testMacroExpansionDontCrashOnDuplicates() throws {
306306
let macro: DeclSyntax =
307307
"""
308308
macro gen(a: Array<Int>) = #other<A>(first: a)
309309
"""
310310

311311
let use: ExprSyntax =
312312
"""
313-
#otheren<Int>(a: [1, 2, 3])
313+
#gen<Int>(a: [1, 2, 3])
314314
"""
315315

316-
let macroDecl = macro.as(MacroDeclSyntax.self)!
316+
let macroDecl = macro.cast(MacroDeclSyntax.self)
317317
let definition = try macroDecl.checkDefinition()
318318
guard case let .expansion(expansion, replacements, genericReplacements) = definition else {
319319
XCTFail("not a normal expansion")

0 commit comments

Comments
 (0)