【问题标题】:How to discourage clang-format to break after = signs?如何阻止 clang-format 在 = 符号后中断?
【发布时间】:2015-11-27 20:57:23
【问题描述】:

我使用 clang-format 和一个相当小的配置文件,我对这些选项不是很熟悉。为了这个问题,考虑这段未格式化的代码:

int msgResult = ShowMBox(R_MESSAGE, msgText, MB_OK_ENABLE | MB_CANCEL_ENABLE, MB_STYLE_ERROR);

当我在这个 sn-p 上运行 clang-format 时,我得到了

int msgResult
    = ShowMBox(R_MESSAGE, msgText, MB_OK_ENABLE | MB_CANCEL_ENABLE, MB_STYLE_ERROR);

但我更喜欢

int msgResult = ShowMBox(R_MESSAGE, msgText, MB_OK_ENABLE | MB_CANCEL_ENABLE, 
                         MB_STYLE_ERROR);

有没有办法强制在= 之后不中断,或者至少不想这样做?

【问题讨论】:

  • 您尝试过哪些格式选项?
  • @KarolyHorvath 我试过 BinPackArguments 和 BinPackParameters 但这并不完全是我需要的。此外,有时它确实会按照我发布的方式格式化,但我无法找到确切的条件。
  • 恐怕这种行为是不可配置的。试试 uncrustify (github.com/bengardner/uncrustify),它有更多选择。

标签: c++ clang-format


【解决方案1】:

我相信你想要这两种风格选择:

BinPackArguments: true
AlignAfterOpenBracket: Align

如果没有BinPackArguments,clang-format 将尝试将所有函数参数放在一行,或者如果不能,则每行放置一个函数参数。大多数预定义样式已经将BinPackArguments 设置为true,但Mozilla 样式没有。

如果没有将AlignAfterOpenBracket 设置为Align,clang-format 有时会更喜欢将所有参数放在第二行,而不是只放置一个不与其他参数对齐的单个参数。大多数预定义样式已经将AlignAfterOpenBracket 设置为Align,但WebKit 样式没有。

有关这些设置的更多详细信息,请参阅documentation

我的测试是使用 clang-format 6.0.0 完成的。也许您的早期版本不支持所有这些。

【讨论】:

    猜你喜欢
    • 2020-02-03
    • 2016-01-03
    • 2019-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-06
    • 2020-03-18
    • 2016-05-20
    相关资源
    最近更新 更多