xref: /llvm-project/clang/unittests/Format/BracesRemoverTest.cpp (revision 51f1681424f1a8ccf1e3432d71c341e799597171)
130ea3fccSowenca //===- unittest/Format/BracesRemoverTest.cpp ------------------------------===//
230ea3fccSowenca //
330ea3fccSowenca // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
430ea3fccSowenca // See https://llvm.org/LICENSE.txt for license information.
530ea3fccSowenca // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
630ea3fccSowenca //
730ea3fccSowenca //===----------------------------------------------------------------------===//
830ea3fccSowenca 
9f8d10d5aSManuel Klimek #include "FormatTestBase.h"
1030ea3fccSowenca 
1130ea3fccSowenca #define DEBUG_TYPE "braces-remover-test"
1230ea3fccSowenca 
1330ea3fccSowenca namespace clang {
1430ea3fccSowenca namespace format {
15f8d10d5aSManuel Klimek namespace test {
1630ea3fccSowenca namespace {
1730ea3fccSowenca 
18f8d10d5aSManuel Klimek class BracesRemoverTest : public FormatTestBase {};
1930ea3fccSowenca 
TEST_F(BracesRemoverTest,RemoveBraces)2030ea3fccSowenca TEST_F(BracesRemoverTest, RemoveBraces) {
2130ea3fccSowenca   FormatStyle Style = getLLVMStyle();
2230ea3fccSowenca   Style.RemoveBracesLLVM = true;
2330ea3fccSowenca 
2430ea3fccSowenca   // The following test cases are fully-braced versions of the examples at
2530ea3fccSowenca   // "llvm.org/docs/CodingStandards.html#don-t-use-braces-on-simple-single-
2630ea3fccSowenca   // statement-bodies-of-if-else-loop-statements".
2730ea3fccSowenca 
2830ea3fccSowenca   // Omit the braces since the body is simple and clearly associated with the
2930ea3fccSowenca   // `if`.
3030ea3fccSowenca   verifyFormat("if (isa<FunctionDecl>(D))\n"
3130ea3fccSowenca                "  handleFunctionDecl(D);\n"
3230ea3fccSowenca                "else if (isa<VarDecl>(D))\n"
3330ea3fccSowenca                "  handleVarDecl(D);",
3430ea3fccSowenca                "if (isa<FunctionDecl>(D)) {\n"
3530ea3fccSowenca                "  handleFunctionDecl(D);\n"
3630ea3fccSowenca                "} else if (isa<VarDecl>(D)) {\n"
3730ea3fccSowenca                "  handleVarDecl(D);\n"
3830ea3fccSowenca                "}",
3930ea3fccSowenca                Style);
4030ea3fccSowenca 
4130ea3fccSowenca   // Here we document the condition itself and not the body.
4230ea3fccSowenca   verifyFormat("if (isa<VarDecl>(D)) {\n"
4330ea3fccSowenca                "  // It is necessary that we explain the situation with this\n"
4430ea3fccSowenca                "  // surprisingly long comment, so it would be unclear\n"
4530ea3fccSowenca                "  // without the braces whether the following statement is in\n"
4630ea3fccSowenca                "  // the scope of the `if`.\n"
4730ea3fccSowenca                "  // Because the condition is documented, we can't really\n"
4830ea3fccSowenca                "  // hoist this comment that applies to the body above the\n"
4930ea3fccSowenca                "  // `if`.\n"
5030ea3fccSowenca                "  handleOtherDecl(D);\n"
5130ea3fccSowenca                "}",
5230ea3fccSowenca                Style);
5330ea3fccSowenca 
5430ea3fccSowenca   // Use braces on the outer `if` to avoid a potential dangling `else`
5530ea3fccSowenca   // situation.
5630ea3fccSowenca   verifyFormat("if (isa<VarDecl>(D)) {\n"
5730ea3fccSowenca                "  if (shouldProcessAttr(A))\n"
5830ea3fccSowenca                "    handleAttr(A);\n"
5930ea3fccSowenca                "}",
6030ea3fccSowenca                "if (isa<VarDecl>(D)) {\n"
6130ea3fccSowenca                "  if (shouldProcessAttr(A)) {\n"
6230ea3fccSowenca                "    handleAttr(A);\n"
6330ea3fccSowenca                "  }\n"
6430ea3fccSowenca                "}",
6530ea3fccSowenca                Style);
6630ea3fccSowenca 
6730ea3fccSowenca   // Use braces for the `if` block to keep it uniform with the `else` block.
6830ea3fccSowenca   verifyFormat("if (isa<FunctionDecl>(D)) {\n"
6930ea3fccSowenca                "  handleFunctionDecl(D);\n"
7030ea3fccSowenca                "} else {\n"
7130ea3fccSowenca                "  // In this `else` case, it is necessary that we explain the\n"
7230ea3fccSowenca                "  // situation with this surprisingly long comment, so it\n"
7330ea3fccSowenca                "  // would be unclear without the braces whether the\n"
7430ea3fccSowenca                "  // following statement is in the scope of the `if`.\n"
7530ea3fccSowenca                "  handleOtherDecl(D);\n"
7630ea3fccSowenca                "}",
7730ea3fccSowenca                Style);
7830ea3fccSowenca 
7930ea3fccSowenca   // This should also omit braces. The `for` loop contains only a single
8030ea3fccSowenca   // statement, so it shouldn't have braces.  The `if` also only contains a
8130ea3fccSowenca   // single simple statement (the `for` loop), so it also should omit braces.
8230ea3fccSowenca   verifyFormat("if (isa<FunctionDecl>(D))\n"
8330ea3fccSowenca                "  for (auto *A : D.attrs())\n"
8430ea3fccSowenca                "    handleAttr(A);",
8530ea3fccSowenca                "if (isa<FunctionDecl>(D)) {\n"
8630ea3fccSowenca                "  for (auto *A : D.attrs()) {\n"
8730ea3fccSowenca                "    handleAttr(A);\n"
8830ea3fccSowenca                "  }\n"
8930ea3fccSowenca                "}",
9030ea3fccSowenca                Style);
9130ea3fccSowenca 
9230ea3fccSowenca   // Use braces for a `do-while` loop and its enclosing statement.
9330ea3fccSowenca   verifyFormat("if (Tok->is(tok::l_brace)) {\n"
9430ea3fccSowenca                "  do {\n"
9530ea3fccSowenca                "    Tok = Tok->Next;\n"
9630ea3fccSowenca                "  } while (Tok);\n"
9730ea3fccSowenca                "}",
9830ea3fccSowenca                Style);
9930ea3fccSowenca 
10030ea3fccSowenca   // Use braces for the outer `if` since the nested `for` is braced.
10130ea3fccSowenca   verifyFormat("if (isa<FunctionDecl>(D)) {\n"
10230ea3fccSowenca                "  for (auto *A : D.attrs()) {\n"
10330ea3fccSowenca                "    // In this `for` loop body, it is necessary that we\n"
10430ea3fccSowenca                "    // explain the situation with this surprisingly long\n"
10530ea3fccSowenca                "    // comment, forcing braces on the `for` block.\n"
10630ea3fccSowenca                "    handleAttr(A);\n"
10730ea3fccSowenca                "  }\n"
10830ea3fccSowenca                "}",
10930ea3fccSowenca                Style);
11030ea3fccSowenca 
11130ea3fccSowenca   // Use braces on the outer block because there are more than two levels of
11230ea3fccSowenca   // nesting.
11330ea3fccSowenca   verifyFormat("if (isa<FunctionDecl>(D)) {\n"
11430ea3fccSowenca                "  for (auto *A : D.attrs())\n"
11530ea3fccSowenca                "    for (ssize_t i : llvm::seq<ssize_t>(count))\n"
11630ea3fccSowenca                "      handleAttrOnDecl(D, A, i);\n"
11730ea3fccSowenca                "}",
11830ea3fccSowenca                "if (isa<FunctionDecl>(D)) {\n"
11930ea3fccSowenca                "  for (auto *A : D.attrs()) {\n"
12030ea3fccSowenca                "    for (ssize_t i : llvm::seq<ssize_t>(count)) {\n"
12130ea3fccSowenca                "      handleAttrOnDecl(D, A, i);\n"
12230ea3fccSowenca                "    }\n"
12330ea3fccSowenca                "  }\n"
12430ea3fccSowenca                "}",
12530ea3fccSowenca                Style);
12630ea3fccSowenca 
12730ea3fccSowenca   // Use braces on the outer block because of a nested `if`; otherwise the
12830ea3fccSowenca   // compiler would warn: `add explicit braces to avoid dangling else`
12930ea3fccSowenca   verifyFormat("if (auto *D = dyn_cast<FunctionDecl>(D)) {\n"
13030ea3fccSowenca                "  if (shouldProcess(D))\n"
13130ea3fccSowenca                "    handleVarDecl(D);\n"
13230ea3fccSowenca                "  else\n"
13330ea3fccSowenca                "    markAsIgnored(D);\n"
13430ea3fccSowenca                "}",
13530ea3fccSowenca                "if (auto *D = dyn_cast<FunctionDecl>(D)) {\n"
13630ea3fccSowenca                "  if (shouldProcess(D)) {\n"
13730ea3fccSowenca                "    handleVarDecl(D);\n"
13830ea3fccSowenca                "  } else {\n"
13930ea3fccSowenca                "    markAsIgnored(D);\n"
14030ea3fccSowenca                "  }\n"
14130ea3fccSowenca                "}",
14230ea3fccSowenca                Style);
14330ea3fccSowenca 
14430ea3fccSowenca   verifyFormat("// clang-format off\n"
14530ea3fccSowenca                "// comment\n"
14630ea3fccSowenca                "while (i > 0) { --i; }\n"
14730ea3fccSowenca                "// clang-format on\n"
14830ea3fccSowenca                "while (j < 0)\n"
14930ea3fccSowenca                "  ++j;",
15030ea3fccSowenca                "// clang-format off\n"
15130ea3fccSowenca                "// comment\n"
15230ea3fccSowenca                "while (i > 0) { --i; }\n"
15330ea3fccSowenca                "// clang-format on\n"
15430ea3fccSowenca                "while (j < 0) { ++j; }",
15530ea3fccSowenca                Style);
15630ea3fccSowenca 
157e33243c9SOwen Pan   verifyFormat("for (;;) {\n"
158e33243c9SOwen Pan                "  for (;;)\n"
159e33243c9SOwen Pan                "    for (;;)\n"
160e33243c9SOwen Pan                "      a;\n"
161e33243c9SOwen Pan                "}",
162e33243c9SOwen Pan                "for (;;) {\n"
163e33243c9SOwen Pan                "  for (;;) {\n"
164e33243c9SOwen Pan                "    for (;;) {\n"
165e33243c9SOwen Pan                "      a;\n"
166e33243c9SOwen Pan                "    }\n"
167e33243c9SOwen Pan                "  }\n"
168e33243c9SOwen Pan                "}",
169e33243c9SOwen Pan                Style);
170e33243c9SOwen Pan 
17130ea3fccSowenca   verifyFormat("if (a)\n"
17230ea3fccSowenca                "  b; // comment\n"
17330ea3fccSowenca                "else if (c)\n"
17430ea3fccSowenca                "  d; /* comment */\n"
17530ea3fccSowenca                "else\n"
17630ea3fccSowenca                "  e;",
17730ea3fccSowenca                "if (a) {\n"
17830ea3fccSowenca                "  b; // comment\n"
17930ea3fccSowenca                "} else if (c) {\n"
18030ea3fccSowenca                "  d; /* comment */\n"
18130ea3fccSowenca                "} else {\n"
18230ea3fccSowenca                "  e;\n"
18330ea3fccSowenca                "}",
18430ea3fccSowenca                Style);
18530ea3fccSowenca 
18630ea3fccSowenca   verifyFormat("if (a) {\n"
18730ea3fccSowenca                "  b;\n"
18830ea3fccSowenca                "  c;\n"
18930ea3fccSowenca                "} else if (d) {\n"
19030ea3fccSowenca                "  e;\n"
19130ea3fccSowenca                "}",
19230ea3fccSowenca                Style);
19330ea3fccSowenca 
19430ea3fccSowenca   verifyFormat("if (a) {\n"
19530ea3fccSowenca                "#undef NDEBUG\n"
19630ea3fccSowenca                "  b;\n"
19730ea3fccSowenca                "} else {\n"
19830ea3fccSowenca                "  c;\n"
19930ea3fccSowenca                "}",
20030ea3fccSowenca                Style);
20130ea3fccSowenca 
20230ea3fccSowenca   verifyFormat("if (a) {\n"
20330ea3fccSowenca                "  // comment\n"
20430ea3fccSowenca                "} else if (b) {\n"
20530ea3fccSowenca                "  c;\n"
20630ea3fccSowenca                "}",
20730ea3fccSowenca                Style);
20830ea3fccSowenca 
20930ea3fccSowenca   verifyFormat("if (a) {\n"
21030ea3fccSowenca                "  b;\n"
21130ea3fccSowenca                "} else {\n"
212*51f16814SOwen Pan                "  {\n"
213*51f16814SOwen Pan                "    c;\n"
214*51f16814SOwen Pan                "  }\n"
21530ea3fccSowenca                "}",
21630ea3fccSowenca                Style);
21730ea3fccSowenca 
21830ea3fccSowenca   verifyFormat("if (a) {\n"
21930ea3fccSowenca                "  if (b) // comment\n"
22030ea3fccSowenca                "    c;\n"
22130ea3fccSowenca                "} else if (d) {\n"
22230ea3fccSowenca                "  e;\n"
22330ea3fccSowenca                "}",
22430ea3fccSowenca                "if (a) {\n"
22530ea3fccSowenca                "  if (b) { // comment\n"
22630ea3fccSowenca                "    c;\n"
22730ea3fccSowenca                "  }\n"
22830ea3fccSowenca                "} else if (d) {\n"
22930ea3fccSowenca                "  e;\n"
23030ea3fccSowenca                "}",
23130ea3fccSowenca                Style);
23230ea3fccSowenca 
23330ea3fccSowenca   verifyFormat("if (a) {\n"
23430ea3fccSowenca                "  if (b) {\n"
23530ea3fccSowenca                "    c;\n"
23630ea3fccSowenca                "    // comment\n"
23730ea3fccSowenca                "  } else if (d) {\n"
23830ea3fccSowenca                "    e;\n"
23930ea3fccSowenca                "  }\n"
24030ea3fccSowenca                "}",
24130ea3fccSowenca                Style);
24230ea3fccSowenca 
24330ea3fccSowenca   verifyFormat("if (a) {\n"
24430ea3fccSowenca                "  if (b)\n"
24530ea3fccSowenca                "    c;\n"
24630ea3fccSowenca                "}",
24730ea3fccSowenca                "if (a) {\n"
24830ea3fccSowenca                "  if (b) {\n"
24930ea3fccSowenca                "    c;\n"
25030ea3fccSowenca                "  }\n"
25130ea3fccSowenca                "}",
25230ea3fccSowenca                Style);
25330ea3fccSowenca 
25430ea3fccSowenca   verifyFormat("if (a)\n"
25530ea3fccSowenca                "  if (b)\n"
25630ea3fccSowenca                "    c;\n"
25730ea3fccSowenca                "  else\n"
25830ea3fccSowenca                "    d;\n"
25930ea3fccSowenca                "else\n"
26030ea3fccSowenca                "  e;",
26130ea3fccSowenca                "if (a) {\n"
26230ea3fccSowenca                "  if (b) {\n"
26330ea3fccSowenca                "    c;\n"
26430ea3fccSowenca                "  } else {\n"
26530ea3fccSowenca                "    d;\n"
26630ea3fccSowenca                "  }\n"
26730ea3fccSowenca                "} else {\n"
26830ea3fccSowenca                "  e;\n"
26930ea3fccSowenca                "}",
27030ea3fccSowenca                Style);
27130ea3fccSowenca 
27230ea3fccSowenca   verifyFormat("if (a) {\n"
27330ea3fccSowenca                "  // comment\n"
27430ea3fccSowenca                "  if (b)\n"
27530ea3fccSowenca                "    c;\n"
27630ea3fccSowenca                "  else if (d)\n"
27730ea3fccSowenca                "    e;\n"
27830ea3fccSowenca                "} else {\n"
27930ea3fccSowenca                "  g;\n"
28030ea3fccSowenca                "}",
28130ea3fccSowenca                "if (a) {\n"
28230ea3fccSowenca                "  // comment\n"
28330ea3fccSowenca                "  if (b) {\n"
28430ea3fccSowenca                "    c;\n"
28530ea3fccSowenca                "  } else if (d) {\n"
28630ea3fccSowenca                "    e;\n"
28730ea3fccSowenca                "  }\n"
28830ea3fccSowenca                "} else {\n"
28930ea3fccSowenca                "  g;\n"
29030ea3fccSowenca                "}",
29130ea3fccSowenca                Style);
29230ea3fccSowenca 
29330ea3fccSowenca   verifyFormat("if (a)\n"
29430ea3fccSowenca                "  b;\n"
29530ea3fccSowenca                "else if (c)\n"
29630ea3fccSowenca                "  d;\n"
29730ea3fccSowenca                "else\n"
29830ea3fccSowenca                "  e;",
29930ea3fccSowenca                "if (a) {\n"
30030ea3fccSowenca                "  b;\n"
30130ea3fccSowenca                "} else {\n"
30230ea3fccSowenca                "  if (c) {\n"
30330ea3fccSowenca                "    d;\n"
30430ea3fccSowenca                "  } else {\n"
30530ea3fccSowenca                "    e;\n"
30630ea3fccSowenca                "  }\n"
30730ea3fccSowenca                "}",
30830ea3fccSowenca                Style);
30930ea3fccSowenca 
31030ea3fccSowenca   verifyFormat("if (a) {\n"
31130ea3fccSowenca                "  if (b)\n"
31230ea3fccSowenca                "    c;\n"
31330ea3fccSowenca                "  else if (d)\n"
31430ea3fccSowenca                "    e;\n"
31530ea3fccSowenca                "} else {\n"
31630ea3fccSowenca                "  g;\n"
31730ea3fccSowenca                "}",
31830ea3fccSowenca                "if (a) {\n"
31930ea3fccSowenca                "  if (b)\n"
32030ea3fccSowenca                "    c;\n"
32130ea3fccSowenca                "  else {\n"
32230ea3fccSowenca                "    if (d)\n"
32330ea3fccSowenca                "      e;\n"
32430ea3fccSowenca                "  }\n"
32530ea3fccSowenca                "} else {\n"
32630ea3fccSowenca                "  g;\n"
32730ea3fccSowenca                "}",
32830ea3fccSowenca                Style);
32930ea3fccSowenca 
33030ea3fccSowenca   verifyFormat("if (isa<VarDecl>(D)) {\n"
33130ea3fccSowenca                "  for (auto *A : D.attrs())\n"
33230ea3fccSowenca                "    if (shouldProcessAttr(A))\n"
33330ea3fccSowenca                "      handleAttr(A);\n"
33430ea3fccSowenca                "}",
33530ea3fccSowenca                "if (isa<VarDecl>(D)) {\n"
33630ea3fccSowenca                "  for (auto *A : D.attrs()) {\n"
33730ea3fccSowenca                "    if (shouldProcessAttr(A)) {\n"
33830ea3fccSowenca                "      handleAttr(A);\n"
33930ea3fccSowenca                "    }\n"
34030ea3fccSowenca                "  }\n"
34130ea3fccSowenca                "}",
34230ea3fccSowenca                Style);
34330ea3fccSowenca 
34430ea3fccSowenca   verifyFormat("do {\n"
34530ea3fccSowenca                "  ++I;\n"
34630ea3fccSowenca                "} while (hasMore() && Filter(*I));",
34730ea3fccSowenca                "do { ++I; } while (hasMore() && Filter(*I));", Style);
34830ea3fccSowenca 
34930ea3fccSowenca   verifyFormat("if (a)\n"
35030ea3fccSowenca                "  if (b)\n"
35130ea3fccSowenca                "    c;\n"
35230ea3fccSowenca                "  else {\n"
35330ea3fccSowenca                "    if (d)\n"
35430ea3fccSowenca                "      e;\n"
35530ea3fccSowenca                "  }\n"
35630ea3fccSowenca                "else\n"
35730ea3fccSowenca                "  f;",
35830ea3fccSowenca                Style);
35930ea3fccSowenca 
36030ea3fccSowenca   verifyFormat("if (a)\n"
36130ea3fccSowenca                "  if (b)\n"
36230ea3fccSowenca                "    c;\n"
36330ea3fccSowenca                "  else {\n"
36430ea3fccSowenca                "    if (d)\n"
36530ea3fccSowenca                "      e;\n"
36630ea3fccSowenca                "    else if (f)\n"
36730ea3fccSowenca                "      g;\n"
36830ea3fccSowenca                "  }\n"
36930ea3fccSowenca                "else\n"
37030ea3fccSowenca                "  h;",
37130ea3fccSowenca                Style);
37230ea3fccSowenca 
37330ea3fccSowenca   verifyFormat("if (a) {\n"
37430ea3fccSowenca                "  b;\n"
37530ea3fccSowenca                "} else if (c) {\n"
37630ea3fccSowenca                "  d;\n"
37730ea3fccSowenca                "  e;\n"
37830ea3fccSowenca                "}",
37930ea3fccSowenca                "if (a) {\n"
38030ea3fccSowenca                "  b;\n"
38130ea3fccSowenca                "} else {\n"
38230ea3fccSowenca                "  if (c) {\n"
38330ea3fccSowenca                "    d;\n"
38430ea3fccSowenca                "    e;\n"
38530ea3fccSowenca                "  }\n"
38630ea3fccSowenca                "}",
38730ea3fccSowenca                Style);
38830ea3fccSowenca 
38930ea3fccSowenca   verifyFormat("if (a) {\n"
39030ea3fccSowenca                "  b;\n"
39130ea3fccSowenca                "  c;\n"
39230ea3fccSowenca                "} else if (d) {\n"
39330ea3fccSowenca                "  e;\n"
39430ea3fccSowenca                "  f;\n"
39530ea3fccSowenca                "}",
39630ea3fccSowenca                "if (a) {\n"
39730ea3fccSowenca                "  b;\n"
39830ea3fccSowenca                "  c;\n"
39930ea3fccSowenca                "} else {\n"
40030ea3fccSowenca                "  if (d) {\n"
40130ea3fccSowenca                "    e;\n"
40230ea3fccSowenca                "    f;\n"
40330ea3fccSowenca                "  }\n"
40430ea3fccSowenca                "}",
40530ea3fccSowenca                Style);
40630ea3fccSowenca 
40730ea3fccSowenca   verifyFormat("if (a) {\n"
40830ea3fccSowenca                "  b;\n"
40930ea3fccSowenca                "} else if (c) {\n"
41030ea3fccSowenca                "  d;\n"
41130ea3fccSowenca                "} else {\n"
41230ea3fccSowenca                "  e;\n"
41330ea3fccSowenca                "  f;\n"
41430ea3fccSowenca                "}",
41530ea3fccSowenca                "if (a) {\n"
41630ea3fccSowenca                "  b;\n"
41730ea3fccSowenca                "} else {\n"
41830ea3fccSowenca                "  if (c) {\n"
41930ea3fccSowenca                "    d;\n"
42030ea3fccSowenca                "  } else {\n"
42130ea3fccSowenca                "    e;\n"
42230ea3fccSowenca                "    f;\n"
42330ea3fccSowenca                "  }\n"
42430ea3fccSowenca                "}",
42530ea3fccSowenca                Style);
42630ea3fccSowenca 
42730ea3fccSowenca   verifyFormat("if (a) {\n"
42830ea3fccSowenca                "  b;\n"
42930ea3fccSowenca                "} else if (c) {\n"
43030ea3fccSowenca                "  d;\n"
43130ea3fccSowenca                "} else if (e) {\n"
43230ea3fccSowenca                "  f;\n"
43330ea3fccSowenca                "  g;\n"
43430ea3fccSowenca                "}",
43530ea3fccSowenca                "if (a) {\n"
43630ea3fccSowenca                "  b;\n"
43730ea3fccSowenca                "} else {\n"
43830ea3fccSowenca                "  if (c) {\n"
43930ea3fccSowenca                "    d;\n"
44030ea3fccSowenca                "  } else if (e) {\n"
44130ea3fccSowenca                "    f;\n"
44230ea3fccSowenca                "    g;\n"
44330ea3fccSowenca                "  }\n"
44430ea3fccSowenca                "}",
44530ea3fccSowenca                Style);
44630ea3fccSowenca 
44730ea3fccSowenca   verifyFormat("if (a) {\n"
44830ea3fccSowenca                "  if (b)\n"
44930ea3fccSowenca                "    c;\n"
45030ea3fccSowenca                "  else if (d) {\n"
45130ea3fccSowenca                "    e;\n"
45230ea3fccSowenca                "    f;\n"
45330ea3fccSowenca                "  }\n"
45430ea3fccSowenca                "} else {\n"
45530ea3fccSowenca                "  g;\n"
45630ea3fccSowenca                "}",
45730ea3fccSowenca                "if (a) {\n"
45830ea3fccSowenca                "  if (b)\n"
45930ea3fccSowenca                "    c;\n"
46030ea3fccSowenca                "  else {\n"
46130ea3fccSowenca                "    if (d) {\n"
46230ea3fccSowenca                "      e;\n"
46330ea3fccSowenca                "      f;\n"
46430ea3fccSowenca                "    }\n"
46530ea3fccSowenca                "  }\n"
46630ea3fccSowenca                "} else {\n"
46730ea3fccSowenca                "  g;\n"
46830ea3fccSowenca                "}",
46930ea3fccSowenca                Style);
47030ea3fccSowenca 
47130ea3fccSowenca   verifyFormat("if (a)\n"
47230ea3fccSowenca                "  if (b)\n"
47330ea3fccSowenca                "    c;\n"
47430ea3fccSowenca                "  else {\n"
47530ea3fccSowenca                "    if (d) {\n"
47630ea3fccSowenca                "      e;\n"
47730ea3fccSowenca                "      f;\n"
47830ea3fccSowenca                "    }\n"
47930ea3fccSowenca                "  }\n"
48030ea3fccSowenca                "else\n"
48130ea3fccSowenca                "  g;",
48230ea3fccSowenca                Style);
48330ea3fccSowenca 
48430ea3fccSowenca   verifyFormat("if (a) {\n"
48530ea3fccSowenca                "  b;\n"
48630ea3fccSowenca                "  c;\n"
48730ea3fccSowenca                "} else { // comment\n"
48830ea3fccSowenca                "  if (d) {\n"
48930ea3fccSowenca                "    e;\n"
49030ea3fccSowenca                "    f;\n"
49130ea3fccSowenca                "  }\n"
49230ea3fccSowenca                "}",
49330ea3fccSowenca                Style);
49430ea3fccSowenca 
49530ea3fccSowenca   verifyFormat("if (a)\n"
49630ea3fccSowenca                "  b;\n"
49730ea3fccSowenca                "else if (c)\n"
49830ea3fccSowenca                "  while (d)\n"
49930ea3fccSowenca                "    e;\n"
50030ea3fccSowenca                "// comment",
50130ea3fccSowenca                "if (a)\n"
50230ea3fccSowenca                "{\n"
50330ea3fccSowenca                "  b;\n"
50430ea3fccSowenca                "} else if (c) {\n"
50530ea3fccSowenca                "  while (d) {\n"
50630ea3fccSowenca                "    e;\n"
50730ea3fccSowenca                "  }\n"
50830ea3fccSowenca                "}\n"
50930ea3fccSowenca                "// comment",
51030ea3fccSowenca                Style);
51130ea3fccSowenca 
51230ea3fccSowenca   verifyFormat("if (a) {\n"
51330ea3fccSowenca                "  b;\n"
51430ea3fccSowenca                "} else if (c) {\n"
51530ea3fccSowenca                "  d;\n"
51630ea3fccSowenca                "} else {\n"
51730ea3fccSowenca                "  e;\n"
51830ea3fccSowenca                "  g;\n"
51930ea3fccSowenca                "}",
52030ea3fccSowenca                Style);
52130ea3fccSowenca 
52230ea3fccSowenca   verifyFormat("if (a) {\n"
52330ea3fccSowenca                "  b;\n"
52430ea3fccSowenca                "} else if (c) {\n"
52530ea3fccSowenca                "  d;\n"
52630ea3fccSowenca                "} else {\n"
52730ea3fccSowenca                "  e;\n"
52830ea3fccSowenca                "} // comment",
52930ea3fccSowenca                Style);
53030ea3fccSowenca 
53130ea3fccSowenca   verifyFormat("int abs = [](int i) {\n"
53230ea3fccSowenca                "  if (i >= 0)\n"
53330ea3fccSowenca                "    return i;\n"
53430ea3fccSowenca                "  return -i;\n"
53530ea3fccSowenca                "};",
53630ea3fccSowenca                "int abs = [](int i) {\n"
53730ea3fccSowenca                "  if (i >= 0) {\n"
53830ea3fccSowenca                "    return i;\n"
53930ea3fccSowenca                "  }\n"
54030ea3fccSowenca                "  return -i;\n"
54130ea3fccSowenca                "};",
54230ea3fccSowenca                Style);
54330ea3fccSowenca 
54430ea3fccSowenca   verifyFormat("if (a)\n"
54530ea3fccSowenca                "  foo();\n"
54630ea3fccSowenca                "else\n"
54730ea3fccSowenca                "  bar();",
54830ea3fccSowenca                "if (a)\n"
54930ea3fccSowenca                "{\n"
55030ea3fccSowenca                "  foo();\n"
55130ea3fccSowenca                "}\n"
55230ea3fccSowenca                "else\n"
55330ea3fccSowenca                "{\n"
55430ea3fccSowenca                "  bar();\n"
55530ea3fccSowenca                "}",
55630ea3fccSowenca                Style);
55730ea3fccSowenca 
55830ea3fccSowenca   verifyFormat("if (a)\n"
55930ea3fccSowenca                "  foo();\n"
56030ea3fccSowenca                "// comment\n"
56130ea3fccSowenca                "else\n"
56230ea3fccSowenca                "  bar();",
56330ea3fccSowenca                "if (a) {\n"
56430ea3fccSowenca                "  foo();\n"
56530ea3fccSowenca                "}\n"
56630ea3fccSowenca                "// comment\n"
56730ea3fccSowenca                "else {\n"
56830ea3fccSowenca                "  bar();\n"
56930ea3fccSowenca                "}",
57030ea3fccSowenca                Style);
57130ea3fccSowenca 
57230ea3fccSowenca   verifyFormat("if (a) {\n"
57330ea3fccSowenca                "  if (b)\n"
57430ea3fccSowenca                "    c = 1; // comment\n"
57530ea3fccSowenca                "}",
57630ea3fccSowenca                "if (a) {\n"
57730ea3fccSowenca                "  if (b) {\n"
57830ea3fccSowenca                "    c = 1; // comment\n"
57930ea3fccSowenca                "  }\n"
58030ea3fccSowenca                "}",
58130ea3fccSowenca                Style);
58230ea3fccSowenca 
58330ea3fccSowenca   verifyFormat("if (a) // comment\n"
58430ea3fccSowenca                "  b = 1;",
58530ea3fccSowenca                "if (a) // comment\n"
58630ea3fccSowenca                "{\n"
58730ea3fccSowenca                "  b = 1;\n"
58830ea3fccSowenca                "}",
58930ea3fccSowenca                Style);
59030ea3fccSowenca 
59130ea3fccSowenca   verifyFormat("if (a) {\n"
59230ea3fccSowenca                "Label:\n"
59330ea3fccSowenca                "}",
59430ea3fccSowenca                Style);
59530ea3fccSowenca 
59630ea3fccSowenca   verifyFormat("if (a) {\n"
59730ea3fccSowenca                "Label:\n"
59830ea3fccSowenca                "  f();\n"
59930ea3fccSowenca                "}",
60030ea3fccSowenca                Style);
60130ea3fccSowenca 
60230ea3fccSowenca   verifyFormat("if (a) {\n"
60330ea3fccSowenca                "  f();\n"
60430ea3fccSowenca                "Label:\n"
60530ea3fccSowenca                "}",
60630ea3fccSowenca                Style);
60730ea3fccSowenca 
60830ea3fccSowenca   verifyFormat("if consteval {\n"
60930ea3fccSowenca                "  f();\n"
61030ea3fccSowenca                "} else {\n"
61130ea3fccSowenca                "  g();\n"
61230ea3fccSowenca                "}",
61330ea3fccSowenca                Style);
61430ea3fccSowenca 
61530ea3fccSowenca   verifyFormat("if not consteval {\n"
61630ea3fccSowenca                "  f();\n"
61730ea3fccSowenca                "} else if (a) {\n"
61830ea3fccSowenca                "  g();\n"
61930ea3fccSowenca                "}",
62030ea3fccSowenca                Style);
62130ea3fccSowenca 
62230ea3fccSowenca   verifyFormat("if !consteval {\n"
62330ea3fccSowenca                "  g();\n"
62430ea3fccSowenca                "}",
62530ea3fccSowenca                Style);
62630ea3fccSowenca 
62730ea3fccSowenca   verifyFormat("while (0)\n"
62830ea3fccSowenca                "  if (a)\n"
62930ea3fccSowenca                "    return b;\n"
63030ea3fccSowenca                "return a;",
63130ea3fccSowenca                "while (0) {\n"
63230ea3fccSowenca                "  if (a) {\n"
63330ea3fccSowenca                "    return b;\n"
63430ea3fccSowenca                "}}\n"
63530ea3fccSowenca                "return a;",
63630ea3fccSowenca                Style);
63730ea3fccSowenca 
63891b5d508SOwen Pan   verifyFormat("if (a)\n"
63991b5d508SOwen Pan                "#ifdef FOO\n"
64091b5d508SOwen Pan                "  if (b)\n"
64191b5d508SOwen Pan                "    bar = c;\n"
64291b5d508SOwen Pan                "  else\n"
64391b5d508SOwen Pan                "#endif\n"
64491b5d508SOwen Pan                "  {\n"
64591b5d508SOwen Pan                "    foo = d;\n"
64691b5d508SOwen Pan                "#ifdef FOO\n"
64791b5d508SOwen Pan                "    bar = e;\n"
64891b5d508SOwen Pan                "#else\n"
64991b5d508SOwen Pan                "  bar = f;\n" // FIXME: should be indented 1 more level.
65091b5d508SOwen Pan                "#endif\n"
65191b5d508SOwen Pan                "  }\n"
65291b5d508SOwen Pan                "else\n"
65391b5d508SOwen Pan                "  bar = g;",
65491b5d508SOwen Pan                "if (a)\n"
65591b5d508SOwen Pan                "#ifdef FOO\n"
65691b5d508SOwen Pan                "  if (b)\n"
65791b5d508SOwen Pan                "    bar = c;\n"
65891b5d508SOwen Pan                "  else\n"
65991b5d508SOwen Pan                "#endif\n"
66091b5d508SOwen Pan                "  {\n"
66191b5d508SOwen Pan                "    foo = d;\n"
66291b5d508SOwen Pan                "#ifdef FOO\n"
66391b5d508SOwen Pan                "    bar = e;\n"
66491b5d508SOwen Pan                "#else\n"
66591b5d508SOwen Pan                "    bar = f;\n"
66691b5d508SOwen Pan                "#endif\n"
66791b5d508SOwen Pan                "  }\n"
66891b5d508SOwen Pan                "else {\n"
66991b5d508SOwen Pan                "  bar = g;\n"
67091b5d508SOwen Pan                "}",
67191b5d508SOwen Pan                Style);
67291b5d508SOwen Pan 
67330ea3fccSowenca   Style.ColumnLimit = 65;
67430ea3fccSowenca   verifyFormat("if (condition) {\n"
67530ea3fccSowenca                "  ff(Indices,\n"
67630ea3fccSowenca                "     [&](unsigned LHSI, unsigned RHSI) { return true; });\n"
67730ea3fccSowenca                "} else {\n"
67830ea3fccSowenca                "  ff(Indices,\n"
67930ea3fccSowenca                "     [&](unsigned LHSI, unsigned RHSI) { return true; });\n"
68030ea3fccSowenca                "}",
68130ea3fccSowenca                Style);
68230ea3fccSowenca 
68330ea3fccSowenca   Style.ColumnLimit = 20;
68430ea3fccSowenca 
68530ea3fccSowenca   verifyFormat("int i;\n"
68630ea3fccSowenca                "#define FOO(a, b)  \\\n"
68730ea3fccSowenca                "  while (a) {      \\\n"
68830ea3fccSowenca                "    b;             \\\n"
68930ea3fccSowenca                "  }",
69030ea3fccSowenca                Style);
69130ea3fccSowenca 
69230ea3fccSowenca   verifyFormat("int ab = [](int i) {\n"
69330ea3fccSowenca                "  if (i > 0) {\n"
69430ea3fccSowenca                "    i = 12345678 -\n"
69530ea3fccSowenca                "        i;\n"
69630ea3fccSowenca                "  }\n"
69730ea3fccSowenca                "  return i;\n"
69830ea3fccSowenca                "};",
69930ea3fccSowenca                Style);
70030ea3fccSowenca 
70130ea3fccSowenca   verifyFormat("if (a) {\n"
70230ea3fccSowenca                "  b = c + // 1 -\n"
70330ea3fccSowenca                "      d;\n"
70430ea3fccSowenca                "}",
70530ea3fccSowenca                Style);
70630ea3fccSowenca 
70730ea3fccSowenca   verifyFormat("if (a) {\n"
70830ea3fccSowenca                "  b = c >= 0 ? d\n"
70930ea3fccSowenca                "             : e;\n"
71030ea3fccSowenca                "}",
71130ea3fccSowenca                "if (a) {\n"
71230ea3fccSowenca                "  b = c >= 0 ? d : e;\n"
71330ea3fccSowenca                "}",
71430ea3fccSowenca                Style);
71530ea3fccSowenca 
71630ea3fccSowenca   verifyFormat("if (a)\n"
71730ea3fccSowenca                "  b = c > 0 ? d : e;",
71830ea3fccSowenca                "if (a) {\n"
71930ea3fccSowenca                "  b = c > 0 ? d : e;\n"
72030ea3fccSowenca                "}",
72130ea3fccSowenca                Style);
72230ea3fccSowenca 
72330ea3fccSowenca   verifyFormat("if (-b >=\n"
72430ea3fccSowenca                "    c) { // Keep.\n"
72530ea3fccSowenca                "  foo();\n"
72630ea3fccSowenca                "} else {\n"
72730ea3fccSowenca                "  bar();\n"
72830ea3fccSowenca                "}",
72930ea3fccSowenca                "if (-b >= c) { // Keep.\n"
73030ea3fccSowenca                "  foo();\n"
73130ea3fccSowenca                "} else {\n"
73230ea3fccSowenca                "  bar();\n"
73330ea3fccSowenca                "}",
73430ea3fccSowenca                Style);
73530ea3fccSowenca 
73630ea3fccSowenca   verifyFormat("if (a) /* Remove. */\n"
73730ea3fccSowenca                "  f();\n"
73830ea3fccSowenca                "else\n"
73930ea3fccSowenca                "  g();",
74030ea3fccSowenca                "if (a) <% /* Remove. */\n"
74130ea3fccSowenca                "  f();\n"
74230ea3fccSowenca                "%> else <%\n"
74330ea3fccSowenca                "  g();\n"
74430ea3fccSowenca                "%>",
74530ea3fccSowenca                Style);
74630ea3fccSowenca 
74730ea3fccSowenca   verifyFormat("while (\n"
74830ea3fccSowenca                "    !i--) <% // Keep.\n"
74930ea3fccSowenca                "  foo();\n"
75030ea3fccSowenca                "%>",
75130ea3fccSowenca                "while (!i--) <% // Keep.\n"
75230ea3fccSowenca                "  foo();\n"
75330ea3fccSowenca                "%>",
75430ea3fccSowenca                Style);
75530ea3fccSowenca 
75630ea3fccSowenca   verifyFormat("for (int &i : chars)\n"
75730ea3fccSowenca                "  ++i;",
75830ea3fccSowenca                "for (int &i :\n"
75930ea3fccSowenca                "     chars) {\n"
76030ea3fccSowenca                "  ++i;\n"
76130ea3fccSowenca                "}",
76230ea3fccSowenca                Style);
76330ea3fccSowenca 
76430ea3fccSowenca   verifyFormat("if (a)\n"
76530ea3fccSowenca                "  b;\n"
76630ea3fccSowenca                "else if (c) {\n"
76730ea3fccSowenca                "  d;\n"
76830ea3fccSowenca                "  e;\n"
76930ea3fccSowenca                "} else\n"
77030ea3fccSowenca                "  f = g(foo, bar,\n"
77130ea3fccSowenca                "        baz);",
77230ea3fccSowenca                "if (a)\n"
77330ea3fccSowenca                "  b;\n"
77430ea3fccSowenca                "else {\n"
77530ea3fccSowenca                "  if (c) {\n"
77630ea3fccSowenca                "    d;\n"
77730ea3fccSowenca                "    e;\n"
77830ea3fccSowenca                "  } else\n"
77930ea3fccSowenca                "    f = g(foo, bar, baz);\n"
78030ea3fccSowenca                "}",
78130ea3fccSowenca                Style);
78230ea3fccSowenca 
7835751c439SOwen Pan   verifyFormat("if (foo)\n"
7845751c439SOwen Pan                "  f();\n"
7855751c439SOwen Pan                "else if (bar || baz)\n"
7865751c439SOwen Pan                "  g();",
7875751c439SOwen Pan                "if (foo) {\n"
7885751c439SOwen Pan                "  f();\n"
7895751c439SOwen Pan                "} else if (bar || baz) {\n"
7905751c439SOwen Pan                "  g();\n"
7915751c439SOwen Pan                "}",
7925751c439SOwen Pan                Style);
7935751c439SOwen Pan 
79430ea3fccSowenca   Style.ColumnLimit = 0;
79530ea3fccSowenca   verifyFormat("if (a)\n"
79630ea3fccSowenca                "  b234567890223456789032345678904234567890 = "
79730ea3fccSowenca                "c234567890223456789032345678904234567890;",
79830ea3fccSowenca                "if (a) {\n"
79930ea3fccSowenca                "  b234567890223456789032345678904234567890 = "
80030ea3fccSowenca                "c234567890223456789032345678904234567890;\n"
80130ea3fccSowenca                "}",
80230ea3fccSowenca                Style);
80330ea3fccSowenca 
80430ea3fccSowenca   Style.BreakBeforeBraces = FormatStyle::BS_Custom;
80530ea3fccSowenca   Style.BraceWrapping.AfterControlStatement = FormatStyle::BWACS_Always;
80630ea3fccSowenca   Style.BraceWrapping.BeforeElse = true;
80730ea3fccSowenca 
80830ea3fccSowenca   Style.ColumnLimit = 65;
80930ea3fccSowenca 
81030ea3fccSowenca   verifyFormat("if (condition)\n"
81130ea3fccSowenca                "{\n"
81230ea3fccSowenca                "  ff(Indices,\n"
81330ea3fccSowenca                "     [&](unsigned LHSI, unsigned RHSI) { return true; });\n"
81430ea3fccSowenca                "}\n"
81530ea3fccSowenca                "else\n"
81630ea3fccSowenca                "{\n"
81730ea3fccSowenca                "  ff(Indices,\n"
81830ea3fccSowenca                "     [&](unsigned LHSI, unsigned RHSI) { return true; });\n"
81930ea3fccSowenca                "}",
82030ea3fccSowenca                "if (condition) {\n"
82130ea3fccSowenca                "  ff(Indices,\n"
82230ea3fccSowenca                "     [&](unsigned LHSI, unsigned RHSI) { return true; });\n"
82330ea3fccSowenca                "} else {\n"
82430ea3fccSowenca                "  ff(Indices,\n"
82530ea3fccSowenca                "     [&](unsigned LHSI, unsigned RHSI) { return true; });\n"
82630ea3fccSowenca                "}",
82730ea3fccSowenca                Style);
82830ea3fccSowenca 
82930ea3fccSowenca   verifyFormat("if (a)\n"
83030ea3fccSowenca                "{ //\n"
83130ea3fccSowenca                "  foo();\n"
83230ea3fccSowenca                "}",
83330ea3fccSowenca                "if (a) { //\n"
83430ea3fccSowenca                "  foo();\n"
83530ea3fccSowenca                "}",
83630ea3fccSowenca                Style);
83730ea3fccSowenca 
83830ea3fccSowenca   verifyFormat("if (a) // comment\n"
83930ea3fccSowenca                "  b = 1;",
84030ea3fccSowenca                "if (a) // comment\n"
84130ea3fccSowenca                "{\n"
84230ea3fccSowenca                "  b = 1;\n"
84330ea3fccSowenca                "}",
84430ea3fccSowenca                Style);
84530ea3fccSowenca 
84630ea3fccSowenca   Style.ColumnLimit = 20;
84730ea3fccSowenca 
84830ea3fccSowenca   verifyFormat("int ab = [](int i) {\n"
84930ea3fccSowenca                "  if (i > 0)\n"
85030ea3fccSowenca                "  {\n"
85130ea3fccSowenca                "    i = 12345678 -\n"
85230ea3fccSowenca                "        i;\n"
85330ea3fccSowenca                "  }\n"
85430ea3fccSowenca                "  return i;\n"
85530ea3fccSowenca                "};",
85630ea3fccSowenca                "int ab = [](int i) {\n"
85730ea3fccSowenca                "  if (i > 0) {\n"
85830ea3fccSowenca                "    i = 12345678 -\n"
85930ea3fccSowenca                "        i;\n"
86030ea3fccSowenca                "  }\n"
86130ea3fccSowenca                "  return i;\n"
86230ea3fccSowenca                "};",
86330ea3fccSowenca                Style);
86430ea3fccSowenca 
86530ea3fccSowenca   verifyFormat("if (a)\n"
86630ea3fccSowenca                "{\n"
86730ea3fccSowenca                "  b = c + // 1 -\n"
86830ea3fccSowenca                "      d;\n"
86930ea3fccSowenca                "}",
87030ea3fccSowenca                "if (a) {\n"
87130ea3fccSowenca                "  b = c + // 1 -\n"
87230ea3fccSowenca                "      d;\n"
87330ea3fccSowenca                "}",
87430ea3fccSowenca                Style);
87530ea3fccSowenca 
87630ea3fccSowenca   verifyFormat("if (a)\n"
87730ea3fccSowenca                "{\n"
87830ea3fccSowenca                "  b = c >= 0 ? d\n"
87930ea3fccSowenca                "             : e;\n"
88030ea3fccSowenca                "}",
88130ea3fccSowenca                "if (a) {\n"
88230ea3fccSowenca                "  b = c >= 0 ? d : e;\n"
88330ea3fccSowenca                "}",
88430ea3fccSowenca                Style);
88530ea3fccSowenca 
88630ea3fccSowenca   verifyFormat("if (a)\n"
88730ea3fccSowenca                "  b = c > 0 ? d : e;",
88830ea3fccSowenca                "if (a)\n"
88930ea3fccSowenca                "{\n"
89030ea3fccSowenca                "  b = c > 0 ? d : e;\n"
89130ea3fccSowenca                "}",
89230ea3fccSowenca                Style);
89330ea3fccSowenca 
89430ea3fccSowenca   verifyFormat("if (foo + bar <=\n"
89530ea3fccSowenca                "    baz)\n"
89630ea3fccSowenca                "{\n"
89730ea3fccSowenca                "  func(arg1, arg2);\n"
89830ea3fccSowenca                "}",
89930ea3fccSowenca                "if (foo + bar <= baz) {\n"
90030ea3fccSowenca                "  func(arg1, arg2);\n"
90130ea3fccSowenca                "}",
90230ea3fccSowenca                Style);
90330ea3fccSowenca 
90430ea3fccSowenca   verifyFormat("if (foo + bar < baz)\n"
90530ea3fccSowenca                "  func(arg1, arg2);\n"
90630ea3fccSowenca                "else\n"
90730ea3fccSowenca                "  func();",
90830ea3fccSowenca                "if (foo + bar < baz)\n"
90930ea3fccSowenca                "<%\n"
91030ea3fccSowenca                "  func(arg1, arg2);\n"
91130ea3fccSowenca                "%>\n"
91230ea3fccSowenca                "else\n"
91330ea3fccSowenca                "<%\n"
91430ea3fccSowenca                "  func();\n"
91530ea3fccSowenca                "%>",
91630ea3fccSowenca                Style);
91730ea3fccSowenca 
91830ea3fccSowenca   verifyFormat("while (i--)\n"
91930ea3fccSowenca                "<% // Keep.\n"
92030ea3fccSowenca                "  foo();\n"
92130ea3fccSowenca                "%>",
92230ea3fccSowenca                "while (i--) <% // Keep.\n"
92330ea3fccSowenca                "  foo();\n"
92430ea3fccSowenca                "%>",
92530ea3fccSowenca                Style);
92630ea3fccSowenca 
92730ea3fccSowenca   verifyFormat("for (int &i : chars)\n"
92830ea3fccSowenca                "  ++i;",
92930ea3fccSowenca                "for (int &i : chars)\n"
93030ea3fccSowenca                "{\n"
93130ea3fccSowenca                "  ++i;\n"
93230ea3fccSowenca                "}",
93330ea3fccSowenca                Style);
93430ea3fccSowenca }
93530ea3fccSowenca 
93630ea3fccSowenca } // namespace
937f8d10d5aSManuel Klimek } // namespace test
93830ea3fccSowenca } // namespace format
93930ea3fccSowenca } // namespace clang
940