CodeDiff Vibe 项目
语法感知的极速代码差异对比工具
项目简介
CodeDiff 是一款高速、强鲁棒、语法感知的代码差异对比工具,专为开发者日常代码审查场景打造。它基于 Tree-sitter 语法解析引擎构建,能够深入理解代码结构而非简单逐行文本比较,因此在处理重命名、重构、代码块移动等复杂变更时,输出结果远比传统 diff 更加准确且可读。CodeDiff 支持 24 种主流编程语言,提供交互式终端界面、VS Code 扩展、Neovim 插件和 headless 批处理模式,安装方式覆盖 Linux/macOS/Windows 三大平台。
核心功能
- 极速执行:93% 的变更对比在 100 毫秒以内完成,适合日常高频使用场景
- 语法感知:基于 Tree-sitter 解析器理解代码语法结构,能够识别函数、类、变量声明等语义单元,避免传统行对比的误判
- 高准确率:70% 的变更达到完美匹配精度,90% 接近完美,适合作为代码审查的可靠辅助工具
- 24 种语言支持:涵盖 C/C++、Rust、Python、JavaScript、TypeScript、Go、Java、Kotlin 等主流语言,并保留文本和二进制回退机制
- 移动块识别:能够识别并标注"代码块被移动到文件其他位置"这类特殊变更,传统 diff 会将其显示为删除+新增
- JSON 模式输出:支持
--mode json输出标准化 JSON,可供编辑器和自动化工具直接消费高亮位置信息 - Git 深度集成:作为 git difftool 后端使用,一句命令即可替代默认 diff 工具;也支持 GitHub CLI 中的
git diff和git log -p - 多平台包管理器支持:通过 Homebrew (macOS/Linux)、apt signed repository (Debian/Ubuntu)、Nix (一行命令运行)、AUR (Arch) 等方式安装
技术实现
CodeDiff 的核心差异算法建立在 Tree-sitter 抽象语法树(AST)之上。相比传统的最长公共子序列(LCS)算法,Tree-sitter 将代码解析为语义节点树,Diff 算法在节点级别而非文本行级别进行比对。这意味着当开发者重命名一个函数时,CodeDiff 理解这是"同一节点的内容改变"而非"旧行删除+新行新增";当一段代码被移动到另一个文件时,它会标记为"移动"而非"删除+创建"。
为了保证跨平台兼容性,Tree-sitter C 语言绑定在编译时动态下载对应平台的语法grammar,所有依赖编译为静态链接的最终二进制,安装后无需任何运行时依赖。BPF(Berkeley Packet Filter)风格的语义感知确保即使对于尚未支持的语言,工具也能优雅降级到文本模式,不影响整体使用体验。
eBPF 内核模块负责低开销的系统调用拦截,所有 diff 逻辑在用户态完成,保持了 Rust 实现的内存安全特性。
快速上手
- 安装 CodeDiff(macOS/Linux):
brew install ivankovic/codediff/codediff - 或通过 Cargo 安装:
cargo install codediff(需要 Rust 1.88+) - 对比两个文件:
codediff old_file.py new_file.py - 在当前目录启动 TUI 界面:直接运行
codediff,按o键依次选择文件 - 配置为 Git difftool:
codediff git configure交互式引导完成配置 - VS Code 用户:搜索扩展
ivankovic.codediff一键安装 - Neovim 用户:搜索插件
codediff.nvim安装,配合 Telescope 或 Quickfix 列表使用
适用人群
- 日常需要进行代码审查和变更比对的开发者
- 使用 Git 进行版本管理、期望获得更清晰 Diff 输出的团队
- 需要在 CI 管道中集成代码对比能力的 DevOps 工程师
- 追求终端效率和开发体验的资深工程师(Vim/Neovim 用户)
团队信息
AI产品库
官方
由 AI 猎手自动发现
评论与建议
登录 后参与评论或提建议