66

是否可以选择 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
4

2 回答 2

41

clang-tidy 可以使用 FIXITS 对您的代码进行语法更改

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

更新:

clang-tidy 是一个重量级的工具,因为它需要编译选项来解析文件,遗憾的是 clang-format(从 v3.9 开始)不会添加大括号。

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

如果你有一个compile_options.json来自 CMake 的文件,那么你可以将它包含的目录的路径传递给 clang-tidy,它会为该文件查找适当的编译选项:

clang-tidy YOUR_FILE.cpp -fix -checks="readability-braces-around-statements" -p COMPILE_OPTIONS_DIR
于 2015-02-10T17:25:58.653 回答
1

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

来自 clang-format文档

InsertBraces (Boolean) clang-format 15

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

警告:

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

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);
于 2022-02-22T07:14:31.117 回答