美文网首页
SwiftSyntax:解析和生成Swift源代码

SwiftSyntax:解析和生成Swift源代码

作者: 萧修 | 来源:发表于2024-06-24 12:07 被阅读0次

概述

SwiftSyntax是一个Swift库的集合,它允许你解析、检查、生成和调整Swift源代码。它最初是由苹果公司开发的,目前由许多贡献者作为开源库进行维护。你可以在swiftpackageindex.com上找到文档,也可以在GitHub自述中找到许多文章。SwiftSyntax库是构建Swift解析器、Swift -format和Swift宏等工具的基础。

在使用宏时,您可能使用过SwiftDiagnosticsSwiftSyntaxMacros这样的包。如果您不熟悉宏,Swift宏:使用新类型的表达式扩展Swift
,因为这篇文章对于编写和理解自定义宏非常有价值。

SwiftSyntax的发布

SwiftSyntax版本使用匹配的标签名与Swift和Xcode版本保持一致。例如,508.0.0标签版本与Swift 5.8保持一致,而Swift 5.8与Xcode 14.3一起发布。

你可以通过Swift包管理器添加SwiftSyntax作为依赖项:

以宏为为例,下面Package.swift文件

import PackageDescription

let package = Package(
    name: "WWDC",
    platforms: [.macOS(.v10_15), .iOS(.v13), .tvOS(.v13), .watchOS(.v6), .macCatalyst(.v13)],
    dependencies: [
        .package(url: "https://github.com/apple/swift-syntax.git", from: "509.0.0"),
    ],
    targets: [
    .macro(
            name: "WWDCMacros",
            dependencies: [
                .product(name: "SwiftSyntaxMacros", package: "swift-syntax"),
                .product(name: "SwiftCompilerPlugin", package: "swift-syntax")
            ]
        ),
    ]
)

探索Swift源代码的抽象语法树(AST)

SwiftSyntax创建了一个Swift源代码的抽象语法树(AST),它允许你与一个高级、安全、高效的API进行交互。熟悉这种树的一个好方法是使用@kishikawakatsumi开发的swift-ast-explorer.com

以下面为例:

  • 源码
enum EasySlope {
    case beginnersParadise
    case practiceRun
}
  • 抽象语法树
├─attributes: AttributeListSyntax
│ ╰─[0]: AttributeSyntax
│   ├─atSign: atSign
│   ╰─attributeName: IdentifierTypeSyntax
│     ├─name: identifier("EnumSubset")
│     ╰─genericArgumentClause: GenericArgumentClauseSyntax
│       ├─leftAngle: leftAngle
│       ├─arguments: GenericArgumentListSyntax
│       │ ╰─[0]: GenericArgumentSyntax
│       │   ╰─argument: IdentifierTypeSyntax
│       │     ╰─name: identifier("Slope")
│       ╰─rightAngle: rightAngle
├─modifiers: DeclModifierListSyntax
├─enumKeyword: keyword(SwiftSyntax.Keyword.enum)
├─name: identifier("EasySlope")
╰─memberBlock: MemberBlockSyntax
  ├─leftBrace: leftBrace
  ├─members: MemberBlockItemListSyntax
  │ ├─[0]: MemberBlockItemSyntax
  │ │ ╰─decl: EnumCaseDeclSyntax
  │ │   ├─attributes: AttributeListSyntax
  │ │   ├─modifiers: DeclModifierListSyntax
  │ │   ├─caseKeyword: keyword(SwiftSyntax.Keyword.case)
  │ │   ╰─elements: EnumCaseElementListSyntax
  │ │     ╰─[0]: EnumCaseElementSyntax
  │ │       ╰─name: identifier("beginnersParadise")
  │ ╰─[1]: MemberBlockItemSyntax
  │   ╰─decl: EnumCaseDeclSyntax
  │     ├─attributes: AttributeListSyntax
  │     ├─modifiers: DeclModifierListSyntax
  │     ├─caseKeyword: keyword(SwiftSyntax.Keyword.case)
  │     ╰─elements: EnumCaseElementListSyntax
  │       ╰─[0]: EnumCaseElementSyntax
  │         ╰─name: identifier("practiceRun")
  ╰─rightBrace: rightBrace

结论

SwiftSyntax允许你解析和生成Swift源代码,在编写自定义宏时特别有用。使用AST资源管理器,您将能够了解如何将源代码转换为抽象语法树。建议使用末尾闭包和结果构建器,而不是编写复杂的语法节点组合。

引自
SwiftSyntax: Parse and Generate Swift source code

相关文章

网友评论

      本文标题:SwiftSyntax:解析和生成Swift源代码

      本文链接:https://www.haomeiwen.com/subject/ijtdcjtx.html