1==========================
2Clang-Format Style Options
3==========================
4
5:doc:`ClangFormatStyleOptions` describes configurable formatting style options
6supported by :doc:`LibFormat` and :doc:`ClangFormat`.
7
8When using :program:`clang-format` command line utility or
9``clang::format::reformat(...)`` functions from code, one can either use one of
10the predefined styles (LLVM, Google, Chromium, Mozilla, WebKit, Microsoft) or
11create a custom style by configuring specific style options.
12
13
14Configuring Style with clang-format
15===================================
16
17:program:`clang-format` supports two ways to provide custom style options:
18directly specify style configuration in the ``-style=`` command line option or
19use ``-style=file`` and put style configuration in the ``.clang-format`` or
20``_clang-format`` file in the project directory.
21
22When using ``-style=file``, :program:`clang-format` for each input file will
23try to find the ``.clang-format`` file located in the closest parent directory
24of the input file. When the standard input is used, the search is started from
25the current directory.
26
27The ``.clang-format`` file uses YAML format:
28
29.. code-block:: yaml
30
31  key1: value1
32  key2: value2
33  # A comment.
34  ...
35
36The configuration file can consist of several sections each having different
37``Language:`` parameter denoting the programming language this section of the
38configuration is targeted at. See the description of the **Language** option
39below for the list of supported languages. The first section may have no
40language set, it will set the default style options for all lanugages.
41Configuration sections for specific language will override options set in the
42default section.
43
44When :program:`clang-format` formats a file, it auto-detects the language using
45the file name. When formatting standard input or a file that doesn't have the
46extension corresponding to its language, ``-assume-filename=`` option can be
47used to override the file name :program:`clang-format` uses to detect the
48language.
49
50An 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
77An easy way to get a valid ``.clang-format`` file containing all configuration
78options of a certain predefined style is:
79
80.. code-block:: console
81
82  clang-format -style=llvm -dump-config > .clang-format
83
84When specifying configuration in the ``-style=`` option, the same configuration
85is 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
92Disabling Formatting on a Piece of Code
93=======================================
94
95Clang-format understands also special comments that switch formatting in a
96delimited 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
99will 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
110Configuring Style in Code
111=========================
112
113When using ``clang::format::reformat(...)`` functions, the format is specified
114by supplying the `clang::format::FormatStyle
115<https://clang.llvm.org/doxygen/structclang_1_1format_1_1FormatStyle.html>`_
116structure.
117
118
119Configurable Format Style Options
120=================================
121
122This section lists the supported style options. Value type is specified for
123each option. For enumeration types possible values are specified both as a C++
124enumeration member (with a prefix, e.g. ``LS_Auto``), and as a value usable in
125the 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
721**InsertTrailingCommas** (``TrailingCommaStyle``) can be set to ``TCS_Wrapped``
722  to insert trailing commas in container literals (arrays and objects) that wrap
723  across multiple lines. It is currently only available for JavaScript and
724  disabled by default (``TCS_None``).
725
726  ``InsertTrailingCommas`` cannot be used together with ``BinPackArguments`` as
727  inserting the comma disables bin-packing.
728
729  .. code-block:: c++
730
731    TSC_Wrapped:
732    const someArray = [
733      aaaaaaaaaaaaaaaaaaaaaaaaaa,
734      aaaaaaaaaaaaaaaaaaaaaaaaaa,
735      aaaaaaaaaaaaaaaaaaaaaaaaaa,
736      //                        ^ inserted
737    ]
738
739
740**BinPackParameters** (``bool``)
741  If ``false``, a function declaration's or function definition's
742  parameters will either all be on the same line or will have one line each.
743
744  .. code-block:: c++
745
746    true:
747    void f(int aaaaaaaaaaaaaaaaaaaa, int aaaaaaaaaaaaaaaaaaaa,
748           int aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) {}
749
750    false:
751    void f(int aaaaaaaaaaaaaaaaaaaa,
752           int aaaaaaaaaaaaaaaaaaaa,
753           int aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) {}
754
755**BraceWrapping** (``BraceWrappingFlags``)
756  Control of individual brace wrapping cases.
757
758  If ``BreakBeforeBraces`` is set to ``BS_Custom``, use this to specify how
759  each individual brace case should be handled. Otherwise, this is ignored.
760
761  .. code-block:: yaml
762
763    # Example of usage:
764    BreakBeforeBraces: Custom
765    BraceWrapping:
766      AfterEnum: true
767      AfterStruct: false
768      SplitEmptyFunction: false
769
770  Nested configuration flags:
771
772
773  * ``bool AfterCaseLabel`` Wrap case labels.
774
775    .. code-block:: c++
776
777      false:                                true:
778      switch (foo) {                vs.     switch (foo) {
779        case 1: {                             case 1:
780          bar();                              {
781          break;                                bar();
782        }                                       break;
783        default: {                            }
784          plop();                             default:
785        }                                     {
786      }                                         plop();
787                                              }
788                                            }
789
790  * ``bool AfterClass`` Wrap class definitions.
791
792    .. code-block:: c++
793
794      true:
795      class foo {};
796
797      false:
798      class foo
799      {};
800
801  * ``BraceWrappingAfterControlStatementStyle AfterControlStatement``
802    Wrap control statements (``if``/``for``/``while``/``switch``/..).
803
804    Possible values:
805
806    * ``BWACS_Never`` (in configuration: ``Never``)
807      Never wrap braces after a control statement.
808
809      .. code-block:: c++
810
811        if (foo()) {
812        } else {
813        }
814        for (int i = 0; i < 10; ++i) {
815        }
816
817    * ``BWACS_MultiLine`` (in configuration: ``MultiLine``)
818      Only wrap braces after a multi-line control statement.
819
820      .. code-block:: c++
821
822        if (foo && bar &&
823            baz)
824        {
825          quux();
826        }
827        while (foo || bar) {
828        }
829
830    * ``BWACS_Always`` (in configuration: ``Always``)
831      Always wrap braces after a control statement.
832
833      .. code-block:: c++
834
835        if (foo())
836        {
837        } else
838        {}
839        for (int i = 0; i < 10; ++i)
840        {}
841
842
843  * ``bool AfterEnum`` Wrap enum definitions.
844
845    .. code-block:: c++
846
847      true:
848      enum X : int
849      {
850        B
851      };
852
853      false:
854      enum X : int { B };
855
856  * ``bool AfterFunction`` Wrap function definitions.
857
858    .. code-block:: c++
859
860      true:
861      void foo()
862      {
863        bar();
864        bar2();
865      }
866
867      false:
868      void foo() {
869        bar();
870        bar2();
871      }
872
873  * ``bool AfterNamespace`` Wrap namespace definitions.
874
875    .. code-block:: c++
876
877      true:
878      namespace
879      {
880      int foo();
881      int bar();
882      }
883
884      false:
885      namespace {
886      int foo();
887      int bar();
888      }
889
890  * ``bool AfterObjCDeclaration`` Wrap ObjC definitions (interfaces, implementations...).
891    @autoreleasepool and @synchronized blocks are wrapped
892    according to `AfterControlStatement` flag.
893
894  * ``bool AfterStruct`` Wrap struct definitions.
895
896    .. code-block:: c++
897
898      true:
899      struct foo
900      {
901        int x;
902      };
903
904      false:
905      struct foo {
906        int x;
907      };
908
909  * ``bool AfterUnion`` Wrap union definitions.
910
911    .. code-block:: c++
912
913      true:
914      union foo
915      {
916        int x;
917      }
918
919      false:
920      union foo {
921        int x;
922      }
923
924  * ``bool AfterExternBlock`` Wrap extern blocks.
925
926    .. code-block:: c++
927
928      true:
929      extern "C"
930      {
931        int foo();
932      }
933
934      false:
935      extern "C" {
936      int foo();
937      }
938
939  * ``bool BeforeCatch`` Wrap before ``catch``.
940
941    .. code-block:: c++
942
943      true:
944      try {
945        foo();
946      }
947      catch () {
948      }
949
950      false:
951      try {
952        foo();
953      } catch () {
954      }
955
956  * ``bool BeforeElse`` Wrap before ``else``.
957
958    .. code-block:: c++
959
960      true:
961      if (foo()) {
962      }
963      else {
964      }
965
966      false:
967      if (foo()) {
968      } else {
969      }
970
971  * ``bool IndentBraces`` Indent the wrapped braces themselves.
972
973  * ``bool SplitEmptyFunction`` If ``false``, empty function body can be put on a single line.
974    This option is used only if the opening brace of the function has
975    already been wrapped, i.e. the `AfterFunction` brace wrapping mode is
976    set, and the function could/should not be put on a single line (as per
977    `AllowShortFunctionsOnASingleLine` and constructor formatting options).
978
979    .. code-block:: c++
980
981      int f()   vs.   int f()
982      {}              {
983                      }
984
985  * ``bool SplitEmptyRecord`` If ``false``, empty record (e.g. class, struct or union) body
986    can be put on a single line. This option is used only if the opening
987    brace of the record has already been wrapped, i.e. the `AfterClass`
988    (for classes) brace wrapping mode is set.
989
990    .. code-block:: c++
991
992      class Foo   vs.  class Foo
993      {}               {
994                       }
995
996  * ``bool SplitEmptyNamespace`` If ``false``, empty namespace body can be put on a single line.
997    This option is used only if the opening brace of the namespace has
998    already been wrapped, i.e. the `AfterNamespace` brace wrapping mode is
999    set.
1000
1001    .. code-block:: c++
1002
1003      namespace Foo   vs.  namespace Foo
1004      {}                   {
1005                           }
1006
1007
1008**BreakAfterJavaFieldAnnotations** (``bool``)
1009  Break after each annotation on a field in Java files.
1010
1011  .. code-block:: java
1012
1013     true:                                  false:
1014     @Partial                       vs.     @Partial @Mock DataLoad loader;
1015     @Mock
1016     DataLoad loader;
1017
1018**BreakBeforeBinaryOperators** (``BinaryOperatorStyle``)
1019  The way to wrap binary operators.
1020
1021  Possible values:
1022
1023  * ``BOS_None`` (in configuration: ``None``)
1024    Break after operators.
1025
1026    .. code-block:: c++
1027
1028       LooooooooooongType loooooooooooooooooooooongVariable =
1029           someLooooooooooooooooongFunction();
1030
1031       bool value = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +
1032                            aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ==
1033                        aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa &&
1034                    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa >
1035                        ccccccccccccccccccccccccccccccccccccccccc;
1036
1037  * ``BOS_NonAssignment`` (in configuration: ``NonAssignment``)
1038    Break before operators that aren't assignments.
1039
1040    .. code-block:: c++
1041
1042       LooooooooooongType loooooooooooooooooooooongVariable =
1043           someLooooooooooooooooongFunction();
1044
1045       bool value = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
1046                            + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
1047                        == aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
1048                    && aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
1049                           > ccccccccccccccccccccccccccccccccccccccccc;
1050
1051  * ``BOS_All`` (in configuration: ``All``)
1052    Break before operators.
1053
1054    .. code-block:: c++
1055
1056       LooooooooooongType loooooooooooooooooooooongVariable
1057           = someLooooooooooooooooongFunction();
1058
1059       bool value = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
1060                            + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
1061                        == aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
1062                    && aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
1063                           > ccccccccccccccccccccccccccccccccccccccccc;
1064
1065
1066
1067**BreakBeforeBraces** (``BraceBreakingStyle``)
1068  The brace breaking style to use.
1069
1070  Possible values:
1071
1072  * ``BS_Attach`` (in configuration: ``Attach``)
1073    Always attach braces to surrounding context.
1074
1075    .. code-block:: c++
1076
1077      try {
1078        foo();
1079      } catch () {
1080      }
1081      void foo() { bar(); }
1082      class foo {};
1083      if (foo()) {
1084      } else {
1085      }
1086      enum X : int { A, B };
1087
1088  * ``BS_Linux`` (in configuration: ``Linux``)
1089    Like ``Attach``, but break before braces on function, namespace and
1090    class definitions.
1091
1092    .. code-block:: c++
1093
1094      try {
1095        foo();
1096      } catch () {
1097      }
1098      void foo() { bar(); }
1099      class foo
1100      {
1101      };
1102      if (foo()) {
1103      } else {
1104      }
1105      enum X : int { A, B };
1106
1107  * ``BS_Mozilla`` (in configuration: ``Mozilla``)
1108    Like ``Attach``, but break before braces on enum, function, and record
1109    definitions.
1110
1111    .. code-block:: c++
1112
1113      try {
1114        foo();
1115      } catch () {
1116      }
1117      void foo() { bar(); }
1118      class foo
1119      {
1120      };
1121      if (foo()) {
1122      } else {
1123      }
1124      enum X : int { A, B };
1125
1126  * ``BS_Stroustrup`` (in configuration: ``Stroustrup``)
1127    Like ``Attach``, but break before function definitions, ``catch``, and
1128    ``else``.
1129
1130    .. code-block:: c++
1131
1132      try {
1133        foo();
1134      }
1135      catch () {
1136      }
1137      void foo() { bar(); }
1138      class foo {
1139      };
1140      if (foo()) {
1141      }
1142      else {
1143      }
1144      enum X : int { A, B };
1145
1146  * ``BS_Allman`` (in configuration: ``Allman``)
1147    Always break before braces.
1148
1149    .. code-block:: c++
1150
1151      try
1152      {
1153        foo();
1154      }
1155      catch ()
1156      {
1157      }
1158      void foo() { bar(); }
1159      class foo
1160      {
1161      };
1162      if (foo())
1163      {
1164      }
1165      else
1166      {
1167      }
1168      enum X : int
1169      {
1170        A,
1171        B
1172      };
1173
1174  * ``BS_Whitesmiths`` (in configuration: ``Whitesmiths``)
1175    Like ``Allman`` but always indent braces and line up code with braces.
1176
1177    .. code-block:: c++
1178
1179      try
1180        {
1181        foo();
1182        }
1183      catch ()
1184        {
1185        }
1186      void foo() { bar(); }
1187      class foo
1188        {
1189        };
1190      if (foo())
1191        {
1192        }
1193      else
1194        {
1195        }
1196      enum X : int
1197        {
1198        A,
1199        B
1200        };
1201
1202  * ``BS_GNU`` (in configuration: ``GNU``)
1203    Always break before braces and add an extra level of indentation to
1204    braces of control statements, not to those of class, function
1205    or other definitions.
1206
1207    .. code-block:: c++
1208
1209      try
1210        {
1211          foo();
1212        }
1213      catch ()
1214        {
1215        }
1216      void foo() { bar(); }
1217      class foo
1218      {
1219      };
1220      if (foo())
1221        {
1222        }
1223      else
1224        {
1225        }
1226      enum X : int
1227      {
1228        A,
1229        B
1230      };
1231
1232  * ``BS_WebKit`` (in configuration: ``WebKit``)
1233    Like ``Attach``, but break before functions.
1234
1235    .. code-block:: c++
1236
1237      try {
1238        foo();
1239      } catch () {
1240      }
1241      void foo() { bar(); }
1242      class foo {
1243      };
1244      if (foo()) {
1245      } else {
1246      }
1247      enum X : int { A, B };
1248
1249  * ``BS_Custom`` (in configuration: ``Custom``)
1250    Configure each individual brace in `BraceWrapping`.
1251
1252
1253
1254**BreakBeforeTernaryOperators** (``bool``)
1255  If ``true``, ternary operators will be placed after line breaks.
1256
1257  .. code-block:: c++
1258
1259     true:
1260     veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongDescription
1261         ? firstValue
1262         : SecondValueVeryVeryVeryVeryLong;
1263
1264     false:
1265     veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongDescription ?
1266         firstValue :
1267         SecondValueVeryVeryVeryVeryLong;
1268
1269**BreakConstructorInitializers** (``BreakConstructorInitializersStyle``)
1270  The constructor initializers style to use.
1271
1272  Possible values:
1273
1274  * ``BCIS_BeforeColon`` (in configuration: ``BeforeColon``)
1275    Break constructor initializers before the colon and after the commas.
1276
1277    .. code-block:: c++
1278
1279       Constructor()
1280           : initializer1(),
1281             initializer2()
1282
1283  * ``BCIS_BeforeComma`` (in configuration: ``BeforeComma``)
1284    Break constructor initializers before the colon and commas, and align
1285    the commas with the colon.
1286
1287    .. code-block:: c++
1288
1289       Constructor()
1290           : initializer1()
1291           , initializer2()
1292
1293  * ``BCIS_AfterColon`` (in configuration: ``AfterColon``)
1294    Break constructor initializers after the colon and commas.
1295
1296    .. code-block:: c++
1297
1298       Constructor() :
1299           initializer1(),
1300           initializer2()
1301
1302
1303
1304**BreakInheritanceList** (``BreakInheritanceListStyle``)
1305  The inheritance list style to use.
1306
1307  Possible values:
1308
1309  * ``BILS_BeforeColon`` (in configuration: ``BeforeColon``)
1310    Break inheritance list before the colon and after the commas.
1311
1312    .. code-block:: c++
1313
1314       class Foo
1315           : Base1,
1316             Base2
1317       {};
1318
1319  * ``BILS_BeforeComma`` (in configuration: ``BeforeComma``)
1320    Break inheritance list before the colon and commas, and align
1321    the commas with the colon.
1322
1323    .. code-block:: c++
1324
1325       class Foo
1326           : Base1
1327           , Base2
1328       {};
1329
1330  * ``BILS_AfterColon`` (in configuration: ``AfterColon``)
1331    Break inheritance list after the colon and commas.
1332
1333    .. code-block:: c++
1334
1335       class Foo :
1336           Base1,
1337           Base2
1338       {};
1339
1340
1341
1342**BreakStringLiterals** (``bool``)
1343  Allow breaking string literals when formatting.
1344
1345  .. code-block:: c++
1346
1347     true:
1348     const char* x = "veryVeryVeryVeryVeryVe"
1349                     "ryVeryVeryVeryVeryVery"
1350                     "VeryLongString";
1351
1352     false:
1353     const char* x =
1354       "veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongString";
1355
1356**ColumnLimit** (``unsigned``)
1357  The column limit.
1358
1359  A column limit of ``0`` means that there is no column limit. In this case,
1360  clang-format will respect the input's line breaking decisions within
1361  statements unless they contradict other rules.
1362
1363**CommentPragmas** (``std::string``)
1364  A regular expression that describes comments with special meaning,
1365  which should not be split into lines or otherwise changed.
1366
1367  .. code-block:: c++
1368
1369     // CommentPragmas: '^ FOOBAR pragma:'
1370     // Will leave the following line unaffected
1371     #include <vector> // FOOBAR pragma: keep
1372
1373**CompactNamespaces** (``bool``)
1374  If ``true``, consecutive namespace declarations will be on the same
1375  line. If ``false``, each namespace is declared on a new line.
1376
1377  .. code-block:: c++
1378
1379    true:
1380    namespace Foo { namespace Bar {
1381    }}
1382
1383    false:
1384    namespace Foo {
1385    namespace Bar {
1386    }
1387    }
1388
1389  If it does not fit on a single line, the overflowing namespaces get
1390  wrapped:
1391
1392  .. code-block:: c++
1393
1394    namespace Foo { namespace Bar {
1395    namespace Extra {
1396    }}}
1397
1398**ConstructorInitializerAllOnOneLineOrOnePerLine** (``bool``)
1399  If the constructor initializers don't fit on a line, put each
1400  initializer on its own line.
1401
1402  .. code-block:: c++
1403
1404    true:
1405    SomeClass::Constructor()
1406        : aaaaaaaa(aaaaaaaa), aaaaaaaa(aaaaaaaa), aaaaaaaa(aaaaaaaaaaaaaaaaaaaaaaaaa) {
1407      return 0;
1408    }
1409
1410    false:
1411    SomeClass::Constructor()
1412        : aaaaaaaa(aaaaaaaa), aaaaaaaa(aaaaaaaa),
1413          aaaaaaaa(aaaaaaaaaaaaaaaaaaaaaaaaa) {
1414      return 0;
1415    }
1416
1417**ConstructorInitializerIndentWidth** (``unsigned``)
1418  The number of characters to use for indentation of constructor
1419  initializer lists as well as inheritance lists.
1420
1421**ContinuationIndentWidth** (``unsigned``)
1422  Indent width for line continuations.
1423
1424  .. code-block:: c++
1425
1426     ContinuationIndentWidth: 2
1427
1428     int i =         //  VeryVeryVeryVeryVeryLongComment
1429       longFunction( // Again a long comment
1430         arg);
1431
1432**Cpp11BracedListStyle** (``bool``)
1433  If ``true``, format braced lists as best suited for C++11 braced
1434  lists.
1435
1436  Important differences:
1437  - No spaces inside the braced list.
1438  - No line break before the closing brace.
1439  - Indentation with the continuation indent, not with the block indent.
1440
1441  Fundamentally, C++11 braced lists are formatted exactly like function
1442  calls would be formatted in their place. If the braced list follows a name
1443  (e.g. a type or variable name), clang-format formats as if the ``{}`` were
1444  the parentheses of a function call with that name. If there is no name,
1445  a zero-length name is assumed.
1446
1447  .. code-block:: c++
1448
1449     true:                                  false:
1450     vector<int> x{1, 2, 3, 4};     vs.     vector<int> x{ 1, 2, 3, 4 };
1451     vector<T> x{{}, {}, {}, {}};           vector<T> x{ {}, {}, {}, {} };
1452     f(MyMap[{composite, key}]);            f(MyMap[{ composite, key }]);
1453     new int[3]{1, 2, 3};                   new int[3]{ 1, 2, 3 };
1454
1455**DeriveLineEnding** (``bool``)
1456  Analyze the formatted file for the most used line ending (``\r\n``
1457  or ``\n``). ``UseCRLF`` is only used as a fallback if none can be derived.
1458
1459**DerivePointerAlignment** (``bool``)
1460  If ``true``, analyze the formatted file for the most common
1461  alignment of ``&`` and ``*``.
1462  Pointer and reference alignment styles are going to be updated according
1463  to the preferences found in the file.
1464  ``PointerAlignment`` is then used only as fallback.
1465
1466**DisableFormat** (``bool``)
1467  Disables formatting completely.
1468
1469**ExperimentalAutoDetectBinPacking** (``bool``)
1470  If ``true``, clang-format detects whether function calls and
1471  definitions are formatted with one parameter per line.
1472
1473  Each call can be bin-packed, one-per-line or inconclusive. If it is
1474  inconclusive, e.g. completely on one line, but a decision needs to be
1475  made, clang-format analyzes whether there are other bin-packed cases in
1476  the input file and act accordingly.
1477
1478  NOTE: This is an experimental flag, that might go away or be renamed. Do
1479  not use this in config files, etc. Use at your own risk.
1480
1481**FixNamespaceComments** (``bool``)
1482  If ``true``, clang-format adds missing namespace end comments and
1483  fixes invalid existing ones.
1484
1485  .. code-block:: c++
1486
1487     true:                                  false:
1488     namespace a {                  vs.     namespace a {
1489     foo();                                 foo();
1490     } // namespace a                       }
1491
1492**ForEachMacros** (``std::vector<std::string>``)
1493  A vector of macros that should be interpreted as foreach loops
1494  instead of as function calls.
1495
1496  These are expected to be macros of the form:
1497
1498  .. code-block:: c++
1499
1500    FOREACH(<variable-declaration>, ...)
1501      <loop-body>
1502
1503  In the .clang-format configuration file, this can be configured like:
1504
1505  .. code-block:: yaml
1506
1507    ForEachMacros: ['RANGES_FOR', 'FOREACH']
1508
1509  For example: BOOST_FOREACH.
1510
1511**IncludeBlocks** (``IncludeBlocksStyle``)
1512  Dependent on the value, multiple ``#include`` blocks can be sorted
1513  as one and divided based on category.
1514
1515  Possible values:
1516
1517  * ``IBS_Preserve`` (in configuration: ``Preserve``)
1518    Sort each ``#include`` block separately.
1519
1520    .. code-block:: c++
1521
1522       #include "b.h"               into      #include "b.h"
1523
1524       #include <lib/main.h>                  #include "a.h"
1525       #include "a.h"                         #include <lib/main.h>
1526
1527  * ``IBS_Merge`` (in configuration: ``Merge``)
1528    Merge multiple ``#include`` blocks together and sort as one.
1529
1530    .. code-block:: c++
1531
1532       #include "b.h"               into      #include "a.h"
1533                                              #include "b.h"
1534       #include <lib/main.h>                  #include <lib/main.h>
1535       #include "a.h"
1536
1537  * ``IBS_Regroup`` (in configuration: ``Regroup``)
1538    Merge multiple ``#include`` blocks together and sort as one.
1539    Then split into groups based on category priority. See
1540    ``IncludeCategories``.
1541
1542    .. code-block:: c++
1543
1544       #include "b.h"               into      #include "a.h"
1545                                              #include "b.h"
1546       #include <lib/main.h>
1547       #include "a.h"                         #include <lib/main.h>
1548
1549
1550
1551**IncludeCategories** (``std::vector<IncludeCategory>``)
1552  Regular expressions denoting the different ``#include`` categories
1553  used for ordering ``#includes``.
1554
1555  `POSIX extended
1556  <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html>`_
1557  regular expressions are supported.
1558
1559  These regular expressions are matched against the filename of an include
1560  (including the <> or "") in order. The value belonging to the first
1561  matching regular expression is assigned and ``#includes`` are sorted first
1562  according to increasing category number and then alphabetically within
1563  each category.
1564
1565  If none of the regular expressions match, INT_MAX is assigned as
1566  category. The main header for a source file automatically gets category 0.
1567  so that it is generally kept at the beginning of the ``#includes``
1568  (https://llvm.org/docs/CodingStandards.html#include-style). However, you
1569  can also assign negative priorities if you have certain headers that
1570  always need to be first.
1571
1572  There is a third and optional field ``SortPriority`` which can used while
1573  ``IncludeBloks = IBS_Regroup`` to define the priority in which ``#includes``
1574  should be ordered, and value of ``Priority`` defines the order of
1575  ``#include blocks`` and also enables to group ``#includes`` of different
1576  priority for order.``SortPriority`` is set to the value of ``Priority``
1577  as default if it is not assigned.
1578
1579  To configure this in the .clang-format file, use:
1580
1581  .. code-block:: yaml
1582
1583    IncludeCategories:
1584      - Regex:           '^"(llvm|llvm-c|clang|clang-c)/'
1585        Priority:        2
1586        SortPriority:    2
1587      - Regex:           '^(<|"(gtest|gmock|isl|json)/)'
1588        Priority:        3
1589      - Regex:           '<[[:alnum:].]+>'
1590        Priority:        4
1591      - Regex:           '.*'
1592        Priority:        1
1593        SortPriority:    0
1594
1595**IncludeIsMainRegex** (``std::string``)
1596  Specify a regular expression of suffixes that are allowed in the
1597  file-to-main-include mapping.
1598
1599  When guessing whether a #include is the "main" include (to assign
1600  category 0, see above), use this regex of allowed suffixes to the header
1601  stem. A partial match is done, so that:
1602  - "" means "arbitrary suffix"
1603  - "$" means "no suffix"
1604
1605  For example, if configured to "(_test)?$", then a header a.h would be seen
1606  as the "main" include in both a.cc and a_test.cc.
1607
1608**IncludeIsMainSourceRegex** (``std::string``)
1609  Specify a regular expression for files being formatted
1610  that are allowed to be considered "main" in the
1611  file-to-main-include mapping.
1612
1613  By default, clang-format considers files as "main" only when they end
1614  with: ``.c``, ``.cc``, ``.cpp``, ``.c++``, ``.cxx``, ``.m`` or ``.mm``
1615  extensions.
1616  For these files a guessing of "main" include takes place
1617  (to assign category 0, see above). This config option allows for
1618  additional suffixes and extensions for files to be considered as "main".
1619
1620  For example, if this option is configured to ``(Impl\.hpp)$``,
1621  then a file ``ClassImpl.hpp`` is considered "main" (in addition to
1622  ``Class.c``, ``Class.cc``, ``Class.cpp`` and so on) and "main
1623  include file" logic will be executed (with *IncludeIsMainRegex* setting
1624  also being respected in later phase). Without this option set,
1625  ``ClassImpl.hpp`` would not have the main include file put on top
1626  before any other include.
1627
1628**IndentCaseBlocks** (``bool``)
1629  Indent case label blocks one level from the case label.
1630
1631  When ``false``, the block following the case label uses the same
1632  indentation level as for the case label, treating the case label the same
1633  as an if-statement.
1634  When ``true``, the block gets indented as a scope block.
1635
1636  .. code-block:: c++
1637
1638     false:                                 true:
1639     switch (fool) {                vs.     switch (fool) {
1640     case 1: {                              case 1:
1641       bar();                                 {
1642     } break;                                   bar();
1643     default: {                               }
1644       plop();                                break;
1645     }                                      default:
1646     }                                        {
1647                                                plop();
1648                                              }
1649                                            }
1650
1651**IndentCaseLabels** (``bool``)
1652  Indent case labels one level from the switch statement.
1653
1654  When ``false``, use the same indentation level as for the switch
1655  statement. Switch statement body is always indented one level more than
1656  case labels (except the first block following the case label, which
1657  itself indents the code - unless IndentCaseBlocks is enabled).
1658
1659  .. code-block:: c++
1660
1661     false:                                 true:
1662     switch (fool) {                vs.     switch (fool) {
1663     case 1:                                  case 1:
1664       bar();                                   bar();
1665       break;                                   break;
1666     default:                                 default:
1667       plop();                                  plop();
1668     }                                      }
1669
1670**IndentGotoLabels** (``bool``)
1671  Indent goto labels.
1672
1673  When ``false``, goto labels are flushed left.
1674
1675  .. code-block:: c++
1676
1677     true:                                  false:
1678     int f() {                      vs.     int f() {
1679       if (foo()) {                           if (foo()) {
1680       label1:                              label1:
1681         bar();                                 bar();
1682       }                                      }
1683     label2:                                label2:
1684       return 1;                              return 1;
1685     }                                      }
1686
1687**IndentPPDirectives** (``PPDirectiveIndentStyle``)
1688  The preprocessor directive indenting style to use.
1689
1690  Possible values:
1691
1692  * ``PPDIS_None`` (in configuration: ``None``)
1693    Does not indent any directives.
1694
1695    .. code-block:: c++
1696
1697       #if FOO
1698       #if BAR
1699       #include <foo>
1700       #endif
1701       #endif
1702
1703  * ``PPDIS_AfterHash`` (in configuration: ``AfterHash``)
1704    Indents directives after the hash.
1705
1706    .. code-block:: c++
1707
1708       #if FOO
1709       #  if BAR
1710       #    include <foo>
1711       #  endif
1712       #endif
1713
1714  * ``PPDIS_BeforeHash`` (in configuration: ``BeforeHash``)
1715    Indents directives before the hash.
1716
1717    .. code-block:: c++
1718
1719       #if FOO
1720         #if BAR
1721           #include <foo>
1722         #endif
1723       #endif
1724
1725
1726
1727**IndentWidth** (``unsigned``)
1728  The number of columns to use for indentation.
1729
1730  .. code-block:: c++
1731
1732     IndentWidth: 3
1733
1734     void f() {
1735        someFunction();
1736        if (true, false) {
1737           f();
1738        }
1739     }
1740
1741**IndentWrappedFunctionNames** (``bool``)
1742  Indent if a function definition or declaration is wrapped after the
1743  type.
1744
1745  .. code-block:: c++
1746
1747     true:
1748     LoooooooooooooooooooooooooooooooooooooooongReturnType
1749         LoooooooooooooooooooooooooooooooongFunctionDeclaration();
1750
1751     false:
1752     LoooooooooooooooooooooooooooooooooooooooongReturnType
1753     LoooooooooooooooooooooooooooooooongFunctionDeclaration();
1754
1755**JavaImportGroups** (``std::vector<std::string>``)
1756  A vector of prefixes ordered by the desired groups for Java imports.
1757
1758  Each group is separated by a newline. Static imports will also follow the
1759  same grouping convention above all non-static imports. One group's prefix
1760  can be a subset of another - the longest prefix is always matched. Within
1761  a group, the imports are ordered lexicographically.
1762
1763  In the .clang-format configuration file, this can be configured like
1764  in the following yaml example. This will result in imports being
1765  formatted as in the Java example below.
1766
1767  .. code-block:: yaml
1768
1769    JavaImportGroups: ['com.example', 'com', 'org']
1770
1771
1772  .. code-block:: java
1773
1774     import static com.example.function1;
1775
1776     import static com.test.function2;
1777
1778     import static org.example.function3;
1779
1780     import com.example.ClassA;
1781     import com.example.Test;
1782     import com.example.a.ClassB;
1783
1784     import com.test.ClassC;
1785
1786     import org.example.ClassD;
1787
1788**JavaScriptQuotes** (``JavaScriptQuoteStyle``)
1789  The JavaScriptQuoteStyle to use for JavaScript strings.
1790
1791  Possible values:
1792
1793  * ``JSQS_Leave`` (in configuration: ``Leave``)
1794    Leave string quotes as they are.
1795
1796    .. code-block:: js
1797
1798       string1 = "foo";
1799       string2 = 'bar';
1800
1801  * ``JSQS_Single`` (in configuration: ``Single``)
1802    Always use single quotes.
1803
1804    .. code-block:: js
1805
1806       string1 = 'foo';
1807       string2 = 'bar';
1808
1809  * ``JSQS_Double`` (in configuration: ``Double``)
1810    Always use double quotes.
1811
1812    .. code-block:: js
1813
1814       string1 = "foo";
1815       string2 = "bar";
1816
1817
1818
1819**JavaScriptWrapImports** (``bool``)
1820  Whether to wrap JavaScript import/export statements.
1821
1822  .. code-block:: js
1823
1824     true:
1825     import {
1826         VeryLongImportsAreAnnoying,
1827         VeryLongImportsAreAnnoying,
1828         VeryLongImportsAreAnnoying,
1829     } from 'some/module.js'
1830
1831     false:
1832     import {VeryLongImportsAreAnnoying, VeryLongImportsAreAnnoying, VeryLongImportsAreAnnoying,} from "some/module.js"
1833
1834**KeepEmptyLinesAtTheStartOfBlocks** (``bool``)
1835  If true, the empty line at the start of blocks is kept.
1836
1837  .. code-block:: c++
1838
1839     true:                                  false:
1840     if (foo) {                     vs.     if (foo) {
1841                                              bar();
1842       bar();                               }
1843     }
1844
1845**Language** (``LanguageKind``)
1846  Language, this format style is targeted at.
1847
1848  Possible values:
1849
1850  * ``LK_None`` (in configuration: ``None``)
1851    Do not use.
1852
1853  * ``LK_Cpp`` (in configuration: ``Cpp``)
1854    Should be used for C, C++.
1855
1856  * ``LK_CSharp`` (in configuration: ``CSharp``)
1857    Should be used for C#.
1858
1859  * ``LK_Java`` (in configuration: ``Java``)
1860    Should be used for Java.
1861
1862  * ``LK_JavaScript`` (in configuration: ``JavaScript``)
1863    Should be used for JavaScript.
1864
1865  * ``LK_ObjC`` (in configuration: ``ObjC``)
1866    Should be used for Objective-C, Objective-C++.
1867
1868  * ``LK_Proto`` (in configuration: ``Proto``)
1869    Should be used for Protocol Buffers
1870    (https://developers.google.com/protocol-buffers/).
1871
1872  * ``LK_TableGen`` (in configuration: ``TableGen``)
1873    Should be used for TableGen code.
1874
1875  * ``LK_TextProto`` (in configuration: ``TextProto``)
1876    Should be used for Protocol Buffer messages in text format
1877    (https://developers.google.com/protocol-buffers/).
1878
1879
1880
1881**MacroBlockBegin** (``std::string``)
1882  A regular expression matching macros that start a block.
1883
1884  .. code-block:: c++
1885
1886     # With:
1887     MacroBlockBegin: "^NS_MAP_BEGIN|\
1888     NS_TABLE_HEAD$"
1889     MacroBlockEnd: "^\
1890     NS_MAP_END|\
1891     NS_TABLE_.*_END$"
1892
1893     NS_MAP_BEGIN
1894       foo();
1895     NS_MAP_END
1896
1897     NS_TABLE_HEAD
1898       bar();
1899     NS_TABLE_FOO_END
1900
1901     # Without:
1902     NS_MAP_BEGIN
1903     foo();
1904     NS_MAP_END
1905
1906     NS_TABLE_HEAD
1907     bar();
1908     NS_TABLE_FOO_END
1909
1910**MacroBlockEnd** (``std::string``)
1911  A regular expression matching macros that end a block.
1912
1913**MaxEmptyLinesToKeep** (``unsigned``)
1914  The maximum number of consecutive empty lines to keep.
1915
1916  .. code-block:: c++
1917
1918     MaxEmptyLinesToKeep: 1         vs.     MaxEmptyLinesToKeep: 0
1919     int f() {                              int f() {
1920       int = 1;                                 int i = 1;
1921                                                i = foo();
1922       i = foo();                               return i;
1923                                            }
1924       return i;
1925     }
1926
1927**NamespaceIndentation** (``NamespaceIndentationKind``)
1928  The indentation used for namespaces.
1929
1930  Possible values:
1931
1932  * ``NI_None`` (in configuration: ``None``)
1933    Don't indent in namespaces.
1934
1935    .. code-block:: c++
1936
1937       namespace out {
1938       int i;
1939       namespace in {
1940       int i;
1941       }
1942       }
1943
1944  * ``NI_Inner`` (in configuration: ``Inner``)
1945    Indent only in inner namespaces (nested in other namespaces).
1946
1947    .. code-block:: c++
1948
1949       namespace out {
1950       int i;
1951       namespace in {
1952         int i;
1953       }
1954       }
1955
1956  * ``NI_All`` (in configuration: ``All``)
1957    Indent in all namespaces.
1958
1959    .. code-block:: c++
1960
1961       namespace out {
1962         int i;
1963         namespace in {
1964           int i;
1965         }
1966       }
1967
1968
1969
1970**NamespaceMacros** (``std::vector<std::string>``)
1971  A vector of macros which are used to open namespace blocks.
1972
1973  These are expected to be macros of the form:
1974
1975  .. code-block:: c++
1976
1977    NAMESPACE(<namespace-name>, ...) {
1978      <namespace-content>
1979    }
1980
1981  For example: TESTSUITE
1982
1983**ObjCBinPackProtocolList** (``BinPackStyle``)
1984  Controls bin-packing Objective-C protocol conformance list
1985  items into as few lines as possible when they go over ``ColumnLimit``.
1986
1987  If ``Auto`` (the default), delegates to the value in
1988  ``BinPackParameters``. If that is ``true``, bin-packs Objective-C
1989  protocol conformance list items into as few lines as possible
1990  whenever they go over ``ColumnLimit``.
1991
1992  If ``Always``, always bin-packs Objective-C protocol conformance
1993  list items into as few lines as possible whenever they go over
1994  ``ColumnLimit``.
1995
1996  If ``Never``, lays out Objective-C protocol conformance list items
1997  onto individual lines whenever they go over ``ColumnLimit``.
1998
1999
2000  .. code-block:: objc
2001
2002     Always (or Auto, if BinPackParameters=true):
2003     @interface ccccccccccccc () <
2004         ccccccccccccc, ccccccccccccc,
2005         ccccccccccccc, ccccccccccccc> {
2006     }
2007
2008     Never (or Auto, if BinPackParameters=false):
2009     @interface ddddddddddddd () <
2010         ddddddddddddd,
2011         ddddddddddddd,
2012         ddddddddddddd,
2013         ddddddddddddd> {
2014     }
2015
2016  Possible values:
2017
2018  * ``BPS_Auto`` (in configuration: ``Auto``)
2019    Automatically determine parameter bin-packing behavior.
2020
2021  * ``BPS_Always`` (in configuration: ``Always``)
2022    Always bin-pack parameters.
2023
2024  * ``BPS_Never`` (in configuration: ``Never``)
2025    Never bin-pack parameters.
2026
2027
2028
2029**ObjCBlockIndentWidth** (``unsigned``)
2030  The number of characters to use for indentation of ObjC blocks.
2031
2032  .. code-block:: objc
2033
2034     ObjCBlockIndentWidth: 4
2035
2036     [operation setCompletionBlock:^{
2037         [self onOperationDone];
2038     }];
2039
2040**ObjCBreakBeforeNestedBlockParam** (``bool``)
2041  Break parameters list into lines when there is nested block
2042  parameters in a fuction call.
2043
2044  .. code-block:: c++
2045
2046    false:
2047     - (void)_aMethod
2048     {
2049         [self.test1 t:self w:self callback:^(typeof(self) self, NSNumber *u, NSNumber *v) {
2050             u = c;
2051         }]
2052     }
2053     true:
2054     - (void)_aMethod
2055     {
2056        [self.test1 t:self
2057                     w:self
2058            callback:^(typeof(self) self, NSNumber *u, NSNumber *v) {
2059                 u = c;
2060             }]
2061     }
2062
2063**ObjCSpaceAfterProperty** (``bool``)
2064  Add a space after ``@property`` in Objective-C, i.e. use
2065  ``@property (readonly)`` instead of ``@property(readonly)``.
2066
2067**ObjCSpaceBeforeProtocolList** (``bool``)
2068  Add a space in front of an Objective-C protocol list, i.e. use
2069  ``Foo <Protocol>`` instead of ``Foo<Protocol>``.
2070
2071**PenaltyBreakAssignment** (``unsigned``)
2072  The penalty for breaking around an assignment operator.
2073
2074**PenaltyBreakBeforeFirstCallParameter** (``unsigned``)
2075  The penalty for breaking a function call after ``call(``.
2076
2077**PenaltyBreakComment** (``unsigned``)
2078  The penalty for each line break introduced inside a comment.
2079
2080**PenaltyBreakFirstLessLess** (``unsigned``)
2081  The penalty for breaking before the first ``<<``.
2082
2083**PenaltyBreakString** (``unsigned``)
2084  The penalty for each line break introduced inside a string literal.
2085
2086**PenaltyBreakTemplateDeclaration** (``unsigned``)
2087  The penalty for breaking after template declaration.
2088
2089**PenaltyExcessCharacter** (``unsigned``)
2090  The penalty for each character outside of the column limit.
2091
2092**PenaltyReturnTypeOnItsOwnLine** (``unsigned``)
2093  Penalty for putting the return type of a function onto its own
2094  line.
2095
2096**PointerAlignment** (``PointerAlignmentStyle``)
2097  Pointer and reference alignment style.
2098
2099  Possible values:
2100
2101  * ``PAS_Left`` (in configuration: ``Left``)
2102    Align pointer to the left.
2103
2104    .. code-block:: c++
2105
2106      int* a;
2107
2108  * ``PAS_Right`` (in configuration: ``Right``)
2109    Align pointer to the right.
2110
2111    .. code-block:: c++
2112
2113      int *a;
2114
2115  * ``PAS_Middle`` (in configuration: ``Middle``)
2116    Align pointer in the middle.
2117
2118    .. code-block:: c++
2119
2120      int * a;
2121
2122
2123
2124**RawStringFormats** (``std::vector<RawStringFormat>``)
2125  Defines hints for detecting supported languages code blocks in raw
2126  strings.
2127
2128  A raw string with a matching delimiter or a matching enclosing function
2129  name will be reformatted assuming the specified language based on the
2130  style for that language defined in the .clang-format file. If no style has
2131  been defined in the .clang-format file for the specific language, a
2132  predefined style given by 'BasedOnStyle' is used. If 'BasedOnStyle' is not
2133  found, the formatting is based on llvm style. A matching delimiter takes
2134  precedence over a matching enclosing function name for determining the
2135  language of the raw string contents.
2136
2137  If a canonical delimiter is specified, occurrences of other delimiters for
2138  the same language will be updated to the canonical if possible.
2139
2140  There should be at most one specification per language and each delimiter
2141  and enclosing function should not occur in multiple specifications.
2142
2143  To configure this in the .clang-format file, use:
2144
2145  .. code-block:: yaml
2146
2147    RawStringFormats:
2148      - Language: TextProto
2149          Delimiters:
2150            - 'pb'
2151            - 'proto'
2152          EnclosingFunctions:
2153            - 'PARSE_TEXT_PROTO'
2154          BasedOnStyle: google
2155      - Language: Cpp
2156          Delimiters:
2157            - 'cc'
2158            - 'cpp'
2159          BasedOnStyle: llvm
2160          CanonicalDelimiter: 'cc'
2161
2162**ReflowComments** (``bool``)
2163  If ``true``, clang-format will attempt to re-flow comments.
2164
2165  .. code-block:: c++
2166
2167     false:
2168     // veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of information
2169     /* second veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of information */
2170
2171     true:
2172     // veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of
2173     // information
2174     /* second veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of
2175      * information */
2176
2177**SortIncludes** (``bool``)
2178  If ``true``, clang-format will sort ``#includes``.
2179
2180  .. code-block:: c++
2181
2182     false:                                 true:
2183     #include "b.h"                 vs.     #include "a.h"
2184     #include "a.h"                         #include "b.h"
2185
2186**SortUsingDeclarations** (``bool``)
2187  If ``true``, clang-format will sort using declarations.
2188
2189  The order of using declarations is defined as follows:
2190  Split the strings by "::" and discard any initial empty strings. The last
2191  element of each list is a non-namespace name; all others are namespace
2192  names. Sort the lists of names lexicographically, where the sort order of
2193  individual names is that all non-namespace names come before all namespace
2194  names, and within those groups, names are in case-insensitive
2195  lexicographic order.
2196
2197  .. code-block:: c++
2198
2199     false:                                 true:
2200     using std::cout;               vs.     using std::cin;
2201     using std::cin;                        using std::cout;
2202
2203**SpaceAfterCStyleCast** (``bool``)
2204  If ``true``, a space is inserted after C style casts.
2205
2206  .. code-block:: c++
2207
2208     true:                                  false:
2209     (int) i;                       vs.     (int)i;
2210
2211**SpaceAfterLogicalNot** (``bool``)
2212  If ``true``, a space is inserted after the logical not operator (``!``).
2213
2214  .. code-block:: c++
2215
2216     true:                                  false:
2217     ! someExpression();            vs.     !someExpression();
2218
2219**SpaceAfterTemplateKeyword** (``bool``)
2220  If ``true``, a space will be inserted after the 'template' keyword.
2221
2222  .. code-block:: c++
2223
2224     true:                                  false:
2225     template <int> void foo();     vs.     template<int> void foo();
2226
2227**SpaceBeforeAssignmentOperators** (``bool``)
2228  If ``false``, spaces will be removed before assignment operators.
2229
2230  .. code-block:: c++
2231
2232     true:                                  false:
2233     int a = 5;                     vs.     int a= 5;
2234     a += 42;                               a+= 42;
2235
2236**SpaceBeforeCpp11BracedList** (``bool``)
2237  If ``true``, a space will be inserted before a C++11 braced list
2238  used to initialize an object (after the preceding identifier or type).
2239
2240  .. code-block:: c++
2241
2242     true:                                  false:
2243     Foo foo { bar };               vs.     Foo foo{ bar };
2244     Foo {};                                Foo{};
2245     vector<int> { 1, 2, 3 };               vector<int>{ 1, 2, 3 };
2246     new int[3] { 1, 2, 3 };                new int[3]{ 1, 2, 3 };
2247
2248**SpaceBeforeCtorInitializerColon** (``bool``)
2249  If ``false``, spaces will be removed before constructor initializer
2250  colon.
2251
2252  .. code-block:: c++
2253
2254     true:                                  false:
2255     Foo::Foo() : a(a) {}                   Foo::Foo(): a(a) {}
2256
2257**SpaceBeforeInheritanceColon** (``bool``)
2258  If ``false``, spaces will be removed before inheritance colon.
2259
2260  .. code-block:: c++
2261
2262     true:                                  false:
2263     class Foo : Bar {}             vs.     class Foo: Bar {}
2264
2265**SpaceBeforeParens** (``SpaceBeforeParensOptions``)
2266  Defines in which cases to put a space before opening parentheses.
2267
2268  Possible values:
2269
2270  * ``SBPO_Never`` (in configuration: ``Never``)
2271    Never put a space before opening parentheses.
2272
2273    .. code-block:: c++
2274
2275       void f() {
2276         if(true) {
2277           f();
2278         }
2279       }
2280
2281  * ``SBPO_ControlStatements`` (in configuration: ``ControlStatements``)
2282    Put a space before opening parentheses only after control statement
2283    keywords (``for/if/while...``).
2284
2285    .. code-block:: c++
2286
2287       void f() {
2288         if (true) {
2289           f();
2290         }
2291       }
2292
2293  * ``SBPO_NonEmptyParentheses`` (in configuration: ``NonEmptyParentheses``)
2294    Put a space before opening parentheses only if the parentheses are not
2295    empty i.e. '()'
2296
2297    .. code-block:: c++
2298
2299      void() {
2300        if (true) {
2301          f();
2302          g (x, y, z);
2303        }
2304      }
2305
2306  * ``SBPO_Always`` (in configuration: ``Always``)
2307    Always put a space before opening parentheses, except when it's
2308    prohibited by the syntax rules (in function-like macro definitions) or
2309    when determined by other style rules (after unary operators, opening
2310    parentheses, etc.)
2311
2312    .. code-block:: c++
2313
2314       void f () {
2315         if (true) {
2316           f ();
2317         }
2318       }
2319
2320
2321
2322**SpaceBeforeRangeBasedForLoopColon** (``bool``)
2323  If ``false``, spaces will be removed before range-based for loop
2324  colon.
2325
2326  .. code-block:: c++
2327
2328     true:                                  false:
2329     for (auto v : values) {}       vs.     for(auto v: values) {}
2330
2331**SpaceBeforeSquareBrackets** (``bool``)
2332  If ``true``, spaces will be before  ``[``.
2333  Lambdas will not be affected. Only the first ``[`` will get a space added.
2334
2335  .. code-block:: c++
2336
2337     true:                                  false:
2338     int a [5];                    vs.      int a[5];
2339     int a [5][5];                 vs.      int a[5][5];
2340
2341**SpaceInEmptyBlock** (``bool``)
2342  If ``true``, spaces will be inserted into ``{}``.
2343
2344  .. code-block:: c++
2345
2346     true:                                false:
2347     void f() { }                   vs.   void f() {}
2348     while (true) { }                     while (true) {}
2349
2350**SpaceInEmptyParentheses** (``bool``)
2351  If ``true``, spaces may be inserted into ``()``.
2352
2353  .. code-block:: c++
2354
2355     true:                                false:
2356     void f( ) {                    vs.   void f() {
2357       int x[] = {foo( ), bar( )};          int x[] = {foo(), bar()};
2358       if (true) {                          if (true) {
2359         f( );                                f();
2360       }                                    }
2361     }                                    }
2362
2363**SpacesBeforeTrailingComments** (``unsigned``)
2364  The number of spaces before trailing line comments
2365  (``//`` - comments).
2366
2367  This does not affect trailing block comments (``/*`` - comments) as
2368  those commonly have different usage patterns and a number of special
2369  cases.
2370
2371  .. code-block:: c++
2372
2373     SpacesBeforeTrailingComments: 3
2374     void f() {
2375       if (true) {   // foo1
2376         f();        // bar
2377       }             // foo
2378     }
2379
2380**SpacesInAngles** (``bool``)
2381  If ``true``, spaces will be inserted after ``<`` and before ``>``
2382  in template argument lists.
2383
2384  .. code-block:: c++
2385
2386     true:                                  false:
2387     static_cast< int >(arg);       vs.     static_cast<int>(arg);
2388     std::function< void(int) > fct;        std::function<void(int)> fct;
2389
2390**SpacesInCStyleCastParentheses** (``bool``)
2391  If ``true``, spaces may be inserted into C style casts.
2392
2393  .. code-block:: c++
2394
2395     true:                                  false:
2396     x = ( int32 )y                 vs.     x = (int32)y
2397
2398**SpacesInConditionalStatement** (``bool``)
2399  If ``true``, spaces will be inserted around if/for/switch/while
2400  conditions.
2401
2402  .. code-block:: c++
2403
2404     true:                                  false:
2405     if ( a )  { ... }              vs.     if (a) { ... }
2406     while ( i < 5 )  { ... }               while (i < 5) { ... }
2407
2408**SpacesInContainerLiterals** (``bool``)
2409  If ``true``, spaces are inserted inside container literals (e.g.
2410  ObjC and Javascript array and dict literals).
2411
2412  .. code-block:: js
2413
2414     true:                                  false:
2415     var arr = [ 1, 2, 3 ];         vs.     var arr = [1, 2, 3];
2416     f({a : 1, b : 2, c : 3});              f({a: 1, b: 2, c: 3});
2417
2418**SpacesInParentheses** (``bool``)
2419  If ``true``, spaces will be inserted after ``(`` and before ``)``.
2420
2421  .. code-block:: c++
2422
2423     true:                                  false:
2424     t f( Deleted & ) & = delete;   vs.     t f(Deleted &) & = delete;
2425
2426**SpacesInSquareBrackets** (``bool``)
2427  If ``true``, spaces will be inserted after ``[`` and before ``]``.
2428  Lambdas without arguments or unspecified size array declarations will not
2429  be affected.
2430
2431  .. code-block:: c++
2432
2433     true:                                  false:
2434     int a[ 5 ];                    vs.     int a[5];
2435     std::unique_ptr<int[]> foo() {} // Won't be affected
2436
2437**Standard** (``LanguageStandard``)
2438  Parse and format C++ constructs compatible with this standard.
2439
2440  .. code-block:: c++
2441
2442     c++03:                                 latest:
2443     vector<set<int> > x;           vs.     vector<set<int>> x;
2444
2445  Possible values:
2446
2447  * ``LS_Cpp03`` (in configuration: ``c++03``)
2448    Parse and format as C++03.
2449    ``Cpp03`` is a deprecated alias for ``c++03``
2450
2451  * ``LS_Cpp11`` (in configuration: ``c++11``)
2452    Parse and format as C++11.
2453
2454  * ``LS_Cpp14`` (in configuration: ``c++14``)
2455    Parse and format as C++14.
2456
2457  * ``LS_Cpp17`` (in configuration: ``c++17``)
2458    Parse and format as C++17.
2459
2460  * ``LS_Cpp20`` (in configuration: ``c++20``)
2461    Parse and format as C++20.
2462
2463  * ``LS_Latest`` (in configuration: ``Latest``)
2464    Parse and format using the latest supported language version.
2465    ``Cpp11`` is a deprecated alias for ``Latest``
2466
2467  * ``LS_Auto`` (in configuration: ``Auto``)
2468    Automatic detection based on the input.
2469
2470
2471
2472**StatementMacros** (``std::vector<std::string>``)
2473  A vector of macros that should be interpreted as complete
2474  statements.
2475
2476  Typical macros are expressions, and require a semi-colon to be
2477  added; sometimes this is not the case, and this allows to make
2478  clang-format aware of such cases.
2479
2480  For example: Q_UNUSED
2481
2482**TabWidth** (``unsigned``)
2483  The number of columns used for tab stops.
2484
2485**TypenameMacros** (``std::vector<std::string>``)
2486  A vector of macros that should be interpreted as type declarations
2487  instead of as function calls.
2488
2489  These are expected to be macros of the form:
2490
2491  .. code-block:: c++
2492
2493    STACK_OF(...)
2494
2495  In the .clang-format configuration file, this can be configured like:
2496
2497  .. code-block:: yaml
2498
2499    TypenameMacros: ['STACK_OF', 'LIST']
2500
2501  For example: OpenSSL STACK_OF, BSD LIST_ENTRY.
2502
2503**UseCRLF** (``bool``)
2504  Use ``\r\n`` instead of ``\n`` for line breaks.
2505  Also used as fallback if ``DeriveLineEnding`` is true.
2506
2507**UseTab** (``UseTabStyle``)
2508  The way to use tab characters in the resulting file.
2509
2510  Possible values:
2511
2512  * ``UT_Never`` (in configuration: ``Never``)
2513    Never use tab.
2514
2515  * ``UT_ForIndentation`` (in configuration: ``ForIndentation``)
2516    Use tabs only for indentation.
2517
2518  * ``UT_ForContinuationAndIndentation`` (in configuration: ``ForContinuationAndIndentation``)
2519    Use tabs only for line continuation and indentation.
2520
2521  * ``UT_Always`` (in configuration: ``Always``)
2522    Use tabs whenever we need to fill whitespace that spans at least from
2523    one tab stop to the next one.
2524
2525
2526
2527.. END_FORMAT_STYLE_OPTIONS
2528
2529Adding additional style options
2530===============================
2531
2532Each additional style option adds costs to the clang-format project. Some of
2533these costs affect the clang-format development itself, as we need to make
2534sure that any given combination of options work and that new features don't
2535break any of the existing options in any way. There are also costs for end users
2536as options become less discoverable and people have to think about and make a
2537decision on options they don't really care about.
2538
2539The goal of the clang-format project is more on the side of supporting a
2540limited set of styles really well as opposed to supporting every single style
2541used by a codebase somewhere in the wild. Of course, we do want to support all
2542major projects and thus have established the following bar for adding style
2543options. Each new style option must ..
2544
2545  * be used in a project of significant size (have dozens of contributors)
2546  * have a publicly accessible style guide
2547  * have a person willing to contribute and maintain patches
2548
2549Examples
2550========
2551
2552A style similar to the `Linux Kernel style
2553<https://www.kernel.org/doc/Documentation/CodingStyle>`_:
2554
2555.. code-block:: yaml
2556
2557  BasedOnStyle: LLVM
2558  IndentWidth: 8
2559  UseTab: Always
2560  BreakBeforeBraces: Linux
2561  AllowShortIfStatementsOnASingleLine: false
2562  IndentCaseLabels: false
2563
2564The result is (imagine that tabs are used for indentation here):
2565
2566.. code-block:: c++
2567
2568  void test()
2569  {
2570          switch (x) {
2571          case 0:
2572          case 1:
2573                  do_something();
2574                  break;
2575          case 2:
2576                  do_something_else();
2577                  break;
2578          default:
2579                  break;
2580          }
2581          if (condition)
2582                  do_something_completely_different();
2583
2584          if (x == y) {
2585                  q();
2586          } else if (x > y) {
2587                  w();
2588          } else {
2589                  r();
2590          }
2591  }
2592
2593A style similar to the default Visual Studio formatting style:
2594
2595.. code-block:: yaml
2596
2597  UseTab: Never
2598  IndentWidth: 4
2599  BreakBeforeBraces: Allman
2600  AllowShortIfStatementsOnASingleLine: false
2601  IndentCaseLabels: false
2602  ColumnLimit: 0
2603
2604The result is:
2605
2606.. code-block:: c++
2607
2608  void test()
2609  {
2610      switch (suffix)
2611      {
2612      case 0:
2613      case 1:
2614          do_something();
2615          break;
2616      case 2:
2617          do_something_else();
2618          break;
2619      default:
2620          break;
2621      }
2622      if (condition)
2623          do_somthing_completely_different();
2624
2625      if (x == y)
2626      {
2627          q();
2628      }
2629      else if (x > y)
2630      {
2631          w();
2632      }
2633      else
2634      {
2635          r();
2636      }
2637  }
2638