c++ - 有没有办法使用 clang-format 来做“只缩进”?
问题描述
- 我有一个很大的代码库,缩进非常不一致。
- 我终于从开发人员那里得到了一些支持来运行代码格式化程序。
- 我想从修复缩进开始,因为缩进比使用样式运行 clang-format 更轻松。
- 我只喜欢更正缩进,因为当您只进行缩进然后运行时,
git diff --ignore-space-at-eol --ignore-space-change --ignore-all-space
您会得到零差异线。
- 我只喜欢更正缩进,因为当您只进行缩进然后运行时,
我想避免格式化代码在某种程度上变得更糟的情况,因此人们避免将来尝试通过诸如 clang-format 之类的方式使我们的代码库变得更好。在我们的例子中,至少我们可以就空格达成一致,制表符是 4 个空格。所以只改进压痕只能是一件好事。
Eclipse 具有“更正缩进”的功能(通过菜单 --> 源 --> 更正缩进):
- 正确的缩进
- 将简单缩进规则应用于当前选择,或包含光标的行(如果没有选择)
- Ctrl+I
Eclipse 的“正确缩进”只是缩进,但它不是一个 shell 命令,我想要/需要一个 shell 命令,以便我可以在所有源代码文件上运行该命令。
有没有办法使用 clang-format 来做“只缩进”?如果是,如何?
例如,只有空格,4 个空格。
解决方案
Clang-format 始终使用默认格式。您可以自定义它。如果您不指定样式,则选择默认的 clang 格式。[1],[2]
不幸的是,您不一定只修复缩进。
在对您的问题的评论中,KamilCuk 建议使用indent
可能指的是https://www.gnu.org/software/indent/
我考虑过配置一个只做缩进的自定义样式,但是,在查看样式选项时,不幸的是,有些可能会改变代码库,具体取决于它的外观,比如AllowShortIfStatementsOnASingleLine
This disallows the co-existence of
if (a)
return ;
else {
return;
}
if (b) return ;
else {
return;
}
因此,您可能会找到适用于您的代码库的特定配置,但这将是高度具体且脆弱的。
[1]
配置文件可以由几个部分组成,每个部分具有不同的语言:参数表示该配置部分所针对的编程语言。有关支持的语言列表,请参阅下面的语言选项说明。第一部分可能没有设置语言,它将为所有语言设置默认样式选项。特定语言的配置部分将覆盖默认部分中设置的选项。
https://clang.llvm.org/docs/ClangFormatStyleOptions.html#configuring-style-with-clang-format
[2]
本节列出了支持的样式选项。为每个选项指定值类型。对于枚举类型,可能的值既可以指定为 C++ 枚举成员(带有前缀,例如 LS_Auto),也可以指定为配置中可用的值(不带前缀:Auto)。
BasedOnStyle (string) 用于未在配置中专门设置的所有选项的样式。
https://clang.llvm.org/docs/ClangFormatStyleOptions.html#configurable-format-style-options
推荐阅读
- python - 用于将字符串转换为其给定字谜的最小相邻交换数量的递归解决方案
- c# - 根本无法让 ASP.NET Web API 路由正常工作
- rest - 登录后的 Http 安全令牌
- python - 如何修复 Selenium 中的 NoSuchElementException?
- python - 如何合并,加入熊猫数据框中具有相同值的行单元格
- javascript - 使用 Js 和 Google 脚本将 HTML 数据发布到 Google 表格 - 错误:缺少 CORS 标头“Access-Control-Allow-Origin”
- javascript - 传单 - 两点之间的路径不是最短的
- python - Discord Python Bot,在给定时间后自动解禁,即使机器人离线,我如何节省时间直到用户被解禁?
- android - 清单合并失败:针对 Android 12 及更高版本的应用需要为 `android:exported` 指定显式值
- machine-learning - LGBM 不随随机状态改变预测