【问题标题】:clang-format won't attach brace if there is a newline如果有换行符,clang-format 将不会附加大括号
【发布时间】:2019-01-27 16:01:14
【问题描述】:

我遇到了关于 clang 格式的问题:

我要强制执行的是块开头的大括号始终附加到函数头/控制序列...

这意味着,而不是

int f()
{
     return 1;
}

if(o < 1)

{
    return -1;
}

clang-format 应该总是像这样附加左大括号:

int f() {
     return 1;
}

if(o < 1) {
    return -1;
}

虽然这适用于第一种情况(函数头和大括号之间没有换行符),但如果函数头/if 等之间有换行符,则它不起作用。

我没有为clang-format 找到任何强制执行此操作的选项。 最接近我正在寻找的选项是BreakBeforeBraces: Attach,但这也没有正确格式化第二种情况。玩弄这个选项以及BraceWrapping 下的选项也没有解决问题。 有没有办法将clang-format 配置为加入诸如左括号之类的行总是在它们之前的最后一行代码的末尾?

我玩过https://clangformat.com/http://cf.monofraps.net/ 等在线配置器,但找不到满足我需求的选项集。

我目前使用的是 clang-format 3.8 版。

【问题讨论】:

  • 你试过 BreakBeforeBraces: Allman 吗?
  • @katrasnikj:是的,我做到了,但它并没有解决问题。感谢您的建议!
  • 对于小型函数,使用 stackoverflow.com/a/58802059/10063119 SFS_All 运行 clang-format,然后将其删除并添加正确的大括号设置。

标签: c++ clang-format


【解决方案1】:

你可以使用:

MaxEmptyLinesToKeep: 0

这会导致空行被删除,然后大括号将按照您的要求进行格式化。

但是,我认为这对您来说并不是一个很好的解决方案,因为它会删除 所有 个空行,而不仅仅是大括号前的空行。

除此之外,我认为使用 clang-format 6.0.0 是不可能的。我认为它也没有添加到较新的版本中 - documentation 中似乎没有任何内容与此相关。

【讨论】:

    猜你喜欢
    • 2020-08-10
    • 2019-03-20
    • 1970-01-01
    • 2015-06-11
    • 2020-03-06
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    • 2022-01-14
    相关资源
    最近更新 更多