clang格式:中断函数参数

gywdnpxw  于 2023-03-17  发布在  其他
关注(0)|答案(3)|浏览(140)

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

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

阅读了说明书后,我觉得clang格式不行,有可能吗?

ylamdve6

ylamdve61#

这是我目前最好的打破函数参数的解决方案,用代码围栏代替长行。我希望你能在这里找到一些有用的东西。
为了被隔离,相关代码必须长于限制,因此下面是它如何格式化较长的示例:

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
huwehgph

huwehgph2#

使用这些设置几乎可以实现所需的格式:

echo 'void cfg_InitConfig(cfg_Config_t*cfg,char*name){return 0;}' \
    | \
    clang-format-14 \
        --Werror \
        --style="{\
            AlignAfterOpenBracket: BlockIndent, \
            AlignConsecutiveDeclarations: true, \
            AllowAllParametersOfDeclarationOnNextLine: false, \
            BinPackParameters: false, \
            ColumnLimit: 30, \
            IndentWidth: 4, \
            PointerAlignment: Left \
            }"

输出:

void cfg_InitConfig(
    cfg_Config_t* cfg,
    char*         name
) {
    return 0;
}
jyztefdp

jyztefdp3#

我已经研究了很多很多文件根据您的问题。不幸的是没有办法打破您的代码这样

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

相关问题