如何在Swift Macro中抛出错误?是否有现成的DiagnosticMessage实现?
在Swift Macro中抛出错误:无需自定义DiagnosticMessage的方法
你不需要每次编写宏都自定义DiagnosticMessage实现,Swift生态提供了现成的类型和简化API来完成错误诊断:
1. 使用SimpleDiagnosticMessage(自定义诊断ID场景)
SwiftDiagnostics模块中内置了SimpleDiagnosticMessage,它是DiagnosticMessage协议的基础实现,可以直接传入消息内容、严重程度和诊断ID,无需手动编写结构体:
import SwiftDiagnostics // 创建诊断消息 let errorMessage = SimpleDiagnosticMessage( message: "You must attach this macro to a class!", severity: .error, diagnosticID: MessageID(domain: "MyMacroDomain", id: "invalid-target-type") ) // 抛出诊断 context.diagnose(Diagnostic(node: declaration, message: errorMessage))
2. 使用diagnose的简化重载(快速抛出场景)
MacroExpansionContext的diagnose方法提供了更简便的重载,直接传入字符串消息、严重程度和语法节点即可,内部会自动处理DiagnosticMessage的创建:
context.diagnose( "You must attach this macro to a class!", severity: .error, node: declaration )
这种方式适合不需要自定义诊断ID的快速场景,诊断ID会使用默认的生成规则。
关于文档找不到的问题
你在Swift Package Index的SwiftSyntax文档中找不到DiagnosticMessage,是因为它属于**SwiftDiagnostics模块**,而非SwiftSyntax核心模块。使用前需要确保导入SwiftDiagnostics,并且查看文档时要切换到SwiftDiagnostics的页面。
内容的提问来源于stack exchange,提问作者Sweeper
相关产品推荐
相关产品推荐

