mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-29 12:26:08 +00:00

Pull out common base class for formatting unit tests, removing duplicate code that accumulated over the years. Pull out macro expansion test into its own test file.
938 lines
26 KiB
C++
938 lines
26 KiB
C++
//===- unittest/Format/BracesRemoverTest.cpp ------------------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "FormatTestBase.h"
|
|
|
|
#define DEBUG_TYPE "braces-remover-test"
|
|
|
|
namespace clang {
|
|
namespace format {
|
|
namespace test {
|
|
namespace {
|
|
|
|
class BracesRemoverTest : public FormatTestBase {};
|
|
|
|
TEST_F(BracesRemoverTest, RemoveBraces) {
|
|
FormatStyle Style = getLLVMStyle();
|
|
Style.RemoveBracesLLVM = true;
|
|
|
|
// The following test cases are fully-braced versions of the examples at
|
|
// "llvm.org/docs/CodingStandards.html#don-t-use-braces-on-simple-single-
|
|
// statement-bodies-of-if-else-loop-statements".
|
|
|
|
// Omit the braces since the body is simple and clearly associated with the
|
|
// `if`.
|
|
verifyFormat("if (isa<FunctionDecl>(D))\n"
|
|
" handleFunctionDecl(D);\n"
|
|
"else if (isa<VarDecl>(D))\n"
|
|
" handleVarDecl(D);",
|
|
"if (isa<FunctionDecl>(D)) {\n"
|
|
" handleFunctionDecl(D);\n"
|
|
"} else if (isa<VarDecl>(D)) {\n"
|
|
" handleVarDecl(D);\n"
|
|
"}",
|
|
Style);
|
|
|
|
// Here we document the condition itself and not the body.
|
|
verifyFormat("if (isa<VarDecl>(D)) {\n"
|
|
" // It is necessary that we explain the situation with this\n"
|
|
" // surprisingly long comment, so it would be unclear\n"
|
|
" // without the braces whether the following statement is in\n"
|
|
" // the scope of the `if`.\n"
|
|
" // Because the condition is documented, we can't really\n"
|
|
" // hoist this comment that applies to the body above the\n"
|
|
" // `if`.\n"
|
|
" handleOtherDecl(D);\n"
|
|
"}",
|
|
Style);
|
|
|
|
// Use braces on the outer `if` to avoid a potential dangling `else`
|
|
// situation.
|
|
verifyFormat("if (isa<VarDecl>(D)) {\n"
|
|
" if (shouldProcessAttr(A))\n"
|
|
" handleAttr(A);\n"
|
|
"}",
|
|
"if (isa<VarDecl>(D)) {\n"
|
|
" if (shouldProcessAttr(A)) {\n"
|
|
" handleAttr(A);\n"
|
|
" }\n"
|
|
"}",
|
|
Style);
|
|
|
|
// Use braces for the `if` block to keep it uniform with the `else` block.
|
|
verifyFormat("if (isa<FunctionDecl>(D)) {\n"
|
|
" handleFunctionDecl(D);\n"
|
|
"} else {\n"
|
|
" // In this `else` case, it is necessary that we explain the\n"
|
|
" // situation with this surprisingly long comment, so it\n"
|
|
" // would be unclear without the braces whether the\n"
|
|
" // following statement is in the scope of the `if`.\n"
|
|
" handleOtherDecl(D);\n"
|
|
"}",
|
|
Style);
|
|
|
|
// This should also omit braces. The `for` loop contains only a single
|
|
// statement, so it shouldn't have braces. The `if` also only contains a
|
|
// single simple statement (the `for` loop), so it also should omit braces.
|
|
verifyFormat("if (isa<FunctionDecl>(D))\n"
|
|
" for (auto *A : D.attrs())\n"
|
|
" handleAttr(A);",
|
|
"if (isa<FunctionDecl>(D)) {\n"
|
|
" for (auto *A : D.attrs()) {\n"
|
|
" handleAttr(A);\n"
|
|
" }\n"
|
|
"}",
|
|
Style);
|
|
|
|
// Use braces for a `do-while` loop and its enclosing statement.
|
|
verifyFormat("if (Tok->is(tok::l_brace)) {\n"
|
|
" do {\n"
|
|
" Tok = Tok->Next;\n"
|
|
" } while (Tok);\n"
|
|
"}",
|
|
Style);
|
|
|
|
// Use braces for the outer `if` since the nested `for` is braced.
|
|
verifyFormat("if (isa<FunctionDecl>(D)) {\n"
|
|
" for (auto *A : D.attrs()) {\n"
|
|
" // In this `for` loop body, it is necessary that we\n"
|
|
" // explain the situation with this surprisingly long\n"
|
|
" // comment, forcing braces on the `for` block.\n"
|
|
" handleAttr(A);\n"
|
|
" }\n"
|
|
"}",
|
|
Style);
|
|
|
|
// Use braces on the outer block because there are more than two levels of
|
|
// nesting.
|
|
verifyFormat("if (isa<FunctionDecl>(D)) {\n"
|
|
" for (auto *A : D.attrs())\n"
|
|
" for (ssize_t i : llvm::seq<ssize_t>(count))\n"
|
|
" handleAttrOnDecl(D, A, i);\n"
|
|
"}",
|
|
"if (isa<FunctionDecl>(D)) {\n"
|
|
" for (auto *A : D.attrs()) {\n"
|
|
" for (ssize_t i : llvm::seq<ssize_t>(count)) {\n"
|
|
" handleAttrOnDecl(D, A, i);\n"
|
|
" }\n"
|
|
" }\n"
|
|
"}",
|
|
Style);
|
|
|
|
// Use braces on the outer block because of a nested `if`; otherwise the
|
|
// compiler would warn: `add explicit braces to avoid dangling else`
|
|
verifyFormat("if (auto *D = dyn_cast<FunctionDecl>(D)) {\n"
|
|
" if (shouldProcess(D))\n"
|
|
" handleVarDecl(D);\n"
|
|
" else\n"
|
|
" markAsIgnored(D);\n"
|
|
"}",
|
|
"if (auto *D = dyn_cast<FunctionDecl>(D)) {\n"
|
|
" if (shouldProcess(D)) {\n"
|
|
" handleVarDecl(D);\n"
|
|
" } else {\n"
|
|
" markAsIgnored(D);\n"
|
|
" }\n"
|
|
"}",
|
|
Style);
|
|
|
|
verifyFormat("// clang-format off\n"
|
|
"// comment\n"
|
|
"while (i > 0) { --i; }\n"
|
|
"// clang-format on\n"
|
|
"while (j < 0)\n"
|
|
" ++j;",
|
|
"// clang-format off\n"
|
|
"// comment\n"
|
|
"while (i > 0) { --i; }\n"
|
|
"// clang-format on\n"
|
|
"while (j < 0) { ++j; }",
|
|
Style);
|
|
|
|
verifyFormat("for (;;) {\n"
|
|
" for (;;)\n"
|
|
" for (;;)\n"
|
|
" a;\n"
|
|
"}",
|
|
"for (;;) {\n"
|
|
" for (;;) {\n"
|
|
" for (;;) {\n"
|
|
" a;\n"
|
|
" }\n"
|
|
" }\n"
|
|
"}",
|
|
Style);
|
|
|
|
verifyFormat("if (a)\n"
|
|
" b; // comment\n"
|
|
"else if (c)\n"
|
|
" d; /* comment */\n"
|
|
"else\n"
|
|
" e;",
|
|
"if (a) {\n"
|
|
" b; // comment\n"
|
|
"} else if (c) {\n"
|
|
" d; /* comment */\n"
|
|
"} else {\n"
|
|
" e;\n"
|
|
"}",
|
|
Style);
|
|
|
|
verifyFormat("if (a) {\n"
|
|
" b;\n"
|
|
" c;\n"
|
|
"} else if (d) {\n"
|
|
" e;\n"
|
|
"}",
|
|
Style);
|
|
|
|
verifyFormat("if (a) {\n"
|
|
"#undef NDEBUG\n"
|
|
" b;\n"
|
|
"} else {\n"
|
|
" c;\n"
|
|
"}",
|
|
Style);
|
|
|
|
verifyFormat("if (a) {\n"
|
|
" // comment\n"
|
|
"} else if (b) {\n"
|
|
" c;\n"
|
|
"}",
|
|
Style);
|
|
|
|
verifyFormat("if (a) {\n"
|
|
" b;\n"
|
|
"} else {\n"
|
|
" { c; }\n"
|
|
"}",
|
|
Style);
|
|
|
|
verifyFormat("if (a) {\n"
|
|
" if (b) // comment\n"
|
|
" c;\n"
|
|
"} else if (d) {\n"
|
|
" e;\n"
|
|
"}",
|
|
"if (a) {\n"
|
|
" if (b) { // comment\n"
|
|
" c;\n"
|
|
" }\n"
|
|
"} else if (d) {\n"
|
|
" e;\n"
|
|
"}",
|
|
Style);
|
|
|
|
verifyFormat("if (a) {\n"
|
|
" if (b) {\n"
|
|
" c;\n"
|
|
" // comment\n"
|
|
" } else if (d) {\n"
|
|
" e;\n"
|
|
" }\n"
|
|
"}",
|
|
Style);
|
|
|
|
verifyFormat("if (a) {\n"
|
|
" if (b)\n"
|
|
" c;\n"
|
|
"}",
|
|
"if (a) {\n"
|
|
" if (b) {\n"
|
|
" c;\n"
|
|
" }\n"
|
|
"}",
|
|
Style);
|
|
|
|
verifyFormat("if (a)\n"
|
|
" if (b)\n"
|
|
" c;\n"
|
|
" else\n"
|
|
" d;\n"
|
|
"else\n"
|
|
" e;",
|
|
"if (a) {\n"
|
|
" if (b) {\n"
|
|
" c;\n"
|
|
" } else {\n"
|
|
" d;\n"
|
|
" }\n"
|
|
"} else {\n"
|
|
" e;\n"
|
|
"}",
|
|
Style);
|
|
|
|
verifyFormat("if (a) {\n"
|
|
" // comment\n"
|
|
" if (b)\n"
|
|
" c;\n"
|
|
" else if (d)\n"
|
|
" e;\n"
|
|
"} else {\n"
|
|
" g;\n"
|
|
"}",
|
|
"if (a) {\n"
|
|
" // comment\n"
|
|
" if (b) {\n"
|
|
" c;\n"
|
|
" } else if (d) {\n"
|
|
" e;\n"
|
|
" }\n"
|
|
"} else {\n"
|
|
" g;\n"
|
|
"}",
|
|
Style);
|
|
|
|
verifyFormat("if (a)\n"
|
|
" b;\n"
|
|
"else if (c)\n"
|
|
" d;\n"
|
|
"else\n"
|
|
" e;",
|
|
"if (a) {\n"
|
|
" b;\n"
|
|
"} else {\n"
|
|
" if (c) {\n"
|
|
" d;\n"
|
|
" } else {\n"
|
|
" e;\n"
|
|
" }\n"
|
|
"}",
|
|
Style);
|
|
|
|
verifyFormat("if (a) {\n"
|
|
" if (b)\n"
|
|
" c;\n"
|
|
" else if (d)\n"
|
|
" e;\n"
|
|
"} else {\n"
|
|
" g;\n"
|
|
"}",
|
|
"if (a) {\n"
|
|
" if (b)\n"
|
|
" c;\n"
|
|
" else {\n"
|
|
" if (d)\n"
|
|
" e;\n"
|
|
" }\n"
|
|
"} else {\n"
|
|
" g;\n"
|
|
"}",
|
|
Style);
|
|
|
|
verifyFormat("if (isa<VarDecl>(D)) {\n"
|
|
" for (auto *A : D.attrs())\n"
|
|
" if (shouldProcessAttr(A))\n"
|
|
" handleAttr(A);\n"
|
|
"}",
|
|
"if (isa<VarDecl>(D)) {\n"
|
|
" for (auto *A : D.attrs()) {\n"
|
|
" if (shouldProcessAttr(A)) {\n"
|
|
" handleAttr(A);\n"
|
|
" }\n"
|
|
" }\n"
|
|
"}",
|
|
Style);
|
|
|
|
verifyFormat("do {\n"
|
|
" ++I;\n"
|
|
"} while (hasMore() && Filter(*I));",
|
|
"do { ++I; } while (hasMore() && Filter(*I));", Style);
|
|
|
|
verifyFormat("if (a)\n"
|
|
" if (b)\n"
|
|
" c;\n"
|
|
" else {\n"
|
|
" if (d)\n"
|
|
" e;\n"
|
|
" }\n"
|
|
"else\n"
|
|
" f;",
|
|
Style);
|
|
|
|
verifyFormat("if (a)\n"
|
|
" if (b)\n"
|
|
" c;\n"
|
|
" else {\n"
|
|
" if (d)\n"
|
|
" e;\n"
|
|
" else if (f)\n"
|
|
" g;\n"
|
|
" }\n"
|
|
"else\n"
|
|
" h;",
|
|
Style);
|
|
|
|
verifyFormat("if (a) {\n"
|
|
" b;\n"
|
|
"} else if (c) {\n"
|
|
" d;\n"
|
|
" e;\n"
|
|
"}",
|
|
"if (a) {\n"
|
|
" b;\n"
|
|
"} else {\n"
|
|
" if (c) {\n"
|
|
" d;\n"
|
|
" e;\n"
|
|
" }\n"
|
|
"}",
|
|
Style);
|
|
|
|
verifyFormat("if (a) {\n"
|
|
" b;\n"
|
|
" c;\n"
|
|
"} else if (d) {\n"
|
|
" e;\n"
|
|
" f;\n"
|
|
"}",
|
|
"if (a) {\n"
|
|
" b;\n"
|
|
" c;\n"
|
|
"} else {\n"
|
|
" if (d) {\n"
|
|
" e;\n"
|
|
" f;\n"
|
|
" }\n"
|
|
"}",
|
|
Style);
|
|
|
|
verifyFormat("if (a) {\n"
|
|
" b;\n"
|
|
"} else if (c) {\n"
|
|
" d;\n"
|
|
"} else {\n"
|
|
" e;\n"
|
|
" f;\n"
|
|
"}",
|
|
"if (a) {\n"
|
|
" b;\n"
|
|
"} else {\n"
|
|
" if (c) {\n"
|
|
" d;\n"
|
|
" } else {\n"
|
|
" e;\n"
|
|
" f;\n"
|
|
" }\n"
|
|
"}",
|
|
Style);
|
|
|
|
verifyFormat("if (a) {\n"
|
|
" b;\n"
|
|
"} else if (c) {\n"
|
|
" d;\n"
|
|
"} else if (e) {\n"
|
|
" f;\n"
|
|
" g;\n"
|
|
"}",
|
|
"if (a) {\n"
|
|
" b;\n"
|
|
"} else {\n"
|
|
" if (c) {\n"
|
|
" d;\n"
|
|
" } else if (e) {\n"
|
|
" f;\n"
|
|
" g;\n"
|
|
" }\n"
|
|
"}",
|
|
Style);
|
|
|
|
verifyFormat("if (a) {\n"
|
|
" if (b)\n"
|
|
" c;\n"
|
|
" else if (d) {\n"
|
|
" e;\n"
|
|
" f;\n"
|
|
" }\n"
|
|
"} else {\n"
|
|
" g;\n"
|
|
"}",
|
|
"if (a) {\n"
|
|
" if (b)\n"
|
|
" c;\n"
|
|
" else {\n"
|
|
" if (d) {\n"
|
|
" e;\n"
|
|
" f;\n"
|
|
" }\n"
|
|
" }\n"
|
|
"} else {\n"
|
|
" g;\n"
|
|
"}",
|
|
Style);
|
|
|
|
verifyFormat("if (a)\n"
|
|
" if (b)\n"
|
|
" c;\n"
|
|
" else {\n"
|
|
" if (d) {\n"
|
|
" e;\n"
|
|
" f;\n"
|
|
" }\n"
|
|
" }\n"
|
|
"else\n"
|
|
" g;",
|
|
Style);
|
|
|
|
verifyFormat("if (a) {\n"
|
|
" b;\n"
|
|
" c;\n"
|
|
"} else { // comment\n"
|
|
" if (d) {\n"
|
|
" e;\n"
|
|
" f;\n"
|
|
" }\n"
|
|
"}",
|
|
Style);
|
|
|
|
verifyFormat("if (a)\n"
|
|
" b;\n"
|
|
"else if (c)\n"
|
|
" while (d)\n"
|
|
" e;\n"
|
|
"// comment",
|
|
"if (a)\n"
|
|
"{\n"
|
|
" b;\n"
|
|
"} else if (c) {\n"
|
|
" while (d) {\n"
|
|
" e;\n"
|
|
" }\n"
|
|
"}\n"
|
|
"// comment",
|
|
Style);
|
|
|
|
verifyFormat("if (a) {\n"
|
|
" b;\n"
|
|
"} else if (c) {\n"
|
|
" d;\n"
|
|
"} else {\n"
|
|
" e;\n"
|
|
" g;\n"
|
|
"}",
|
|
Style);
|
|
|
|
verifyFormat("if (a) {\n"
|
|
" b;\n"
|
|
"} else if (c) {\n"
|
|
" d;\n"
|
|
"} else {\n"
|
|
" e;\n"
|
|
"} // comment",
|
|
Style);
|
|
|
|
verifyFormat("int abs = [](int i) {\n"
|
|
" if (i >= 0)\n"
|
|
" return i;\n"
|
|
" return -i;\n"
|
|
"};",
|
|
"int abs = [](int i) {\n"
|
|
" if (i >= 0) {\n"
|
|
" return i;\n"
|
|
" }\n"
|
|
" return -i;\n"
|
|
"};",
|
|
Style);
|
|
|
|
verifyFormat("if (a)\n"
|
|
" foo();\n"
|
|
"else\n"
|
|
" bar();",
|
|
"if (a)\n"
|
|
"{\n"
|
|
" foo();\n"
|
|
"}\n"
|
|
"else\n"
|
|
"{\n"
|
|
" bar();\n"
|
|
"}",
|
|
Style);
|
|
|
|
verifyFormat("if (a)\n"
|
|
" foo();\n"
|
|
"// comment\n"
|
|
"else\n"
|
|
" bar();",
|
|
"if (a) {\n"
|
|
" foo();\n"
|
|
"}\n"
|
|
"// comment\n"
|
|
"else {\n"
|
|
" bar();\n"
|
|
"}",
|
|
Style);
|
|
|
|
verifyFormat("if (a) {\n"
|
|
" if (b)\n"
|
|
" c = 1; // comment\n"
|
|
"}",
|
|
"if (a) {\n"
|
|
" if (b) {\n"
|
|
" c = 1; // comment\n"
|
|
" }\n"
|
|
"}",
|
|
Style);
|
|
|
|
verifyFormat("if (a) // comment\n"
|
|
" b = 1;",
|
|
"if (a) // comment\n"
|
|
"{\n"
|
|
" b = 1;\n"
|
|
"}",
|
|
Style);
|
|
|
|
verifyFormat("if (a) {\n"
|
|
"Label:\n"
|
|
"}",
|
|
Style);
|
|
|
|
verifyFormat("if (a) {\n"
|
|
"Label:\n"
|
|
" f();\n"
|
|
"}",
|
|
Style);
|
|
|
|
verifyFormat("if (a) {\n"
|
|
" f();\n"
|
|
"Label:\n"
|
|
"}",
|
|
Style);
|
|
|
|
verifyFormat("if consteval {\n"
|
|
" f();\n"
|
|
"} else {\n"
|
|
" g();\n"
|
|
"}",
|
|
Style);
|
|
|
|
verifyFormat("if not consteval {\n"
|
|
" f();\n"
|
|
"} else if (a) {\n"
|
|
" g();\n"
|
|
"}",
|
|
Style);
|
|
|
|
verifyFormat("if !consteval {\n"
|
|
" g();\n"
|
|
"}",
|
|
Style);
|
|
|
|
verifyFormat("while (0)\n"
|
|
" if (a)\n"
|
|
" return b;\n"
|
|
"return a;",
|
|
"while (0) {\n"
|
|
" if (a) {\n"
|
|
" return b;\n"
|
|
"}}\n"
|
|
"return a;",
|
|
Style);
|
|
|
|
verifyFormat("if (a)\n"
|
|
"#ifdef FOO\n"
|
|
" if (b)\n"
|
|
" bar = c;\n"
|
|
" else\n"
|
|
"#endif\n"
|
|
" {\n"
|
|
" foo = d;\n"
|
|
"#ifdef FOO\n"
|
|
" bar = e;\n"
|
|
"#else\n"
|
|
" bar = f;\n" // FIXME: should be indented 1 more level.
|
|
"#endif\n"
|
|
" }\n"
|
|
"else\n"
|
|
" bar = g;",
|
|
"if (a)\n"
|
|
"#ifdef FOO\n"
|
|
" if (b)\n"
|
|
" bar = c;\n"
|
|
" else\n"
|
|
"#endif\n"
|
|
" {\n"
|
|
" foo = d;\n"
|
|
"#ifdef FOO\n"
|
|
" bar = e;\n"
|
|
"#else\n"
|
|
" bar = f;\n"
|
|
"#endif\n"
|
|
" }\n"
|
|
"else {\n"
|
|
" bar = g;\n"
|
|
"}",
|
|
Style);
|
|
|
|
Style.ColumnLimit = 65;
|
|
verifyFormat("if (condition) {\n"
|
|
" ff(Indices,\n"
|
|
" [&](unsigned LHSI, unsigned RHSI) { return true; });\n"
|
|
"} else {\n"
|
|
" ff(Indices,\n"
|
|
" [&](unsigned LHSI, unsigned RHSI) { return true; });\n"
|
|
"}",
|
|
Style);
|
|
|
|
Style.ColumnLimit = 20;
|
|
|
|
verifyFormat("int i;\n"
|
|
"#define FOO(a, b) \\\n"
|
|
" while (a) { \\\n"
|
|
" b; \\\n"
|
|
" }",
|
|
Style);
|
|
|
|
verifyFormat("int ab = [](int i) {\n"
|
|
" if (i > 0) {\n"
|
|
" i = 12345678 -\n"
|
|
" i;\n"
|
|
" }\n"
|
|
" return i;\n"
|
|
"};",
|
|
Style);
|
|
|
|
verifyFormat("if (a) {\n"
|
|
" b = c + // 1 -\n"
|
|
" d;\n"
|
|
"}",
|
|
Style);
|
|
|
|
verifyFormat("if (a) {\n"
|
|
" b = c >= 0 ? d\n"
|
|
" : e;\n"
|
|
"}",
|
|
"if (a) {\n"
|
|
" b = c >= 0 ? d : e;\n"
|
|
"}",
|
|
Style);
|
|
|
|
verifyFormat("if (a)\n"
|
|
" b = c > 0 ? d : e;",
|
|
"if (a) {\n"
|
|
" b = c > 0 ? d : e;\n"
|
|
"}",
|
|
Style);
|
|
|
|
verifyFormat("if (-b >=\n"
|
|
" c) { // Keep.\n"
|
|
" foo();\n"
|
|
"} else {\n"
|
|
" bar();\n"
|
|
"}",
|
|
"if (-b >= c) { // Keep.\n"
|
|
" foo();\n"
|
|
"} else {\n"
|
|
" bar();\n"
|
|
"}",
|
|
Style);
|
|
|
|
verifyFormat("if (a) /* Remove. */\n"
|
|
" f();\n"
|
|
"else\n"
|
|
" g();",
|
|
"if (a) <% /* Remove. */\n"
|
|
" f();\n"
|
|
"%> else <%\n"
|
|
" g();\n"
|
|
"%>",
|
|
Style);
|
|
|
|
verifyFormat("while (\n"
|
|
" !i--) <% // Keep.\n"
|
|
" foo();\n"
|
|
"%>",
|
|
"while (!i--) <% // Keep.\n"
|
|
" foo();\n"
|
|
"%>",
|
|
Style);
|
|
|
|
verifyFormat("for (int &i : chars)\n"
|
|
" ++i;",
|
|
"for (int &i :\n"
|
|
" chars) {\n"
|
|
" ++i;\n"
|
|
"}",
|
|
Style);
|
|
|
|
verifyFormat("if (a)\n"
|
|
" b;\n"
|
|
"else if (c) {\n"
|
|
" d;\n"
|
|
" e;\n"
|
|
"} else\n"
|
|
" f = g(foo, bar,\n"
|
|
" baz);",
|
|
"if (a)\n"
|
|
" b;\n"
|
|
"else {\n"
|
|
" if (c) {\n"
|
|
" d;\n"
|
|
" e;\n"
|
|
" } else\n"
|
|
" f = g(foo, bar, baz);\n"
|
|
"}",
|
|
Style);
|
|
|
|
verifyFormat("if (foo)\n"
|
|
" f();\n"
|
|
"else if (bar || baz)\n"
|
|
" g();",
|
|
"if (foo) {\n"
|
|
" f();\n"
|
|
"} else if (bar || baz) {\n"
|
|
" g();\n"
|
|
"}",
|
|
Style);
|
|
|
|
Style.ColumnLimit = 0;
|
|
verifyFormat("if (a)\n"
|
|
" b234567890223456789032345678904234567890 = "
|
|
"c234567890223456789032345678904234567890;",
|
|
"if (a) {\n"
|
|
" b234567890223456789032345678904234567890 = "
|
|
"c234567890223456789032345678904234567890;\n"
|
|
"}",
|
|
Style);
|
|
|
|
Style.BreakBeforeBraces = FormatStyle::BS_Custom;
|
|
Style.BraceWrapping.AfterControlStatement = FormatStyle::BWACS_Always;
|
|
Style.BraceWrapping.BeforeElse = true;
|
|
|
|
Style.ColumnLimit = 65;
|
|
|
|
verifyFormat("if (condition)\n"
|
|
"{\n"
|
|
" ff(Indices,\n"
|
|
" [&](unsigned LHSI, unsigned RHSI) { return true; });\n"
|
|
"}\n"
|
|
"else\n"
|
|
"{\n"
|
|
" ff(Indices,\n"
|
|
" [&](unsigned LHSI, unsigned RHSI) { return true; });\n"
|
|
"}",
|
|
"if (condition) {\n"
|
|
" ff(Indices,\n"
|
|
" [&](unsigned LHSI, unsigned RHSI) { return true; });\n"
|
|
"} else {\n"
|
|
" ff(Indices,\n"
|
|
" [&](unsigned LHSI, unsigned RHSI) { return true; });\n"
|
|
"}",
|
|
Style);
|
|
|
|
verifyFormat("if (a)\n"
|
|
"{ //\n"
|
|
" foo();\n"
|
|
"}",
|
|
"if (a) { //\n"
|
|
" foo();\n"
|
|
"}",
|
|
Style);
|
|
|
|
verifyFormat("if (a) // comment\n"
|
|
" b = 1;",
|
|
"if (a) // comment\n"
|
|
"{\n"
|
|
" b = 1;\n"
|
|
"}",
|
|
Style);
|
|
|
|
Style.ColumnLimit = 20;
|
|
|
|
verifyFormat("int ab = [](int i) {\n"
|
|
" if (i > 0)\n"
|
|
" {\n"
|
|
" i = 12345678 -\n"
|
|
" i;\n"
|
|
" }\n"
|
|
" return i;\n"
|
|
"};",
|
|
"int ab = [](int i) {\n"
|
|
" if (i > 0) {\n"
|
|
" i = 12345678 -\n"
|
|
" i;\n"
|
|
" }\n"
|
|
" return i;\n"
|
|
"};",
|
|
Style);
|
|
|
|
verifyFormat("if (a)\n"
|
|
"{\n"
|
|
" b = c + // 1 -\n"
|
|
" d;\n"
|
|
"}",
|
|
"if (a) {\n"
|
|
" b = c + // 1 -\n"
|
|
" d;\n"
|
|
"}",
|
|
Style);
|
|
|
|
verifyFormat("if (a)\n"
|
|
"{\n"
|
|
" b = c >= 0 ? d\n"
|
|
" : e;\n"
|
|
"}",
|
|
"if (a) {\n"
|
|
" b = c >= 0 ? d : e;\n"
|
|
"}",
|
|
Style);
|
|
|
|
verifyFormat("if (a)\n"
|
|
" b = c > 0 ? d : e;",
|
|
"if (a)\n"
|
|
"{\n"
|
|
" b = c > 0 ? d : e;\n"
|
|
"}",
|
|
Style);
|
|
|
|
verifyFormat("if (foo + bar <=\n"
|
|
" baz)\n"
|
|
"{\n"
|
|
" func(arg1, arg2);\n"
|
|
"}",
|
|
"if (foo + bar <= baz) {\n"
|
|
" func(arg1, arg2);\n"
|
|
"}",
|
|
Style);
|
|
|
|
verifyFormat("if (foo + bar < baz)\n"
|
|
" func(arg1, arg2);\n"
|
|
"else\n"
|
|
" func();",
|
|
"if (foo + bar < baz)\n"
|
|
"<%\n"
|
|
" func(arg1, arg2);\n"
|
|
"%>\n"
|
|
"else\n"
|
|
"<%\n"
|
|
" func();\n"
|
|
"%>",
|
|
Style);
|
|
|
|
verifyFormat("while (i--)\n"
|
|
"<% // Keep.\n"
|
|
" foo();\n"
|
|
"%>",
|
|
"while (i--) <% // Keep.\n"
|
|
" foo();\n"
|
|
"%>",
|
|
Style);
|
|
|
|
verifyFormat("for (int &i : chars)\n"
|
|
" ++i;",
|
|
"for (int &i : chars)\n"
|
|
"{\n"
|
|
" ++i;\n"
|
|
"}",
|
|
Style);
|
|
}
|
|
|
|
} // namespace
|
|
} // namespace test
|
|
} // namespace format
|
|
} // namespace clang
|