【问题标题】:ClangFormat argument and parameter binpacking setting not working as expectedClangFormat 参数和参数装箱设置未按预期工作
【发布时间】:2021-01-19 15:15:32
【问题描述】:

如果我有一个函数的参数对于列宽来说太长,它将按预期将它们全部放在新行上。但是,这似乎有时会破坏我的指针对齐方式:

格式化前:

struct ConnectionResult *connect_to_server(struct Folders *start_folder, struct Config *config, struct CTypet *conn_type)

格式化后:

struct ConnectionResult *connect_to_server(struct Folders *start_folder
                                           struct Config * config, 
                                           struct CTypet * conn_type); 

它似乎更喜欢对齐实际变量名并忽略指针对齐规则。这导致我的函数有时看起来与其他函数的样式不一致。我的.clang_format

AlignAfterOpenBracket: Align
AlignConsecutiveMacros: 'true'
AlignConsecutiveAssignments: 'true'
AlignConsecutiveDeclarations: 'true'
AlignTrailingComments: 'true'
BreakBeforeBraces: Allman
IndentCaseLabels: 'true'
IndentWidth: '4'
Language: Cpp
PointerAlignment: Right
SortIncludes: 'true'
SpaceBeforeParens: ControlStatements
SpaceBeforeRangeBasedForLoopColon: 'true'
SpaceInEmptyParentheses: 'false'
BinPackParameters: 'false'
BinPackArguments: 'false'
UseTab: Never
ColumnLimit: 80

作为旁注,这种配置有时也会以一种非常难看的方式中断很长的 for 循环:

之前:

for(size_t current_conn = initial_conn; current_connection <= max_connections; current_conn += connection_offset) { ...}

格式化后:

for (size_t current_conn = initial_conn; current_conn <= max_connections;
     current_conn += connection_offset)
{
    ...
}

实际上,我希望在自己的行上查看 for 循环的每个参数。

我对 C 语言使用 clang 格式比较陌生,我不确定如何解决这个问题。有没有一种好方法可以让我的 clang 格式在这两种情况下都能正常工作?

【问题讨论】:

    标签: c clang-format


    【解决方案1】:

    简短回答:不,clang-format 不会做这两个。

    AlignConsecutiveDeclarations 导致参数声明对齐,PointerAlignment 控制声明中 *&amp; 周围的间距。但似乎AlignConsecutiveDeclarations 忽略了PointerAlignment,而PointerAlignment: Right 实际上只是意味着“在*&amp; 之前添加一个空格”。

    不幸的是,这似乎都不是documented

    对于 for 循环,您似乎需要一个假设的新样式选项,称为 AllowBinPackForLoop,默认为 true(为了向后兼容),但 false 将允许 for 循环被拆分为你问它是否需要不止一条线。但据我所知,这样的事情并不存在。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-19
      • 2016-07-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多