1//===- unittest/Format/BracesRemoverTest.cpp ------------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#include "FormatTestBase.h"
10
11#define DEBUG_TYPE "braces-remover-test"
12
13namespace clang {
14namespace format {
15namespace test {
16namespace {
17
18class BracesRemoverTest : public FormatTestBase {};
19
20TEST_F(BracesRemoverTest, RemoveBraces) {
21 FormatStyle Style = getLLVMStyle();
22 Style.RemoveBracesLLVM = true;
23
24 // The following test cases are fully-braced versions of the examples at
25 // "llvm.org/docs/CodingStandards.html#don-t-use-braces-on-simple-single-
26 // statement-bodies-of-if-else-loop-statements".
27
28 // Omit the braces since the body is simple and clearly associated with the
29 // `if`.
30 verifyFormat("if (isa<FunctionDecl>(D))\n"
31 " handleFunctionDecl(D);\n"
32 "else if (isa<VarDecl>(D))\n"
33 " handleVarDecl(D);",
34 "if (isa<FunctionDecl>(D)) {\n"
35 " handleFunctionDecl(D);\n"
36 "} else if (isa<VarDecl>(D)) {\n"
37 " handleVarDecl(D);\n"
38 "}",
39 Style);
40
41 // Here we document the condition itself and not the body.
42 verifyFormat("if (isa<VarDecl>(D)) {\n"
43 " // It is necessary that we explain the situation with this\n"
44 " // surprisingly long comment, so it would be unclear\n"
45 " // without the braces whether the following statement is in\n"
46 " // the scope of the `if`.\n"
47 " // Because the condition is documented, we can't really\n"
48 " // hoist this comment that applies to the body above the\n"
49 " // `if`.\n"
50 " handleOtherDecl(D);\n"
51 "}",
52 Style);
53
54 // Use braces on the outer `if` to avoid a potential dangling `else`
55 // situation.
56 verifyFormat("if (isa<VarDecl>(D)) {\n"
57 " if (shouldProcessAttr(A))\n"
58 " handleAttr(A);\n"
59 "}",
60 "if (isa<VarDecl>(D)) {\n"
61 " if (shouldProcessAttr(A)) {\n"
62 " handleAttr(A);\n"
63 " }\n"
64 "}",
65 Style);
66
67 // Use braces for the `if` block to keep it uniform with the `else` block.
68 verifyFormat("if (isa<FunctionDecl>(D)) {\n"
69 " handleFunctionDecl(D);\n"
70 "} else {\n"
71 " // In this `else` case, it is necessary that we explain the\n"
72 " // situation with this surprisingly long comment, so it\n"
73 " // would be unclear without the braces whether the\n"
74 " // following statement is in the scope of the `if`.\n"
75 " handleOtherDecl(D);\n"
76 "}",
77 Style);
78
79 // This should also omit braces. The `for` loop contains only a single
80 // statement, so it shouldn't have braces. The `if` also only contains a
81 // single simple statement (the `for` loop), so it also should omit braces.
82 verifyFormat("if (isa<FunctionDecl>(D))\n"
83 " for (auto *A : D.attrs())\n"
84 " handleAttr(A);",
85 "if (isa<FunctionDecl>(D)) {\n"
86 " for (auto *A : D.attrs()) {\n"
87 " handleAttr(A);\n"
88 " }\n"
89 "}",
90 Style);
91
92 // Use braces for a `do-while` loop and its enclosing statement.
93 verifyFormat("if (Tok->is(tok::l_brace)) {\n"
94 " do {\n"
95 " Tok = Tok->Next;\n"
96 " } while (Tok);\n"
97 "}",
98 Style);
99
100 // Use braces for the outer `if` since the nested `for` is braced.
101 verifyFormat("if (isa<FunctionDecl>(D)) {\n"
102 " for (auto *A : D.attrs()) {\n"
103 " // In this `for` loop body, it is necessary that we\n"
104 " // explain the situation with this surprisingly long\n"
105 " // comment, forcing braces on the `for` block.\n"
106 " handleAttr(A);\n"
107 " }\n"
108 "}",
109 Style);
110
111 // Use braces on the outer block because there are more than two levels of
112 // nesting.
113 verifyFormat("if (isa<FunctionDecl>(D)) {\n"
114 " for (auto *A : D.attrs())\n"
115 " for (ssize_t i : llvm::seq<ssize_t>(count))\n"
116 " handleAttrOnDecl(D, A, i);\n"
117 "}",
118 "if (isa<FunctionDecl>(D)) {\n"
119 " for (auto *A : D.attrs()) {\n"
120 " for (ssize_t i : llvm::seq<ssize_t>(count)) {\n"
121 " handleAttrOnDecl(D, A, i);\n"
122 " }\n"
123 " }\n"
124 "}",
125 Style);
126
127 // Use braces on the outer block because of a nested `if`; otherwise the
128 // compiler would warn: `add explicit braces to avoid dangling else`
129 verifyFormat("if (auto *D = dyn_cast<FunctionDecl>(D)) {\n"
130 " if (shouldProcess(D))\n"
131 " handleVarDecl(D);\n"
132 " else\n"
133 " markAsIgnored(D);\n"
134 "}",
135 "if (auto *D = dyn_cast<FunctionDecl>(D)) {\n"
136 " if (shouldProcess(D)) {\n"
137 " handleVarDecl(D);\n"
138 " } else {\n"
139 " markAsIgnored(D);\n"
140 " }\n"
141 "}",
142 Style);
143
144 verifyFormat("// clang-format off\n"
145 "// comment\n"
146 "while (i > 0) { --i; }\n"
147 "// clang-format on\n"
148 "while (j < 0)\n"
149 " ++j;",
150 "// clang-format off\n"
151 "// comment\n"
152 "while (i > 0) { --i; }\n"
153 "// clang-format on\n"
154 "while (j < 0) { ++j; }",
155 Style);
156
157 verifyFormat("for (;;) {\n"
158 " for (;;)\n"
159 " for (;;)\n"
160 " a;\n"
161 "}",
162 "for (;;) {\n"
163 " for (;;) {\n"
164 " for (;;) {\n"
165 " a;\n"
166 " }\n"
167 " }\n"
168 "}",
169 Style);
170
171 verifyFormat("if (a)\n"
172 " b; // comment\n"
173 "else if (c)\n"
174 " d; /* comment */\n"
175 "else\n"
176 " e;",
177 "if (a) {\n"
178 " b; // comment\n"
179 "} else if (c) {\n"
180 " d; /* comment */\n"
181 "} else {\n"
182 " e;\n"
183 "}",
184 Style);
185
186 verifyFormat("if (a) {\n"
187 " b;\n"
188 " c;\n"
189 "} else if (d) {\n"
190 " e;\n"
191 "}",
192 Style);
193
194 verifyFormat("if (a) {\n"
195 "#undef NDEBUG\n"
196 " b;\n"
197 "} else {\n"
198 " c;\n"
199 "}",
200 Style);
201
202 verifyFormat("if (a) {\n"
203 " // comment\n"
204 "} else if (b) {\n"
205 " c;\n"
206 "}",
207 Style);
208
209 verifyFormat("if (a) {\n"
210 " b;\n"
211 "} else {\n"
212 " {\n"
213 " c;\n"
214 " }\n"
215 "}",
216 Style);
217
218 verifyFormat("if (a) {\n"
219 " if (b) // comment\n"
220 " c;\n"
221 "} else if (d) {\n"
222 " e;\n"
223 "}",
224 "if (a) {\n"
225 " if (b) { // comment\n"
226 " c;\n"
227 " }\n"
228 "} else if (d) {\n"
229 " e;\n"
230 "}",
231 Style);
232
233 verifyFormat("if (a) {\n"
234 " if (b) {\n"
235 " c;\n"
236 " // comment\n"
237 " } else if (d) {\n"
238 " e;\n"
239 " }\n"
240 "}",
241 Style);
242
243 verifyFormat("if (a) {\n"
244 " if (b)\n"
245 " c;\n"
246 "}",
247 "if (a) {\n"
248 " if (b) {\n"
249 " c;\n"
250 " }\n"
251 "}",
252 Style);
253
254 verifyFormat("if (a)\n"
255 " if (b)\n"
256 " c;\n"
257 " else\n"
258 " d;\n"
259 "else\n"
260 " e;",
261 "if (a) {\n"
262 " if (b) {\n"
263 " c;\n"
264 " } else {\n"
265 " d;\n"
266 " }\n"
267 "} else {\n"
268 " e;\n"
269 "}",
270 Style);
271
272 verifyFormat("if (a) {\n"
273 " // comment\n"
274 " if (b)\n"
275 " c;\n"
276 " else if (d)\n"
277 " e;\n"
278 "} else {\n"
279 " g;\n"
280 "}",
281 "if (a) {\n"
282 " // comment\n"
283 " if (b) {\n"
284 " c;\n"
285 " } else if (d) {\n"
286 " e;\n"
287 " }\n"
288 "} else {\n"
289 " g;\n"
290 "}",
291 Style);
292
293 verifyFormat("if (a)\n"
294 " b;\n"
295 "else if (c)\n"
296 " d;\n"
297 "else\n"
298 " e;",
299 "if (a) {\n"
300 " b;\n"
301 "} else {\n"
302 " if (c) {\n"
303 " d;\n"
304 " } else {\n"
305 " e;\n"
306 " }\n"
307 "}",
308 Style);
309
310 verifyFormat("if (a) {\n"
311 " if (b)\n"
312 " c;\n"
313 " else if (d)\n"
314 " e;\n"
315 "} else {\n"
316 " g;\n"
317 "}",
318 "if (a) {\n"
319 " if (b)\n"
320 " c;\n"
321 " else {\n"
322 " if (d)\n"
323 " e;\n"
324 " }\n"
325 "} else {\n"
326 " g;\n"
327 "}",
328 Style);
329
330 verifyFormat("if (isa<VarDecl>(D)) {\n"
331 " for (auto *A : D.attrs())\n"
332 " if (shouldProcessAttr(A))\n"
333 " handleAttr(A);\n"
334 "}",
335 "if (isa<VarDecl>(D)) {\n"
336 " for (auto *A : D.attrs()) {\n"
337 " if (shouldProcessAttr(A)) {\n"
338 " handleAttr(A);\n"
339 " }\n"
340 " }\n"
341 "}",
342 Style);
343
344 verifyFormat("do {\n"
345 " ++I;\n"
346 "} while (hasMore() && Filter(*I));",
347 "do { ++I; } while (hasMore() && Filter(*I));", Style);
348
349 verifyFormat("if (a)\n"
350 " if (b)\n"
351 " c;\n"
352 " else {\n"
353 " if (d)\n"
354 " e;\n"
355 " }\n"
356 "else\n"
357 " f;",
358 Style);
359
360 verifyFormat("if (a)\n"
361 " if (b)\n"
362 " c;\n"
363 " else {\n"
364 " if (d)\n"
365 " e;\n"
366 " else if (f)\n"
367 " g;\n"
368 " }\n"
369 "else\n"
370 " h;",
371 Style);
372
373 verifyFormat("if (a) {\n"
374 " b;\n"
375 "} else if (c) {\n"
376 " d;\n"
377 " e;\n"
378 "}",
379 "if (a) {\n"
380 " b;\n"
381 "} else {\n"
382 " if (c) {\n"
383 " d;\n"
384 " e;\n"
385 " }\n"
386 "}",
387 Style);
388
389 verifyFormat("if (a) {\n"
390 " b;\n"
391 " c;\n"
392 "} else if (d) {\n"
393 " e;\n"
394 " f;\n"
395 "}",
396 "if (a) {\n"
397 " b;\n"
398 " c;\n"
399 "} else {\n"
400 " if (d) {\n"
401 " e;\n"
402 " f;\n"
403 " }\n"
404 "}",
405 Style);
406
407 verifyFormat("if (a) {\n"
408 " b;\n"
409 "} else if (c) {\n"
410 " d;\n"
411 "} else {\n"
412 " e;\n"
413 " f;\n"
414 "}",
415 "if (a) {\n"
416 " b;\n"
417 "} else {\n"
418 " if (c) {\n"
419 " d;\n"
420 " } else {\n"
421 " e;\n"
422 " f;\n"
423 " }\n"
424 "}",
425 Style);
426
427 verifyFormat("if (a) {\n"
428 " b;\n"
429 "} else if (c) {\n"
430 " d;\n"
431 "} else if (e) {\n"
432 " f;\n"
433 " g;\n"
434 "}",
435 "if (a) {\n"
436 " b;\n"
437 "} else {\n"
438 " if (c) {\n"
439 " d;\n"
440 " } else if (e) {\n"
441 " f;\n"
442 " g;\n"
443 " }\n"
444 "}",
445 Style);
446
447 verifyFormat("if (a) {\n"
448 " if (b)\n"
449 " c;\n"
450 " else if (d) {\n"
451 " e;\n"
452 " f;\n"
453 " }\n"
454 "} else {\n"
455 " g;\n"
456 "}",
457 "if (a) {\n"
458 " if (b)\n"
459 " c;\n"
460 " else {\n"
461 " if (d) {\n"
462 " e;\n"
463 " f;\n"
464 " }\n"
465 " }\n"
466 "} else {\n"
467 " g;\n"
468 "}",
469 Style);
470
471 verifyFormat("if (a)\n"
472 " if (b)\n"
473 " c;\n"
474 " else {\n"
475 " if (d) {\n"
476 " e;\n"
477 " f;\n"
478 " }\n"
479 " }\n"
480 "else\n"
481 " g;",
482 Style);
483
484 verifyFormat("if (a) {\n"
485 " b;\n"
486 " c;\n"
487 "} else { // comment\n"
488 " if (d) {\n"
489 " e;\n"
490 " f;\n"
491 " }\n"
492 "}",
493 Style);
494
495 verifyFormat("if (a)\n"
496 " b;\n"
497 "else if (c)\n"
498 " while (d)\n"
499 " e;\n"
500 "// comment",
501 "if (a)\n"
502 "{\n"
503 " b;\n"
504 "} else if (c) {\n"
505 " while (d) {\n"
506 " e;\n"
507 " }\n"
508 "}\n"
509 "// comment",
510 Style);
511
512 verifyFormat("if (a) {\n"
513 " b;\n"
514 "} else if (c) {\n"
515 " d;\n"
516 "} else {\n"
517 " e;\n"
518 " g;\n"
519 "}",
520 Style);
521
522 verifyFormat("if (a) {\n"
523 " b;\n"
524 "} else if (c) {\n"
525 " d;\n"
526 "} else {\n"
527 " e;\n"
528 "} // comment",
529 Style);
530
531 verifyFormat("int abs = [](int i) {\n"
532 " if (i >= 0)\n"
533 " return i;\n"
534 " return -i;\n"
535 "};",
536 "int abs = [](int i) {\n"
537 " if (i >= 0) {\n"
538 " return i;\n"
539 " }\n"
540 " return -i;\n"
541 "};",
542 Style);
543
544 verifyFormat("if (a)\n"
545 " foo();\n"
546 "else\n"
547 " bar();",
548 "if (a)\n"
549 "{\n"
550 " foo();\n"
551 "}\n"
552 "else\n"
553 "{\n"
554 " bar();\n"
555 "}",
556 Style);
557
558 verifyFormat("if (a)\n"
559 " foo();\n"
560 "// comment\n"
561 "else\n"
562 " bar();",
563 "if (a) {\n"
564 " foo();\n"
565 "}\n"
566 "// comment\n"
567 "else {\n"
568 " bar();\n"
569 "}",
570 Style);
571
572 verifyFormat("if (a) {\n"
573 " if (b)\n"
574 " c = 1; // comment\n"
575 "}",
576 "if (a) {\n"
577 " if (b) {\n"
578 " c = 1; // comment\n"
579 " }\n"
580 "}",
581 Style);
582
583 verifyFormat("if (a) // comment\n"
584 " b = 1;",
585 "if (a) // comment\n"
586 "{\n"
587 " b = 1;\n"
588 "}",
589 Style);
590
591 verifyFormat("if (a) {\n"
592 "Label:\n"
593 "}",
594 Style);
595
596 verifyFormat("if (a) {\n"
597 "Label:\n"
598 " f();\n"
599 "}",
600 Style);
601
602 verifyFormat("if (a) {\n"
603 " f();\n"
604 "Label:\n"
605 "}",
606 Style);
607
608 verifyFormat("if consteval {\n"
609 " f();\n"
610 "} else {\n"
611 " g();\n"
612 "}",
613 Style);
614
615 verifyFormat("if not consteval {\n"
616 " f();\n"
617 "} else if (a) {\n"
618 " g();\n"
619 "}",
620 Style);
621
622 verifyFormat("if !consteval {\n"
623 " g();\n"
624 "}",
625 Style);
626
627 verifyFormat("while (0)\n"
628 " if (a)\n"
629 " return b;\n"
630 "return a;",
631 "while (0) {\n"
632 " if (a) {\n"
633 " return b;\n"
634 "}}\n"
635 "return a;",
636 Style);
637
638 verifyFormat("if (a)\n"
639 "#ifdef FOO\n"
640 " if (b)\n"
641 " bar = c;\n"
642 " else\n"
643 "#endif\n"
644 " {\n"
645 " foo = d;\n"
646 "#ifdef FOO\n"
647 " bar = e;\n"
648 "#else\n"
649 " bar = f;\n" // FIXME: should be indented 1 more level.
650 "#endif\n"
651 " }\n"
652 "else\n"
653 " bar = g;",
654 "if (a)\n"
655 "#ifdef FOO\n"
656 " if (b)\n"
657 " bar = c;\n"
658 " else\n"
659 "#endif\n"
660 " {\n"
661 " foo = d;\n"
662 "#ifdef FOO\n"
663 " bar = e;\n"
664 "#else\n"
665 " bar = f;\n"
666 "#endif\n"
667 " }\n"
668 "else {\n"
669 " bar = g;\n"
670 "}",
671 Style);
672
673 Style.ColumnLimit = 65;
674 verifyFormat("if (condition) {\n"
675 " ff(Indices,\n"
676 " [&](unsigned LHSI, unsigned RHSI) { return true; });\n"
677 "} else {\n"
678 " ff(Indices,\n"
679 " [&](unsigned LHSI, unsigned RHSI) { return true; });\n"
680 "}",
681 Style);
682
683 Style.ColumnLimit = 20;
684
685 verifyFormat("int i;\n"
686 "#define FOO(a, b) \\\n"
687 " while (a) { \\\n"
688 " b; \\\n"
689 " }",
690 Style);
691
692 verifyFormat("int ab = [](int i) {\n"
693 " if (i > 0) {\n"
694 " i = 12345678 -\n"
695 " i;\n"
696 " }\n"
697 " return i;\n"
698 "};",
699 Style);
700
701 verifyFormat("if (a) {\n"
702 " b = c + // 1 -\n"
703 " d;\n"
704 "}",
705 Style);
706
707 verifyFormat("if (a) {\n"
708 " b = c >= 0 ? d\n"
709 " : e;\n"
710 "}",
711 "if (a) {\n"
712 " b = c >= 0 ? d : e;\n"
713 "}",
714 Style);
715
716 verifyFormat("if (a)\n"
717 " b = c > 0 ? d : e;",
718 "if (a) {\n"
719 " b = c > 0 ? d : e;\n"
720 "}",
721 Style);
722
723 verifyFormat("if (-b >=\n"
724 " c) { // Keep.\n"
725 " foo();\n"
726 "} else {\n"
727 " bar();\n"
728 "}",
729 "if (-b >= c) { // Keep.\n"
730 " foo();\n"
731 "} else {\n"
732 " bar();\n"
733 "}",
734 Style);
735
736 verifyFormat("if (a) /* Remove. */\n"
737 " f();\n"
738 "else\n"
739 " g();",
740 "if (a) <% /* Remove. */\n"
741 " f();\n"
742 "%> else <%\n"
743 " g();\n"
744 "%>",
745 Style);
746
747 verifyFormat("while (\n"
748 " !i--) <% // Keep.\n"
749 " foo();\n"
750 "%>",
751 "while (!i--) <% // Keep.\n"
752 " foo();\n"
753 "%>",
754 Style);
755
756 verifyFormat("for (int &i : chars)\n"
757 " ++i;",
758 "for (int &i :\n"
759 " chars) {\n"
760 " ++i;\n"
761 "}",
762 Style);
763
764 verifyFormat("if (a)\n"
765 " b;\n"
766 "else if (c) {\n"
767 " d;\n"
768 " e;\n"
769 "} else\n"
770 " f = g(foo, bar,\n"
771 " baz);",
772 "if (a)\n"
773 " b;\n"
774 "else {\n"
775 " if (c) {\n"
776 " d;\n"
777 " e;\n"
778 " } else\n"
779 " f = g(foo, bar, baz);\n"
780 "}",
781 Style);
782
783 verifyFormat("if (foo)\n"
784 " f();\n"
785 "else if (bar || baz)\n"
786 " g();",
787 "if (foo) {\n"
788 " f();\n"
789 "} else if (bar || baz) {\n"
790 " g();\n"
791 "}",
792 Style);
793
794 Style.ColumnLimit = 0;
795 verifyFormat("if (a)\n"
796 " b234567890223456789032345678904234567890 = "
797 "c234567890223456789032345678904234567890;",
798 "if (a) {\n"
799 " b234567890223456789032345678904234567890 = "
800 "c234567890223456789032345678904234567890;\n"
801 "}",
802 Style);
803
804 Style.BreakBeforeBraces = FormatStyle::BS_Custom;
805 Style.BraceWrapping.AfterControlStatement = FormatStyle::BWACS_Always;
806 Style.BraceWrapping.BeforeElse = true;
807
808 Style.ColumnLimit = 65;
809
810 verifyFormat("if (condition)\n"
811 "{\n"
812 " ff(Indices,\n"
813 " [&](unsigned LHSI, unsigned RHSI) { return true; });\n"
814 "}\n"
815 "else\n"
816 "{\n"
817 " ff(Indices,\n"
818 " [&](unsigned LHSI, unsigned RHSI) { return true; });\n"
819 "}",
820 "if (condition) {\n"
821 " ff(Indices,\n"
822 " [&](unsigned LHSI, unsigned RHSI) { return true; });\n"
823 "} else {\n"
824 " ff(Indices,\n"
825 " [&](unsigned LHSI, unsigned RHSI) { return true; });\n"
826 "}",
827 Style);
828
829 verifyFormat("if (a)\n"
830 "{ //\n"
831 " foo();\n"
832 "}",
833 "if (a) { //\n"
834 " foo();\n"
835 "}",
836 Style);
837
838 verifyFormat("if (a) // comment\n"
839 " b = 1;",
840 "if (a) // comment\n"
841 "{\n"
842 " b = 1;\n"
843 "}",
844 Style);
845
846 Style.ColumnLimit = 20;
847
848 verifyFormat("int ab = [](int i) {\n"
849 " if (i > 0)\n"
850 " {\n"
851 " i = 12345678 -\n"
852 " i;\n"
853 " }\n"
854 " return i;\n"
855 "};",
856 "int ab = [](int i) {\n"
857 " if (i > 0) {\n"
858 " i = 12345678 -\n"
859 " i;\n"
860 " }\n"
861 " return i;\n"
862 "};",
863 Style);
864
865 verifyFormat("if (a)\n"
866 "{\n"
867 " b = c + // 1 -\n"
868 " d;\n"
869 "}",
870 "if (a) {\n"
871 " b = c + // 1 -\n"
872 " d;\n"
873 "}",
874 Style);
875
876 verifyFormat("if (a)\n"
877 "{\n"
878 " b = c >= 0 ? d\n"
879 " : e;\n"
880 "}",
881 "if (a) {\n"
882 " b = c >= 0 ? d : e;\n"
883 "}",
884 Style);
885
886 verifyFormat("if (a)\n"
887 " b = c > 0 ? d : e;",
888 "if (a)\n"
889 "{\n"
890 " b = c > 0 ? d : e;\n"
891 "}",
892 Style);
893
894 verifyFormat("if (foo + bar <=\n"
895 " baz)\n"
896 "{\n"
897 " func(arg1, arg2);\n"
898 "}",
899 "if (foo + bar <= baz) {\n"
900 " func(arg1, arg2);\n"
901 "}",
902 Style);
903
904 verifyFormat("if (foo + bar < baz)\n"
905 " func(arg1, arg2);\n"
906 "else\n"
907 " func();",
908 "if (foo + bar < baz)\n"
909 "<%\n"
910 " func(arg1, arg2);\n"
911 "%>\n"
912 "else\n"
913 "<%\n"
914 " func();\n"
915 "%>",
916 Style);
917
918 verifyFormat("while (i--)\n"
919 "<% // Keep.\n"
920 " foo();\n"
921 "%>",
922 "while (i--) <% // Keep.\n"
923 " foo();\n"
924 "%>",
925 Style);
926
927 verifyFormat("for (int &i : chars)\n"
928 " ++i;",
929 "for (int &i : chars)\n"
930 "{\n"
931 " ++i;\n"
932 "}",
933 Style);
934}
935
936} // namespace
937} // namespace test
938} // namespace format
939} // namespace clang
940

source code of clang/unittests/Format/BracesRemoverTest.cpp