菜单

存储库结构

相关源文件

本文档提供了 Sway 编程语言仓库结构的概述,解释了其核心组件、库、工具和插件的组织方式。它作为指南,帮助开发者浏览代码库并理解不同部分之间的关系。

概述

Sway 仓库被组织成一个 Rust 工作区,包含多个 crate,它们协同工作以提供 Sway 语言生态系统的完整功能。这包括编译器、包管理器、语言服务器、格式化工具和其他实用程序。

来源: Cargo.toml1-34 sway-lib-std/Forc.toml1-16

工作空间结构

Sway 仓库被组织成一个 Rust 工作区,在根目录的 Cargo.toml 文件中定义。这种工作区配置允许所有组件之间共享依赖项和高效编译。

来源: Cargo.toml1-260

工作区包括

  1. 核心编译器组件:构成 Sway 编译器本身的组件
  2. 工具和插件:用户级工具,如 forc (Fuel Orchestrator) 及其插件
  3. 实用程序:代码库不同部分使用的共享代码
  4. 测试:用于验证正确性的测试基础设施

工作区依赖项

工作区采用集中的依赖管理方法,版本在根目录的 Cargo.toml 文件中的 [workspace.dependencies] 部分指定。这确保了所有 crate 之间一致的依赖版本。

来源: Cargo.toml43-260

核心组件

编译器

编译器是 Sway 生态系统的核心,它被分解为几个专业组件

sway-core

sway-core 是主要的编译器实现,负责类型检查、语义分析和 IR 生成。

来源: sway-core/Cargo.toml1-56

sway-ir

sway-ir 定义了编译器使用的中间表示(IR),它介于类型化的 AST 和最终的汇编输出之间。

来源: sway-ir/Cargo.toml1-30

sway-ast

sway-ast 定义了 Sway 语言的抽象语法树结构。

sway-parse

sway-parse 实现了解析器,将 Sway 源代码转换为 AST。

来源: sway-parse/Cargo.toml1-29

sway-types

sway-types 包含 Sway 代码库中使用的核心数据类型。

来源: sway-types/Cargo.toml1-31

sway-error

sway-error 提供编译器的错误处理能力。

sway-utils

sway-utils 包含跨多个 crate 使用的通用实用函数和辅助函数。

来源: sway-utils/Cargo.toml1-17 sway-utils/src/helpers.rs1-119

工具和插件

Fuel Orchestrator (forc)

forc 是用于处理 Sway 项目的主要命令行界面。它提供了构建、测试和管理 Sway 代码的命令。

来源: forc/Cargo.toml1-59 forc/src/ops/forc_clean.rs1-44

包管理器 (forc-pkg)

forc-pkg 处理 Sway 项目的包管理,包括依赖解析、获取和构建。

来源: forc-pkg/Cargo.toml1-52

插件

Forc 插件扩展了主 forc 命令的功能

forc-fmt

Sway 的代码格式化程序。

来源: forc-plugins/forc-fmt/Cargo.toml1-23 forc-plugins/forc-fmt/src/main.rs1-409

forc-lsp

用于 IDE 集成的语言服务器协议实现。

来源: forc-plugins/forc-lsp/Cargo.toml1-17

forc-client

与 Fuel 节点交互的接口,包括部署和交易提交。

来源: forc-plugins/forc-client/Cargo.toml1-87

forc-doc

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

test 目录包含 Sway 语言和工具的端到端测试。

来源: test/Cargo.toml1-45

sdk-harness

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

构建和CI基础设施

该仓库包含用于持续集成和部署的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工作流和脚本

来源:Cargo.toml3-33

结论

Sway仓库被组织成一个模块化的Rust工作区,具有明确的关注点分离。编译器组件构成了核心,而像forc及其插件等面向用户的工具为开发者提供了接口。这种结构促进了Sway编程语言生态系统的高效开发、测试和维护。