Skip to content

Commit 973fced

Browse files
committed
Update AddAsyncMacro.swift
1 parent 6d7dcee commit 973fced

File tree

1 file changed

+18
-5
lines changed

1 file changed

+18
-5
lines changed

Examples/Sources/MacroExamples/Implementation/Peer/AddAsyncMacro.swift

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
//
1111
//===----------------------------------------------------------------------===//
1212

13+
@_spi(ExperimentalLanguageFeatures)
1314
import SwiftSyntax
1415
import SwiftSyntaxMacros
1516

@@ -71,12 +72,24 @@ public struct AddAsyncMacro: PeerMacro {
7172
let returnType = completionHandlerParameter.parameters.first?.type
7273

7374
let isResultReturn = returnType?.children(viewMode: .all).first?.description == "Result"
74-
let successReturnType =
75-
if isResultReturn {
76-
returnType!.as(IdentifierTypeSyntax.self)!.genericArgumentClause?.arguments.first!.argument
77-
} else {
78-
returnType
75+
let successReturnType: TypeSyntax?
76+
77+
if isResultReturn {
78+
let argument = returnType!.as(IdentifierTypeSyntax.self)!.genericArgumentClause?.arguments.first!.argument
79+
80+
switch argument {
81+
case .some(.type(let type)):
82+
successReturnType = type
83+
84+
case .some(.expr(_)):
85+
fatalError("expression not available here")
86+
87+
case .none:
88+
successReturnType = nil
7989
}
90+
} else {
91+
successReturnType = returnType
92+
}
8093

8194
// Remove completionHandler and comma from the previous parameter
8295
var newParameterList = funcDecl.signature.parameterClause.parameters

0 commit comments

Comments
 (0)