有没有办法使用叮当格式来做"indentation only"?
Is there a way to use clang-format to do "indentation only"?
- 我有一个很大的代码库,其中的缩进非常不一致
- 我终于从运行代码格式化程序的开发人员那里得到了一些支持
- 我想从修复缩进开始,因为缩进比使用样式运行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本文档将解释此选项的不同参数和值。对于您的具体问题,我将查看";缩进宽度"以及";使用选项卡";。
- 这对"With a stackless coroutine, only the top-level routine may be suspended."意味着什么
- 如何修复输出日志中的"EnableInput can only be specified on a Pawn for its Controller"错误
- 如何理解"abstract-declarator containing an ellipsis shall only be used in a parameter-declaration"
- 开发QR扫描仪以扫描我生成的"only" QR码?
- Protobuf 生成的C++类无法针对 iOS 进行编译,并显示错误"Only virtual member functions can be marked 'final'"
- Windows 10 环境中的"This version of XAudio2 is available only in Windows 8"错误
- CUDA 内核"Only a single pack parameter is allowed"解决方法?
- 为什么仅 -fno-signed-0 就可以实现优化,而似乎也需要 -ffinite-math-only (gcc)
- 在 c++11 模式下使用 QtConcurrent::run with move only 参数
- 为什么这句话"The expression can be used only as the left-hand operand of a member function call"在 [expr.re
- 平息海湾合作委员会的"only available with -std=c++XX or -std=gnu++XX"警告
- 为什么 std::optional 不允许"move construct and copy assign only"类型的移动分配?
- "useinbandfec is a unidirectional receive-only parameter"作品中是什么意思?
- 犰狳/ Xcode:无处"functions that differ only in their return type cannot be overloaded"错误
- SDL_LoadBMP only returning NULL
- OpenCV SVM 在火车上抛出异常,"Bad argument (There is only a single class)"
- "Only non-static member functions may be virtual"
- 分配给数组成员时在 Clang 中"Read-only variable is not assignable"
- Directshow Preview Only 和 Capture & Preview with a Single Graph
- 提升 "header-only libraries" 和"automatic linking"是什么意思?