clang-format: break 函数参数

clang-format: break function parameters

我想使用 clang-format 来生成 C 函数,例如:

void cfg_InitConfig
(
    cfg_Config_t* cfg,
    char*         name
)
{
    // TODO function
}

看了手册我觉得clang-format做不到。 可能吗?

这是我目前打破函数参数以使用代码围栏而不是长行的最佳解决方案。希望你能在这里找到有用的东西。

为了被隔离,有问题的代码必须长于限制,所以这里是格式化较长示例的方式:

void cfg_InitConfig(cfg_Config_t *cfgxxxxxxxxxxxxxx,
                    char *namexxxxxxxxxxxxxxxxxxx) {
  // TODO function
}

! 符号表示这些行与代码围栏有关。

---
Language:      Cpp
BasedOnStyle:  Google

AccessModifierOffset: -2
AlignAfterOpenBracket: Align
AlignConsecutiveAssignments: false
AlignOperands: false
AlignTrailingComments: false

# !
AllowAllParametersOfDeclarationOnNextLine: false

AllowShortBlocksOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: false
AllowShortIfStatementsOnASingleLine: false
AllowShortLoopsOnASingleLine: false
AllowShortFunctionsOnASingleLine: None

AlwaysBreakBeforeMultilineStrings: false
AlwaysBreakTemplateDeclarations: Yes

# !
BinPackArguments: false
BinPackParameters: false

ColumnLimit: 80
ConstructorInitializerIndentWidth: 2
ContinuationIndentWidth: 2
CompactNamespaces: false

IncludeBlocks: Preserve
IndentWidth: 2

DerivePointerAlignment: false
PointerAlignment: Right

SortIncludes: true
SortUsingDeclarations: true
SpaceBeforeAssignmentOperators: true
SpaceBeforeParens: true

根据你的问题,我查阅了很多资料。不幸的是,没有办法像这样破坏你的代码

void cfg_InitConfig
(
    cfg_Config_t* cfg,
    char*         name
)

但是有人可以创建补丁来打破这种对齐方式,这是可能的。创建那种补丁并不容易。

但是如果你使用这个,你可以获得接近的答案(80% 正确)但实际上不是你想要的。这是代码

BinPackArguments : false
BinPackParameters: false
AlignConsecutiveAssignments : true
AlignConsecutiveDeclarations: true

使用此结果将

void cfg_InitConfig(cfg_Config_t* cfgxxxxxxxxxx,
                    char*         namexxxxxxxx)
{
    // TODO function
}

您必须扩展函数的变量名,除非它们可以放在一行中

Reference