Skip to content

Commit b179c59

Browse files
committed
Update and use SwiftSyntax 601.0.1
- new `MemberMacro` expansion signature - generic arguments are an enum now (type or expression), presumably for those fixed arrays? (`Array<5>`?)
1 parent e380454 commit b179c59

File tree

3 files changed

+27
-14
lines changed

3 files changed

+27
-14
lines changed

Package.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ let package = Package(
1717
],
1818
dependencies: [
1919
.package(url: "https://github.com/swiftlang/swift-syntax.git",
20-
"509.0.0"..<"600.0.1")
20+
from: "601.0.1")
2121
],
2222
targets: [
2323
.target(

Sources/ManagedModelMacros/ModelMacro/ModelMembers.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
//
22
// Created by Helge Heß.
3-
// Copyright © 2023 ZeeZide GmbH.
3+
// Copyright © 2023-2025 ZeeZide GmbH.
44
//
55

66
import SwiftCompilerPlugin
@@ -24,6 +24,7 @@ extension ModelMacro: MemberMacro { // @attached(member, names:...)
2424
public static func expansion(
2525
of macroNode : AttributeSyntax,
2626
providingMembersOf declaration : some DeclGroupSyntax,
27+
conformingTo protocols : [ TypeSyntax ],
2728
in context : some MacroExpansionContext
2829
) throws -> [ DeclSyntax ]
2930
{

Sources/ManagedModelMacros/Utilities/AttributeTypes.swift

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
//
22
// Created by Helge Heß.
3-
// Copyright © 2023 ZeeZide GmbH.
3+
// Copyright © 2023-2025 ZeeZide GmbH.
44
//
55

66
import SwiftSyntax
@@ -62,14 +62,18 @@ extension TypeSyntax {
6262
}
6363
if let id = opt.wrappedType.as(IdentifierTypeSyntax.self) {
6464
if id.isKnownRelationshipPropertyType {
65-
let element = id.genericArgumentClause?.arguments.first?.argument
66-
return element?.isKnownAttributePropertyType ?? false
65+
guard let argument = id.genericArgumentClause?.arguments.first,
66+
case .type(let typeSyntax) = argument.argument else
67+
{
68+
return false
69+
}
70+
return typeSyntax.isKnownAttributePropertyType
6771
}
6872
return id.isKnownFoundationPropertyType
6973
}
7074
// E.g. this is not representable: `String??`, this is `String?`.
7175
// But Double? or Int? is not representable
72-
// I.e. nesting of Optional's are not representable.
76+
// I.e. nestings of Optional's are not representable.
7377
return false
7478
}
7579

@@ -80,11 +84,16 @@ extension TypeSyntax {
8084
}
8185

8286
if let id = self.as(IdentifierTypeSyntax.self),
83-
id.isKnownFoundationGenericPropertyType {
84-
let arg = id.genericArgumentClause?.arguments.first?.argument
85-
return arg?.isKnownAttributePropertyType ?? false
87+
id.isKnownFoundationGenericPropertyType
88+
{
89+
guard let arg = id.genericArgumentClause?.arguments.first,
90+
case .type(let typeSyntax) = arg.argument else
91+
{
92+
return false
93+
}
94+
return typeSyntax.isKnownAttributePropertyType
8695
}
87-
96+
8897
return self.isKnownAttributePropertyType
8998
}
9099

@@ -144,7 +153,10 @@ extension IdentifierTypeSyntax {
144153

145154
switch name {
146155
case "Array", "Optional", "Set":
147-
return genericArgument.argument.isKnownAttributePropertyType
156+
guard case .type(let typeSyntax) = genericArgument.argument else {
157+
return false
158+
}
159+
return typeSyntax.isKnownAttributePropertyType
148160
default:
149161
return false
150162
}
@@ -176,12 +188,12 @@ extension IdentifierTypeSyntax {
176188
if name == "Optional" { // recurse
177189
guard let generic = genericArgumentClause,
178190
let genericArgument = generic.arguments.first,
179-
generic.arguments.count != 1 else
191+
generic.arguments.count != 1,
192+
case .type(let typeSyntax) = genericArgument.argument else
180193
{
181194
return false
182195
}
183-
return genericArgument.argument
184-
.isKnownRelationshipPropertyType(checkOptional: false)
196+
return typeSyntax.isKnownRelationshipPropertyType(checkOptional: false)
185197
}
186198

187199
if toOneRelationshipTypes.contains(name) {

0 commit comments

Comments
 (0)