Skip to content

Commit 67c5007

Browse files
authored
Merge pull request #1891 from bnbarham/provide-extension-type-fallback-cherry
[5.9] Plugin should keep handling the conformance macro role
2 parents 887828d + c7a803d commit 67c5007

File tree

3 files changed

+11
-5
lines changed

3 files changed

+11
-5
lines changed

Sources/SwiftCompilerPluginMessageHandling/Macros.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ private extension MacroRole {
168168
case .memberAttribute: self = .memberAttribute
169169
case .member: self = .member
170170
case .peer: self = .peer
171-
case .conformance: self = .conformance
171+
case .conformance: self = .extension
172172
case .codeItem: self = .codeItem
173173
case .extension: self = .extension
174174
}

Sources/SwiftSyntaxMacroExpansion/MacroExpansion.swift

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,13 @@ public func expandAttachedMacroWithoutCollapsing<Context: MacroExpansionContext>
273273
throw MacroExpansionError.declarationNotDeclGroup
274274
}
275275

276-
guard let extendedType = extendedType else {
276+
let extensionOf: TypeSyntax
277+
if let extendedType {
278+
extensionOf = extendedType
279+
} else if let identified = declarationNode.asProtocol(IdentifiedDeclSyntax.self) {
280+
// Fallback for old compilers with a new plugin, where
281+
extensionOf = TypeSyntax(SimpleTypeIdentifierSyntax(name: identified.identifier))
282+
} else {
277283
throw MacroExpansionError.noExtendedTypeSyntax
278284
}
279285

@@ -287,7 +293,7 @@ public func expandAttachedMacroWithoutCollapsing<Context: MacroExpansionContext>
287293
return try attachedMacro.expansion(
288294
of: attributeNode,
289295
attachedTo: node,
290-
providingExtensionsOf: extendedType,
296+
providingExtensionsOf: extensionOf,
291297
conformingTo: protocols,
292298
in: context
293299
)

Sources/SwiftSyntaxMacros/MacroProtocols/ConformanceMacro.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,13 @@ extension ConformanceMacro {
5151
for (proto, whereClause) in newConformances {
5252
let decl: DeclSyntax =
5353
"""
54-
extension \(type.trimmed): \(proto) {}
54+
extension \(type.trimmed): \(proto.trimmed) {}
5555
"""
5656

5757
var extensionDecl = decl.cast(ExtensionDeclSyntax.self)
5858

5959
if let whereClause {
60-
extensionDecl = extensionDecl.with(\.genericWhereClause, whereClause)
60+
extensionDecl = extensionDecl.with(\.genericWhereClause, whereClause.trimmed)
6161
}
6262

6363
extensions.append(extensionDecl)

0 commit comments

Comments
 (0)