有没有一种方法可以使用clang格式执行“仅缩进”?

时间:2020-11-12 14:12:57

标签: c++ c automation clang-format

  • 我的缩进代码基很大,非常不一致。
  • 我终于从开发人员那里得到了购买,以运行代码格式化程序。
  • 我想首先修复缩进,因为缩进比运行带有样式的clang格式要轻。
    • 我仅喜欢校正缩进,因为仅执行缩进然后运行git diff --ignore-space-at-eol --ignore-space-change --ignore-all-space时,您会得到零差异线。

我想避免这种情况,即格式化的代码在某种程度上更糟,因此人们避免了将来通过clang-format之类的方法来使我们的代码库更好的尝试。在我们的情况下,至少我们可以同意仅空格,制表符为4个空格。因此,仅改善缩进只是一件好事。

Eclipse具有“校正缩进”的功能(通过菜单->源->校正缩进):

  • 正确的缩进
  • 如果没有选择,则将简单的缩进规则应用于当前选择或包含光标的行
  • Ctrl + I

Eclipse的“正确缩进”仅执行缩进,但它不是shell命令,我想要/需要shell命令,以便可以在所有源代码文件上运行该命令。

是否可以使用clang格式执行“仅缩进”?如果是,怎么办?

例如只有空格的4个空格。

2 个答案:

答案 0 :(得分:1)

Clang格式始终使用默认格式。您可以对其进行自定义。如果不指定样式,则选择clang格式的默认值。 [1],[2]

不幸的是,您不一定必须仅修复缩进。

KamilCuk在对您的问题的评论中建议使用indent,可能是指https://www.gnu.org/software/indent/

我考虑过配置仅缩进的自定义样式,但是不幸的是,在遍历样式选项时,有些样式可能会更改代码库,具体取决于代码库的外观,例如AllowShortIfStatementsOnASingleLine 这不允许

共存
if (a)
  return ;
else {
  return;
}
if (b) return ;
else {
  return;
}

因此,您可能会找到一个适用于您的代码库的特定配置,但这将是非常具体且脆弱的。

[1]

配置文件可以由几个部分组成,每个部分具有不同的Language(语言):参数表示编程语言,此配置部分针对该语言。有关支持的语言列表,请参见下面的“语言”选项的描述。第一部分可能没有设置语言,它将为所有语言设置默认样式选项。特定语言的配置部分将覆盖默认部分中设置的选项。

https://clang.llvm.org/docs/ClangFormatStyleOptions.html#configuring-style-with-clang-format

[2]

本节列出了受支持的样式选项。为每个选项指定值类型。对于枚举类型,可能的值既指定为C ++枚举成员(带有前缀,例如LS_Auto),也指定为可在配置中使用的值(不带前缀:Auto)。

BasedOnStyle(字符串) 未在配置中专门设置的所有选项所使用的样式。

https://clang.llvm.org/docs/ClangFormatStyleOptions.html#configurable-format-style-options

答案 1 :(得分:0)

我没有可以在所有源文件上执行此操作的Shell脚本,但是,我使用VSCode允许我在settings.json中指定clang格式回退样式,以便每次保存文件时,它将一致的格式始终应用于每个格式。这是我的settings.json C_Cpp.clang_format_fallbackStyle的示例,其缩进宽度为4。

if(isset($user['password']) && password_verify($password, $user['password'])){

https://clang.llvm.org/docs/ClangFormatStyleOptions.html本文档将说明此选项的不同参数和值。对于您的具体问题,我将查看“ IndentWidth”和“ UseTab”。