34 个稳定版本
3.2.0 | 2024 年 5 月 20 日 |
---|---|
3.1.0 | 2024 年 3 月 18 日 |
2.32.0 | 2024 年 2 月 14 日 |
2.27.1 | 2023 年 11 月 13 日 |
2.18.0 | 2022 年 7 月 21 日 |
#31 在 命令行工具
每月下载量 181
1MB
3.5K SLoC
Riff,精炼差异
Riff 是一个围绕 diff
的包装器,突出显示哪些行部分已更改。
类似于 git
,Riff 将其输出发送到分页器,按照以下顺序尝试
- 在环境变量
$PAGER
中指定的内容 - moar 因为它很棒
less
因为它无处不在
用法
git diff | riff
或者如果你这样做...
git config --global pager.diff riff
git config --global pager.show riff
git config --global pager.log riff
git config --global interactive.diffFilter "riff --color=on"
... 那么所有未来的 git diff
、git show
和 git log --patch
输出都将被精炼。
或者您可以将 riff
作为 diff
的别名使用
riff file1.txt file2.txt
配置
您可以通过设置 RIFF
环境变量为一条或多条(空格分隔)命令行选项来配置 riff
。
例如,将 RIFF=--no-adds-only-special
设置为禁用仅添加的特殊高亮显示。
安装
使用 Homebrew
brew install riff
使用 Archlinux 用户仓库 (AUR)
paru -S riffdiff
从 Rust 包
cargo install riffdiff
手动安装
-
请访问 此处 并下载您平台上的正确二进制文件
- 如果您的平台没有二进制文件,请 报告问题
-
chmod a+x riff-*
-
mv riff-* /usr/local/bin/riff
-
可选地,接着这样做以使 riff 默认高亮显示
git
输出
git config --global pager.diff riff
git config --global pager.show riff
git config --global pager.log riff
git config --global interactive.diffFilter "riff --color=on"
另请参阅
这个用于改进 Git 提交信息编辑的 VSCode 扩展器不错。 是的,我写了它,这里在自吹自擂。
如果你(像我一样!)正在使用 VSCode 进行 Git 提交信息编辑,这是一个很好的选择。
更多功能
riff
可以突出显示由 git
创建的冲突标记。
riff
突出显示 git
合并提交的高亮显示。
开发
如果你在 testdata
目录中放置示例输入和输出,那么运行 cargo test
将会验证它们是否匹配。
运行 ci.sh
来执行与 CI 相同的操作。
运行 benchmark.py
来获取当前源代码与早期版本相比的运行速度数字。
运行 git log -p | cargo run --
来演示高亮显示。
发布新版本
只需运行 ./release.sh
并按照说明操作。
如果你想要在不实际发布任何内容的情况下测试发布脚本,请执行:
./release.sh --dry
待办事项
杂项
- 在差异中渲染 ESC 字符为 Unicode ␛
--help
:如果我们尚未从$PATH
内部执行,则仅打印安装到$PATH
的帮助信息。- 运行
git show 57f27da
并思考我们应该使用什么规则来突出显示 REVERSE 和 reversed() 行。 - 添加测试,确保输入行数不会改变,这会搞乱
git add -p
的行为。 - 思考如何可视化添加的换行符以及下一行的缩进。
- 确保我们正确地突出显示
git show --stat
的输出。 - 确保我们能够处理
git
冲突解决差异。文件格式在 https://git-scm.cn/docs/git-diff#_combined_diff_format 中描述。 - 给定命令行上的三个文件,我们应该将它们以及任何选项传递给
diff3
并突出显示结果。
待办事项
- 检测移动的块,并在移动的添加和删除部分之前使用数字作为前缀。像对其他更改一样突出显示任何更改。
完成
- 制作一个主程序,可以从 stdin 读取输入并将其打印到 stdout。
- 让主程序通过前缀识别不同类型的行,并相应地着色。使用与
git
相同的颜色方案。 - 让主程序识别由另一个块替换的行块。
- 确保 Refiner 在旧或新为空时不会突出显示任何内容。
- 使用 https://crates.io/crates/diffus 来细化 hunks。
- 构建细化后的 hunks 并打印它们。
- 将以下行加粗显示并设置为白色:
^diff
、^index
、^+++
和^---
- 使用正确的ANSI颜色代码将所有添加或删除的行前缀
- 不要高亮显示添加或删除行上的初始
+
或-
- 确保我们正确处理diff中的换行符,尝试运行
git show 28e074bd0fc246d1caa3738432806a94f6773185
,带有和没有riff
- 可视化添加的行尾
- 可视化删除的行尾
- 正确可视化文件末尾删除的换行符
- 正确可视化文件末尾添加缺失的换行符
- 正确将文件末尾缺失的换行符作为上下文的一部分可视化
- 正确处理
ax
->bx\nc
- 在处理之前从输入中去除所有颜色,使用户能够将Git的pager.diff和pager.show变量设置为'riff',而无需将color.diff设置为false。
- 如果stdout是终端,则使用
git help config
中core.pager
下描述的算法将输出通过管道传输到分页器。 - 可以运行
git diff | riff
并获得合理的输出。 - 如果有“太多”的差异,则不突出显示任何内容。这里的目的是突出显示更改,但如果它是替换而不是更改,则我们不希望突出显示。
- 通过单词而不是字符进行细化
- 测试用例
git show 2ac5b06
:应突出显示some
和one or
中的所有内容。
- 测试用例
- 如果人们将
$PAGER
设置为riff
,则努力防止分支循环 - 添加对
--help
的支持 - 添加对
--version
的支持 - 如果stdin是终端,则打印帮助并退出
- 在异常情况下,就像
--version
一样打印当前版本 - 在异常情况下,打印问题跟踪器的链接
- 添加测试用例,验证
git show 77c8f77 -- bin/riff
中的Inspired by
部分突出显示为倒置的L。 - 找出LCS算法的缩放情况,并改进当不调用它的启发式方法。
- 调整应该尝试细分的区域大小的上限
- 制作CI脚本
- 设置CI调用CI脚本
- 记录
ci.sh
的存在 - 找出跨编译到Linux和macOS ARM的方法(研究
cross
,它使用Docker进行交叉编译) - 制作发布脚本
- 记录
release.sh
的存在 - 验证Linux二进制文件是否正常工作
- 记录安装说明
- 发布公共版本
- 修复
release.sh
中的FIXME - 向Refiner添加一个尾随空格分析阶段
- 让Refiner以反向红色突出显示添加行中的空格错误
- 仅突出显示添加部分的空格
- 将非首行制表符的突出显示添加到空格分析中
- 进行性能分析,看看我们是否能更快
- 在
ci.sh
中,添加一个测试用例以验证我们的异常处理器在发布构建中打印回溯(当剥离发布二进制文件时应失败) - 在
ci.sh
中,添加一个测试用例以验证我们的异常处理器在发布构建中打印回溯中的riff
框架的行号。这应在剥离发布二进制文件时失败。 - 在发布构建中要求回溯中有行号
- 使Linux二进制文件更小
- 将argv内容放入崩溃报告中
- 处理纯非git diff文件
- 给定命令行上的两个文件,我们应该将它们传递给
diff
并突出显示结果。 - 支持
riff -b path1 path2
来比较忽略空格的文件 - 通过突出显示字符数限制如何突出显示限制,而不是通过突出显示令牌数限制
- 获取一些类型的基准测试套件/示例
- 执行
git show 5e0a1b2b13528f40299e78e3bfa590d9f96637af
并滚动到末尾。我们应该如何可视化No-newline-at-eof代码的重新格式化? - 执行
git show 0f5dd84
并思考如何可视化一行更改为自己结尾的逗号加上大量完全新的行。考虑一个常数数组增加一个或多个额外成员。 - 执行
git show -b 77c8f77
并思考我们应该使用什么规则来突出显示文件末尾的+ refined
和+ page
行的首行空格。
依赖关系
~6–9MB
~171K SLoC