有没有办法使用叮当格式来做"indentation only"?

Is there a way to use clang-format to do "indentation only"?

本文关键字:indentation only 格式 叮当 有没有      更新时间:2024-09-21
  • 我有一个很大的代码库,其中的缩进非常不一致
  • 我终于从运行代码格式化程序的开发人员那里得到了一些支持
  • 我想从修复缩进开始,因为缩进比使用样式运行clang格式更轻松。
    • 我只喜欢更正缩进,因为当你只做缩进,然后运行git diff --ignore-space-at-eol --ignore-space-change --ignore-all-space时,你会得到零个diff行

我想避免格式化的代码在某种程度上更糟糕的情况,这样人们就可以避免将来通过clang格式之类的东西来改进我们的代码库。在我们的情况下,至少我们只能在空格上达成一致,制表符是4空格。因此,只改进压痕只能是一件好事。

Eclipse具有";正确压痕";(通过菜单->源->正确缩进(:

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

Eclipse的";正确缩进";只执行缩进,但它不是shell命令,我想要/需要一个shell命令,这样我就可以在所有源代码文件上运行该命令。

有没有一种方法可以使用clang格式来做";仅缩进";?如果是,如何

例如,仅限4个空间。

Clang格式始终使用默认格式。你可以自定义它。如果你不指定样式,默认会选择clang格式。[1] ,[2]

不幸的是,您不一定只修复缩进

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

我考虑过配置一个只进行缩进的自定义样式,但不幸的是,在查看样式选项时,有些样式可能会改变代码库,这取决于它的外观,比如AllowShortIfStatementsOnASingleLine这不允许共存

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

因此,您可能会找到一个适用于您的代码库的特定配置,但这将是高度特定和脆弱的。

[1]

配置文件可以由多个部分组成,每个部分都有不同的语言:参数表示该配置部分的目标编程语言。有关支持的语言列表,请参阅下面"语言"选项的说明。第一部分可能没有设置语言,它将为所有lanugage设置默认样式选项。特定语言的配置部分将覆盖在默认部分中设置的选项。

https://clang.llvm.org/docs/ClangFormatStyleOptions.html#configuring-带有clang格式的样式

[2]

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

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

https://clang.llvm.org/docs/ClangFormatStyleOptions.html#configurable-格式样式选项

我没有一个Shell脚本可以对所有源文件执行此操作,但是,我使用VSCode,它允许我在settings.json中指定clang格式的回退样式,这样每次保存文件时,它都会一致地对每个文件应用相同的格式。下面是我的settings.json C_Cpp.lang_format_fallbackStyle的一个示例,它应用了4的缩进宽度。

"C_Cpp.clang_format_fallbackStyle": " {BasedOnStyle: Google, AllowShortCaseLabelsOnASingleLine: true, AlignConsecutiveDeclarations: true, AllowShortFunctionsOnASingleLine: All, AlignTrailingComments: true, Language: Cpp, AlwaysBreakAfterReturnType: None, PenaltyReturnTypeOnItsOwnLine: 9999, PointerAlignment: Left, SortIncludes: true, IndentWidth: 4, ColumnLimit: 0, BreakBeforeBraces: Allman, SpacesBeforeTrailingComments: 5, AlignAfterOpenBracket: true, AlignConsecutiveAssignments: true, AlignConsecutiveMacros : true}",

https://clang.llvm.org/docs/ClangFormatStyleOptions.html本文档将解释此选项的不同参数和值。对于您的具体问题,我将查看";缩进宽度"以及";使用选项卡";。

相关文章: