本文档概述了如何为 ripgrep 项目做出贡献。内容涵盖开发环境设置、项目结构、贡献工作流程、测试流程和发布流程。有关从源码构建的更详细信息,请参阅从源码构建;有关测试细节,请参阅测试框架;有关 CI/CD 详情,请参阅CI/CD 流水线;有关发布管理,请参阅发布流程。
Ripgrep 被组织为一个包含多个 crate 的 Rust 工作区,每个 crate 负责系统内的特定功能。
主可执行文件定义在 crates/core/main.rs 中,名为 rg。工作区包含以下 crate:
| Crate | 描述 |
|---|---|
globset | 使用 glob 语法进行文件路径的模式匹配 |
ignore | 基于忽略模式(例如 .gitignore)的文件过滤 |
matcher | 正则表达式引擎的通用接口 |
regex | 默认的正则表达式引擎实现 |
pcre2 | 可选的正则表达式引擎,具有附加功能 |
searcher | 核心文件内容搜索功能 |
printer | 搜索结果的输出格式化 |
grep | 高级搜索编排,结合了其他组件 |
cli | 命令行界面工具 |
来源:Cargo.toml29-32 Cargo.toml38-49
要开发 ripgrep,您需要
pcre2 功能提供 PCRE2 开发库来源:Cargo.toml27
克隆仓库
git clone https://github.com/BurntSushi/ripgrep.git
cd ripgrep
构建项目
cargo build
运行测试
cargo test
Ripgrep 支持不同的构建配置文件和功能,这些可以在编译时启用。
Ripgrep 具有可在编译时启用的可选功能
pcre2:启用 PCRE2 正则表达式引擎以支持更多正则表达式语法cargo build --features pcre2
在开发 ripgrep 时,请遵循此通用工作流程
Ripgrep 支持多个平台,并包含特定于平台的代码。构建系统会自动处理其中一些差异
来源:build.rs1-46
Ripgrep 使用 Rust 的标准测试框架,并在 tests/tests.rs 中定义了集成测试。在进行更改时,请确保运行以下命令通过所有测试:
cargo test
有关更详细的测试信息,请参阅测试框架。
Ripgrep 遵循发布清单中记录的系统化发布流程。这确保了发布之间质量的一致性。
Ripgrep 的发布流程包括为多个平台构建。Apple Silicon 构建需要特殊流程
ci/build-and-publish-m2 <version>
此脚本为 aarch64-apple-darwin 构建 ripgrep,创建包含文档和 shell 补全的发布存档,并将其上传到 GitHub releases。
来源:ci/build-and-publish-m21-44
Ripgrep 使用 GitHub Actions 进行持续集成和部署。CI 流水线确保代码质量并生成发布构件。
CI 系统为各种目标体系结构构建 ripgrep,包括
来源:ci/utils.sh1-107 ci/build-and-publish-m21-44
在为 ripgrep 做贡献时
有关更具体的指导,请参阅本文档顶部链接的各个指南。