本文档提供了 Sway 编程语言仓库结构的概述,解释了其核心组件、库、工具和插件的组织方式。它作为指南,帮助开发者浏览代码库并理解不同部分之间的关系。
Sway 仓库被组织成一个 Rust 工作区,包含多个 crate,它们协同工作以提供 Sway 语言生态系统的完整功能。这包括编译器、包管理器、语言服务器、格式化工具和其他实用程序。
来源: Cargo.toml1-34 sway-lib-std/Forc.toml1-16
Sway 仓库被组织成一个 Rust 工作区,在根目录的 Cargo.toml 文件中定义。这种工作区配置允许所有组件之间共享依赖项和高效编译。
来源: Cargo.toml1-260
工作区包括
forc (Fuel Orchestrator) 及其插件工作区采用集中的依赖管理方法,版本在根目录的 Cargo.toml 文件中的 [workspace.dependencies] 部分指定。这确保了所有 crate 之间一致的依赖版本。
来源: Cargo.toml43-260
编译器是 Sway 生态系统的核心,它被分解为几个专业组件
sway-core 是主要的编译器实现,负责类型检查、语义分析和 IR 生成。
sway-ir 定义了编译器使用的中间表示(IR),它介于类型化的 AST 和最终的汇编输出之间。
sway-ast 定义了 Sway 语言的抽象语法树结构。
sway-parse 实现了解析器,将 Sway 源代码转换为 AST。
sway-types 包含 Sway 代码库中使用的核心数据类型。
sway-error 提供编译器的错误处理能力。
sway-utils 包含跨多个 crate 使用的通用实用函数和辅助函数。
来源: sway-utils/Cargo.toml1-17 sway-utils/src/helpers.rs1-119
forc 是用于处理 Sway 项目的主要命令行界面。它提供了构建、测试和管理 Sway 代码的命令。
来源: forc/Cargo.toml1-59 forc/src/ops/forc_clean.rs1-44
forc-pkg 处理 Sway 项目的包管理,包括依赖解析、获取和构建。
Forc 插件扩展了主 forc 命令的功能
Sway 的代码格式化程序。
来源: forc-plugins/forc-fmt/Cargo.toml1-23 forc-plugins/forc-fmt/src/main.rs1-409
用于 IDE 集成的语言服务器协议实现。
来源: forc-plugins/forc-lsp/Cargo.toml1-17
与 Fuel 节点交互的接口,包括部署和交易提交。
来源: forc-plugins/forc-client/Cargo.toml1-87
Sway 项目的文档生成器。
来源: forc-plugins/forc-doc/src/lib.rs1-44 forc-plugins/forc-doc/src/cli.rs1-57 forc-plugins/forc-doc/tests/lib.rs1-15
Sway 标准库 (sway-lib-std) 为 Sway 程序提供通用功能。它包含在仓库中,但位于主 Rust 工作区结构之外。
来源: sway-lib-std/Forc.toml1-16
test 目录包含 Sway 语言和工具的端到端测试。
sdk-harness 包含使用 Fuel SDK 来测试 Sway 合约和脚本的集成测试。
来源:test/src/sdk-harness/Cargo.toml1-38 test/src/sdk-harness/Cargo.lock1-531 test/src/sdk-harness/test_projects/predicate_data_simple/mod.rs1-202 test/src/sdk-harness/test_projects/predicate_data_struct/mod.rs1-237 test/src/sdk-harness/test_projects/script_data/mod.rs1-51 test/src/sdk-harness/test_projects/block/mod.rs1-165 test/src/sdk-harness/test_projects/low_level_call/mod.rs1-187 test/src/sdk-harness/test_projects/ec_recover_and_match_predicate/mod.rs1-118 test/src/sdk-harness/test_projects/vec_in_abi/mod.rs1-95 test/src/sdk-harness/test_projects/evm_ec_recover/mod.rs1-100 test/src/sdk-harness/test_projects/ec_recover/mod.rs1-59 test/src/sdk-harness/test_projects/parsing_logs/mod.rs1-38 test/src/sdk-harness/test_projects/contract_bytecode/mod.rs1-26 test/src/sdk-harness/test_projects/generics_in_abi/mod.rs1-21 test/src/sdk-harness/test_projects/messages/mod.rs1-22
该仓库包含用于持续集成和部署的GitHub Actions工作流。
来源:.github/workflows/ci.yml1-149 .github/workflows/gh-pages.yml1-168 .github/workflows/scripts/verify_tag.sh1-72
该仓库遵循以下高层目录结构
| 目录 | 描述 |
|---|---|
forc/ | 主要的CLI工具实现 |
forc-pkg/ | 包管理库 |
forc-plugins/ | forc插件(fmt, lsp, client等) |
forc-util/ | forc组件的共享实用程序 |
sway-ast/ | 抽象语法树定义 |
sway-core/ | 核心编译器实现 |
sway-error/ | 错误处理基础设施 |
sway-ir/ | 中间表示 |
sway-parse/ | 解析器实现 |
sway-types/ | 编译器核心类型 |
sway-utils/ | 跨组件的共享实用程序 |
sway-lsp/ | 语言服务器实现 |
swayfmt/ | 代码格式化器 |
sway-lib-std/ | 标准库实现 |
test/ | 测试基础设施和测试 |
.github/ | GitHub Actions工作流和脚本 |
Sway仓库被组织成一个模块化的Rust工作区,具有明确的关注点分离。编译器组件构成了核心,而像forc及其插件等面向用户的工具为开发者提供了接口。这种结构促进了Sway编程语言生态系统的高效开发、测试和维护。