首页 > 解决方案 > 如果有换行符,clang-format 将不会附加大括号

问题描述

我遇到了关于 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 。

标签: c++clang-format

解决方案


你可以使用:

MaxEmptyLinesToKeep: 0

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

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

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


推荐阅读