菜单

开发指南

相关源文件

目的

本文档概述了如何为 ripgrep 项目做出贡献。内容涵盖开发环境设置、项目结构、贡献工作流程、测试流程和发布流程。有关从源码构建的更详细信息,请参阅从源码构建;有关测试细节,请参阅测试框架;有关 CI/CD 详情,请参阅CI/CD 流水线;有关发布管理,请参阅发布流程

项目结构

Ripgrep 被组织为一个包含多个 crate 的 Rust 工作区,每个 crate 负责系统内的特定功能。

来源:Cargo.toml38-49

主可执行文件定义在 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,您需要

  1. 一个最近的稳定版 Rust 工具链(ripgrep 需要 Rust 1.72+)
  2. Git 用于版本控制
  3. 可选地,为 pcre2 功能提供 PCRE2 开发库

来源:Cargo.toml27

快速入门

  1. 克隆仓库

    git clone https://github.com/BurntSushi/ripgrep.git
    cd ripgrep
    
  2. 构建项目

    cargo build
    
  3. 运行测试

    cargo test
    

构建 Ripgrep

Ripgrep 支持不同的构建配置文件和功能,这些可以在编译时启用。

构建配置

来源:Cargo.toml73-94

特性

Ripgrep 具有可在编译时启用的可选功能

  • pcre2:启用 PCRE2 正则表达式引擎以支持更多正则表达式语法
    cargo build --features pcre2
    

来源:Cargo.toml70-71

开发工作流

进行更改

在开发 ripgrep 时,请遵循此通用工作流程

  1. 为您的更改创建一个新分支
  2. 进行您的修改
  3. 运行测试以确保功能正常
  4. 提交拉取请求

跨平台考虑

Ripgrep 支持多个平台,并包含特定于平台的代码。构建系统会自动处理其中一些差异

  1. Windows 特有的清单处理,以支持长路径
  2. Git 修订哈希嵌入

来源:build.rs1-46

测试

Ripgrep 使用 Rust 的标准测试框架,并在 tests/tests.rs 中定义了集成测试。在进行更改时,请确保运行以下命令通过所有测试:

cargo test

有关更详细的测试信息,请参阅测试框架

来源:Cargo.toml34-36

发布流程

Ripgrep 遵循发布清单中记录的系统化发布流程。这确保了发布之间质量的一致性。

来源:RELEASE-CHECKLIST.md1-59

特定平台构建

Ripgrep 的发布流程包括为多个平台构建。Apple Silicon 构建需要特殊流程

ci/build-and-publish-m2 <version>

此脚本为 aarch64-apple-darwin 构建 ripgrep,创建包含文档和 shell 补全的发布存档,并将其上传到 GitHub releases。

来源:ci/build-and-publish-m21-44

CI/CD 流水线

Ripgrep 使用 GitHub Actions 进行持续集成和部署。CI 流水线确保代码质量并生成发布构件。

CI 系统为各种目标体系结构构建 ripgrep,包括

  • x86_64-unknown-linux-gnu
  • x86_64-apple-darwin
  • aarch64-apple-darwin(手动构建)
  • x86_64-pc-windows-msvc
  • 各种其他架构

来源:ci/utils.sh1-107 ci/build-and-publish-m21-44

贡献指南

在为 ripgrep 做贡献时

  1. 确保您的代码遵循项目的风格和约定
  2. 为新功能添加测试
  3. 根据需要更新文档
  4. 在提交更改之前运行完整的测试套件
  5. 对于重大更改,请考虑进行基准测试以确保性能不会下降

有关更具体的指导,请参阅本文档顶部链接的各个指南。