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