ClangFormatStyleOptions.rst revision 1.1.1.1 1 ==========================
2 Clang-Format Style Options
3 ==========================
4
5 :doc:`ClangFormatStyleOptions` describes configurable formatting style options
6 supported by :doc:`LibFormat` and :doc:`ClangFormat`.
7
8 When using :program:`clang-format` command line utility or
9 ``clang::format::reformat(...)`` functions from code, one can either use one of
10 the predefined styles (LLVM, Google, Chromium, Mozilla, WebKit, Microsoft) or
11 create a custom style by configuring specific style options.
12
13
14 Configuring Style with clang-format
15 ===================================
16
17 :program:`clang-format` supports two ways to provide custom style options:
18 directly specify style configuration in the ``-style=`` command line option or
19 use ``-style=file`` and put style configuration in the ``.clang-format`` or
20 ``_clang-format`` file in the project directory.
21
22 When using ``-style=file``, :program:`clang-format` for each input file will
23 try to find the ``.clang-format`` file located in the closest parent directory
24 of the input file. When the standard input is used, the search is started from
25 the current directory.
26
27 The ``.clang-format`` file uses YAML format:
28
29 .. code-block:: yaml
30
31 key1: value1
32 key2: value2
33 # A comment.
34 ...
35
36 The configuration file can consist of several sections each having different
37 ``Language:`` parameter denoting the programming language this section of the
38 configuration is targeted at. See the description of the **Language** option
39 below for the list of supported languages. The first section may have no
40 language set, it will set the default style options for all lanugages.
41 Configuration sections for specific language will override options set in the
42 default section.
43
44 When :program:`clang-format` formats a file, it auto-detects the language using
45 the file name. When formatting standard input or a file that doesn't have the
46 extension corresponding to its language, ``-assume-filename=`` option can be
47 used to override the file name :program:`clang-format` uses to detect the
48 language.
49
50 An example of a configuration file for multiple languages:
51
52 .. code-block:: yaml
53
54 ---
55 # We'll use defaults from the LLVM style, but with 4 columns indentation.
56 BasedOnStyle: LLVM
57 IndentWidth: 4
58 ---
59 Language: Cpp
60 # Force pointers to the type for C++.
61 DerivePointerAlignment: false
62 PointerAlignment: Left
63 ---
64 Language: JavaScript
65 # Use 100 columns for JS.
66 ColumnLimit: 100
67 ---
68 Language: Proto
69 # Don't format .proto files.
70 DisableFormat: true
71 ---
72 Language: CSharp
73 # Use 100 columns for C#.
74 ColumnLimit: 100
75 ...
76
77 An easy way to get a valid ``.clang-format`` file containing all configuration
78 options of a certain predefined style is:
79
80 .. code-block:: console
81
82 clang-format -style=llvm -dump-config > .clang-format
83
84 When specifying configuration in the ``-style=`` option, the same configuration
85 is applied for all input files. The format of the configuration is:
86
87 .. code-block:: console
88
89 -style='{key1: value1, key2: value2, ...}'
90
91
92 Disabling Formatting on a Piece of Code
93 =======================================
94
95 Clang-format understands also special comments that switch formatting in a
96 delimited range. The code between a comment ``// clang-format off`` or
97 ``/* clang-format off */`` up to a comment ``// clang-format on`` or
98 ``/* clang-format on */`` will not be formatted. The comments themselves
99 will be formatted (aligned) normally.
100
101 .. code-block:: c++
102
103 int formatted_code;
104 // clang-format off
105 void unformatted_code ;
106 // clang-format on
107 void formatted_code_again;
108
109
110 Configuring Style in Code
111 =========================
112
113 When using ``clang::format::reformat(...)`` functions, the format is specified
114 by supplying the `clang::format::FormatStyle
115 <https://clang.llvm.org/doxygen/structclang_1_1format_1_1FormatStyle.html>`_
116 structure.
117
118
119 Configurable Format Style Options
120 =================================
121
122 This section lists the supported style options. Value type is specified for
123 each option. For enumeration types possible values are specified both as a C++
124 enumeration member (with a prefix, e.g. ``LS_Auto``), and as a value usable in
125 the configuration (without a prefix: ``Auto``).
126
127
128 **BasedOnStyle** (``string``)
129 The style used for all options not specifically set in the configuration.
130
131 This option is supported only in the :program:`clang-format` configuration
132 (both within ``-style='{...}'`` and the ``.clang-format`` file).
133
134 Possible values:
135
136 * ``LLVM``
137 A style complying with the `LLVM coding standards
138 <https://llvm.org/docs/CodingStandards.html>`_
139 * ``Google``
140 A style complying with `Google's C++ style guide
141 <https://google.github.io/styleguide/cppguide.html>`_
142 * ``Chromium``
143 A style complying with `Chromium's style guide
144 <https://chromium.googlesource.com/chromium/src/+/master/styleguide/styleguide.md>`_
145 * ``Mozilla``
146 A style complying with `Mozilla's style guide
147 <https://developer.mozilla.org/en-US/docs/Developer_Guide/Coding_Style>`_
148 * ``WebKit``
149 A style complying with `WebKit's style guide
150 <https://www.webkit.org/coding/coding-style.html>`_
151 * ``Microsoft``
152 A style complying with `Microsoft's style guide
153 <https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference?view=vs-2017>`_
154
155 .. START_FORMAT_STYLE_OPTIONS
156
157 **AccessModifierOffset** (``int``)
158 The extra indent or outdent of access modifiers, e.g. ``public:``.
159
160 **AlignAfterOpenBracket** (``BracketAlignmentStyle``)
161 If ``true``, horizontally aligns arguments after an open bracket.
162
163 This applies to round brackets (parentheses), angle brackets and square
164 brackets.
165
166 Possible values:
167
168 * ``BAS_Align`` (in configuration: ``Align``)
169 Align parameters on the open bracket, e.g.:
170
171 .. code-block:: c++
172
173 someLongFunction(argument1,
174 argument2);
175
176 * ``BAS_DontAlign`` (in configuration: ``DontAlign``)
177 Don't align, instead use ``ContinuationIndentWidth``, e.g.:
178
179 .. code-block:: c++
180
181 someLongFunction(argument1,
182 argument2);
183
184 * ``BAS_AlwaysBreak`` (in configuration: ``AlwaysBreak``)
185 Always break after an open bracket, if the parameters don't fit
186 on a single line, e.g.:
187
188 .. code-block:: c++
189
190 someLongFunction(
191 argument1, argument2);
192
193
194
195 **AlignConsecutiveAssignments** (``bool``)
196 If ``true``, aligns consecutive assignments.
197
198 This will align the assignment operators of consecutive lines. This
199 will result in formattings like
200
201 .. code-block:: c++
202
203 int aaaa = 12;
204 int b = 23;
205 int ccc = 23;
206
207 **AlignConsecutiveDeclarations** (``bool``)
208 If ``true``, aligns consecutive declarations.
209
210 This will align the declaration names of consecutive lines. This
211 will result in formattings like
212
213 .. code-block:: c++
214
215 int aaaa = 12;
216 float b = 23;
217 std::string ccc = 23;
218
219 **AlignConsecutiveMacros** (``bool``)
220 If ``true``, aligns consecutive C/C++ preprocessor macros.
221
222 This will align C/C++ preprocessor macros of consecutive lines.
223 Will result in formattings like
224
225 .. code-block:: c++
226
227 #define SHORT_NAME 42
228 #define LONGER_NAME 0x007f
229 #define EVEN_LONGER_NAME (2)
230 #define foo(x) (x * x)
231 #define bar(y, z) (y + z)
232
233 **AlignEscapedNewlines** (``EscapedNewlineAlignmentStyle``)
234 Options for aligning backslashes in escaped newlines.
235
236 Possible values:
237
238 * ``ENAS_DontAlign`` (in configuration: ``DontAlign``)
239 Don't align escaped newlines.
240
241 .. code-block:: c++
242
243 #define A \
244 int aaaa; \
245 int b; \
246 int dddddddddd;
247
248 * ``ENAS_Left`` (in configuration: ``Left``)
249 Align escaped newlines as far left as possible.
250
251 .. code-block:: c++
252
253 true:
254 #define A \
255 int aaaa; \
256 int b; \
257 int dddddddddd;
258
259 false:
260
261 * ``ENAS_Right`` (in configuration: ``Right``)
262 Align escaped newlines in the right-most column.
263
264 .. code-block:: c++
265
266 #define A \
267 int aaaa; \
268 int b; \
269 int dddddddddd;
270
271
272
273 **AlignOperands** (``bool``)
274 If ``true``, horizontally align operands of binary and ternary
275 expressions.
276
277 Specifically, this aligns operands of a single expression that needs to be
278 split over multiple lines, e.g.:
279
280 .. code-block:: c++
281
282 int aaa = bbbbbbbbbbbbbbb +
283 ccccccccccccccc;
284
285 **AlignTrailingComments** (``bool``)
286 If ``true``, aligns trailing comments.
287
288 .. code-block:: c++
289
290 true: false:
291 int a; // My comment a vs. int a; // My comment a
292 int b = 2; // comment b int b = 2; // comment about b
293
294 **AllowAllArgumentsOnNextLine** (``bool``)
295 If a function call or braced initializer list doesn't fit on a
296 line, allow putting all arguments onto the next line, even if
297 ``BinPackArguments`` is ``false``.
298
299 .. code-block:: c++
300
301 true:
302 callFunction(
303 a, b, c, d);
304
305 false:
306 callFunction(a,
307 b,
308 c,
309 d);
310
311 **AllowAllConstructorInitializersOnNextLine** (``bool``)
312 If a constructor definition with a member initializer list doesn't
313 fit on a single line, allow putting all member initializers onto the next
314 line, if ```ConstructorInitializerAllOnOneLineOrOnePerLine``` is true.
315 Note that this parameter has no effect if
316 ```ConstructorInitializerAllOnOneLineOrOnePerLine``` is false.
317
318 .. code-block:: c++
319
320 true:
321 MyClass::MyClass() :
322 member0(0), member1(2) {}
323
324 false:
325 MyClass::MyClass() :
326 member0(0),
327 member1(2) {}
328
329 **AllowAllParametersOfDeclarationOnNextLine** (``bool``)
330 If the function declaration doesn't fit on a line,
331 allow putting all parameters of a function declaration onto
332 the next line even if ``BinPackParameters`` is ``false``.
333
334 .. code-block:: c++
335
336 true:
337 void myFunction(
338 int a, int b, int c, int d, int e);
339
340 false:
341 void myFunction(int a,
342 int b,
343 int c,
344 int d,
345 int e);
346
347 **AllowShortBlocksOnASingleLine** (``ShortBlockStyle``)
348 Dependent on the value, ``while (true) { continue; }`` can be put on a
349 single line.
350
351 Possible values:
352
353 * ``SBS_Never`` (in configuration: ``Never``)
354 Never merge blocks into a single line.
355
356 .. code-block:: c++
357
358 while (true) {
359 }
360 while (true) {
361 continue;
362 }
363
364 * ``SBS_Empty`` (in configuration: ``Empty``)
365 Only merge empty blocks.
366
367 .. code-block:: c++
368
369 while (true) {}
370 while (true) {
371 continue;
372 }
373
374 * ``SBS_Always`` (in configuration: ``Always``)
375 Always merge short blocks into a single line.
376
377 .. code-block:: c++
378
379 while (true) {}
380 while (true) { continue; }
381
382
383
384 **AllowShortCaseLabelsOnASingleLine** (``bool``)
385 If ``true``, short case labels will be contracted to a single line.
386
387 .. code-block:: c++
388
389 true: false:
390 switch (a) { vs. switch (a) {
391 case 1: x = 1; break; case 1:
392 case 2: return; x = 1;
393 } break;
394 case 2:
395 return;
396 }
397
398 **AllowShortFunctionsOnASingleLine** (``ShortFunctionStyle``)
399 Dependent on the value, ``int f() { return 0; }`` can be put on a
400 single line.
401
402 Possible values:
403
404 * ``SFS_None`` (in configuration: ``None``)
405 Never merge functions into a single line.
406
407 * ``SFS_InlineOnly`` (in configuration: ``InlineOnly``)
408 Only merge functions defined inside a class. Same as "inline",
409 except it does not implies "empty": i.e. top level empty functions
410 are not merged either.
411
412 .. code-block:: c++
413
414 class Foo {
415 void f() { foo(); }
416 };
417 void f() {
418 foo();
419 }
420 void f() {
421 }
422
423 * ``SFS_Empty`` (in configuration: ``Empty``)
424 Only merge empty functions.
425
426 .. code-block:: c++
427
428 void f() {}
429 void f2() {
430 bar2();
431 }
432
433 * ``SFS_Inline`` (in configuration: ``Inline``)
434 Only merge functions defined inside a class. Implies "empty".
435
436 .. code-block:: c++
437
438 class Foo {
439 void f() { foo(); }
440 };
441 void f() {
442 foo();
443 }
444 void f() {}
445
446 * ``SFS_All`` (in configuration: ``All``)
447 Merge all functions fitting on a single line.
448
449 .. code-block:: c++
450
451 class Foo {
452 void f() { foo(); }
453 };
454 void f() { bar(); }
455
456
457
458 **AllowShortIfStatementsOnASingleLine** (``ShortIfStyle``)
459 If ``true``, ``if (a) return;`` can be put on a single line.
460
461 Possible values:
462
463 * ``SIS_Never`` (in configuration: ``Never``)
464 Never put short ifs on the same line.
465
466 .. code-block:: c++
467
468 if (a)
469 return ;
470 else {
471 return;
472 }
473
474 * ``SIS_WithoutElse`` (in configuration: ``WithoutElse``)
475 Without else put short ifs on the same line only if
476 the else is not a compound statement.
477
478 .. code-block:: c++
479
480 if (a) return;
481 else
482 return;
483
484 * ``SIS_Always`` (in configuration: ``Always``)
485 Always put short ifs on the same line if
486 the else is not a compound statement or not.
487
488 .. code-block:: c++
489
490 if (a) return;
491 else {
492 return;
493 }
494
495
496
497 **AllowShortLambdasOnASingleLine** (``ShortLambdaStyle``)
498 Dependent on the value, ``auto lambda []() { return 0; }`` can be put on a
499 single line.
500
501 Possible values:
502
503 * ``SLS_None`` (in configuration: ``None``)
504 Never merge lambdas into a single line.
505
506 * ``SLS_Empty`` (in configuration: ``Empty``)
507 Only merge empty lambdas.
508
509 .. code-block:: c++
510
511 auto lambda = [](int a) {}
512 auto lambda2 = [](int a) {
513 return a;
514 };
515
516 * ``SLS_Inline`` (in configuration: ``Inline``)
517 Merge lambda into a single line if argument of a function.
518
519 .. code-block:: c++
520
521 auto lambda = [](int a) {
522 return a;
523 };
524 sort(a.begin(), a.end(), ()[] { return x < y; })
525
526 * ``SLS_All`` (in configuration: ``All``)
527 Merge all lambdas fitting on a single line.
528
529 .. code-block:: c++
530
531 auto lambda = [](int a) {}
532 auto lambda2 = [](int a) { return a; };
533
534
535
536 **AllowShortLoopsOnASingleLine** (``bool``)
537 If ``true``, ``while (true) continue;`` can be put on a single
538 line.
539
540 **AlwaysBreakAfterDefinitionReturnType** (``DefinitionReturnTypeBreakingStyle``)
541 The function definition return type breaking style to use. This
542 option is **deprecated** and is retained for backwards compatibility.
543
544 Possible values:
545
546 * ``DRTBS_None`` (in configuration: ``None``)
547 Break after return type automatically.
548 ``PenaltyReturnTypeOnItsOwnLine`` is taken into account.
549
550 * ``DRTBS_All`` (in configuration: ``All``)
551 Always break after the return type.
552
553 * ``DRTBS_TopLevel`` (in configuration: ``TopLevel``)
554 Always break after the return types of top-level functions.
555
556
557
558 **AlwaysBreakAfterReturnType** (``ReturnTypeBreakingStyle``)
559 The function declaration return type breaking style to use.
560
561 Possible values:
562
563 * ``RTBS_None`` (in configuration: ``None``)
564 Break after return type automatically.
565 ``PenaltyReturnTypeOnItsOwnLine`` is taken into account.
566
567 .. code-block:: c++
568
569 class A {
570 int f() { return 0; };
571 };
572 int f();
573 int f() { return 1; }
574
575 * ``RTBS_All`` (in configuration: ``All``)
576 Always break after the return type.
577
578 .. code-block:: c++
579
580 class A {
581 int
582 f() {
583 return 0;
584 };
585 };
586 int
587 f();
588 int
589 f() {
590 return 1;
591 }
592
593 * ``RTBS_TopLevel`` (in configuration: ``TopLevel``)
594 Always break after the return types of top-level functions.
595
596 .. code-block:: c++
597
598 class A {
599 int f() { return 0; };
600 };
601 int
602 f();
603 int
604 f() {
605 return 1;
606 }
607
608 * ``RTBS_AllDefinitions`` (in configuration: ``AllDefinitions``)
609 Always break after the return type of function definitions.
610
611 .. code-block:: c++
612
613 class A {
614 int
615 f() {
616 return 0;
617 };
618 };
619 int f();
620 int
621 f() {
622 return 1;
623 }
624
625 * ``RTBS_TopLevelDefinitions`` (in configuration: ``TopLevelDefinitions``)
626 Always break after the return type of top-level definitions.
627
628 .. code-block:: c++
629
630 class A {
631 int f() { return 0; };
632 };
633 int f();
634 int
635 f() {
636 return 1;
637 }
638
639
640
641 **AlwaysBreakBeforeMultilineStrings** (``bool``)
642 If ``true``, always break before multiline string literals.
643
644 This flag is mean to make cases where there are multiple multiline strings
645 in a file look more consistent. Thus, it will only take effect if wrapping
646 the string at that point leads to it being indented
647 ``ContinuationIndentWidth`` spaces from the start of the line.
648
649 .. code-block:: c++
650
651 true: false:
652 aaaa = vs. aaaa = "bbbb"
653 "bbbb" "cccc";
654 "cccc";
655
656 **AlwaysBreakTemplateDeclarations** (``BreakTemplateDeclarationsStyle``)
657 The template declaration breaking style to use.
658
659 Possible values:
660
661 * ``BTDS_No`` (in configuration: ``No``)
662 Do not force break before declaration.
663 ``PenaltyBreakTemplateDeclaration`` is taken into account.
664
665 .. code-block:: c++
666
667 template <typename T> T foo() {
668 }
669 template <typename T> T foo(int aaaaaaaaaaaaaaaaaaaaa,
670 int bbbbbbbbbbbbbbbbbbbbb) {
671 }
672
673 * ``BTDS_MultiLine`` (in configuration: ``MultiLine``)
674 Force break after template declaration only when the following
675 declaration spans multiple lines.
676
677 .. code-block:: c++
678
679 template <typename T> T foo() {
680 }
681 template <typename T>
682 T foo(int aaaaaaaaaaaaaaaaaaaaa,
683 int bbbbbbbbbbbbbbbbbbbbb) {
684 }
685
686 * ``BTDS_Yes`` (in configuration: ``Yes``)
687 Always break after template declaration.
688
689 .. code-block:: c++
690
691 template <typename T>
692 T foo() {
693 }
694 template <typename T>
695 T foo(int aaaaaaaaaaaaaaaaaaaaa,
696 int bbbbbbbbbbbbbbbbbbbbb) {
697 }
698
699
700
701 **BinPackArguments** (``bool``)
702 If ``false``, a function call's arguments will either be all on the
703 same line or will have one line each.
704
705 .. code-block:: c++
706
707 true:
708 void f() {
709 f(aaaaaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaaaaaa,
710 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa);
711 }
712
713 false:
714 void f() {
715 f(aaaaaaaaaaaaaaaaaaaa,
716 aaaaaaaaaaaaaaaaaaaa,
717 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa);
718 }
719
720 **BinPackParameters** (``bool``)
721 If ``false``, a function declaration's or function definition's
722 parameters will either all be on the same line or will have one line each.
723
724 .. code-block:: c++
725
726 true:
727 void f(int aaaaaaaaaaaaaaaaaaaa, int aaaaaaaaaaaaaaaaaaaa,
728 int aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) {}
729
730 false:
731 void f(int aaaaaaaaaaaaaaaaaaaa,
732 int aaaaaaaaaaaaaaaaaaaa,
733 int aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) {}
734
735 **BraceWrapping** (``BraceWrappingFlags``)
736 Control of individual brace wrapping cases.
737
738 If ``BreakBeforeBraces`` is set to ``BS_Custom``, use this to specify how
739 each individual brace case should be handled. Otherwise, this is ignored.
740
741 .. code-block:: yaml
742
743 # Example of usage:
744 BreakBeforeBraces: Custom
745 BraceWrapping:
746 AfterEnum: true
747 AfterStruct: false
748 SplitEmptyFunction: false
749
750 Nested configuration flags:
751
752
753 * ``bool AfterCaseLabel`` Wrap case labels.
754
755 .. code-block:: c++
756
757 false: true:
758 switch (foo) { vs. switch (foo) {
759 case 1: { case 1:
760 bar(); {
761 break; bar();
762 } break;
763 default: { }
764 plop(); default:
765 } {
766 } plop();
767 }
768 }
769
770 * ``bool AfterClass`` Wrap class definitions.
771
772 .. code-block:: c++
773
774 true:
775 class foo {};
776
777 false:
778 class foo
779 {};
780
781 * ``BraceWrappingAfterControlStatementStyle AfterControlStatement``
782 Wrap control statements (``if``/``for``/``while``/``switch``/..).
783
784 Possible values:
785
786 * ``BWACS_Never`` (in configuration: ``Never``)
787 Never wrap braces after a control statement.
788
789 .. code-block:: c++
790
791 if (foo()) {
792 } else {
793 }
794 for (int i = 0; i < 10; ++i) {
795 }
796
797 * ``BWACS_MultiLine`` (in configuration: ``MultiLine``)
798 Only wrap braces after a multi-line control statement.
799
800 .. code-block:: c++
801
802 if (foo && bar &&
803 baz)
804 {
805 quux();
806 }
807 while (foo || bar) {
808 }
809
810 * ``BWACS_Always`` (in configuration: ``Always``)
811 Always wrap braces after a control statement.
812
813 .. code-block:: c++
814
815 if (foo())
816 {
817 } else
818 {}
819 for (int i = 0; i < 10; ++i)
820 {}
821
822 * ``bool AfterEnum`` Wrap enum definitions.
823
824 .. code-block:: c++
825
826 true:
827 enum X : int
828 {
829 B
830 };
831
832 false:
833 enum X : int { B };
834
835 * ``bool AfterFunction`` Wrap function definitions.
836
837 .. code-block:: c++
838
839 true:
840 void foo()
841 {
842 bar();
843 bar2();
844 }
845
846 false:
847 void foo() {
848 bar();
849 bar2();
850 }
851
852 * ``bool AfterNamespace`` Wrap namespace definitions.
853
854 .. code-block:: c++
855
856 true:
857 namespace
858 {
859 int foo();
860 int bar();
861 }
862
863 false:
864 namespace {
865 int foo();
866 int bar();
867 }
868
869 * ``bool AfterObjCDeclaration`` Wrap ObjC definitions (interfaces, implementations...).
870 @autoreleasepool and @synchronized blocks are wrapped
871 according to `AfterControlStatement` flag.
872
873 * ``bool AfterStruct`` Wrap struct definitions.
874
875 .. code-block:: c++
876
877 true:
878 struct foo
879 {
880 int x;
881 };
882
883 false:
884 struct foo {
885 int x;
886 };
887
888 * ``bool AfterUnion`` Wrap union definitions.
889
890 .. code-block:: c++
891
892 true:
893 union foo
894 {
895 int x;
896 }
897
898 false:
899 union foo {
900 int x;
901 }
902
903 * ``bool AfterExternBlock`` Wrap extern blocks.
904
905 .. code-block:: c++
906
907 true:
908 extern "C"
909 {
910 int foo();
911 }
912
913 false:
914 extern "C" {
915 int foo();
916 }
917
918 * ``bool BeforeCatch`` Wrap before ``catch``.
919
920 .. code-block:: c++
921
922 true:
923 try {
924 foo();
925 }
926 catch () {
927 }
928
929 false:
930 try {
931 foo();
932 } catch () {
933 }
934
935 * ``bool BeforeElse`` Wrap before ``else``.
936
937 .. code-block:: c++
938
939 true:
940 if (foo()) {
941 }
942 else {
943 }
944
945 false:
946 if (foo()) {
947 } else {
948 }
949
950 * ``bool IndentBraces`` Indent the wrapped braces themselves.
951
952 * ``bool SplitEmptyFunction`` If ``false``, empty function body can be put on a single line.
953 This option is used only if the opening brace of the function has
954 already been wrapped, i.e. the `AfterFunction` brace wrapping mode is
955 set, and the function could/should not be put on a single line (as per
956 `AllowShortFunctionsOnASingleLine` and constructor formatting options).
957
958 .. code-block:: c++
959
960 int f() vs. inf f()
961 {} {
962 }
963
964 * ``bool SplitEmptyRecord`` If ``false``, empty record (e.g. class, struct or union) body
965 can be put on a single line. This option is used only if the opening
966 brace of the record has already been wrapped, i.e. the `AfterClass`
967 (for classes) brace wrapping mode is set.
968
969 .. code-block:: c++
970
971 class Foo vs. class Foo
972 {} {
973 }
974
975 * ``bool SplitEmptyNamespace`` If ``false``, empty namespace body can be put on a single line.
976 This option is used only if the opening brace of the namespace has
977 already been wrapped, i.e. the `AfterNamespace` brace wrapping mode is
978 set.
979
980 .. code-block:: c++
981
982 namespace Foo vs. namespace Foo
983 {} {
984 }
985
986
987 **BreakAfterJavaFieldAnnotations** (``bool``)
988 Break after each annotation on a field in Java files.
989
990 .. code-block:: java
991
992 true: false:
993 @Partial vs. @Partial @Mock DataLoad loader;
994 @Mock
995 DataLoad loader;
996
997 **BreakBeforeBinaryOperators** (``BinaryOperatorStyle``)
998 The way to wrap binary operators.
999
1000 Possible values:
1001
1002 * ``BOS_None`` (in configuration: ``None``)
1003 Break after operators.
1004
1005 .. code-block:: c++
1006
1007 LooooooooooongType loooooooooooooooooooooongVariable =
1008 someLooooooooooooooooongFunction();
1009
1010 bool value = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +
1011 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ==
1012 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa &&
1013 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa >
1014 ccccccccccccccccccccccccccccccccccccccccc;
1015
1016 * ``BOS_NonAssignment`` (in configuration: ``NonAssignment``)
1017 Break before operators that aren't assignments.
1018
1019 .. code-block:: c++
1020
1021 LooooooooooongType loooooooooooooooooooooongVariable =
1022 someLooooooooooooooooongFunction();
1023
1024 bool value = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
1025 + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
1026 == aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
1027 && aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
1028 > ccccccccccccccccccccccccccccccccccccccccc;
1029
1030 * ``BOS_All`` (in configuration: ``All``)
1031 Break before operators.
1032
1033 .. code-block:: c++
1034
1035 LooooooooooongType loooooooooooooooooooooongVariable
1036 = someLooooooooooooooooongFunction();
1037
1038 bool value = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
1039 + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
1040 == aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
1041 && aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
1042 > ccccccccccccccccccccccccccccccccccccccccc;
1043
1044
1045
1046 **BreakBeforeBraces** (``BraceBreakingStyle``)
1047 The brace breaking style to use.
1048
1049 Possible values:
1050
1051 * ``BS_Attach`` (in configuration: ``Attach``)
1052 Always attach braces to surrounding context.
1053
1054 .. code-block:: c++
1055
1056 try {
1057 foo();
1058 } catch () {
1059 }
1060 void foo() { bar(); }
1061 class foo {};
1062 if (foo()) {
1063 } else {
1064 }
1065 enum X : int { A, B };
1066
1067 * ``BS_Linux`` (in configuration: ``Linux``)
1068 Like ``Attach``, but break before braces on function, namespace and
1069 class definitions.
1070
1071 .. code-block:: c++
1072
1073 try {
1074 foo();
1075 } catch () {
1076 }
1077 void foo() { bar(); }
1078 class foo
1079 {
1080 };
1081 if (foo()) {
1082 } else {
1083 }
1084 enum X : int { A, B };
1085
1086 * ``BS_Mozilla`` (in configuration: ``Mozilla``)
1087 Like ``Attach``, but break before braces on enum, function, and record
1088 definitions.
1089
1090 .. code-block:: c++
1091
1092 try {
1093 foo();
1094 } catch () {
1095 }
1096 void foo() { bar(); }
1097 class foo
1098 {
1099 };
1100 if (foo()) {
1101 } else {
1102 }
1103 enum X : int { A, B };
1104
1105 * ``BS_Stroustrup`` (in configuration: ``Stroustrup``)
1106 Like ``Attach``, but break before function definitions, ``catch``, and
1107 ``else``.
1108
1109 .. code-block:: c++
1110
1111 try {
1112 foo();
1113 }
1114 catch () {
1115 }
1116 void foo() { bar(); }
1117 class foo {
1118 };
1119 if (foo()) {
1120 }
1121 else {
1122 }
1123 enum X : int { A, B };
1124
1125 * ``BS_Allman`` (in configuration: ``Allman``)
1126 Always break before braces.
1127
1128 .. code-block:: c++
1129
1130 try
1131 {
1132 foo();
1133 }
1134 catch ()
1135 {
1136 }
1137 void foo() { bar(); }
1138 class foo
1139 {
1140 };
1141 if (foo())
1142 {
1143 }
1144 else
1145 {
1146 }
1147 enum X : int
1148 {
1149 A,
1150 B
1151 };
1152
1153 * ``BS_Whitesmiths`` (in configuration: ``Whitesmiths``)
1154 Like ``Allman`` but always indent braces and line up code with braces.
1155
1156 .. code-block:: c++
1157
1158 try
1159 {
1160 foo();
1161 }
1162 catch ()
1163 {
1164 }
1165 void foo() { bar(); }
1166 class foo
1167 {
1168 };
1169 if (foo())
1170 {
1171 }
1172 else
1173 {
1174 }
1175 enum X : int
1176 {
1177 A,
1178 B
1179 };
1180
1181 * ``BS_GNU`` (in configuration: ``GNU``)
1182 Always break before braces and add an extra level of indentation to
1183 braces of control statements, not to those of class, function
1184 or other definitions.
1185
1186 .. code-block:: c++
1187
1188 try
1189 {
1190 foo();
1191 }
1192 catch ()
1193 {
1194 }
1195 void foo() { bar(); }
1196 class foo
1197 {
1198 };
1199 if (foo())
1200 {
1201 }
1202 else
1203 {
1204 }
1205 enum X : int
1206 {
1207 A,
1208 B
1209 };
1210
1211 * ``BS_WebKit`` (in configuration: ``WebKit``)
1212 Like ``Attach``, but break before functions.
1213
1214 .. code-block:: c++
1215
1216 try {
1217 foo();
1218 } catch () {
1219 }
1220 void foo() { bar(); }
1221 class foo {
1222 };
1223 if (foo()) {
1224 } else {
1225 }
1226 enum X : int { A, B };
1227
1228 * ``BS_Custom`` (in configuration: ``Custom``)
1229 Configure each individual brace in `BraceWrapping`.
1230
1231
1232
1233 **BreakBeforeTernaryOperators** (``bool``)
1234 If ``true``, ternary operators will be placed after line breaks.
1235
1236 .. code-block:: c++
1237
1238 true:
1239 veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongDescription
1240 ? firstValue
1241 : SecondValueVeryVeryVeryVeryLong;
1242
1243 false:
1244 veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongDescription ?
1245 firstValue :
1246 SecondValueVeryVeryVeryVeryLong;
1247
1248 **BreakConstructorInitializers** (``BreakConstructorInitializersStyle``)
1249 The constructor initializers style to use.
1250
1251 Possible values:
1252
1253 * ``BCIS_BeforeColon`` (in configuration: ``BeforeColon``)
1254 Break constructor initializers before the colon and after the commas.
1255
1256 .. code-block:: c++
1257
1258 Constructor()
1259 : initializer1(),
1260 initializer2()
1261
1262 * ``BCIS_BeforeComma`` (in configuration: ``BeforeComma``)
1263 Break constructor initializers before the colon and commas, and align
1264 the commas with the colon.
1265
1266 .. code-block:: c++
1267
1268 Constructor()
1269 : initializer1()
1270 , initializer2()
1271
1272 * ``BCIS_AfterColon`` (in configuration: ``AfterColon``)
1273 Break constructor initializers after the colon and commas.
1274
1275 .. code-block:: c++
1276
1277 Constructor() :
1278 initializer1(),
1279 initializer2()
1280
1281
1282
1283 **BreakInheritanceList** (``BreakInheritanceListStyle``)
1284 The inheritance list style to use.
1285
1286 Possible values:
1287
1288 * ``BILS_BeforeColon`` (in configuration: ``BeforeColon``)
1289 Break inheritance list before the colon and after the commas.
1290
1291 .. code-block:: c++
1292
1293 class Foo
1294 : Base1,
1295 Base2
1296 {};
1297
1298 * ``BILS_BeforeComma`` (in configuration: ``BeforeComma``)
1299 Break inheritance list before the colon and commas, and align
1300 the commas with the colon.
1301
1302 .. code-block:: c++
1303
1304 class Foo
1305 : Base1
1306 , Base2
1307 {};
1308
1309 * ``BILS_AfterColon`` (in configuration: ``AfterColon``)
1310 Break inheritance list after the colon and commas.
1311
1312 .. code-block:: c++
1313
1314 class Foo :
1315 Base1,
1316 Base2
1317 {};
1318
1319
1320
1321 **BreakStringLiterals** (``bool``)
1322 Allow breaking string literals when formatting.
1323
1324 .. code-block:: c++
1325
1326 true:
1327 const char* x = "veryVeryVeryVeryVeryVe"
1328 "ryVeryVeryVeryVeryVery"
1329 "VeryLongString";
1330
1331 false:
1332 const char* x =
1333 "veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongString";
1334
1335 **ColumnLimit** (``unsigned``)
1336 The column limit.
1337
1338 A column limit of ``0`` means that there is no column limit. In this case,
1339 clang-format will respect the input's line breaking decisions within
1340 statements unless they contradict other rules.
1341
1342 **CommentPragmas** (``std::string``)
1343 A regular expression that describes comments with special meaning,
1344 which should not be split into lines or otherwise changed.
1345
1346 .. code-block:: c++
1347
1348 // CommentPragmas: '^ FOOBAR pragma:'
1349 // Will leave the following line unaffected
1350 #include <vector> // FOOBAR pragma: keep
1351
1352 **CompactNamespaces** (``bool``)
1353 If ``true``, consecutive namespace declarations will be on the same
1354 line. If ``false``, each namespace is declared on a new line.
1355
1356 .. code-block:: c++
1357
1358 true:
1359 namespace Foo { namespace Bar {
1360 }}
1361
1362 false:
1363 namespace Foo {
1364 namespace Bar {
1365 }
1366 }
1367
1368 If it does not fit on a single line, the overflowing namespaces get
1369 wrapped:
1370
1371 .. code-block:: c++
1372
1373 namespace Foo { namespace Bar {
1374 namespace Extra {
1375 }}}
1376
1377 **ConstructorInitializerAllOnOneLineOrOnePerLine** (``bool``)
1378 If the constructor initializers don't fit on a line, put each
1379 initializer on its own line.
1380
1381 .. code-block:: c++
1382
1383 true:
1384 SomeClass::Constructor()
1385 : aaaaaaaa(aaaaaaaa), aaaaaaaa(aaaaaaaa), aaaaaaaa(aaaaaaaaaaaaaaaaaaaaaaaaa) {
1386 return 0;
1387 }
1388
1389 false:
1390 SomeClass::Constructor()
1391 : aaaaaaaa(aaaaaaaa), aaaaaaaa(aaaaaaaa),
1392 aaaaaaaa(aaaaaaaaaaaaaaaaaaaaaaaaa) {
1393 return 0;
1394 }
1395
1396 **ConstructorInitializerIndentWidth** (``unsigned``)
1397 The number of characters to use for indentation of constructor
1398 initializer lists as well as inheritance lists.
1399
1400 **ContinuationIndentWidth** (``unsigned``)
1401 Indent width for line continuations.
1402
1403 .. code-block:: c++
1404
1405 ContinuationIndentWidth: 2
1406
1407 int i = // VeryVeryVeryVeryVeryLongComment
1408 longFunction( // Again a long comment
1409 arg);
1410
1411 **Cpp11BracedListStyle** (``bool``)
1412 If ``true``, format braced lists as best suited for C++11 braced
1413 lists.
1414
1415 Important differences:
1416 - No spaces inside the braced list.
1417 - No line break before the closing brace.
1418 - Indentation with the continuation indent, not with the block indent.
1419
1420 Fundamentally, C++11 braced lists are formatted exactly like function
1421 calls would be formatted in their place. If the braced list follows a name
1422 (e.g. a type or variable name), clang-format formats as if the ``{}`` were
1423 the parentheses of a function call with that name. If there is no name,
1424 a zero-length name is assumed.
1425
1426 .. code-block:: c++
1427
1428 true: false:
1429 vector<int> x{1, 2, 3, 4}; vs. vector<int> x{ 1, 2, 3, 4 };
1430 vector<T> x{{}, {}, {}, {}}; vector<T> x{ {}, {}, {}, {} };
1431 f(MyMap[{composite, key}]); f(MyMap[{ composite, key }]);
1432 new int[3]{1, 2, 3}; new int[3]{ 1, 2, 3 };
1433
1434 **DerivePointerAlignment** (``bool``)
1435 If ``true``, analyze the formatted file for the most common
1436 alignment of ``&`` and ``*``.
1437 Pointer and reference alignment styles are going to be updated according
1438 to the preferences found in the file.
1439 ``PointerAlignment`` is then used only as fallback.
1440
1441 **DisableFormat** (``bool``)
1442 Disables formatting completely.
1443
1444 **ExperimentalAutoDetectBinPacking** (``bool``)
1445 If ``true``, clang-format detects whether function calls and
1446 definitions are formatted with one parameter per line.
1447
1448 Each call can be bin-packed, one-per-line or inconclusive. If it is
1449 inconclusive, e.g. completely on one line, but a decision needs to be
1450 made, clang-format analyzes whether there are other bin-packed cases in
1451 the input file and act accordingly.
1452
1453 NOTE: This is an experimental flag, that might go away or be renamed. Do
1454 not use this in config files, etc. Use at your own risk.
1455
1456 **FixNamespaceComments** (``bool``)
1457 If ``true``, clang-format adds missing namespace end comments and
1458 fixes invalid existing ones.
1459
1460 .. code-block:: c++
1461
1462 true: false:
1463 namespace a { vs. namespace a {
1464 foo(); foo();
1465 } // namespace a }
1466
1467 **ForEachMacros** (``std::vector<std::string>``)
1468 A vector of macros that should be interpreted as foreach loops
1469 instead of as function calls.
1470
1471 These are expected to be macros of the form:
1472
1473 .. code-block:: c++
1474
1475 FOREACH(<variable-declaration>, ...)
1476 <loop-body>
1477
1478 In the .clang-format configuration file, this can be configured like:
1479
1480 .. code-block:: yaml
1481
1482 ForEachMacros: ['RANGES_FOR', 'FOREACH']
1483
1484 For example: BOOST_FOREACH.
1485
1486 **IncludeBlocks** (``IncludeBlocksStyle``)
1487 Dependent on the value, multiple ``#include`` blocks can be sorted
1488 as one and divided based on category.
1489
1490 Possible values:
1491
1492 * ``IBS_Preserve`` (in configuration: ``Preserve``)
1493 Sort each ``#include`` block separately.
1494
1495 .. code-block:: c++
1496
1497 #include "b.h" into #include "b.h"
1498
1499 #include <lib/main.h> #include "a.h"
1500 #include "a.h" #include <lib/main.h>
1501
1502 * ``IBS_Merge`` (in configuration: ``Merge``)
1503 Merge multiple ``#include`` blocks together and sort as one.
1504
1505 .. code-block:: c++
1506
1507 #include "b.h" into #include "a.h"
1508 #include "b.h"
1509 #include <lib/main.h> #include <lib/main.h>
1510 #include "a.h"
1511
1512 * ``IBS_Regroup`` (in configuration: ``Regroup``)
1513 Merge multiple ``#include`` blocks together and sort as one.
1514 Then split into groups based on category priority. See
1515 ``IncludeCategories``.
1516
1517 .. code-block:: c++
1518
1519 #include "b.h" into #include "a.h"
1520 #include "b.h"
1521 #include <lib/main.h>
1522 #include "a.h" #include <lib/main.h>
1523
1524
1525
1526 **IncludeCategories** (``std::vector<IncludeCategory>``)
1527 Regular expressions denoting the different ``#include`` categories
1528 used for ordering ``#includes``.
1529
1530 `POSIX extended
1531 <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html>`_
1532 regular expressions are supported.
1533
1534 These regular expressions are matched against the filename of an include
1535 (including the <> or "") in order. The value belonging to the first
1536 matching regular expression is assigned and ``#includes`` are sorted first
1537 according to increasing category number and then alphabetically within
1538 each category.
1539
1540 If none of the regular expressions match, INT_MAX is assigned as
1541 category. The main header for a source file automatically gets category 0.
1542 so that it is generally kept at the beginning of the ``#includes``
1543 (https://llvm.org/docs/CodingStandards.html#include-style). However, you
1544 can also assign negative priorities if you have certain headers that
1545 always need to be first.
1546
1547 There is a third and optional field ``SortPriority`` which can used while
1548 ``IncludeBloks = IBS_Regroup`` to define the priority in which ``#includes``
1549 should be ordered, and value of ``Priority`` defines the order of
1550 ``#include blocks`` and also enables to group ``#includes`` of different
1551 priority for order.``SortPriority`` is set to the value of ``Priority``
1552 as default if it is not assigned.
1553
1554 To configure this in the .clang-format file, use:
1555
1556 .. code-block:: yaml
1557
1558 IncludeCategories:
1559 - Regex: '^"(llvm|llvm-c|clang|clang-c)/'
1560 Priority: 2
1561 SortPriority: 2
1562 - Regex: '^(<|"(gtest|gmock|isl|json)/)'
1563 Priority: 3
1564 - Regex: '<[[:alnum:].]+>'
1565 Priority: 4
1566 - Regex: '.*'
1567 Priority: 1
1568 SortPriority: 0
1569
1570 **IncludeIsMainRegex** (``std::string``)
1571 Specify a regular expression of suffixes that are allowed in the
1572 file-to-main-include mapping.
1573
1574 When guessing whether a #include is the "main" include (to assign
1575 category 0, see above), use this regex of allowed suffixes to the header
1576 stem. A partial match is done, so that:
1577 - "" means "arbitrary suffix"
1578 - "$" means "no suffix"
1579
1580 For example, if configured to "(_test)?$", then a header a.h would be seen
1581 as the "main" include in both a.cc and a_test.cc.
1582
1583 **IndentCaseLabels** (``bool``)
1584 Indent case labels one level from the switch statement.
1585
1586 When ``false``, use the same indentation level as for the switch statement.
1587 Switch statement body is always indented one level more than case labels.
1588
1589 .. code-block:: c++
1590
1591 false: true:
1592 switch (fool) { vs. switch (fool) {
1593 case 1: case 1:
1594 bar(); bar();
1595 break; break;
1596 default: default:
1597 plop(); plop();
1598 } }
1599
1600 **IndentGotoLabels** (``bool``)
1601 Indent goto labels.
1602
1603 When ``false``, goto labels are flushed left.
1604
1605 .. code-block:: c++
1606
1607 true: false:
1608 int f() { vs. int f() {
1609 if (foo()) { if (foo()) {
1610 label1: label1:
1611 bar(); bar();
1612 } }
1613 label2: label2:
1614 return 1; return 1;
1615 } }
1616
1617 **IndentPPDirectives** (``PPDirectiveIndentStyle``)
1618 The preprocessor directive indenting style to use.
1619
1620 Possible values:
1621
1622 * ``PPDIS_None`` (in configuration: ``None``)
1623 Does not indent any directives.
1624
1625 .. code-block:: c++
1626
1627 #if FOO
1628 #if BAR
1629 #include <foo>
1630 #endif
1631 #endif
1632
1633 * ``PPDIS_AfterHash`` (in configuration: ``AfterHash``)
1634 Indents directives after the hash.
1635
1636 .. code-block:: c++
1637
1638 #if FOO
1639 # if BAR
1640 # include <foo>
1641 # endif
1642 #endif
1643
1644 * ``PPDIS_BeforeHash`` (in configuration: ``BeforeHash``)
1645 Indents directives before the hash.
1646
1647 .. code-block:: c++
1648
1649 #if FOO
1650 #if BAR
1651 #include <foo>
1652 #endif
1653 #endif
1654
1655
1656
1657 **IndentWidth** (``unsigned``)
1658 The number of columns to use for indentation.
1659
1660 .. code-block:: c++
1661
1662 IndentWidth: 3
1663
1664 void f() {
1665 someFunction();
1666 if (true, false) {
1667 f();
1668 }
1669 }
1670
1671 **IndentWrappedFunctionNames** (``bool``)
1672 Indent if a function definition or declaration is wrapped after the
1673 type.
1674
1675 .. code-block:: c++
1676
1677 true:
1678 LoooooooooooooooooooooooooooooooooooooooongReturnType
1679 LoooooooooooooooooooooooooooooooongFunctionDeclaration();
1680
1681 false:
1682 LoooooooooooooooooooooooooooooooooooooooongReturnType
1683 LoooooooooooooooooooooooooooooooongFunctionDeclaration();
1684
1685 **JavaImportGroups** (``std::vector<std::string>``)
1686 A vector of prefixes ordered by the desired groups for Java imports.
1687
1688 Each group is separated by a newline. Static imports will also follow the
1689 same grouping convention above all non-static imports. One group's prefix
1690 can be a subset of another - the longest prefix is always matched. Within
1691 a group, the imports are ordered lexicographically.
1692
1693 In the .clang-format configuration file, this can be configured like
1694 in the following yaml example. This will result in imports being
1695 formatted as in the Java example below.
1696
1697 .. code-block:: yaml
1698
1699 JavaImportGroups: ['com.example', 'com', 'org']
1700
1701
1702 .. code-block:: java
1703
1704 import static com.example.function1;
1705
1706 import static com.test.function2;
1707
1708 import static org.example.function3;
1709
1710 import com.example.ClassA;
1711 import com.example.Test;
1712 import com.example.a.ClassB;
1713
1714 import com.test.ClassC;
1715
1716 import org.example.ClassD;
1717
1718 **JavaScriptQuotes** (``JavaScriptQuoteStyle``)
1719 The JavaScriptQuoteStyle to use for JavaScript strings.
1720
1721 Possible values:
1722
1723 * ``JSQS_Leave`` (in configuration: ``Leave``)
1724 Leave string quotes as they are.
1725
1726 .. code-block:: js
1727
1728 string1 = "foo";
1729 string2 = 'bar';
1730
1731 * ``JSQS_Single`` (in configuration: ``Single``)
1732 Always use single quotes.
1733
1734 .. code-block:: js
1735
1736 string1 = 'foo';
1737 string2 = 'bar';
1738
1739 * ``JSQS_Double`` (in configuration: ``Double``)
1740 Always use double quotes.
1741
1742 .. code-block:: js
1743
1744 string1 = "foo";
1745 string2 = "bar";
1746
1747
1748
1749 **JavaScriptWrapImports** (``bool``)
1750 Whether to wrap JavaScript import/export statements.
1751
1752 .. code-block:: js
1753
1754 true:
1755 import {
1756 VeryLongImportsAreAnnoying,
1757 VeryLongImportsAreAnnoying,
1758 VeryLongImportsAreAnnoying,
1759 } from 'some/module.js'
1760
1761 false:
1762 import {VeryLongImportsAreAnnoying, VeryLongImportsAreAnnoying, VeryLongImportsAreAnnoying,} from "some/module.js"
1763
1764 **KeepEmptyLinesAtTheStartOfBlocks** (``bool``)
1765 If true, the empty line at the start of blocks is kept.
1766
1767 .. code-block:: c++
1768
1769 true: false:
1770 if (foo) { vs. if (foo) {
1771 bar();
1772 bar(); }
1773 }
1774
1775 **Language** (``LanguageKind``)
1776 Language, this format style is targeted at.
1777
1778 Possible values:
1779
1780 * ``LK_None`` (in configuration: ``None``)
1781 Do not use.
1782
1783 * ``LK_Cpp`` (in configuration: ``Cpp``)
1784 Should be used for C, C++.
1785
1786 * ``LK_CSharp`` (in configuration: ``CSharp``)
1787 Should be used for C#.
1788
1789 * ``LK_Java`` (in configuration: ``Java``)
1790 Should be used for Java.
1791
1792 * ``LK_JavaScript`` (in configuration: ``JavaScript``)
1793 Should be used for JavaScript.
1794
1795 * ``LK_ObjC`` (in configuration: ``ObjC``)
1796 Should be used for Objective-C, Objective-C++.
1797
1798 * ``LK_Proto`` (in configuration: ``Proto``)
1799 Should be used for Protocol Buffers
1800 (https://developers.google.com/protocol-buffers/).
1801
1802 * ``LK_TableGen`` (in configuration: ``TableGen``)
1803 Should be used for TableGen code.
1804
1805 * ``LK_TextProto`` (in configuration: ``TextProto``)
1806 Should be used for Protocol Buffer messages in text format
1807 (https://developers.google.com/protocol-buffers/).
1808
1809
1810
1811 **MacroBlockBegin** (``std::string``)
1812 A regular expression matching macros that start a block.
1813
1814 .. code-block:: c++
1815
1816 # With:
1817 MacroBlockBegin: "^NS_MAP_BEGIN|\
1818 NS_TABLE_HEAD$"
1819 MacroBlockEnd: "^\
1820 NS_MAP_END|\
1821 NS_TABLE_.*_END$"
1822
1823 NS_MAP_BEGIN
1824 foo();
1825 NS_MAP_END
1826
1827 NS_TABLE_HEAD
1828 bar();
1829 NS_TABLE_FOO_END
1830
1831 # Without:
1832 NS_MAP_BEGIN
1833 foo();
1834 NS_MAP_END
1835
1836 NS_TABLE_HEAD
1837 bar();
1838 NS_TABLE_FOO_END
1839
1840 **MacroBlockEnd** (``std::string``)
1841 A regular expression matching macros that end a block.
1842
1843 **MaxEmptyLinesToKeep** (``unsigned``)
1844 The maximum number of consecutive empty lines to keep.
1845
1846 .. code-block:: c++
1847
1848 MaxEmptyLinesToKeep: 1 vs. MaxEmptyLinesToKeep: 0
1849 int f() { int f() {
1850 int = 1; int i = 1;
1851 i = foo();
1852 i = foo(); return i;
1853 }
1854 return i;
1855 }
1856
1857 **NamespaceIndentation** (``NamespaceIndentationKind``)
1858 The indentation used for namespaces.
1859
1860 Possible values:
1861
1862 * ``NI_None`` (in configuration: ``None``)
1863 Don't indent in namespaces.
1864
1865 .. code-block:: c++
1866
1867 namespace out {
1868 int i;
1869 namespace in {
1870 int i;
1871 }
1872 }
1873
1874 * ``NI_Inner`` (in configuration: ``Inner``)
1875 Indent only in inner namespaces (nested in other namespaces).
1876
1877 .. code-block:: c++
1878
1879 namespace out {
1880 int i;
1881 namespace in {
1882 int i;
1883 }
1884 }
1885
1886 * ``NI_All`` (in configuration: ``All``)
1887 Indent in all namespaces.
1888
1889 .. code-block:: c++
1890
1891 namespace out {
1892 int i;
1893 namespace in {
1894 int i;
1895 }
1896 }
1897
1898
1899
1900 **NamespaceMacros** (``std::vector<std::string>``)
1901 A vector of macros which are used to open namespace blocks.
1902
1903 These are expected to be macros of the form:
1904
1905 .. code-block:: c++
1906
1907 NAMESPACE(<namespace-name>, ...) {
1908 <namespace-content>
1909 }
1910
1911 For example: TESTSUITE
1912
1913 **ObjCBinPackProtocolList** (``BinPackStyle``)
1914 Controls bin-packing Objective-C protocol conformance list
1915 items into as few lines as possible when they go over ``ColumnLimit``.
1916
1917 If ``Auto`` (the default), delegates to the value in
1918 ``BinPackParameters``. If that is ``true``, bin-packs Objective-C
1919 protocol conformance list items into as few lines as possible
1920 whenever they go over ``ColumnLimit``.
1921
1922 If ``Always``, always bin-packs Objective-C protocol conformance
1923 list items into as few lines as possible whenever they go over
1924 ``ColumnLimit``.
1925
1926 If ``Never``, lays out Objective-C protocol conformance list items
1927 onto individual lines whenever they go over ``ColumnLimit``.
1928
1929
1930 .. code-block:: objc
1931
1932 Always (or Auto, if BinPackParameters=true):
1933 @interface ccccccccccccc () <
1934 ccccccccccccc, ccccccccccccc,
1935 ccccccccccccc, ccccccccccccc> {
1936 }
1937
1938 Never (or Auto, if BinPackParameters=false):
1939 @interface ddddddddddddd () <
1940 ddddddddddddd,
1941 ddddddddddddd,
1942 ddddddddddddd,
1943 ddddddddddddd> {
1944 }
1945
1946 Possible values:
1947
1948 * ``BPS_Auto`` (in configuration: ``Auto``)
1949 Automatically determine parameter bin-packing behavior.
1950
1951 * ``BPS_Always`` (in configuration: ``Always``)
1952 Always bin-pack parameters.
1953
1954 * ``BPS_Never`` (in configuration: ``Never``)
1955 Never bin-pack parameters.
1956
1957
1958
1959 **ObjCBlockIndentWidth** (``unsigned``)
1960 The number of characters to use for indentation of ObjC blocks.
1961
1962 .. code-block:: objc
1963
1964 ObjCBlockIndentWidth: 4
1965
1966 [operation setCompletionBlock:^{
1967 [self onOperationDone];
1968 }];
1969
1970 **ObjCSpaceAfterProperty** (``bool``)
1971 Add a space after ``@property`` in Objective-C, i.e. use
1972 ``@property (readonly)`` instead of ``@property(readonly)``.
1973
1974 **ObjCSpaceBeforeProtocolList** (``bool``)
1975 Add a space in front of an Objective-C protocol list, i.e. use
1976 ``Foo <Protocol>`` instead of ``Foo<Protocol>``.
1977
1978 **PenaltyBreakAssignment** (``unsigned``)
1979 The penalty for breaking around an assignment operator.
1980
1981 **PenaltyBreakBeforeFirstCallParameter** (``unsigned``)
1982 The penalty for breaking a function call after ``call(``.
1983
1984 **PenaltyBreakComment** (``unsigned``)
1985 The penalty for each line break introduced inside a comment.
1986
1987 **PenaltyBreakFirstLessLess** (``unsigned``)
1988 The penalty for breaking before the first ``<<``.
1989
1990 **PenaltyBreakString** (``unsigned``)
1991 The penalty for each line break introduced inside a string literal.
1992
1993 **PenaltyBreakTemplateDeclaration** (``unsigned``)
1994 The penalty for breaking after template declaration.
1995
1996 **PenaltyExcessCharacter** (``unsigned``)
1997 The penalty for each character outside of the column limit.
1998
1999 **PenaltyReturnTypeOnItsOwnLine** (``unsigned``)
2000 Penalty for putting the return type of a function onto its own
2001 line.
2002
2003 **PointerAlignment** (``PointerAlignmentStyle``)
2004 Pointer and reference alignment style.
2005
2006 Possible values:
2007
2008 * ``PAS_Left`` (in configuration: ``Left``)
2009 Align pointer to the left.
2010
2011 .. code-block:: c++
2012
2013 int* a;
2014
2015 * ``PAS_Right`` (in configuration: ``Right``)
2016 Align pointer to the right.
2017
2018 .. code-block:: c++
2019
2020 int *a;
2021
2022 * ``PAS_Middle`` (in configuration: ``Middle``)
2023 Align pointer in the middle.
2024
2025 .. code-block:: c++
2026
2027 int * a;
2028
2029
2030
2031 **RawStringFormats** (``std::vector<RawStringFormat>``)
2032 Defines hints for detecting supported languages code blocks in raw
2033 strings.
2034
2035 A raw string with a matching delimiter or a matching enclosing function
2036 name will be reformatted assuming the specified language based on the
2037 style for that language defined in the .clang-format file. If no style has
2038 been defined in the .clang-format file for the specific language, a
2039 predefined style given by 'BasedOnStyle' is used. If 'BasedOnStyle' is not
2040 found, the formatting is based on llvm style. A matching delimiter takes
2041 precedence over a matching enclosing function name for determining the
2042 language of the raw string contents.
2043
2044 If a canonical delimiter is specified, occurrences of other delimiters for
2045 the same language will be updated to the canonical if possible.
2046
2047 There should be at most one specification per language and each delimiter
2048 and enclosing function should not occur in multiple specifications.
2049
2050 To configure this in the .clang-format file, use:
2051
2052 .. code-block:: yaml
2053
2054 RawStringFormats:
2055 - Language: TextProto
2056 Delimiters:
2057 - 'pb'
2058 - 'proto'
2059 EnclosingFunctions:
2060 - 'PARSE_TEXT_PROTO'
2061 BasedOnStyle: google
2062 - Language: Cpp
2063 Delimiters:
2064 - 'cc'
2065 - 'cpp'
2066 BasedOnStyle: llvm
2067 CanonicalDelimiter: 'cc'
2068
2069 **ReflowComments** (``bool``)
2070 If ``true``, clang-format will attempt to re-flow comments.
2071
2072 .. code-block:: c++
2073
2074 false:
2075 // veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of information
2076 /* second veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of information */
2077
2078 true:
2079 // veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of
2080 // information
2081 /* second veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of
2082 * information */
2083
2084 **SortIncludes** (``bool``)
2085 If ``true``, clang-format will sort ``#includes``.
2086
2087 .. code-block:: c++
2088
2089 false: true:
2090 #include "b.h" vs. #include "a.h"
2091 #include "a.h" #include "b.h"
2092
2093 **SortUsingDeclarations** (``bool``)
2094 If ``true``, clang-format will sort using declarations.
2095
2096 The order of using declarations is defined as follows:
2097 Split the strings by "::" and discard any initial empty strings. The last
2098 element of each list is a non-namespace name; all others are namespace
2099 names. Sort the lists of names lexicographically, where the sort order of
2100 individual names is that all non-namespace names come before all namespace
2101 names, and within those groups, names are in case-insensitive
2102 lexicographic order.
2103
2104 .. code-block:: c++
2105
2106 false: true:
2107 using std::cout; vs. using std::cin;
2108 using std::cin; using std::cout;
2109
2110 **SpaceAfterCStyleCast** (``bool``)
2111 If ``true``, a space is inserted after C style casts.
2112
2113 .. code-block:: c++
2114
2115 true: false:
2116 (int) i; vs. (int)i;
2117
2118 **SpaceAfterLogicalNot** (``bool``)
2119 If ``true``, a space is inserted after the logical not operator (``!``).
2120
2121 .. code-block:: c++
2122
2123 true: false:
2124 ! someExpression(); vs. !someExpression();
2125
2126 **SpaceAfterTemplateKeyword** (``bool``)
2127 If ``true``, a space will be inserted after the 'template' keyword.
2128
2129 .. code-block:: c++
2130
2131 true: false:
2132 template <int> void foo(); vs. template<int> void foo();
2133
2134 **SpaceBeforeAssignmentOperators** (``bool``)
2135 If ``false``, spaces will be removed before assignment operators.
2136
2137 .. code-block:: c++
2138
2139 true: false:
2140 int a = 5; vs. int a= 5;
2141 a += 42; a+= 42;
2142
2143 **SpaceBeforeCpp11BracedList** (``bool``)
2144 If ``true``, a space will be inserted before a C++11 braced list
2145 used to initialize an object (after the preceding identifier or type).
2146
2147 .. code-block:: c++
2148
2149 true: false:
2150 Foo foo { bar }; vs. Foo foo{ bar };
2151 Foo {}; Foo{};
2152 vector<int> { 1, 2, 3 }; vector<int>{ 1, 2, 3 };
2153 new int[3] { 1, 2, 3 }; new int[3]{ 1, 2, 3 };
2154
2155 **SpaceBeforeCtorInitializerColon** (``bool``)
2156 If ``false``, spaces will be removed before constructor initializer
2157 colon.
2158
2159 .. code-block:: c++
2160
2161 true: false:
2162 Foo::Foo() : a(a) {} Foo::Foo(): a(a) {}
2163
2164 **SpaceBeforeInheritanceColon** (``bool``)
2165 If ``false``, spaces will be removed before inheritance colon.
2166
2167 .. code-block:: c++
2168
2169 true: false:
2170 class Foo : Bar {} vs. class Foo: Bar {}
2171
2172 **SpaceBeforeParens** (``SpaceBeforeParensOptions``)
2173 Defines in which cases to put a space before opening parentheses.
2174
2175 Possible values:
2176
2177 * ``SBPO_Never`` (in configuration: ``Never``)
2178 Never put a space before opening parentheses.
2179
2180 .. code-block:: c++
2181
2182 void f() {
2183 if(true) {
2184 f();
2185 }
2186 }
2187
2188 * ``SBPO_ControlStatements`` (in configuration: ``ControlStatements``)
2189 Put a space before opening parentheses only after control statement
2190 keywords (``for/if/while...``).
2191
2192 .. code-block:: c++
2193
2194 void f() {
2195 if (true) {
2196 f();
2197 }
2198 }
2199
2200 * ``SBPO_NonEmptyParentheses`` (in configuration: ``NonEmptyParentheses``)
2201 Put a space before opening parentheses only if the parentheses are not
2202 empty i.e. '()'
2203
2204 .. code-block:: c++
2205
2206 void() {
2207 if (true) {
2208 f();
2209 g (x, y, z);
2210 }
2211 }
2212
2213 * ``SBPO_Always`` (in configuration: ``Always``)
2214 Always put a space before opening parentheses, except when it's
2215 prohibited by the syntax rules (in function-like macro definitions) or
2216 when determined by other style rules (after unary operators, opening
2217 parentheses, etc.)
2218
2219 .. code-block:: c++
2220
2221 void f () {
2222 if (true) {
2223 f ();
2224 }
2225 }
2226
2227
2228
2229 **SpaceBeforeRangeBasedForLoopColon** (``bool``)
2230 If ``false``, spaces will be removed before range-based for loop
2231 colon.
2232
2233 .. code-block:: c++
2234
2235 true: false:
2236 for (auto v : values) {} vs. for(auto v: values) {}
2237
2238 **SpaceInEmptyBlock** (``bool``)
2239 If ``true``, spaces will be inserted into ``{}``.
2240
2241 .. code-block:: c++
2242
2243 true: false:
2244 void f() { } vs. void f() {}
2245 while (true) { } while (true) {}
2246
2247 **SpaceInEmptyParentheses** (``bool``)
2248 If ``true``, spaces may be inserted into ``()``.
2249
2250 .. code-block:: c++
2251
2252 true: false:
2253 void f( ) { vs. void f() {
2254 int x[] = {foo( ), bar( )}; int x[] = {foo(), bar()};
2255 if (true) { if (true) {
2256 f( ); f();
2257 } }
2258 } }
2259
2260 **SpacesBeforeTrailingComments** (``unsigned``)
2261 The number of spaces before trailing line comments
2262 (``//`` - comments).
2263
2264 This does not affect trailing block comments (``/*`` - comments) as
2265 those commonly have different usage patterns and a number of special
2266 cases.
2267
2268 .. code-block:: c++
2269
2270 SpacesBeforeTrailingComments: 3
2271 void f() {
2272 if (true) { // foo1
2273 f(); // bar
2274 } // foo
2275 }
2276
2277 **SpacesInAngles** (``bool``)
2278 If ``true``, spaces will be inserted after ``<`` and before ``>``
2279 in template argument lists.
2280
2281 .. code-block:: c++
2282
2283 true: false:
2284 static_cast< int >(arg); vs. static_cast<int>(arg);
2285 std::function< void(int) > fct; std::function<void(int)> fct;
2286
2287 **SpacesInCStyleCastParentheses** (``bool``)
2288 If ``true``, spaces may be inserted into C style casts.
2289
2290 .. code-block:: c++
2291
2292 true: false:
2293 x = ( int32 )y vs. x = (int32)y
2294
2295 **SpacesInContainerLiterals** (``bool``)
2296 If ``true``, spaces are inserted inside container literals (e.g.
2297 ObjC and Javascript array and dict literals).
2298
2299 .. code-block:: js
2300
2301 true: false:
2302 var arr = [ 1, 2, 3 ]; vs. var arr = [1, 2, 3];
2303 f({a : 1, b : 2, c : 3}); f({a: 1, b: 2, c: 3});
2304
2305 **SpacesInParentheses** (``bool``)
2306 If ``true``, spaces will be inserted after ``(`` and before ``)``.
2307
2308 .. code-block:: c++
2309
2310 true: false:
2311 t f( Deleted & ) & = delete; vs. t f(Deleted &) & = delete;
2312
2313 **SpacesInSquareBrackets** (``bool``)
2314 If ``true``, spaces will be inserted after ``[`` and before ``]``.
2315 Lambdas without arguments or unspecified size array declarations will not be
2316 affected.
2317
2318 .. code-block:: c++
2319
2320 true: false:
2321 int a[ 5 ]; vs. int a[5];
2322 std::unique_ptr<int[]> foo() {} // Won't be affected
2323
2324 **Standard** (``LanguageStandard``)
2325 Parse and format C++ constructs compatible with this standard.
2326
2327 .. code-block:: c++
2328
2329 c++03: latest:
2330 vector<set<int> > x; vs. vector<set<int>> x;
2331
2332 Possible values:
2333
2334 * ``LS_Cpp03`` (in configuration: ``c++03``)
2335 Use C++03-compatible syntax.
2336
2337 * ``LS_Cpp11`` (in configuration: ``c++11``)
2338 Use C++11-compatible syntax.
2339
2340 * ``LS_Cpp14`` (in configuration: ``c++14``)
2341 Use C++14-compatible syntax.
2342
2343 * ``LS_Cpp17`` (in configuration: ``c++17``)
2344 Use C++17-compatible syntax.
2345
2346 * ``LS_Cpp20`` (in configuration: ``c++20``)
2347 Use C++20-compatible syntax.
2348
2349 * ``LS_Latest`` (in configuration: ``Latest``)
2350 Parse and format using the latest supported language version.
2351
2352 * ``LS_Auto`` (in configuration: ``Auto``)
2353 Automatic detection based on the input.
2354
2355 * ``Cpp03``: deprecated alias for ``c++03``
2356
2357 * ``Cpp11``: deprecated alias for ``Latest``
2358
2359 **StatementMacros** (``std::vector<std::string>``)
2360 A vector of macros that should be interpreted as complete
2361 statements.
2362
2363 Typical macros are expressions, and require a semi-colon to be
2364 added; sometimes this is not the case, and this allows to make
2365 clang-format aware of such cases.
2366
2367 For example: Q_UNUSED
2368
2369 **TabWidth** (``unsigned``)
2370 The number of columns used for tab stops.
2371
2372 **TypenameMacros** (``std::vector<std::string>``)
2373 A vector of macros that should be interpreted as type declarations
2374 instead of as function calls.
2375
2376 These are expected to be macros of the form:
2377
2378 .. code-block:: c++
2379
2380 STACK_OF(...)
2381
2382 In the .clang-format configuration file, this can be configured like:
2383
2384 .. code-block:: yaml
2385
2386 TypenameMacros: ['STACK_OF', 'LIST']
2387
2388 For example: OpenSSL STACK_OF, BSD LIST_ENTRY.
2389
2390 **UseTab** (``UseTabStyle``)
2391 The way to use tab characters in the resulting file.
2392
2393 Possible values:
2394
2395 * ``UT_Never`` (in configuration: ``Never``)
2396 Never use tab.
2397
2398 * ``UT_ForIndentation`` (in configuration: ``ForIndentation``)
2399 Use tabs only for indentation.
2400
2401 * ``UT_ForContinuationAndIndentation`` (in configuration: ``ForContinuationAndIndentation``)
2402 Use tabs only for line continuation and indentation.
2403
2404 * ``UT_Always`` (in configuration: ``Always``)
2405 Use tabs whenever we need to fill whitespace that spans at least from
2406 one tab stop to the next one.
2407
2408
2409
2410 .. END_FORMAT_STYLE_OPTIONS
2411
2412 Adding additional style options
2413 ===============================
2414
2415 Each additional style option adds costs to the clang-format project. Some of
2416 these costs affect the clang-format development itself, as we need to make
2417 sure that any given combination of options work and that new features don't
2418 break any of the existing options in any way. There are also costs for end users
2419 as options become less discoverable and people have to think about and make a
2420 decision on options they don't really care about.
2421
2422 The goal of the clang-format project is more on the side of supporting a
2423 limited set of styles really well as opposed to supporting every single style
2424 used by a codebase somewhere in the wild. Of course, we do want to support all
2425 major projects and thus have established the following bar for adding style
2426 options. Each new style option must ..
2427
2428 * be used in a project of significant size (have dozens of contributors)
2429 * have a publicly accessible style guide
2430 * have a person willing to contribute and maintain patches
2431
2432 Examples
2433 ========
2434
2435 A style similar to the `Linux Kernel style
2436 <https://www.kernel.org/doc/Documentation/CodingStyle>`_:
2437
2438 .. code-block:: yaml
2439
2440 BasedOnStyle: LLVM
2441 IndentWidth: 8
2442 UseTab: Always
2443 BreakBeforeBraces: Linux
2444 AllowShortIfStatementsOnASingleLine: false
2445 IndentCaseLabels: false
2446
2447 The result is (imagine that tabs are used for indentation here):
2448
2449 .. code-block:: c++
2450
2451 void test()
2452 {
2453 switch (x) {
2454 case 0:
2455 case 1:
2456 do_something();
2457 break;
2458 case 2:
2459 do_something_else();
2460 break;
2461 default:
2462 break;
2463 }
2464 if (condition)
2465 do_something_completely_different();
2466
2467 if (x == y) {
2468 q();
2469 } else if (x > y) {
2470 w();
2471 } else {
2472 r();
2473 }
2474 }
2475
2476 A style similar to the default Visual Studio formatting style:
2477
2478 .. code-block:: yaml
2479
2480 UseTab: Never
2481 IndentWidth: 4
2482 BreakBeforeBraces: Allman
2483 AllowShortIfStatementsOnASingleLine: false
2484 IndentCaseLabels: false
2485 ColumnLimit: 0
2486
2487 The result is:
2488
2489 .. code-block:: c++
2490
2491 void test()
2492 {
2493 switch (suffix)
2494 {
2495 case 0:
2496 case 1:
2497 do_something();
2498 break;
2499 case 2:
2500 do_something_else();
2501 break;
2502 default:
2503 break;
2504 }
2505 if (condition)
2506 do_somthing_completely_different();
2507
2508 if (x == y)
2509 {
2510 q();
2511 }
2512 else if (x > y)
2513 {
2514 w();
2515 }
2516 else
2517 {
2518 r();
2519 }
2520 }
2521