菜单

开发者指南

相关源文件

本指南旨在帮助希望为 fzf 代码库贡献或修改代码的开发者。它涵盖了从源码构建、核心架构理解、测试框架以及贡献指南。有关使用 fzf 的信息,请参考基本用法命令行选项

从源代码构建

先决条件

要构建 fzf,你需要

  • Go 1.20 或更高版本

快速入门

对于新开发者来说,构建 fzf 最直接的方法是

这会为你的当前平台构建 fzf 二进制文件,并可选地安装 shell 集成脚本、按键绑定和模糊补全。

构建选项

项目包含一个 Makefile,其中有多个目标

版本信息

Makefile 使用 git 命令来确定版本和修订信息。如果在 git 信息不可用的环境中构建,请手动设置$FZF_VERSION$FZF_REVISION

性能分析

要构建启用了性能分析选项的 fzf

来源: BUILD.md go.mod1-20

代码库架构

核心组件

下图展示了构成 fzf 的主要代码组件

关键组件

组件目的文件
终端处理用户输入和显示terminal.go
渲染器用于渲染 UI 的接口light.go, tcell.go
Reader处理来自各种来源的输入reader.go
匹配器实现模糊匹配算法matcher.go
模式处理搜索模式pattern.go
选项管理命令行选项options.go
EventBox协调组件之间的事件eventbox.go

数据流架构

下图说明了数据如何在系统中流动

来源: [核心架构图来自提示]

测试框架

fzf 使用 Go 单元测试和 Ruby 集成测试的组合。

运行测试

运行单元测试

运行集成测试(需要 tmux)

来源: .github/workflows/linux.yml41-48 .github/workflows/macos.yml41-45

贡献指南

开发工作流

持续集成

项目使用 GitHub Actions 进行 CI/CD,并进行以下检查

检查描述配置文件
Linux 测试在 Ubuntu 上进行单元测试和集成测试.github/workflows/linux.yml
macOS 测试在 macOS 上进行单元测试和集成测试.github/workflows/macos.yml
拼写检查确保代码拼写正确.github/workflows/typos.yml
CodeQL 分析安全漏洞扫描.github/workflows/codeql-analysis.yml
依赖项审查检查依赖项问题.github/workflows/depsreview.yaml

代码风格

  • Go 代码应遵循标准的 Go 格式指南 (gofmt)
  • Ruby 代码使用 Rubocop 进行 linting

来源: .github/workflows/linux.yml41-42 .github/workflows/macos.yml38-39

依赖项

fzf 依赖于几个第三方库,如go.mod3-11中所列。

目的
github.com/charlievieth/fastwalk快速目录遍历
github.com/gdamore/tcell/v2终端处理和渲染
github.com/junegunn/go-shellwordsShell 单词解析
github.com/mattn/go-isatty终端检测
github.com/rivo/unisegUnicode 文本分割
golang.org/x/sys系统调用
golang.org/x/term终端处理

来源: go.mod3-11 BUILD.md44-57

许可证

fzf 在 MIT 许可下发布,具体规定在BUILD.md58-61。贡献者应注意,他们的贡献也将受相同的许可协议约束。