如果语句等,可以将大括号添加到单行

是否有一个 clang-format 选项可以将大括号添加到所有 if ()/do/while 语句等?

例句

if( i == 42 )
std::cout << "You found the meaning of life\n";
else
std::cout << "Wrong!\n";

if( i == 42 )
{
std::cout << "You found the meaning of life\n";
}
else
{
std::cout << "Wrong!\n";
}

吸毒

$ clang-format --version
clang-format version 3.6.0
18027 次浏览

Clang-clean 可以使用 FIXITS 对代码进行语法更改

clang-tidy YOUR_FILE.cpp -fix -checks="readability-braces-around-statements" -- COMPILE_OPTIONS

更新:

Clang-clean 是一个重量级工具,因为它需要编译选项来解析文件,遗憾的是,clang-format (在3.9版本中)不会添加大括号。

COMPILE_OPTIONS将是用于编译文件的包含路径等,即 -std=c++14 -stdlib=libc++ -O2 -I.

如果您有一个来自 CMake 的 compile_options.json文件,那么您可以将其所在目录的路径传递到 clang-clean,它将查找文件的适当编译选项:

clang-tidy YOUR_FILE.cpp -fix -checks="readability-braces-around-statements" -p COMPILE_OPTIONS_DIR

从 clang-format-15(目前是主干)开始,答案是肯定的——使用新的 InsertBraces选项,这个选项今天刚刚登陆:
Https://github.com/llvm/llvm-project/commit/77e60bc42c48e16d646488d43210b1630cd4db49 Https://reviews.llvm.org/d120217

来自 Clang 格式的 文件:

InsertBraces (Boolean) clang-format 15

在 C + + 中的控制语句(if、 else、 for、 do 和 while)之后插入大括号,除非控制语句位于宏定义之内,或者大括号将包含预处理器指令。

警告:

将此选项设置为 true 可能会导致由于 clang-format 缺乏完整的语义信息而导致代码格式不正确。因此,应特别注意检查此选项所做的代码更改。

false:                                    true:


if (isa<FunctionDecl>(D))        vs.      if (isa<FunctionDecl>(D)) {
handleFunctionDecl(D);                    handleFunctionDecl(D);
else if (isa<VarDecl>(D))                 } else if (isa<VarDecl>(D)) {
handleVarDecl(D);                         handleVarDecl(D);
else                                      } else {
return;                                   return;
}


while (i--)                      vs.      while (i--) {
for (auto *A : D.attrs())                 for (auto *A : D.attrs()) {
handleAttr(A);                            handleAttr(A);
}
}


do                               vs.      do {
--i;                                      --i;
while (i);                                } while (i);