我正在尝试使用clang格式(在VS代码中)格式化我的C ++文件并将其配置为我的首选样式。对于结构体数组(用于getopts),它会添加大量额外的空间并弄乱了花括号包装:
我将在查询末尾附加.clang格式
这是我希望数组显示的方式:
int main()
{
const struct option longopts[]=
{
{"log-file", required_argument, 0, LOGFILE},
{"log-level", required_argument, 0, LOGLEVEL},
{nullptr, 0, nullptr, 0}
};
}
实际上是这样的:
int main()
{
const struct option longopts[] =
{
{"log-file", required_argument, 0, LOGFILE},
{"log-level", required_argument, 0, LOGLEVEL},
{nullptr, 0, nullptr, 0}};
}
我的.clang格式文件包含:
BasedOnStyle: LLVM
IndentWidth: 2
AlignAfterOpenBracket: Align
AlignTrailingComments: true
AllowAllParametersOfDeclarationOnNextLine: true
AllowShortFunctionsOnASingleLine: true
AllowShortBlocksOnASingleLine: true
BinPackParameters: true
BreakBeforeBraces: Custom
BraceWrapping:
AfterClass: true
AfterControlStatement: true
AfterEnum: true
AfterFunction: true
AfterNamespace: true
AfterObjCDeclaration: true
AfterStruct: true
AfterUnion: true
AfterExternBlock: true
BeforeCatch: true
BeforeElse: true
IndentBraces: false
SplitEmptyFunction: false
SplitEmptyRecord: false
SplitEmptyNamespace: false
BreakConstructorInitializers: AfterColon
ColumnLimit: 0
ConstructorInitializerAllOnOneLineOrOnePerLine: false
IndentCaseLabels: true
KeepEmptyLinesAtTheStartOfBlocks: true
NamespaceIndentation: All
PointerAlignment: Right
SortIncludes: false
SpaceBeforeAssignmentOperators: true
SpaceBeforeParens: Never
SpaceInEmptyParentheses: false
SpacesInContainerLiterals: false
SpacesInAngles: false
SpacesInParentheses: false
SpacesInSquareBrackets: false
UseTab: Never
欢迎使用任何解决方案!
答案 0 :(得分:1)
我不确定是否可以准确地实现所需的功能,但有时最简单的方法是轻松修改源文件以帮助使用clang-format实用程序。首先,您需要在格式文件中添加一个ContinuationIndentWidth: 2
选项。然后在数组的最后一项后面添加一个逗号:
{nullptr, 0, nullptr, 0}, // <---
最后将第一个花括号移到与数组名称相同的行上。生成的文件将如下所示:
int main()
{
const struct option longopts[] = {
{"log-file", required_argument, 0, LOGFILE},
{"log-level", required_argument, 0, LOGLEVEL},
{nullptr, 0, nullptr, 0},
};
}
运行clang格式将使它保持原样。在LLVM快照版本LLVM-9.0.0-r351376-win64.exe
中对clang格式进行了测试。