Skip to content

Commit 67284ce

Browse files
committed
Update swift-syntax version
1 parent 24b9f14 commit 67284ce

17 files changed

+149
-128
lines changed

Package.resolved

+2-2
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@
2323
"kind" : "remoteSourceControl",
2424
"location" : "https://github.com/apple/swift-syntax.git",
2525
"state" : {
26-
"revision" : "165fc6d22394c1168ff76ab5d951245971ef07e5",
27-
"version" : "509.0.0-swift-DEVELOPMENT-SNAPSHOT-2023-06-05-a"
26+
"revision" : "6ad4ea24b01559dde0773e3d091f1b9e36175036",
27+
"version" : "509.0.2"
2828
}
2929
},
3030
{

Package.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ let package = Package(
1313
),
1414
],
1515
dependencies: [
16-
.package(url: "https://github.com/apple/swift-syntax.git", from: "509.0.0-swift-5.9-DEVELOPMENT-SNAPSHOT-2023-04-25-b"),
16+
.package(url: "https://github.com/apple/swift-syntax.git", from: "509.0.0"),
1717
.package(url: "https://github.com/apple/swift-docc-plugin", from: "1.1.0"),
1818
.package(url: "https://github.com/ShenghaiWang/SwiftKeychain.git", from: "0.2.0")
1919
],

Sources/Macros/Access.swift

+11-11
Original file line numberDiff line numberDiff line change
@@ -125,34 +125,34 @@ public struct Access: AccessorMacro {
125125
}
126126
}
127127

128-
private extension TupleExprElementSyntax {
128+
private extension LabeledExprSyntax {
129129
var type: String? {
130-
expression.as(MemberAccessExprSyntax.self)?.name.text
131-
?? expression.as(FunctionCallExprSyntax.self)?.calledExpression.as(MemberAccessExprSyntax.self)?.name.text
130+
expression.as(MemberAccessExprSyntax.self)?.declName.baseName.text
131+
?? expression.as(FunctionCallExprSyntax.self)?.calledExpression.as(MemberAccessExprSyntax.self)?.declName.baseName.text
132132
}
133133
}
134134

135-
private extension TupleExprElementSyntax {
135+
private extension LabeledExprSyntax {
136136
var userDefaults: ExprSyntax {
137137
if expression.is(MemberAccessExprSyntax.self) {
138138
return "UserDefaults.standard"
139139
}
140-
if let memeberAceess = expression.as(FunctionCallExprSyntax.self)?.argumentList.first?
141-
.as(TupleExprElementSyntax.self)?.expression.as(MemberAccessExprSyntax.self) {
142-
return "UserDefaults.\(raw: memeberAceess.name.text)"
140+
if let memeberAceess = expression.as(FunctionCallExprSyntax.self)?.arguments.first?
141+
.as(LabeledExprSyntax.self)?.expression.as(MemberAccessExprSyntax.self) {
142+
return "UserDefaults.\(raw: memeberAceess.declName.baseName.text)"
143143
} else {
144-
return expression.as(FunctionCallExprSyntax.self)?.argumentList.first?.expression ?? "UserDefaults.standard"
144+
return expression.as(FunctionCallExprSyntax.self)?.arguments.first?.expression ?? "UserDefaults.standard"
145145
}
146146
}
147147

148148
var object: ExprSyntax? {
149-
expression.as(FunctionCallExprSyntax.self)?.argumentList.first?.as(TupleExprElementSyntax.self)?.expression
149+
expression.as(FunctionCallExprSyntax.self)?.arguments.first?.as(LabeledExprSyntax.self)?.expression
150150
}
151151
}
152152

153-
private extension SimpleTypeIdentifierSyntax {
153+
private extension IdentifierTypeSyntax {
154154
var type: SyntaxProtocol? {
155-
genericArgumentClause?.arguments.first?.as(GenericArgumentSyntax.self)?.argumentType.as(OptionalTypeSyntax.self)?.wrappedType
155+
genericArgumentClause?.arguments.first?.as(GenericArgumentSyntax.self)?.argument.as(OptionalTypeSyntax.self)?.wrappedType
156156
?? genericArgumentClause?.arguments.first?.as(GenericArgumentSyntax.self)
157157
}
158158
}

Sources/Macros/AddAssociatedValueVariable.swift

+9-9
Original file line numberDiff line numberDiff line change
@@ -13,21 +13,21 @@ public struct AddAssociatedValueVariable: MemberMacro {
1313
}
1414
return try members.flatMap { list-> [DeclSyntax] in
1515
try list.compactMap { element -> DeclSyntax? in
16-
guard let associatedValue = element.associatedValue else { return nil }
16+
guard let associatedValue = element.parameterClause else { return nil }
1717
let typeValue: String
18-
if associatedValue.parameterList.isOneSimpleTypeIdentifierSyntax {
19-
typeValue = "\(associatedValue.parameterList.first ?? "")"
18+
if associatedValue.parameters.isOneSimpleTypeIdentifierSyntax {
19+
typeValue = "\(associatedValue.parameters.first ?? "")"
2020
} else {
2121
typeValue = "\(associatedValue)"
2222
}
23-
let varSyntax = try VariableDeclSyntax("\(declaration.modifiers ?? ModifierListSyntax())var \(element.identifier)Value: \(raw: typeValue)?") {
23+
let varSyntax = try VariableDeclSyntax("\(declaration.modifiers )var \(element.name)Value: \(raw: typeValue)?") {
2424
try IfExprSyntax(
25-
"if case let .\(element.identifier)(\(raw: associatedValue.parameterList.toVariableNames)) = self",
25+
"if case let .\(element.name)(\(raw: associatedValue.parameters.toVariableNames)) = self",
2626
bodyBuilder: {
27-
if associatedValue.parameterList.count == 1 {
28-
StmtSyntax("return \(raw: associatedValue.parameterList.toVariableNames)")
27+
if associatedValue.parameters.count == 1 {
28+
StmtSyntax("return \(raw: associatedValue.parameters.toVariableNames)")
2929
} else {
30-
StmtSyntax("return (\(raw: associatedValue.parameterList.toVariableNames))")
30+
StmtSyntax("return (\(raw: associatedValue.parameters.toVariableNames))")
3131
}
3232
})
3333
StmtSyntax(#"return nil"#)
@@ -44,6 +44,6 @@ extension EnumCaseParameterListSyntax {
4444
}
4545

4646
var isOneSimpleTypeIdentifierSyntax: Bool {
47-
count == 1 && (first?.type.is(SimpleTypeIdentifierSyntax.self) ?? false)
47+
count == 1 && (first?.type.is(IdentifierTypeSyntax.self) ?? false)
4848
}
4949
}

Sources/Macros/AddInit.swift

+20-24
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,13 @@ public struct AddInit: MemberMacro {
1414
let (parameters, body) = initBodyAndParams(for: declaration)
1515
let bodyExpr: ExprSyntax = "\(raw: body.joined(separator: "\n"))"
1616
var parametersLiteral = "init(\(parameters.joined(separator: ", ")))"
17-
if let modifiers = declaration.modifiers {
18-
parametersLiteral = "\(modifiers)\(parametersLiteral)"
19-
}
20-
let initDecl = try InitializerDeclSyntax(PartialSyntaxNodeString(stringLiteral: parametersLiteral),
17+
parametersLiteral = "\(declaration.modifiers)\(parametersLiteral)"
18+
let initDecl = try InitializerDeclSyntax(SyntaxNodeString(stringLiteral: parametersLiteral),
2119
bodyBuilder: { bodyExpr })
2220
var result = [DeclSyntax(initDecl)]
23-
if node.argument(for: "withMock")?.as(BooleanLiteralExprSyntax.self)?.booleanLiteral.tokenKind.keyword == .true {
21+
if node.argument(for: "withMock")?.as(BooleanLiteralExprSyntax.self)?.literal.tokenKind.keyword == .true {
2422
let randomValue = node.argument(for: "randomMockValue")?.as(BooleanLiteralExprSyntax.self)?
25-
.booleanLiteral.tokenKind.keyword != .false
23+
.literal.tokenKind.keyword != .false
2624
result.append(mock(basedOn: declaration, randomValue: randomValue))
2725
}
2826
return result
@@ -45,16 +43,16 @@ public struct AddInit: MemberMacro {
4543
parameter += " = nil"
4644
}
4745
parameters.append(parameter)
48-
body.append("self.\(identifier) = \(identifier)")
46+
body.append(" self.\(identifier) = \(identifier)")
4947
}
5048
}
5149
return (params: parameters, body: body)
5250
}
5351

5452
private static func mock(basedOn declaration: DeclGroupSyntax, randomValue: Bool) -> DeclSyntax {
55-
let identifier = (declaration as? StructDeclSyntax)?.identifier.text
56-
?? (declaration as? ClassDeclSyntax)?.identifier.text
57-
?? (declaration as? ActorDeclSyntax)?.identifier.text ?? ""
53+
let identifier = (declaration as? StructDeclSyntax)?.name.text
54+
?? (declaration as? ClassDeclSyntax)?.name.text
55+
?? (declaration as? ActorDeclSyntax)?.name.text ?? ""
5856
let parameters = declaration.memberBlock.members.compactMap { member -> String? in
5957
guard let patternBinding = member.decl.as(VariableDeclSyntax.self)?.bindings
6058
.as(PatternBindingListSyntax.self)?.first?.as(PatternBindingSyntax.self),
@@ -66,23 +64,21 @@ public struct AddInit: MemberMacro {
6664
return "\(identifier): \(mockValue)"
6765
}
6866
var varDelcaration: DeclSyntax = "static let mock = \(raw: identifier)(\(raw: parameters.joined(separator: ", ")))"
69-
if let modifiers = declaration.modifiers {
70-
varDelcaration = "\(modifiers)varDelcaration"
71-
}
67+
varDelcaration = "\(declaration.modifiers)\(varDelcaration)"
7268
varDelcaration = "#if DEBUG\n\(varDelcaration)\n#endif"
7369
return varDelcaration
7470
}
7571
}
7672

7773
extension AttributeSyntax {
7874
func argument(for label: String) -> ExprSyntax? {
79-
argument?.as(TupleExprElementListSyntax.self)?.filter({ $0.label?.text == label }).first?.expression
75+
arguments?.as(LabeledExprListSyntax.self)?.filter({ $0.label?.text == label }).first?.expression
8076
}
8177
}
8278

83-
extension SimpleTypeIdentifierSyntax {
79+
extension IdentifierTypeSyntax {
8480
func mockValue(randomValue: Bool) -> String? {
85-
guard let type = self.as(SimpleTypeIdentifierSyntax.self)?.name.text else { return nil }
81+
guard let type = self.as(IdentifierTypeSyntax.self)?.name.text else { return nil }
8682
if let fun = mockFunctions[type] {
8783
return fun(randomValue)
8884
} else if name.text == "Void" {
@@ -107,30 +103,30 @@ extension OptionalTypeSyntax {
107103

108104
extension FunctionTypeSyntax {
109105
func mockValue(randomValue: Bool) -> String? {
110-
let args = repeatElement("_", count: max(arguments.count, 1)).joined(separator: ", ")
111-
let returnValue = output.returnType.mockValue(randomValue: randomValue) ?? ""
106+
let args = repeatElement("_", count: max(parameters.count, 1)).joined(separator: ", ")
107+
let returnValue = returnClause.type.mockValue(randomValue: randomValue) ?? ""
112108
return "{ \(args) in return \(returnValue) }"
113109
}
114110
}
115111

116112
extension TypeSyntax {
117113
func mockValue(randomValue: Bool) -> String? {
118-
if let mockValue = self.as(SimpleTypeIdentifierSyntax.self)?.mockValue(randomValue: randomValue) {
114+
if let mockValue = self.as(IdentifierTypeSyntax.self)?.mockValue(randomValue: randomValue) {
119115
return mockValue
120116
} else if let type = self.as(DictionaryTypeSyntax.self) {
121-
let mockKeyValue = type.keyType.mockValue(randomValue: randomValue) ?? ""
122-
let mockValueValue = type.valueType.mockValue(randomValue: randomValue) ?? "nil"
117+
let mockKeyValue = type.key.mockValue(randomValue: randomValue) ?? ""
118+
let mockValueValue = type.value.mockValue(randomValue: randomValue) ?? "nil"
123119
return "[\(mockKeyValue): \(mockValueValue)]"
124120
} else if let mockValue = self.as(FunctionTypeSyntax.self)?.mockValue(randomValue: randomValue) {
125121
return mockValue
126122
} else if let mockValue = self.as(TupleTypeSyntax.self)?.elements.first?.type
127123
.as(FunctionTypeSyntax.self)?.mockValue(randomValue: randomValue) {
128124
return mockValue
129-
} else if let type = self.as(ArrayTypeSyntax.self)?.elementType {
125+
} else if let type = self.as(ArrayTypeSyntax.self)?.element {
130126
return "[" + (type.mockValue(randomValue: randomValue) ?? "nil") + "]"
131-
} else if let type = self.as(SimpleTypeIdentifierSyntax.self),
127+
} else if let type = self.as(IdentifierTypeSyntax.self),
132128
type.name.text == "Set",
133-
let genericType = type.genericArgumentClause?.arguments.first?.argumentType {
129+
let genericType = type.genericArgumentClause?.arguments.first?.argument {
134130
return "[" + (genericType.mockValue(randomValue: randomValue) ?? "nil") + "]"
135131
}
136132
return nil

Sources/Macros/AddPublisher.swift

+7-6
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@ public struct AddPublisher: PeerMacro {
99
providingPeersOf declaration: Declaration,
1010
in context: Context) throws -> [DeclSyntax] {
1111
guard let variableDecl = declaration.as(VariableDeclSyntax.self),
12-
let modifiers = variableDecl.modifiers,
13-
modifiers.map({ $0.name.text }).contains("private") else {
12+
variableDecl.modifiers.map({ $0.name.text }).contains("private") else {
1413
throw MacroDiagnostics.errorMacroUsage(message: "Please make the subject private and use the automated generated publisher variable outsite of this type")
1514
}
1615
guard let binding = variableDecl.bindings.first,
@@ -32,12 +31,14 @@ public struct AddPublisher: PeerMacro {
3231

3332
extension PatternBindingListSyntax.Element {
3433
var genericArgumentClause: GenericArgumentClauseSyntax? {
35-
initializer?.value.as(FunctionCallExprSyntax.self)?.calledExpression.as(SpecializeExprSyntax.self)?.genericArgumentClause
36-
?? typeAnnotation?.type.as(SimpleTypeIdentifierSyntax.self)?.genericArgumentClause
34+
initializer?.value.as(FunctionCallExprSyntax.self)?
35+
.calledExpression.as(GenericSpecializationExprSyntax.self)?
36+
.genericArgumentClause
37+
?? typeAnnotation?.type.as(IdentifierTypeSyntax.self)?.genericArgumentClause
3738
}
3839

3940
var typeName: String? {
40-
initializer?.value.as(FunctionCallExprSyntax.self)?.calledExpression.as(SpecializeExprSyntax.self)?.expression.as(IdentifierExprSyntax.self)?.identifier.text
41-
?? typeAnnotation?.type.as(SimpleTypeIdentifierSyntax.self)?.name.text
41+
initializer?.value.as(FunctionCallExprSyntax.self)?.calledExpression.as(GenericSpecializationExprSyntax.self)?.expression.as(DeclReferenceExprSyntax.self)?.baseName.text
42+
?? typeAnnotation?.type.as(IdentifierTypeSyntax.self)?.name.text
4243
}
4344
}

Sources/Macros/FormatDate.swift

+10-10
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,18 @@ public struct FormatDate: ExpressionMacro {
1313

1414
let formatter: DeclSyntax = "let formatter = DateFormatter()"
1515
let formatterStatement = CodeBlockItemSyntax(item: .decl(formatter))
16-
var statementList = CodeBlockItemListSyntax(arrayLiteral: formatterStatement)
17-
node.argumentList.filter { $0.label != nil }.forEach { tupleExprElementSyntax in
18-
if let parameter = tupleExprElementSyntax.label?.text,
19-
!tupleExprElementSyntax.expression.is(NilLiteralExprSyntax.self) {
20-
let stmt: StmtSyntax = "formatter.\(raw: parameter) = \(tupleExprElementSyntax.expression)"
21-
let codeblock = CodeBlockItemSyntax(item: .stmt(stmt))
22-
statementList = statementList.appending(codeblock)
16+
let arguments = node.argumentList.filter { $0.label != nil }
17+
.compactMap { tupleExprElementSyntax in
18+
if let parameter = tupleExprElementSyntax.label?.text,
19+
!tupleExprElementSyntax.expression.is(NilLiteralExprSyntax.self) {
20+
let stmt: StmtSyntax = "\n formatter.\(raw: parameter) = \(tupleExprElementSyntax.expression)"
21+
return CodeBlockItemSyntax(item: .stmt(stmt))
22+
}
23+
return nil
2324
}
24-
}
25-
let returnValue: ExprSyntax = "return formatter.string(from: \(date.expression))"
25+
let returnValue: ExprSyntax = "\n return formatter.string(from: \(date.expression))"
2626
let returnblock = CodeBlockItemSyntax(item: .expr(returnValue))
27-
statementList = statementList.appending(returnblock)
27+
let statementList = CodeBlockItemListSyntax([formatterStatement] + arguments + [returnblock])
2828
let closure = ClosureExprSyntax(statements: statementList)
2929
let function = FunctionCallExprSyntax(callee: closure)
3030
return ExprSyntax(function)

Sources/Macros/FormatDateComponents.swift

+10-22
Original file line numberDiff line numberDiff line change
@@ -23,43 +23,31 @@ public struct FormatDateComponents: ExpressionMacro {
2323
return ExprSyntax(function)
2424
}
2525

26-
private static func parseFromToFunction(for argumentList: TupleExprElementListSyntax,
26+
private static func parseFromToFunction(for argumentList: LabeledExprListSyntax,
2727
from fromDate: ExprSyntax,
2828
to toDate: ExprSyntax) -> CodeBlockItemListSyntax {
2929
let formatter: DeclSyntax = "let formatter = DateComponentsFormatter()"
3030
let formatterStatement = CodeBlockItemSyntax(item: .decl(formatter))
31-
var statementList = CodeBlockItemListSyntax(arrayLiteral: formatterStatement)
32-
argumentList.dropFirst(2).forEach { tupleExprElementSyntax in
33-
if let codeblock = codeblock(for: tupleExprElementSyntax) {
34-
statementList = statementList.appending(codeblock)
35-
}
36-
}
37-
let returnValue: ExprSyntax = "return formatter.string(from: \(fromDate), to: \(toDate))"
31+
let arguments = argumentList.dropFirst(2).compactMap { codeblock(for: $0) }
32+
let returnValue: ExprSyntax = "\n return formatter.string(from: \(fromDate), to: \(toDate))"
3833
let returnblock = CodeBlockItemSyntax(item: .expr(returnValue))
39-
statementList = statementList.appending(returnblock)
40-
return statementList
34+
return CodeBlockItemListSyntax([formatterStatement] + arguments + [returnblock])
4135
}
4236

43-
private static func parseFromFunction(for argumentList: TupleExprElementListSyntax,
37+
private static func parseFromFunction(for argumentList: LabeledExprListSyntax,
4438
from fromInterval: ExprSyntax) -> CodeBlockItemListSyntax {
4539
let formatter: DeclSyntax = "let formatter = DateComponentsFormatter()"
4640
let formatterStatement = CodeBlockItemSyntax(item: .decl(formatter))
47-
var statementList = CodeBlockItemListSyntax(arrayLiteral: formatterStatement)
48-
argumentList.dropFirst(1).forEach { tupleExprElementSyntax in
49-
if let codeblock = codeblock(for: tupleExprElementSyntax) {
50-
statementList = statementList.appending(codeblock)
51-
}
52-
}
53-
let returnValue: ExprSyntax = "return formatter.string(from: \(fromInterval))"
41+
let arguments = argumentList.dropFirst(1).compactMap { codeblock(for: $0) }
42+
let returnValue: ExprSyntax = "\n return formatter.string(from: \(fromInterval))"
5443
let returnblock = CodeBlockItemSyntax(item: .expr(returnValue))
55-
statementList = statementList.appending(returnblock)
56-
return statementList
44+
return CodeBlockItemListSyntax([formatterStatement] + arguments + [returnblock])
5745
}
5846

59-
private static func codeblock(for tupleExprElementSyntax: TupleExprElementSyntax) -> CodeBlockItemSyntax? {
47+
private static func codeblock(for tupleExprElementSyntax: LabeledExprSyntax) -> CodeBlockItemSyntax? {
6048
if let parameter = tupleExprElementSyntax.label?.text,
6149
!tupleExprElementSyntax.expression.is(NilLiteralExprSyntax.self) {
62-
let stmt: StmtSyntax = "formatter.\(raw: parameter) = \(tupleExprElementSyntax.expression)"
50+
let stmt: StmtSyntax = "\n formatter.\(raw: parameter) = \(tupleExprElementSyntax.expression)"
6351
let codeblock = CodeBlockItemSyntax(item: .stmt(stmt))
6452
return codeblock
6553
}

0 commit comments

Comments
 (0)