1 个不稳定版本
0.1.0 | 2022 年 6 月 28 日 |
---|
#2912 在 解析器实现
16KB
76 行
cformat
目的
cformat 是一个程序,用于使用 clang-format
方便地格式化 C 或 C++ 文件所做的更改。与大多数格式化程序不同,该程序允许进行 增量 重格式化文件。也就是说,当文件中的某行更改时,仅该行(可选地带有一些上下文)将被重格式化,而文件的其他部分将保持原样。这种行为在逐步迁移代码库以实现自动格式化的过程中非常有用。
由于该程序仅是 clang-format
的包装程序,因此它将自动获取相应的配置。
用法
cformat 解析统一差异格式补丁,并根据它推断文件和更改的行。此补丁从标准输入读取。
虽然与 git
没有直接关联,但我们在这里使用它进行说明(并且因为它很可能是程序将被使用的上下文)。为了简化使用,我们引入了一个 git
别名(git cfp
-- "c format patch")来检索任何当前暂存的更改并将它们传递给程序。用于注释当前暂存更改的别名可能如下所示
[alias]
cfp = "!cfp() { git diff --no-prefix --relative --staged --unified=0 \"$@\" | cformat; }; cfp"
一旦您暂存了更改,您就可以运行 git cfp
,受影响的行将根据 clang-format
的规则进行重格式化。
上述定义中的以下三个方面在这里特别相关
--no-prefix
非常重要,以确保输出的差异中包含的路径不包含任何a/
前缀,而直接映射到文件系统中的文件--relative
是必要的,因为没有它,git
会输出相对于仓库根目录的文件名,而cformat
可能是从子目录调用的,在这种情况下,路径不一定映射到文件--unified=0
确保只有实际被修改的行会被重新格式化,而不是用于模糊匹配的上下文中的行;增加上下文以格式化更多被修改周围的行
安装
cformat是用Rust编写的,需要Cargo包管理器来构建。可以使用以下命令安装:cargo install cformat
。它依赖于已安装和可运行的clang-format
。
依赖
~2.9–4MB
~68K SLoC