@@ -53,7 +53,8 @@ public struct AddAsyncMacro: PeerMacro {
5353 let completionHandlerParameterAttribute = funcDecl. signature. parameterClause. parameters. last?
5454 . type. as ( AttributedTypeSyntax . self) ,
5555 let completionHandlerParameter = completionHandlerParameterAttribute. baseType. as (
56- FunctionTypeSyntax . self)
56+ FunctionTypeSyntax . self
57+ )
5758 else {
5859 throw CustomError . message (
5960 " @addAsync requires an function that has a completion handler as last parameter "
@@ -70,12 +71,27 @@ public struct AddAsyncMacro: PeerMacro {
7071 }
7172
7273 let returnType = completionHandlerParameter. parameters. first? . type
73-
7474 let isResultReturn = returnType? . children ( viewMode: . all) . first? . description == " Result "
75- let successReturnType =
76- isResultReturn
77- ? returnType!. as ( IdentifierTypeSyntax . self) !. genericArgumentClause? . arguments. first!. argument
78- : returnType
75+
76+ let successReturnType : TypeSyntax ? = {
77+ guard isResultReturn
78+ else { return returnType }
79+
80+ let successType = returnType!. as ( IdentifierTypeSyntax . self) !. genericArgumentClause? . arguments. first!
81+ . argument
82+ #if canImport(SwiftSyntax601)
83+ switch successType {
84+ case . none:
85+ return nil
86+ case . type( let syntax) :
87+ return syntax
88+ default :
89+ return nil
90+ }
91+ #else
92+ return successType
93+ #endif
94+ } ( )
7995
8096 // Remove completionHandler and comma from the previous parameter
8197 var newParameterList = funcDecl. signature. parameterClause. parameters
@@ -141,7 +157,9 @@ public struct AddAsyncMacro: PeerMacro {
141157 // add result type
142158 if let successReturnType {
143159 funcDecl. signature. returnClause = ReturnClauseSyntax (
144- leadingTrivia: . space, type: successReturnType. with ( \. leadingTrivia, . space) )
160+ leadingTrivia: . space,
161+ type: successReturnType. with ( \. leadingTrivia, . space)
162+ )
145163 } else {
146164 funcDecl. signature. returnClause = nil
147165 }
0 commit comments