2022-03-05 | 研究与探索 | UNLOCK

clang-format 13 的一个 break change

将 clang-format 的版本从 12 升级到 13 後,我写的一个代码生成器生成的代码无故多了一些空行。

经检查,是 KeepEmptyLinesAtTheStartOfBlocks 选项失效了。

示例代码:

1
2
3
4
5
6
7
8
9
namespace A {


int foo();
}

namespace B {
int foo();
}

所用配置:

1
2
BasedOnStyle: llvm
KeepEmptyLinesAtTheStartOfBlocks: false

clang-format 12 格式化的效果:

1
2
3
4
5
6
7
namespace A {
int foo();
}

namespace B {
int foo();
}

clang-format 13 格式化的效果:

1
2
3
4
5
6
7
8
namespace A {

int foo();
}

namespace B {
int foo();
}

可见 namespace 块中第一个空行在 clang-format 13 中得以保留。

这件事在 clang-format 的 release notes 上是找不到的,仔细搜索才发现,开发团队认为之前的行为是一个 bug:

https://github.com/llvm/llvm-project/commit/e5a8f230c765aebff34221cb3e084316496fc08e