基本上,我有一个宏,它被给定了一些协议,我想输出如下内容作为PeerMacro:
输入:
protocol MyProtocol {
func myFunction(value1: Int, value2: String)
}
输出:
class MyProtocolMock: MyProtocol {
enum Call {
case myFunction(Int, String)
}
func myFunction(value1: Int, value2: String) {
calls.append(.myFunction(value1, value2))
}
}
我有它的大部分工作,我得到了以下一点:
func make(from function: FunctionDeclSyntax) throws -> FunctionDeclSyntax {
FunctionDeclSyntax(name: function.name, signature: function.signature) {
// how to extract the function param names and add here as enum associated values?
"calls.append(.\(function.name)())"
}
}
对于更多上下文,来自参数的function: FunctionDeclSyntax
来自使用proto.memberBlock.members.compactMap { $0.decl.as(FunctionDeclSyntax.self) }
的ProtocolDeclSyntax
,并且协议来自从PeerMacro的根调用declaration.as(ProtocolDeclSyntax.self)
如何从函数params初始化枚举中的相关值?