[docs] Add LICENSE.txt to the root of the mono-repo
[llvm-project.git] / clang / docs / ClangFormatStyleOptions.rst
blobd3e1d71fd04b74997cae925d28afd028905985e2
1 .. raw:: html
3       <style type="text/css">
4         .versionbadge { background-color: #1c913d; height: 20px; display: inline-block; width: 120px; text-align: center; border-radius: 5px; color: #FFFFFF; font-family="Verdana,Geneva,DejaVu Sans,sans-serif" }
5       </style>
7 .. role:: versionbadge
9 ==========================
10 Clang-Format Style Options
11 ==========================
13 :doc:`ClangFormatStyleOptions` describes configurable formatting style options
14 supported by :doc:`LibFormat` and :doc:`ClangFormat`.
16 When using :program:`clang-format` command line utility or
17 ``clang::format::reformat(...)`` functions from code, one can either use one of
18 the predefined styles (LLVM, Google, Chromium, Mozilla, WebKit, Microsoft) or
19 create a custom style by configuring specific style options.
22 Configuring Style with clang-format
23 ===================================
25 :program:`clang-format` supports two ways to provide custom style options:
26 directly specify style configuration in the ``-style=`` command line option or
27 use ``-style=file`` and put style configuration in the ``.clang-format`` or
28 ``_clang-format`` file in the project directory.
30 When using ``-style=file``, :program:`clang-format` for each input file will
31 try to find the ``.clang-format`` file located in the closest parent directory
32 of the input file. When the standard input is used, the search is started from
33 the current directory.
35 When using ``-style=file:<format_file_path>``, :program:`clang-format` for
36 each input file will use the format file located at `<format_file_path>`.
37 The path may be absolute or relative to the working directory.
39 The ``.clang-format`` file uses YAML format:
41 .. code-block:: yaml
43   key1: value1
44   key2: value2
45   # A comment.
46   ...
48 The configuration file can consist of several sections each having different
49 ``Language:`` parameter denoting the programming language this section of the
50 configuration is targeted at. See the description of the **Language** option
51 below for the list of supported languages. The first section may have no
52 language set, it will set the default style options for all languages.
53 Configuration sections for specific language will override options set in the
54 default section.
56 When :program:`clang-format` formats a file, it auto-detects the language using
57 the file name. When formatting standard input or a file that doesn't have the
58 extension corresponding to its language, ``-assume-filename=`` option can be
59 used to override the file name :program:`clang-format` uses to detect the
60 language.
62 An example of a configuration file for multiple languages:
64 .. code-block:: yaml
66   ---
67   # We'll use defaults from the LLVM style, but with 4 columns indentation.
68   BasedOnStyle: LLVM
69   IndentWidth: 4
70   ---
71   Language: Cpp
72   # Force pointers to the type for C++.
73   DerivePointerAlignment: false
74   PointerAlignment: Left
75   ---
76   Language: JavaScript
77   # Use 100 columns for JS.
78   ColumnLimit: 100
79   ---
80   Language: Proto
81   # Don't format .proto files.
82   DisableFormat: true
83   ---
84   Language: CSharp
85   # Use 100 columns for C#.
86   ColumnLimit: 100
87   ...
89 An easy way to get a valid ``.clang-format`` file containing all configuration
90 options of a certain predefined style is:
92 .. code-block:: console
94   clang-format -style=llvm -dump-config > .clang-format
96 When specifying configuration in the ``-style=`` option, the same configuration
97 is applied for all input files. The format of the configuration is:
99 .. code-block:: console
101   -style='{key1: value1, key2: value2, ...}'
104 Disabling Formatting on a Piece of Code
105 =======================================
107 Clang-format understands also special comments that switch formatting in a
108 delimited range. The code between a comment ``// clang-format off`` or
109 ``/* clang-format off */`` up to a comment ``// clang-format on`` or
110 ``/* clang-format on */`` will not be formatted. The comments themselves
111 will be formatted (aligned) normally.
113 .. code-block:: c++
115   int formatted_code;
116   // clang-format off
117       void    unformatted_code  ;
118   // clang-format on
119   void formatted_code_again;
122 Configuring Style in Code
123 =========================
125 When using ``clang::format::reformat(...)`` functions, the format is specified
126 by supplying the `clang::format::FormatStyle
127 <https://clang.llvm.org/doxygen/structclang_1_1format_1_1FormatStyle.html>`_
128 structure.
131 Configurable Format Style Options
132 =================================
134 This section lists the supported style options. Value type is specified for
135 each option. For enumeration types possible values are specified both as a C++
136 enumeration member (with a prefix, e.g. ``LS_Auto``), and as a value usable in
137 the configuration (without a prefix: ``Auto``).
140 **BasedOnStyle** (``String``)
141   The style used for all options not specifically set in the configuration.
143   This option is supported only in the :program:`clang-format` configuration
144   (both within ``-style='{...}'`` and the ``.clang-format`` file).
146   Possible values:
148   * ``LLVM``
149     A style complying with the `LLVM coding standards
150     <https://llvm.org/docs/CodingStandards.html>`_
151   * ``Google``
152     A style complying with `Google's C++ style guide
153     <https://google.github.io/styleguide/cppguide.html>`_
154   * ``Chromium``
155     A style complying with `Chromium's style guide
156     <https://chromium.googlesource.com/chromium/src/+/refs/heads/main/styleguide/styleguide.md>`_
157   * ``Mozilla``
158     A style complying with `Mozilla's style guide
159     <https://firefox-source-docs.mozilla.org/code-quality/coding-style/index.html>`_
160   * ``WebKit``
161     A style complying with `WebKit's style guide
162     <https://www.webkit.org/coding/coding-style.html>`_
163   * ``Microsoft``
164     A style complying with `Microsoft's style guide
165     <https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference>`_
166   * ``GNU``
167     A style complying with the `GNU coding standards
168     <https://www.gnu.org/prep/standards/standards.html>`_
169   * ``InheritParentConfig``
170     Not a real style, but allows to use the ``.clang-format`` file from the
171     parent directory (or its parent if there is none). If there is no parent
172     file found it falls back to the ``fallback`` style, and applies the changes
173     to that.
175     With this option you can overwrite some parts of your main style for your
176     subdirectories. This is also possible through the command line, e.g.:
177     ``--style={BasedOnStyle: InheritParentConfig, ColumnLimit: 20}``
179 .. START_FORMAT_STYLE_OPTIONS
181 **AccessModifierOffset** (``Integer``) :versionbadge:`clang-format 3.3`
182   The extra indent or outdent of access modifiers, e.g. ``public:``.
184 **AlignAfterOpenBracket** (``BracketAlignmentStyle``) :versionbadge:`clang-format 3.8`
185   If ``true``, horizontally aligns arguments after an open bracket.
187   This applies to round brackets (parentheses), angle brackets and square
188   brackets.
190   Possible values:
192   * ``BAS_Align`` (in configuration: ``Align``)
193     Align parameters on the open bracket, e.g.:
195     .. code-block:: c++
197       someLongFunction(argument1,
198                        argument2);
200   * ``BAS_DontAlign`` (in configuration: ``DontAlign``)
201     Don't align, instead use ``ContinuationIndentWidth``, e.g.:
203     .. code-block:: c++
205       someLongFunction(argument1,
206           argument2);
208   * ``BAS_AlwaysBreak`` (in configuration: ``AlwaysBreak``)
209     Always break after an open bracket, if the parameters don't fit
210     on a single line, e.g.:
212     .. code-block:: c++
214       someLongFunction(
215           argument1, argument2);
217   * ``BAS_BlockIndent`` (in configuration: ``BlockIndent``)
218     Always break after an open bracket, if the parameters don't fit
219     on a single line. Closing brackets will be placed on a new line.
220     E.g.:
222     .. code-block:: c++
224       someLongFunction(
225           argument1, argument2
226       )
229     .. warning:: 
231      Note: This currently only applies to parentheses.
235 **AlignArrayOfStructures** (``ArrayInitializerAlignmentStyle``) :versionbadge:`clang-format 13`
236   if not ``None``, when using initialization for an array of structs
237   aligns the fields into columns.
239   NOTE: As of clang-format 15 this option only applied to arrays with equal
240   number of columns per row.
242   Possible values:
244   * ``AIAS_Left`` (in configuration: ``Left``)
245     Align array column and left justify the columns e.g.:
247     .. code-block:: c++
249       struct test demo[] =
250       {
251           {56, 23,    "hello"},
252           {-1, 93463, "world"},
253           {7,  5,     "!!"   }
254       };
256   * ``AIAS_Right`` (in configuration: ``Right``)
257     Align array column and right justify the columns e.g.:
259     .. code-block:: c++
261       struct test demo[] =
262       {
263           {56,    23, "hello"},
264           {-1, 93463, "world"},
265           { 7,     5,    "!!"}
266       };
268   * ``AIAS_None`` (in configuration: ``None``)
269     Don't align array initializer columns.
273 **AlignConsecutiveAssignments** (``AlignConsecutiveStyle``) :versionbadge:`clang-format 3.8`
274   Style of aligning consecutive assignments.
276   ``Consecutive`` will result in formattings like:
278   .. code-block:: c++
280     int a            = 1;
281     int somelongname = 2;
282     double c         = 3;
284   Nested configuration flags:
286   Alignment options.
288   They can also be read as a whole for compatibility. The choices are:
289   - None
290   - Consecutive
291   - AcrossEmptyLines
292   - AcrossComments
293   - AcrossEmptyLinesAndComments
295   For example, to align across empty lines and not across comments, either
296   of these work.
298   .. code-block:: c++
300     AlignConsecutiveMacros: AcrossEmptyLines
302     AlignConsecutiveMacros:
303       Enabled: true
304       AcrossEmptyLines: true
305       AcrossComments: false
307   * ``bool Enabled`` Whether aligning is enabled.
309     .. code-block:: c++
311       #define SHORT_NAME       42
312       #define LONGER_NAME      0x007f
313       #define EVEN_LONGER_NAME (2)
314       #define foo(x)           (x * x)
315       #define bar(y, z)        (y + z)
317       int a            = 1;
318       int somelongname = 2;
319       double c         = 3;
321       int aaaa : 1;
322       int b    : 12;
323       int ccc  : 8;
325       int         aaaa = 12;
326       float       b = 23;
327       std::string ccc;
329   * ``bool AcrossEmptyLines`` Whether to align across empty lines.
331     .. code-block:: c++
333       true:
334       int a            = 1;
335       int somelongname = 2;
336       double c         = 3;
338       int d            = 3;
340       false:
341       int a            = 1;
342       int somelongname = 2;
343       double c         = 3;
345       int d = 3;
347   * ``bool AcrossComments`` Whether to align across comments.
349     .. code-block:: c++
351       true:
352       int d    = 3;
353       /* A comment. */
354       double e = 4;
356       false:
357       int d = 3;
358       /* A comment. */
359       double e = 4;
361   * ``bool AlignCompound`` Only for ``AlignConsecutiveAssignments``.  Whether compound assignments
362     like ``+=`` are aligned along with ``=``.
364     .. code-block:: c++
366       true:
367       a   &= 2;
368       bbb  = 2;
370       false:
371       a &= 2;
372       bbb = 2;
374   * ``bool PadOperators`` Only for ``AlignConsecutiveAssignments``.  Whether short assignment
375     operators are left-padded to the same length as long ones in order to
376     put all assignment operators to the right of the left hand side.
378     .. code-block:: c++
380       true:
381       a   >>= 2;
382       bbb   = 2;
384       a     = 2;
385       bbb >>= 2;
387       false:
388       a >>= 2;
389       bbb = 2;
391       a     = 2;
392       bbb >>= 2;
395 **AlignConsecutiveBitFields** (``AlignConsecutiveStyle``) :versionbadge:`clang-format 11`
396   Style of aligning consecutive bit fields.
398   ``Consecutive`` will align the bitfield separators of consecutive lines.
399   This will result in formattings like:
401   .. code-block:: c++
403     int aaaa : 1;
404     int b    : 12;
405     int ccc  : 8;
407   Nested configuration flags:
409   Alignment options.
411   They can also be read as a whole for compatibility. The choices are:
412   - None
413   - Consecutive
414   - AcrossEmptyLines
415   - AcrossComments
416   - AcrossEmptyLinesAndComments
418   For example, to align across empty lines and not across comments, either
419   of these work.
421   .. code-block:: c++
423     AlignConsecutiveMacros: AcrossEmptyLines
425     AlignConsecutiveMacros:
426       Enabled: true
427       AcrossEmptyLines: true
428       AcrossComments: false
430   * ``bool Enabled`` Whether aligning is enabled.
432     .. code-block:: c++
434       #define SHORT_NAME       42
435       #define LONGER_NAME      0x007f
436       #define EVEN_LONGER_NAME (2)
437       #define foo(x)           (x * x)
438       #define bar(y, z)        (y + z)
440       int a            = 1;
441       int somelongname = 2;
442       double c         = 3;
444       int aaaa : 1;
445       int b    : 12;
446       int ccc  : 8;
448       int         aaaa = 12;
449       float       b = 23;
450       std::string ccc;
452   * ``bool AcrossEmptyLines`` Whether to align across empty lines.
454     .. code-block:: c++
456       true:
457       int a            = 1;
458       int somelongname = 2;
459       double c         = 3;
461       int d            = 3;
463       false:
464       int a            = 1;
465       int somelongname = 2;
466       double c         = 3;
468       int d = 3;
470   * ``bool AcrossComments`` Whether to align across comments.
472     .. code-block:: c++
474       true:
475       int d    = 3;
476       /* A comment. */
477       double e = 4;
479       false:
480       int d = 3;
481       /* A comment. */
482       double e = 4;
484   * ``bool AlignCompound`` Only for ``AlignConsecutiveAssignments``.  Whether compound assignments
485     like ``+=`` are aligned along with ``=``.
487     .. code-block:: c++
489       true:
490       a   &= 2;
491       bbb  = 2;
493       false:
494       a &= 2;
495       bbb = 2;
497   * ``bool PadOperators`` Only for ``AlignConsecutiveAssignments``.  Whether short assignment
498     operators are left-padded to the same length as long ones in order to
499     put all assignment operators to the right of the left hand side.
501     .. code-block:: c++
503       true:
504       a   >>= 2;
505       bbb   = 2;
507       a     = 2;
508       bbb >>= 2;
510       false:
511       a >>= 2;
512       bbb = 2;
514       a     = 2;
515       bbb >>= 2;
518 **AlignConsecutiveDeclarations** (``AlignConsecutiveStyle``) :versionbadge:`clang-format 3.8`
519   Style of aligning consecutive declarations.
521   ``Consecutive`` will align the declaration names of consecutive lines.
522   This will result in formattings like:
524   .. code-block:: c++
526     int         aaaa = 12;
527     float       b = 23;
528     std::string ccc;
530   Nested configuration flags:
532   Alignment options.
534   They can also be read as a whole for compatibility. The choices are:
535   - None
536   - Consecutive
537   - AcrossEmptyLines
538   - AcrossComments
539   - AcrossEmptyLinesAndComments
541   For example, to align across empty lines and not across comments, either
542   of these work.
544   .. code-block:: c++
546     AlignConsecutiveMacros: AcrossEmptyLines
548     AlignConsecutiveMacros:
549       Enabled: true
550       AcrossEmptyLines: true
551       AcrossComments: false
553   * ``bool Enabled`` Whether aligning is enabled.
555     .. code-block:: c++
557       #define SHORT_NAME       42
558       #define LONGER_NAME      0x007f
559       #define EVEN_LONGER_NAME (2)
560       #define foo(x)           (x * x)
561       #define bar(y, z)        (y + z)
563       int a            = 1;
564       int somelongname = 2;
565       double c         = 3;
567       int aaaa : 1;
568       int b    : 12;
569       int ccc  : 8;
571       int         aaaa = 12;
572       float       b = 23;
573       std::string ccc;
575   * ``bool AcrossEmptyLines`` Whether to align across empty lines.
577     .. code-block:: c++
579       true:
580       int a            = 1;
581       int somelongname = 2;
582       double c         = 3;
584       int d            = 3;
586       false:
587       int a            = 1;
588       int somelongname = 2;
589       double c         = 3;
591       int d = 3;
593   * ``bool AcrossComments`` Whether to align across comments.
595     .. code-block:: c++
597       true:
598       int d    = 3;
599       /* A comment. */
600       double e = 4;
602       false:
603       int d = 3;
604       /* A comment. */
605       double e = 4;
607   * ``bool AlignCompound`` Only for ``AlignConsecutiveAssignments``.  Whether compound assignments
608     like ``+=`` are aligned along with ``=``.
610     .. code-block:: c++
612       true:
613       a   &= 2;
614       bbb  = 2;
616       false:
617       a &= 2;
618       bbb = 2;
620   * ``bool PadOperators`` Only for ``AlignConsecutiveAssignments``.  Whether short assignment
621     operators are left-padded to the same length as long ones in order to
622     put all assignment operators to the right of the left hand side.
624     .. code-block:: c++
626       true:
627       a   >>= 2;
628       bbb   = 2;
630       a     = 2;
631       bbb >>= 2;
633       false:
634       a >>= 2;
635       bbb = 2;
637       a     = 2;
638       bbb >>= 2;
641 **AlignConsecutiveMacros** (``AlignConsecutiveStyle``) :versionbadge:`clang-format 9`
642   Style of aligning consecutive macro definitions.
644   ``Consecutive`` will result in formattings like:
646   .. code-block:: c++
648     #define SHORT_NAME       42
649     #define LONGER_NAME      0x007f
650     #define EVEN_LONGER_NAME (2)
651     #define foo(x)           (x * x)
652     #define bar(y, z)        (y + z)
654   Nested configuration flags:
656   Alignment options.
658   They can also be read as a whole for compatibility. The choices are:
659   - None
660   - Consecutive
661   - AcrossEmptyLines
662   - AcrossComments
663   - AcrossEmptyLinesAndComments
665   For example, to align across empty lines and not across comments, either
666   of these work.
668   .. code-block:: c++
670     AlignConsecutiveMacros: AcrossEmptyLines
672     AlignConsecutiveMacros:
673       Enabled: true
674       AcrossEmptyLines: true
675       AcrossComments: false
677   * ``bool Enabled`` Whether aligning is enabled.
679     .. code-block:: c++
681       #define SHORT_NAME       42
682       #define LONGER_NAME      0x007f
683       #define EVEN_LONGER_NAME (2)
684       #define foo(x)           (x * x)
685       #define bar(y, z)        (y + z)
687       int a            = 1;
688       int somelongname = 2;
689       double c         = 3;
691       int aaaa : 1;
692       int b    : 12;
693       int ccc  : 8;
695       int         aaaa = 12;
696       float       b = 23;
697       std::string ccc;
699   * ``bool AcrossEmptyLines`` Whether to align across empty lines.
701     .. code-block:: c++
703       true:
704       int a            = 1;
705       int somelongname = 2;
706       double c         = 3;
708       int d            = 3;
710       false:
711       int a            = 1;
712       int somelongname = 2;
713       double c         = 3;
715       int d = 3;
717   * ``bool AcrossComments`` Whether to align across comments.
719     .. code-block:: c++
721       true:
722       int d    = 3;
723       /* A comment. */
724       double e = 4;
726       false:
727       int d = 3;
728       /* A comment. */
729       double e = 4;
731   * ``bool AlignCompound`` Only for ``AlignConsecutiveAssignments``.  Whether compound assignments
732     like ``+=`` are aligned along with ``=``.
734     .. code-block:: c++
736       true:
737       a   &= 2;
738       bbb  = 2;
740       false:
741       a &= 2;
742       bbb = 2;
744   * ``bool PadOperators`` Only for ``AlignConsecutiveAssignments``.  Whether short assignment
745     operators are left-padded to the same length as long ones in order to
746     put all assignment operators to the right of the left hand side.
748     .. code-block:: c++
750       true:
751       a   >>= 2;
752       bbb   = 2;
754       a     = 2;
755       bbb >>= 2;
757       false:
758       a >>= 2;
759       bbb = 2;
761       a     = 2;
762       bbb >>= 2;
765 **AlignEscapedNewlines** (``EscapedNewlineAlignmentStyle``) :versionbadge:`clang-format 5`
766   Options for aligning backslashes in escaped newlines.
768   Possible values:
770   * ``ENAS_DontAlign`` (in configuration: ``DontAlign``)
771     Don't align escaped newlines.
773     .. code-block:: c++
775       #define A \
776         int aaaa; \
777         int b; \
778         int dddddddddd;
780   * ``ENAS_Left`` (in configuration: ``Left``)
781     Align escaped newlines as far left as possible.
783     .. code-block:: c++
785       true:
786       #define A   \
787         int aaaa; \
788         int b;    \
789         int dddddddddd;
791       false:
793   * ``ENAS_Right`` (in configuration: ``Right``)
794     Align escaped newlines in the right-most column.
796     .. code-block:: c++
798       #define A                                                                      \
799         int aaaa;                                                                    \
800         int b;                                                                       \
801         int dddddddddd;
805 **AlignOperands** (``OperandAlignmentStyle``) :versionbadge:`clang-format 3.5`
806   If ``true``, horizontally align operands of binary and ternary
807   expressions.
809   Possible values:
811   * ``OAS_DontAlign`` (in configuration: ``DontAlign``)
812     Do not align operands of binary and ternary expressions.
813     The wrapped lines are indented ``ContinuationIndentWidth`` spaces from
814     the start of the line.
816   * ``OAS_Align`` (in configuration: ``Align``)
817     Horizontally align operands of binary and ternary expressions.
819     Specifically, this aligns operands of a single expression that needs
820     to be split over multiple lines, e.g.:
822     .. code-block:: c++
824       int aaa = bbbbbbbbbbbbbbb +
825                 ccccccccccccccc;
827     When ``BreakBeforeBinaryOperators`` is set, the wrapped operator is
828     aligned with the operand on the first line.
830     .. code-block:: c++
832       int aaa = bbbbbbbbbbbbbbb
833                 + ccccccccccccccc;
835   * ``OAS_AlignAfterOperator`` (in configuration: ``AlignAfterOperator``)
836     Horizontally align operands of binary and ternary expressions.
838     This is similar to ``AO_Align``, except when
839     ``BreakBeforeBinaryOperators`` is set, the operator is un-indented so
840     that the wrapped operand is aligned with the operand on the first line.
842     .. code-block:: c++
844       int aaa = bbbbbbbbbbbbbbb
845               + ccccccccccccccc;
849 **AlignTrailingComments** (``Boolean``) :versionbadge:`clang-format 3.7`
850   If ``true``, aligns trailing comments.
852   .. code-block:: c++
854     true:                                   false:
855     int a;     // My comment a      vs.     int a; // My comment a
856     int b = 2; // comment  b                int b = 2; // comment about b
858 **AllowAllArgumentsOnNextLine** (``Boolean``) :versionbadge:`clang-format 9`
859   If a function call or braced initializer list doesn't fit on a
860   line, allow putting all arguments onto the next line, even if
861   ``BinPackArguments`` is ``false``.
863   .. code-block:: c++
865     true:
866     callFunction(
867         a, b, c, d);
869     false:
870     callFunction(a,
871                  b,
872                  c,
873                  d);
875 **AllowAllConstructorInitializersOnNextLine** (``Boolean``) :versionbadge:`clang-format 9`
876   This option is **deprecated**. See ``NextLine`` of
877   ``PackConstructorInitializers``.
879 **AllowAllParametersOfDeclarationOnNextLine** (``Boolean``) :versionbadge:`clang-format 3.3`
880   If the function declaration doesn't fit on a line,
881   allow putting all parameters of a function declaration onto
882   the next line even if ``BinPackParameters`` is ``false``.
884   .. code-block:: c++
886     true:
887     void myFunction(
888         int a, int b, int c, int d, int e);
890     false:
891     void myFunction(int a,
892                     int b,
893                     int c,
894                     int d,
895                     int e);
897 **AllowShortBlocksOnASingleLine** (``ShortBlockStyle``) :versionbadge:`clang-format 3.5`
898   Dependent on the value, ``while (true) { continue; }`` can be put on a
899   single line.
901   Possible values:
903   * ``SBS_Never`` (in configuration: ``Never``)
904     Never merge blocks into a single line.
906     .. code-block:: c++
908       while (true) {
909       }
910       while (true) {
911         continue;
912       }
914   * ``SBS_Empty`` (in configuration: ``Empty``)
915     Only merge empty blocks.
917     .. code-block:: c++
919       while (true) {}
920       while (true) {
921         continue;
922       }
924   * ``SBS_Always`` (in configuration: ``Always``)
925     Always merge short blocks into a single line.
927     .. code-block:: c++
929       while (true) {}
930       while (true) { continue; }
934 **AllowShortCaseLabelsOnASingleLine** (``Boolean``) :versionbadge:`clang-format 3.6`
935   If ``true``, short case labels will be contracted to a single line.
937   .. code-block:: c++
939     true:                                   false:
940     switch (a) {                    vs.     switch (a) {
941     case 1: x = 1; break;                   case 1:
942     case 2: return;                           x = 1;
943     }                                         break;
944                                             case 2:
945                                               return;
946                                             }
948 **AllowShortEnumsOnASingleLine** (``Boolean``) :versionbadge:`clang-format 11`
949   Allow short enums on a single line.
951   .. code-block:: c++
953     true:
954     enum { A, B } myEnum;
956     false:
957     enum {
958       A,
959       B
960     } myEnum;
962 **AllowShortFunctionsOnASingleLine** (``ShortFunctionStyle``) :versionbadge:`clang-format 3.5`
963   Dependent on the value, ``int f() { return 0; }`` can be put on a
964   single line.
966   Possible values:
968   * ``SFS_None`` (in configuration: ``None``)
969     Never merge functions into a single line.
971   * ``SFS_InlineOnly`` (in configuration: ``InlineOnly``)
972     Only merge functions defined inside a class. Same as "inline",
973     except it does not implies "empty": i.e. top level empty functions
974     are not merged either.
976     .. code-block:: c++
978       class Foo {
979         void f() { foo(); }
980       };
981       void f() {
982         foo();
983       }
984       void f() {
985       }
987   * ``SFS_Empty`` (in configuration: ``Empty``)
988     Only merge empty functions.
990     .. code-block:: c++
992       void f() {}
993       void f2() {
994         bar2();
995       }
997   * ``SFS_Inline`` (in configuration: ``Inline``)
998     Only merge functions defined inside a class. Implies "empty".
1000     .. code-block:: c++
1002       class Foo {
1003         void f() { foo(); }
1004       };
1005       void f() {
1006         foo();
1007       }
1008       void f() {}
1010   * ``SFS_All`` (in configuration: ``All``)
1011     Merge all functions fitting on a single line.
1013     .. code-block:: c++
1015       class Foo {
1016         void f() { foo(); }
1017       };
1018       void f() { bar(); }
1022 **AllowShortIfStatementsOnASingleLine** (``ShortIfStyle``) :versionbadge:`clang-format 3.3`
1023   Dependent on the value, ``if (a) return;`` can be put on a single line.
1025   Possible values:
1027   * ``SIS_Never`` (in configuration: ``Never``)
1028     Never put short ifs on the same line.
1030     .. code-block:: c++
1032       if (a)
1033         return;
1035       if (b)
1036         return;
1037       else
1038         return;
1040       if (c)
1041         return;
1042       else {
1043         return;
1044       }
1046   * ``SIS_WithoutElse`` (in configuration: ``WithoutElse``)
1047     Put short ifs on the same line only if there is no else statement.
1049     .. code-block:: c++
1051       if (a) return;
1053       if (b)
1054         return;
1055       else
1056         return;
1058       if (c)
1059         return;
1060       else {
1061         return;
1062       }
1064   * ``SIS_OnlyFirstIf`` (in configuration: ``OnlyFirstIf``)
1065     Put short ifs, but not else ifs nor else statements, on the same line.
1067     .. code-block:: c++
1069       if (a) return;
1071       if (b) return;
1072       else if (b)
1073         return;
1074       else
1075         return;
1077       if (c) return;
1078       else {
1079         return;
1080       }
1082   * ``SIS_AllIfsAndElse`` (in configuration: ``AllIfsAndElse``)
1083     Always put short ifs, else ifs and else statements on the same
1084     line.
1086     .. code-block:: c++
1088       if (a) return;
1090       if (b) return;
1091       else return;
1093       if (c) return;
1094       else {
1095         return;
1096       }
1100 **AllowShortLambdasOnASingleLine** (``ShortLambdaStyle``) :versionbadge:`clang-format 9`
1101   Dependent on the value, ``auto lambda []() { return 0; }`` can be put on a
1102   single line.
1104   Possible values:
1106   * ``SLS_None`` (in configuration: ``None``)
1107     Never merge lambdas into a single line.
1109   * ``SLS_Empty`` (in configuration: ``Empty``)
1110     Only merge empty lambdas.
1112     .. code-block:: c++
1114       auto lambda = [](int a) {}
1115       auto lambda2 = [](int a) {
1116           return a;
1117       };
1119   * ``SLS_Inline`` (in configuration: ``Inline``)
1120     Merge lambda into a single line if argument of a function.
1122     .. code-block:: c++
1124       auto lambda = [](int a) {
1125           return a;
1126       };
1127       sort(a.begin(), a.end(), ()[] { return x < y; })
1129   * ``SLS_All`` (in configuration: ``All``)
1130     Merge all lambdas fitting on a single line.
1132     .. code-block:: c++
1134       auto lambda = [](int a) {}
1135       auto lambda2 = [](int a) { return a; };
1139 **AllowShortLoopsOnASingleLine** (``Boolean``) :versionbadge:`clang-format 3.7`
1140   If ``true``, ``while (true) continue;`` can be put on a single
1141   line.
1143 **AlwaysBreakAfterDefinitionReturnType** (``DefinitionReturnTypeBreakingStyle``) :versionbadge:`clang-format 3.7`
1144   The function definition return type breaking style to use.  This
1145   option is **deprecated** and is retained for backwards compatibility.
1147   Possible values:
1149   * ``DRTBS_None`` (in configuration: ``None``)
1150     Break after return type automatically.
1151     ``PenaltyReturnTypeOnItsOwnLine`` is taken into account.
1153   * ``DRTBS_All`` (in configuration: ``All``)
1154     Always break after the return type.
1156   * ``DRTBS_TopLevel`` (in configuration: ``TopLevel``)
1157     Always break after the return types of top-level functions.
1161 **AlwaysBreakAfterReturnType** (``ReturnTypeBreakingStyle``) :versionbadge:`clang-format 3.8`
1162   The function declaration return type breaking style to use.
1164   Possible values:
1166   * ``RTBS_None`` (in configuration: ``None``)
1167     Break after return type automatically.
1168     ``PenaltyReturnTypeOnItsOwnLine`` is taken into account.
1170     .. code-block:: c++
1172       class A {
1173         int f() { return 0; };
1174       };
1175       int f();
1176       int f() { return 1; }
1178   * ``RTBS_All`` (in configuration: ``All``)
1179     Always break after the return type.
1181     .. code-block:: c++
1183       class A {
1184         int
1185         f() {
1186           return 0;
1187         };
1188       };
1189       int
1190       f();
1191       int
1192       f() {
1193         return 1;
1194       }
1196   * ``RTBS_TopLevel`` (in configuration: ``TopLevel``)
1197     Always break after the return types of top-level functions.
1199     .. code-block:: c++
1201       class A {
1202         int f() { return 0; };
1203       };
1204       int
1205       f();
1206       int
1207       f() {
1208         return 1;
1209       }
1211   * ``RTBS_AllDefinitions`` (in configuration: ``AllDefinitions``)
1212     Always break after the return type of function definitions.
1214     .. code-block:: c++
1216       class A {
1217         int
1218         f() {
1219           return 0;
1220         };
1221       };
1222       int f();
1223       int
1224       f() {
1225         return 1;
1226       }
1228   * ``RTBS_TopLevelDefinitions`` (in configuration: ``TopLevelDefinitions``)
1229     Always break after the return type of top-level definitions.
1231     .. code-block:: c++
1233       class A {
1234         int f() { return 0; };
1235       };
1236       int f();
1237       int
1238       f() {
1239         return 1;
1240       }
1244 **AlwaysBreakBeforeMultilineStrings** (``Boolean``) :versionbadge:`clang-format 3.4`
1245   If ``true``, always break before multiline string literals.
1247   This flag is mean to make cases where there are multiple multiline strings
1248   in a file look more consistent. Thus, it will only take effect if wrapping
1249   the string at that point leads to it being indented
1250   ``ContinuationIndentWidth`` spaces from the start of the line.
1252   .. code-block:: c++
1254      true:                                  false:
1255      aaaa =                         vs.     aaaa = "bbbb"
1256          "bbbb"                                    "cccc";
1257          "cccc";
1259 **AlwaysBreakTemplateDeclarations** (``BreakTemplateDeclarationsStyle``) :versionbadge:`clang-format 3.4`
1260   The template declaration breaking style to use.
1262   Possible values:
1264   * ``BTDS_No`` (in configuration: ``No``)
1265     Do not force break before declaration.
1266     ``PenaltyBreakTemplateDeclaration`` is taken into account.
1268     .. code-block:: c++
1270        template <typename T> T foo() {
1271        }
1272        template <typename T> T foo(int aaaaaaaaaaaaaaaaaaaaa,
1273                                    int bbbbbbbbbbbbbbbbbbbbb) {
1274        }
1276   * ``BTDS_MultiLine`` (in configuration: ``MultiLine``)
1277     Force break after template declaration only when the following
1278     declaration spans multiple lines.
1280     .. code-block:: c++
1282        template <typename T> T foo() {
1283        }
1284        template <typename T>
1285        T foo(int aaaaaaaaaaaaaaaaaaaaa,
1286              int bbbbbbbbbbbbbbbbbbbbb) {
1287        }
1289   * ``BTDS_Yes`` (in configuration: ``Yes``)
1290     Always break after template declaration.
1292     .. code-block:: c++
1294        template <typename T>
1295        T foo() {
1296        }
1297        template <typename T>
1298        T foo(int aaaaaaaaaaaaaaaaaaaaa,
1299              int bbbbbbbbbbbbbbbbbbbbb) {
1300        }
1304 **AttributeMacros** (``List of Strings``) :versionbadge:`clang-format 12`
1305   A vector of strings that should be interpreted as attributes/qualifiers
1306   instead of identifiers. This can be useful for language extensions or
1307   static analyzer annotations.
1309   For example:
1311   .. code-block:: c++
1313     x = (char *__capability)&y;
1314     int function(void) __ununsed;
1315     void only_writes_to_buffer(char *__output buffer);
1317   In the .clang-format configuration file, this can be configured like:
1319   .. code-block:: yaml
1321     AttributeMacros: ['__capability', '__output', '__ununsed']
1323 **BinPackArguments** (``Boolean``) :versionbadge:`clang-format 3.7`
1324   If ``false``, a function call's arguments will either be all on the
1325   same line or will have one line each.
1327   .. code-block:: c++
1329     true:
1330     void f() {
1331       f(aaaaaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaaaaaa,
1332         aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa);
1333     }
1335     false:
1336     void f() {
1337       f(aaaaaaaaaaaaaaaaaaaa,
1338         aaaaaaaaaaaaaaaaaaaa,
1339         aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa);
1340     }
1342 **BinPackParameters** (``Boolean``) :versionbadge:`clang-format 3.7`
1343   If ``false``, a function declaration's or function definition's
1344   parameters will either all be on the same line or will have one line each.
1346   .. code-block:: c++
1348     true:
1349     void f(int aaaaaaaaaaaaaaaaaaaa, int aaaaaaaaaaaaaaaaaaaa,
1350            int aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) {}
1352     false:
1353     void f(int aaaaaaaaaaaaaaaaaaaa,
1354            int aaaaaaaaaaaaaaaaaaaa,
1355            int aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) {}
1357 **BitFieldColonSpacing** (``BitFieldColonSpacingStyle``) :versionbadge:`clang-format 12`
1358   The BitFieldColonSpacingStyle to use for bitfields.
1360   Possible values:
1362   * ``BFCS_Both`` (in configuration: ``Both``)
1363     Add one space on each side of the ``:``
1365     .. code-block:: c++
1367       unsigned bf : 2;
1369   * ``BFCS_None`` (in configuration: ``None``)
1370     Add no space around the ``:`` (except when needed for
1371     ``AlignConsecutiveBitFields``).
1373     .. code-block:: c++
1375       unsigned bf:2;
1377   * ``BFCS_Before`` (in configuration: ``Before``)
1378     Add space before the ``:`` only
1380     .. code-block:: c++
1382       unsigned bf :2;
1384   * ``BFCS_After`` (in configuration: ``After``)
1385     Add space after the ``:`` only (space may be added before if
1386     needed for ``AlignConsecutiveBitFields``).
1388     .. code-block:: c++
1390       unsigned bf: 2;
1394 **BraceWrapping** (``BraceWrappingFlags``) :versionbadge:`clang-format 3.8`
1395   Control of individual brace wrapping cases.
1397   If ``BreakBeforeBraces`` is set to ``BS_Custom``, use this to specify how
1398   each individual brace case should be handled. Otherwise, this is ignored.
1400   .. code-block:: yaml
1402     # Example of usage:
1403     BreakBeforeBraces: Custom
1404     BraceWrapping:
1405       AfterEnum: true
1406       AfterStruct: false
1407       SplitEmptyFunction: false
1409   Nested configuration flags:
1411   Precise control over the wrapping of braces.
1413   .. code-block:: c++
1415     # Should be declared this way:
1416     BreakBeforeBraces: Custom
1417     BraceWrapping:
1418         AfterClass: true
1420   * ``bool AfterCaseLabel`` Wrap case labels.
1422     .. code-block:: c++
1424       false:                                true:
1425       switch (foo) {                vs.     switch (foo) {
1426         case 1: {                             case 1:
1427           bar();                              {
1428           break;                                bar();
1429         }                                       break;
1430         default: {                            }
1431           plop();                             default:
1432         }                                     {
1433       }                                         plop();
1434                                               }
1435                                             }
1437   * ``bool AfterClass`` Wrap class definitions.
1439     .. code-block:: c++
1441       true:
1442       class foo {};
1444       false:
1445       class foo
1446       {};
1448   * ``BraceWrappingAfterControlStatementStyle AfterControlStatement``
1449     Wrap control statements (``if``/``for``/``while``/``switch``/..).
1451     Possible values:
1453     * ``BWACS_Never`` (in configuration: ``Never``)
1454       Never wrap braces after a control statement.
1456       .. code-block:: c++
1458         if (foo()) {
1459         } else {
1460         }
1461         for (int i = 0; i < 10; ++i) {
1462         }
1464     * ``BWACS_MultiLine`` (in configuration: ``MultiLine``)
1465       Only wrap braces after a multi-line control statement.
1467       .. code-block:: c++
1469         if (foo && bar &&
1470             baz)
1471         {
1472           quux();
1473         }
1474         while (foo || bar) {
1475         }
1477     * ``BWACS_Always`` (in configuration: ``Always``)
1478       Always wrap braces after a control statement.
1480       .. code-block:: c++
1482         if (foo())
1483         {
1484         } else
1485         {}
1486         for (int i = 0; i < 10; ++i)
1487         {}
1490   * ``bool AfterEnum`` Wrap enum definitions.
1492     .. code-block:: c++
1494       true:
1495       enum X : int
1496       {
1497         B
1498       };
1500       false:
1501       enum X : int { B };
1503   * ``bool AfterFunction`` Wrap function definitions.
1505     .. code-block:: c++
1507       true:
1508       void foo()
1509       {
1510         bar();
1511         bar2();
1512       }
1514       false:
1515       void foo() {
1516         bar();
1517         bar2();
1518       }
1520   * ``bool AfterNamespace`` Wrap namespace definitions.
1522     .. code-block:: c++
1524       true:
1525       namespace
1526       {
1527       int foo();
1528       int bar();
1529       }
1531       false:
1532       namespace {
1533       int foo();
1534       int bar();
1535       }
1537   * ``bool AfterObjCDeclaration`` Wrap ObjC definitions (interfaces, implementations...).
1538     @autoreleasepool and @synchronized blocks are wrapped
1539     according to `AfterControlStatement` flag.
1541   * ``bool AfterStruct`` Wrap struct definitions.
1543     .. code-block:: c++
1545       true:
1546       struct foo
1547       {
1548         int x;
1549       };
1551       false:
1552       struct foo {
1553         int x;
1554       };
1556   * ``bool AfterUnion`` Wrap union definitions.
1558     .. code-block:: c++
1560       true:
1561       union foo
1562       {
1563         int x;
1564       }
1566       false:
1567       union foo {
1568         int x;
1569       }
1571   * ``bool AfterExternBlock`` Wrap extern blocks.
1573     .. code-block:: c++
1575       true:
1576       extern "C"
1577       {
1578         int foo();
1579       }
1581       false:
1582       extern "C" {
1583       int foo();
1584       }
1586   * ``bool BeforeCatch`` Wrap before ``catch``.
1588     .. code-block:: c++
1590       true:
1591       try {
1592         foo();
1593       }
1594       catch () {
1595       }
1597       false:
1598       try {
1599         foo();
1600       } catch () {
1601       }
1603   * ``bool BeforeElse`` Wrap before ``else``.
1605     .. code-block:: c++
1607       true:
1608       if (foo()) {
1609       }
1610       else {
1611       }
1613       false:
1614       if (foo()) {
1615       } else {
1616       }
1618   * ``bool BeforeLambdaBody`` Wrap lambda block.
1620     .. code-block:: c++
1622       true:
1623       connect(
1624         []()
1625         {
1626           foo();
1627           bar();
1628         });
1630       false:
1631       connect([]() {
1632         foo();
1633         bar();
1634       });
1636   * ``bool BeforeWhile`` Wrap before ``while``.
1638     .. code-block:: c++
1640       true:
1641       do {
1642         foo();
1643       }
1644       while (1);
1646       false:
1647       do {
1648         foo();
1649       } while (1);
1651   * ``bool IndentBraces`` Indent the wrapped braces themselves.
1653   * ``bool SplitEmptyFunction`` If ``false``, empty function body can be put on a single line.
1654     This option is used only if the opening brace of the function has
1655     already been wrapped, i.e. the `AfterFunction` brace wrapping mode is
1656     set, and the function could/should not be put on a single line (as per
1657     `AllowShortFunctionsOnASingleLine` and constructor formatting options).
1659     .. code-block:: c++
1661       false:          true:
1662       int f()   vs.   int f()
1663       {}              {
1664                       }
1666   * ``bool SplitEmptyRecord`` If ``false``, empty record (e.g. class, struct or union) body
1667     can be put on a single line. This option is used only if the opening
1668     brace of the record has already been wrapped, i.e. the `AfterClass`
1669     (for classes) brace wrapping mode is set.
1671     .. code-block:: c++
1673       false:           true:
1674       class Foo   vs.  class Foo
1675       {}               {
1676                        }
1678   * ``bool SplitEmptyNamespace`` If ``false``, empty namespace body can be put on a single line.
1679     This option is used only if the opening brace of the namespace has
1680     already been wrapped, i.e. the `AfterNamespace` brace wrapping mode is
1681     set.
1683     .. code-block:: c++
1685       false:               true:
1686       namespace Foo   vs.  namespace Foo
1687       {}                   {
1688                            }
1691 **BreakAfterJavaFieldAnnotations** (``Boolean``) :versionbadge:`clang-format 3.8`
1692   Break after each annotation on a field in Java files.
1694   .. code-block:: java
1696      true:                                  false:
1697      @Partial                       vs.     @Partial @Mock DataLoad loader;
1698      @Mock
1699      DataLoad loader;
1701 **BreakBeforeBinaryOperators** (``BinaryOperatorStyle``) :versionbadge:`clang-format 3.6`
1702   The way to wrap binary operators.
1704   Possible values:
1706   * ``BOS_None`` (in configuration: ``None``)
1707     Break after operators.
1709     .. code-block:: c++
1711        LooooooooooongType loooooooooooooooooooooongVariable =
1712            someLooooooooooooooooongFunction();
1714        bool value = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +
1715                             aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ==
1716                         aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa &&
1717                     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa >
1718                         ccccccccccccccccccccccccccccccccccccccccc;
1720   * ``BOS_NonAssignment`` (in configuration: ``NonAssignment``)
1721     Break before operators that aren't assignments.
1723     .. code-block:: c++
1725        LooooooooooongType loooooooooooooooooooooongVariable =
1726            someLooooooooooooooooongFunction();
1728        bool value = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
1729                             + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
1730                         == aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
1731                     && aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
1732                            > ccccccccccccccccccccccccccccccccccccccccc;
1734   * ``BOS_All`` (in configuration: ``All``)
1735     Break before operators.
1737     .. code-block:: c++
1739        LooooooooooongType loooooooooooooooooooooongVariable
1740            = someLooooooooooooooooongFunction();
1742        bool value = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
1743                             + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
1744                         == aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
1745                     && aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
1746                            > ccccccccccccccccccccccccccccccccccccccccc;
1750 **BreakBeforeBraces** (``BraceBreakingStyle``) :versionbadge:`clang-format 3.7`
1751   The brace breaking style to use.
1753   Possible values:
1755   * ``BS_Attach`` (in configuration: ``Attach``)
1756     Always attach braces to surrounding context.
1758     .. code-block:: c++
1760       namespace N {
1761       enum E {
1762         E1,
1763         E2,
1764       };
1766       class C {
1767       public:
1768         C();
1769       };
1771       bool baz(int i) {
1772         try {
1773           do {
1774             switch (i) {
1775             case 1: {
1776               foobar();
1777               break;
1778             }
1779             default: {
1780               break;
1781             }
1782             }
1783           } while (--i);
1784           return true;
1785         } catch (...) {
1786           handleError();
1787           return false;
1788         }
1789       }
1791       void foo(bool b) {
1792         if (b) {
1793           baz(2);
1794         } else {
1795           baz(5);
1796         }
1797       }
1799       void bar() { foo(true); }
1800       } // namespace N
1802   * ``BS_Linux`` (in configuration: ``Linux``)
1803     Like ``Attach``, but break before braces on function, namespace and
1804     class definitions.
1806     .. code-block:: c++
1808       namespace N
1809       {
1810       enum E {
1811         E1,
1812         E2,
1813       };
1815       class C
1816       {
1817       public:
1818         C();
1819       };
1821       bool baz(int i)
1822       {
1823         try {
1824           do {
1825             switch (i) {
1826             case 1: {
1827               foobar();
1828               break;
1829             }
1830             default: {
1831               break;
1832             }
1833             }
1834           } while (--i);
1835           return true;
1836         } catch (...) {
1837           handleError();
1838           return false;
1839         }
1840       }
1842       void foo(bool b)
1843       {
1844         if (b) {
1845           baz(2);
1846         } else {
1847           baz(5);
1848         }
1849       }
1851       void bar() { foo(true); }
1852       } // namespace N
1854   * ``BS_Mozilla`` (in configuration: ``Mozilla``)
1855     Like ``Attach``, but break before braces on enum, function, and record
1856     definitions.
1858     .. code-block:: c++
1860       namespace N {
1861       enum E
1862       {
1863         E1,
1864         E2,
1865       };
1867       class C
1868       {
1869       public:
1870         C();
1871       };
1873       bool baz(int i)
1874       {
1875         try {
1876           do {
1877             switch (i) {
1878             case 1: {
1879               foobar();
1880               break;
1881             }
1882             default: {
1883               break;
1884             }
1885             }
1886           } while (--i);
1887           return true;
1888         } catch (...) {
1889           handleError();
1890           return false;
1891         }
1892       }
1894       void foo(bool b)
1895       {
1896         if (b) {
1897           baz(2);
1898         } else {
1899           baz(5);
1900         }
1901       }
1903       void bar() { foo(true); }
1904       } // namespace N
1906   * ``BS_Stroustrup`` (in configuration: ``Stroustrup``)
1907     Like ``Attach``, but break before function definitions, ``catch``, and
1908     ``else``.
1910     .. code-block:: c++
1912       namespace N {
1913       enum E {
1914         E1,
1915         E2,
1916       };
1918       class C {
1919       public:
1920         C();
1921       };
1923       bool baz(int i)
1924       {
1925         try {
1926           do {
1927             switch (i) {
1928             case 1: {
1929               foobar();
1930               break;
1931             }
1932             default: {
1933               break;
1934             }
1935             }
1936           } while (--i);
1937           return true;
1938         }
1939         catch (...) {
1940           handleError();
1941           return false;
1942         }
1943       }
1945       void foo(bool b)
1946       {
1947         if (b) {
1948           baz(2);
1949         }
1950         else {
1951           baz(5);
1952         }
1953       }
1955       void bar() { foo(true); }
1956       } // namespace N
1958   * ``BS_Allman`` (in configuration: ``Allman``)
1959     Always break before braces.
1961     .. code-block:: c++
1963       namespace N
1964       {
1965       enum E
1966       {
1967         E1,
1968         E2,
1969       };
1971       class C
1972       {
1973       public:
1974         C();
1975       };
1977       bool baz(int i)
1978       {
1979         try
1980         {
1981           do
1982           {
1983             switch (i)
1984             {
1985             case 1:
1986             {
1987               foobar();
1988               break;
1989             }
1990             default:
1991             {
1992               break;
1993             }
1994             }
1995           } while (--i);
1996           return true;
1997         }
1998         catch (...)
1999         {
2000           handleError();
2001           return false;
2002         }
2003       }
2005       void foo(bool b)
2006       {
2007         if (b)
2008         {
2009           baz(2);
2010         }
2011         else
2012         {
2013           baz(5);
2014         }
2015       }
2017       void bar() { foo(true); }
2018       } // namespace N
2020   * ``BS_Whitesmiths`` (in configuration: ``Whitesmiths``)
2021     Like ``Allman`` but always indent braces and line up code with braces.
2023     .. code-block:: c++
2025       namespace N
2026         {
2027       enum E
2028         {
2029         E1,
2030         E2,
2031         };
2033       class C
2034         {
2035       public:
2036         C();
2037         };
2039       bool baz(int i)
2040         {
2041         try
2042           {
2043           do
2044             {
2045             switch (i)
2046               {
2047               case 1:
2048               {
2049               foobar();
2050               break;
2051               }
2052               default:
2053               {
2054               break;
2055               }
2056               }
2057             } while (--i);
2058           return true;
2059           }
2060         catch (...)
2061           {
2062           handleError();
2063           return false;
2064           }
2065         }
2067       void foo(bool b)
2068         {
2069         if (b)
2070           {
2071           baz(2);
2072           }
2073         else
2074           {
2075           baz(5);
2076           }
2077         }
2079       void bar() { foo(true); }
2080         } // namespace N
2082   * ``BS_GNU`` (in configuration: ``GNU``)
2083     Always break before braces and add an extra level of indentation to
2084     braces of control statements, not to those of class, function
2085     or other definitions.
2087     .. code-block:: c++
2089       namespace N
2090       {
2091       enum E
2092       {
2093         E1,
2094         E2,
2095       };
2097       class C
2098       {
2099       public:
2100         C();
2101       };
2103       bool baz(int i)
2104       {
2105         try
2106           {
2107             do
2108               {
2109                 switch (i)
2110                   {
2111                   case 1:
2112                     {
2113                       foobar();
2114                       break;
2115                     }
2116                   default:
2117                     {
2118                       break;
2119                     }
2120                   }
2121               }
2122             while (--i);
2123             return true;
2124           }
2125         catch (...)
2126           {
2127             handleError();
2128             return false;
2129           }
2130       }
2132       void foo(bool b)
2133       {
2134         if (b)
2135           {
2136             baz(2);
2137           }
2138         else
2139           {
2140             baz(5);
2141           }
2142       }
2144       void bar() { foo(true); }
2145       } // namespace N
2147   * ``BS_WebKit`` (in configuration: ``WebKit``)
2148     Like ``Attach``, but break before functions.
2150     .. code-block:: c++
2152       namespace N {
2153       enum E {
2154         E1,
2155         E2,
2156       };
2158       class C {
2159       public:
2160         C();
2161       };
2163       bool baz(int i)
2164       {
2165         try {
2166           do {
2167             switch (i) {
2168             case 1: {
2169               foobar();
2170               break;
2171             }
2172             default: {
2173               break;
2174             }
2175             }
2176           } while (--i);
2177           return true;
2178         } catch (...) {
2179           handleError();
2180           return false;
2181         }
2182       }
2184       void foo(bool b)
2185       {
2186         if (b) {
2187           baz(2);
2188         } else {
2189           baz(5);
2190         }
2191       }
2193       void bar() { foo(true); }
2194       } // namespace N
2196   * ``BS_Custom`` (in configuration: ``Custom``)
2197     Configure each individual brace in `BraceWrapping`.
2201 **BreakBeforeConceptDeclarations** (``BreakBeforeConceptDeclarationsStyle``) :versionbadge:`clang-format 12`
2202   The concept declaration style to use.
2204   Possible values:
2206   * ``BBCDS_Never`` (in configuration: ``Never``)
2207     Keep the template declaration line together with ``concept``.
2209     .. code-block:: c++
2211       template <typename T> concept C = ...;
2213   * ``BBCDS_Allowed`` (in configuration: ``Allowed``)
2214     Breaking between template declaration and ``concept`` is allowed. The
2215     actual behavior depends on the content and line breaking rules and
2216     penalities.
2218   * ``BBCDS_Always`` (in configuration: ``Always``)
2219     Always break before ``concept``, putting it in the line after the
2220     template declaration.
2222     .. code-block:: c++
2224       template <typename T>
2225       concept C = ...;
2229 **BreakBeforeTernaryOperators** (``Boolean``) :versionbadge:`clang-format 3.7`
2230   If ``true``, ternary operators will be placed after line breaks.
2232   .. code-block:: c++
2234      true:
2235      veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongDescription
2236          ? firstValue
2237          : SecondValueVeryVeryVeryVeryLong;
2239      false:
2240      veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongDescription ?
2241          firstValue :
2242          SecondValueVeryVeryVeryVeryLong;
2244 **BreakConstructorInitializers** (``BreakConstructorInitializersStyle``) :versionbadge:`clang-format 5`
2245   The break constructor initializers style to use.
2247   Possible values:
2249   * ``BCIS_BeforeColon`` (in configuration: ``BeforeColon``)
2250     Break constructor initializers before the colon and after the commas.
2252     .. code-block:: c++
2254        Constructor()
2255            : initializer1(),
2256              initializer2()
2258   * ``BCIS_BeforeComma`` (in configuration: ``BeforeComma``)
2259     Break constructor initializers before the colon and commas, and align
2260     the commas with the colon.
2262     .. code-block:: c++
2264        Constructor()
2265            : initializer1()
2266            , initializer2()
2268   * ``BCIS_AfterColon`` (in configuration: ``AfterColon``)
2269     Break constructor initializers after the colon and commas.
2271     .. code-block:: c++
2273        Constructor() :
2274            initializer1(),
2275            initializer2()
2279 **BreakInheritanceList** (``BreakInheritanceListStyle``) :versionbadge:`clang-format 7`
2280   The inheritance list style to use.
2282   Possible values:
2284   * ``BILS_BeforeColon`` (in configuration: ``BeforeColon``)
2285     Break inheritance list before the colon and after the commas.
2287     .. code-block:: c++
2289        class Foo
2290            : Base1,
2291              Base2
2292        {};
2294   * ``BILS_BeforeComma`` (in configuration: ``BeforeComma``)
2295     Break inheritance list before the colon and commas, and align
2296     the commas with the colon.
2298     .. code-block:: c++
2300        class Foo
2301            : Base1
2302            , Base2
2303        {};
2305   * ``BILS_AfterColon`` (in configuration: ``AfterColon``)
2306     Break inheritance list after the colon and commas.
2308     .. code-block:: c++
2310        class Foo :
2311            Base1,
2312            Base2
2313        {};
2315   * ``BILS_AfterComma`` (in configuration: ``AfterComma``)
2316     Break inheritance list only after the commas.
2318     .. code-block:: c++
2320        class Foo : Base1,
2321                    Base2
2322        {};
2326 **BreakStringLiterals** (``Boolean``) :versionbadge:`clang-format 3.9`
2327   Allow breaking string literals when formatting.
2329   .. code-block:: c++
2331      true:
2332      const char* x = "veryVeryVeryVeryVeryVe"
2333                      "ryVeryVeryVeryVeryVery"
2334                      "VeryLongString";
2336      false:
2337      const char* x =
2338        "veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongString";
2340 **ColumnLimit** (``Unsigned``) :versionbadge:`clang-format 3.7`
2341   The column limit.
2343   A column limit of ``0`` means that there is no column limit. In this case,
2344   clang-format will respect the input's line breaking decisions within
2345   statements unless they contradict other rules.
2347 **CommentPragmas** (``String``) :versionbadge:`clang-format 3.7`
2348   A regular expression that describes comments with special meaning,
2349   which should not be split into lines or otherwise changed.
2351   .. code-block:: c++
2353      // CommentPragmas: '^ FOOBAR pragma:'
2354      // Will leave the following line unaffected
2355      #include <vector> // FOOBAR pragma: keep
2357 **CompactNamespaces** (``Boolean``) :versionbadge:`clang-format 5`
2358   If ``true``, consecutive namespace declarations will be on the same
2359   line. If ``false``, each namespace is declared on a new line.
2361   .. code-block:: c++
2363     true:
2364     namespace Foo { namespace Bar {
2365     }}
2367     false:
2368     namespace Foo {
2369     namespace Bar {
2370     }
2371     }
2373   If it does not fit on a single line, the overflowing namespaces get
2374   wrapped:
2376   .. code-block:: c++
2378     namespace Foo { namespace Bar {
2379     namespace Extra {
2380     }}}
2382 **ConstructorInitializerAllOnOneLineOrOnePerLine** (``Boolean``) :versionbadge:`clang-format 3.7`
2383   This option is **deprecated**. See ``CurrentLine`` of
2384   ``PackConstructorInitializers``.
2386 **ConstructorInitializerIndentWidth** (``Unsigned``) :versionbadge:`clang-format 3.7`
2387   The number of characters to use for indentation of constructor
2388   initializer lists as well as inheritance lists.
2390 **ContinuationIndentWidth** (``Unsigned``) :versionbadge:`clang-format 3.7`
2391   Indent width for line continuations.
2393   .. code-block:: c++
2395      ContinuationIndentWidth: 2
2397      int i =         //  VeryVeryVeryVeryVeryLongComment
2398        longFunction( // Again a long comment
2399          arg);
2401 **Cpp11BracedListStyle** (``Boolean``) :versionbadge:`clang-format 3.4`
2402   If ``true``, format braced lists as best suited for C++11 braced
2403   lists.
2405   Important differences:
2406   - No spaces inside the braced list.
2407   - No line break before the closing brace.
2408   - Indentation with the continuation indent, not with the block indent.
2410   Fundamentally, C++11 braced lists are formatted exactly like function
2411   calls would be formatted in their place. If the braced list follows a name
2412   (e.g. a type or variable name), clang-format formats as if the ``{}`` were
2413   the parentheses of a function call with that name. If there is no name,
2414   a zero-length name is assumed.
2416   .. code-block:: c++
2418      true:                                  false:
2419      vector<int> x{1, 2, 3, 4};     vs.     vector<int> x{ 1, 2, 3, 4 };
2420      vector<T> x{{}, {}, {}, {}};           vector<T> x{ {}, {}, {}, {} };
2421      f(MyMap[{composite, key}]);            f(MyMap[{ composite, key }]);
2422      new int[3]{1, 2, 3};                   new int[3]{ 1, 2, 3 };
2424 **DeriveLineEnding** (``Boolean``) :versionbadge:`clang-format 10`
2425   Analyze the formatted file for the most used line ending (``\r\n``
2426   or ``\n``). ``UseCRLF`` is only used as a fallback if none can be derived.
2428 **DerivePointerAlignment** (``Boolean``) :versionbadge:`clang-format 3.7`
2429   If ``true``, analyze the formatted file for the most common
2430   alignment of ``&`` and ``*``.
2431   Pointer and reference alignment styles are going to be updated according
2432   to the preferences found in the file.
2433   ``PointerAlignment`` is then used only as fallback.
2435 **DisableFormat** (``Boolean``) :versionbadge:`clang-format 3.7`
2436   Disables formatting completely.
2438 **EmptyLineAfterAccessModifier** (``EmptyLineAfterAccessModifierStyle``) :versionbadge:`clang-format 13`
2439   Defines when to put an empty line after access modifiers.
2440   ``EmptyLineBeforeAccessModifier`` configuration handles the number of
2441   empty lines between two access modifiers.
2443   Possible values:
2445   * ``ELAAMS_Never`` (in configuration: ``Never``)
2446     Remove all empty lines after access modifiers.
2448     .. code-block:: c++
2450       struct foo {
2451       private:
2452         int i;
2453       protected:
2454         int j;
2455         /* comment */
2456       public:
2457         foo() {}
2458       private:
2459       protected:
2460       };
2462   * ``ELAAMS_Leave`` (in configuration: ``Leave``)
2463     Keep existing empty lines after access modifiers.
2464     MaxEmptyLinesToKeep is applied instead.
2466   * ``ELAAMS_Always`` (in configuration: ``Always``)
2467     Always add empty line after access modifiers if there are none.
2468     MaxEmptyLinesToKeep is applied also.
2470     .. code-block:: c++
2472       struct foo {
2473       private:
2475         int i;
2476       protected:
2478         int j;
2479         /* comment */
2480       public:
2482         foo() {}
2483       private:
2485       protected:
2487       };
2491 **EmptyLineBeforeAccessModifier** (``EmptyLineBeforeAccessModifierStyle``) :versionbadge:`clang-format 12`
2492   Defines in which cases to put empty line before access modifiers.
2494   Possible values:
2496   * ``ELBAMS_Never`` (in configuration: ``Never``)
2497     Remove all empty lines before access modifiers.
2499     .. code-block:: c++
2501       struct foo {
2502       private:
2503         int i;
2504       protected:
2505         int j;
2506         /* comment */
2507       public:
2508         foo() {}
2509       private:
2510       protected:
2511       };
2513   * ``ELBAMS_Leave`` (in configuration: ``Leave``)
2514     Keep existing empty lines before access modifiers.
2516   * ``ELBAMS_LogicalBlock`` (in configuration: ``LogicalBlock``)
2517     Add empty line only when access modifier starts a new logical block.
2518     Logical block is a group of one or more member fields or functions.
2520     .. code-block:: c++
2522       struct foo {
2523       private:
2524         int i;
2526       protected:
2527         int j;
2528         /* comment */
2529       public:
2530         foo() {}
2532       private:
2533       protected:
2534       };
2536   * ``ELBAMS_Always`` (in configuration: ``Always``)
2537     Always add empty line before access modifiers unless access modifier
2538     is at the start of struct or class definition.
2540     .. code-block:: c++
2542       struct foo {
2543       private:
2544         int i;
2546       protected:
2547         int j;
2548         /* comment */
2550       public:
2551         foo() {}
2553       private:
2555       protected:
2556       };
2560 **ExperimentalAutoDetectBinPacking** (``Boolean``) :versionbadge:`clang-format 3.7`
2561   If ``true``, clang-format detects whether function calls and
2562   definitions are formatted with one parameter per line.
2564   Each call can be bin-packed, one-per-line or inconclusive. If it is
2565   inconclusive, e.g. completely on one line, but a decision needs to be
2566   made, clang-format analyzes whether there are other bin-packed cases in
2567   the input file and act accordingly.
2569   NOTE: This is an experimental flag, that might go away or be renamed. Do
2570   not use this in config files, etc. Use at your own risk.
2572 **FixNamespaceComments** (``Boolean``) :versionbadge:`clang-format 5`
2573   If ``true``, clang-format adds missing namespace end comments for
2574   short namespaces and fixes invalid existing ones. Short ones are
2575   controlled by "ShortNamespaceLines".
2577   .. code-block:: c++
2579      true:                                  false:
2580      namespace a {                  vs.     namespace a {
2581      foo();                                 foo();
2582      bar();                                 bar();
2583      } // namespace a                       }
2585 **ForEachMacros** (``List of Strings``) :versionbadge:`clang-format 3.7`
2586   A vector of macros that should be interpreted as foreach loops
2587   instead of as function calls.
2589   These are expected to be macros of the form:
2591   .. code-block:: c++
2593     FOREACH(<variable-declaration>, ...)
2594       <loop-body>
2596   In the .clang-format configuration file, this can be configured like:
2598   .. code-block:: yaml
2600     ForEachMacros: ['RANGES_FOR', 'FOREACH']
2602   For example: BOOST_FOREACH.
2604 **IfMacros** (``List of Strings``) :versionbadge:`clang-format 13`
2605   A vector of macros that should be interpreted as conditionals
2606   instead of as function calls.
2608   These are expected to be macros of the form:
2610   .. code-block:: c++
2612     IF(...)
2613       <conditional-body>
2614     else IF(...)
2615       <conditional-body>
2617   In the .clang-format configuration file, this can be configured like:
2619   .. code-block:: yaml
2621     IfMacros: ['IF']
2623   For example: `KJ_IF_MAYBE
2624   <https://github.com/capnproto/capnproto/blob/master/kjdoc/tour.md#maybes>`_
2626 **IncludeBlocks** (``IncludeBlocksStyle``) :versionbadge:`clang-format 6`
2627   Dependent on the value, multiple ``#include`` blocks can be sorted
2628   as one and divided based on category.
2630   Possible values:
2632   * ``IBS_Preserve`` (in configuration: ``Preserve``)
2633     Sort each ``#include`` block separately.
2635     .. code-block:: c++
2637        #include "b.h"               into      #include "b.h"
2639        #include <lib/main.h>                  #include "a.h"
2640        #include "a.h"                         #include <lib/main.h>
2642   * ``IBS_Merge`` (in configuration: ``Merge``)
2643     Merge multiple ``#include`` blocks together and sort as one.
2645     .. code-block:: c++
2647        #include "b.h"               into      #include "a.h"
2648                                               #include "b.h"
2649        #include <lib/main.h>                  #include <lib/main.h>
2650        #include "a.h"
2652   * ``IBS_Regroup`` (in configuration: ``Regroup``)
2653     Merge multiple ``#include`` blocks together and sort as one.
2654     Then split into groups based on category priority. See
2655     ``IncludeCategories``.
2657     .. code-block:: c++
2659        #include "b.h"               into      #include "a.h"
2660                                               #include "b.h"
2661        #include <lib/main.h>
2662        #include "a.h"                         #include <lib/main.h>
2666 **IncludeCategories** (``List of IncludeCategories``) :versionbadge:`clang-format 3.8`
2667   Regular expressions denoting the different ``#include`` categories
2668   used for ordering ``#includes``.
2670   `POSIX extended
2671   <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html>`_
2672   regular expressions are supported.
2674   These regular expressions are matched against the filename of an include
2675   (including the <> or "") in order. The value belonging to the first
2676   matching regular expression is assigned and ``#includes`` are sorted first
2677   according to increasing category number and then alphabetically within
2678   each category.
2680   If none of the regular expressions match, INT_MAX is assigned as
2681   category. The main header for a source file automatically gets category 0.
2682   so that it is generally kept at the beginning of the ``#includes``
2683   (https://llvm.org/docs/CodingStandards.html#include-style). However, you
2684   can also assign negative priorities if you have certain headers that
2685   always need to be first.
2687   There is a third and optional field ``SortPriority`` which can used while
2688   ``IncludeBlocks = IBS_Regroup`` to define the priority in which
2689   ``#includes`` should be ordered. The value of ``Priority`` defines the
2690   order of ``#include blocks`` and also allows the grouping of ``#includes``
2691   of different priority. ``SortPriority`` is set to the value of
2692   ``Priority`` as default if it is not assigned.
2694   Each regular expression can be marked as case sensitive with the field
2695   ``CaseSensitive``, per default it is not.
2697   To configure this in the .clang-format file, use:
2699   .. code-block:: yaml
2701     IncludeCategories:
2702       - Regex:           '^"(llvm|llvm-c|clang|clang-c)/'
2703         Priority:        2
2704         SortPriority:    2
2705         CaseSensitive:   true
2706       - Regex:           '^((<|")(gtest|gmock|isl|json)/)'
2707         Priority:        3
2708       - Regex:           '<[[:alnum:].]+>'
2709         Priority:        4
2710       - Regex:           '.*'
2711         Priority:        1
2712         SortPriority:    0
2714 **IncludeIsMainRegex** (``String``) :versionbadge:`clang-format 3.9`
2715   Specify a regular expression of suffixes that are allowed in the
2716   file-to-main-include mapping.
2718   When guessing whether a #include is the "main" include (to assign
2719   category 0, see above), use this regex of allowed suffixes to the header
2720   stem. A partial match is done, so that:
2721   - "" means "arbitrary suffix"
2722   - "$" means "no suffix"
2724   For example, if configured to "(_test)?$", then a header a.h would be seen
2725   as the "main" include in both a.cc and a_test.cc.
2727 **IncludeIsMainSourceRegex** (``String``) :versionbadge:`clang-format 10`
2728   Specify a regular expression for files being formatted
2729   that are allowed to be considered "main" in the
2730   file-to-main-include mapping.
2732   By default, clang-format considers files as "main" only when they end
2733   with: ``.c``, ``.cc``, ``.cpp``, ``.c++``, ``.cxx``, ``.m`` or ``.mm``
2734   extensions.
2735   For these files a guessing of "main" include takes place
2736   (to assign category 0, see above). This config option allows for
2737   additional suffixes and extensions for files to be considered as "main".
2739   For example, if this option is configured to ``(Impl\.hpp)$``,
2740   then a file ``ClassImpl.hpp`` is considered "main" (in addition to
2741   ``Class.c``, ``Class.cc``, ``Class.cpp`` and so on) and "main
2742   include file" logic will be executed (with *IncludeIsMainRegex* setting
2743   also being respected in later phase). Without this option set,
2744   ``ClassImpl.hpp`` would not have the main include file put on top
2745   before any other include.
2747 **IndentAccessModifiers** (``Boolean``) :versionbadge:`clang-format 13`
2748   Specify whether access modifiers should have their own indentation level.
2750   When ``false``, access modifiers are indented (or outdented) relative to
2751   the record members, respecting the ``AccessModifierOffset``. Record
2752   members are indented one level below the record.
2753   When ``true``, access modifiers get their own indentation level. As a
2754   consequence, record members are always indented 2 levels below the record,
2755   regardless of the access modifier presence. Value of the
2756   ``AccessModifierOffset`` is ignored.
2758   .. code-block:: c++
2760      false:                                 true:
2761      class C {                      vs.     class C {
2762        class D {                                class D {
2763          void bar();                                void bar();
2764        protected:                                 protected:
2765          D();                                       D();
2766        };                                       };
2767      public:                                  public:
2768        C();                                     C();
2769      };                                     };
2770      void foo() {                           void foo() {
2771        return 1;                              return 1;
2772      }                                      }
2774 **IndentCaseBlocks** (``Boolean``) :versionbadge:`clang-format 11`
2775   Indent case label blocks one level from the case label.
2777   When ``false``, the block following the case label uses the same
2778   indentation level as for the case label, treating the case label the same
2779   as an if-statement.
2780   When ``true``, the block gets indented as a scope block.
2782   .. code-block:: c++
2784      false:                                 true:
2785      switch (fool) {                vs.     switch (fool) {
2786      case 1: {                              case 1:
2787        bar();                                 {
2788      } break;                                   bar();
2789      default: {                               }
2790        plop();                                break;
2791      }                                      default:
2792      }                                        {
2793                                                 plop();
2794                                               }
2795                                             }
2797 **IndentCaseLabels** (``Boolean``) :versionbadge:`clang-format 3.3`
2798   Indent case labels one level from the switch statement.
2800   When ``false``, use the same indentation level as for the switch
2801   statement. Switch statement body is always indented one level more than
2802   case labels (except the first block following the case label, which
2803   itself indents the code - unless IndentCaseBlocks is enabled).
2805   .. code-block:: c++
2807      false:                                 true:
2808      switch (fool) {                vs.     switch (fool) {
2809      case 1:                                  case 1:
2810        bar();                                   bar();
2811        break;                                   break;
2812      default:                                 default:
2813        plop();                                  plop();
2814      }                                      }
2816 **IndentExternBlock** (``IndentExternBlockStyle``) :versionbadge:`clang-format 11`
2817   IndentExternBlockStyle is the type of indenting of extern blocks.
2819   Possible values:
2821   * ``IEBS_AfterExternBlock`` (in configuration: ``AfterExternBlock``)
2822     Backwards compatible with AfterExternBlock's indenting.
2824     .. code-block:: c++
2826        IndentExternBlock: AfterExternBlock
2827        BraceWrapping.AfterExternBlock: true
2828        extern "C"
2829        {
2830            void foo();
2831        }
2834     .. code-block:: c++
2836        IndentExternBlock: AfterExternBlock
2837        BraceWrapping.AfterExternBlock: false
2838        extern "C" {
2839        void foo();
2840        }
2842   * ``IEBS_NoIndent`` (in configuration: ``NoIndent``)
2843     Does not indent extern blocks.
2845     .. code-block:: c++
2847         extern "C" {
2848         void foo();
2849         }
2851   * ``IEBS_Indent`` (in configuration: ``Indent``)
2852     Indents extern blocks.
2854     .. code-block:: c++
2856         extern "C" {
2857           void foo();
2858         }
2862 **IndentGotoLabels** (``Boolean``) :versionbadge:`clang-format 10`
2863   Indent goto labels.
2865   When ``false``, goto labels are flushed left.
2867   .. code-block:: c++
2869      true:                                  false:
2870      int f() {                      vs.     int f() {
2871        if (foo()) {                           if (foo()) {
2872        label1:                              label1:
2873          bar();                                 bar();
2874        }                                      }
2875      label2:                                label2:
2876        return 1;                              return 1;
2877      }                                      }
2879 **IndentPPDirectives** (``PPDirectiveIndentStyle``) :versionbadge:`clang-format 6`
2880   The preprocessor directive indenting style to use.
2882   Possible values:
2884   * ``PPDIS_None`` (in configuration: ``None``)
2885     Does not indent any directives.
2887     .. code-block:: c++
2889        #if FOO
2890        #if BAR
2891        #include <foo>
2892        #endif
2893        #endif
2895   * ``PPDIS_AfterHash`` (in configuration: ``AfterHash``)
2896     Indents directives after the hash.
2898     .. code-block:: c++
2900        #if FOO
2901        #  if BAR
2902        #    include <foo>
2903        #  endif
2904        #endif
2906   * ``PPDIS_BeforeHash`` (in configuration: ``BeforeHash``)
2907     Indents directives before the hash.
2909     .. code-block:: c++
2911        #if FOO
2912          #if BAR
2913            #include <foo>
2914          #endif
2915        #endif
2919 **IndentRequiresClause** (``Boolean``) :versionbadge:`clang-format 15`
2920   Indent the requires clause in a template. This only applies when
2921   ``RequiresClausePosition`` is ``OwnLine``, or ``WithFollowing``.
2923   In clang-format 12, 13 and 14 it was named ``IndentRequires``.
2925   .. code-block:: c++
2927      true:
2928      template <typename It>
2929        requires Iterator<It>
2930      void sort(It begin, It end) {
2931        //....
2932      }
2934      false:
2935      template <typename It>
2936      requires Iterator<It>
2937      void sort(It begin, It end) {
2938        //....
2939      }
2941 **IndentWidth** (``Unsigned``) :versionbadge:`clang-format 3.7`
2942   The number of columns to use for indentation.
2944   .. code-block:: c++
2946      IndentWidth: 3
2948      void f() {
2949         someFunction();
2950         if (true, false) {
2951            f();
2952         }
2953      }
2955 **IndentWrappedFunctionNames** (``Boolean``) :versionbadge:`clang-format 3.7`
2956   Indent if a function definition or declaration is wrapped after the
2957   type.
2959   .. code-block:: c++
2961      true:
2962      LoooooooooooooooooooooooooooooooooooooooongReturnType
2963          LoooooooooooooooooooooooooooooooongFunctionDeclaration();
2965      false:
2966      LoooooooooooooooooooooooooooooooooooooooongReturnType
2967      LoooooooooooooooooooooooooooooooongFunctionDeclaration();
2969 **InsertBraces** (``Boolean``) :versionbadge:`clang-format 15`
2970   Insert braces after control statements (``if``, ``else``, ``for``, ``do``,
2971   and ``while``) in C++ unless the control statements are inside macro
2972   definitions or the braces would enclose preprocessor directives.
2974   .. warning:: 
2976    Setting this option to `true` could lead to incorrect code formatting due
2977    to clang-format's lack of complete semantic information. As such, extra
2978    care should be taken to review code changes made by this option.
2980   .. code-block:: c++
2982     false:                                    true:
2984     if (isa<FunctionDecl>(D))        vs.      if (isa<FunctionDecl>(D)) {
2985       handleFunctionDecl(D);                    handleFunctionDecl(D);
2986     else if (isa<VarDecl>(D))                 } else if (isa<VarDecl>(D)) {
2987       handleVarDecl(D);                         handleVarDecl(D);
2988     else                                      } else {
2989       return;                                   return;
2990                                               }
2992     while (i--)                      vs.      while (i--) {
2993       for (auto *A : D.attrs())                 for (auto *A : D.attrs()) {
2994         handleAttr(A);                            handleAttr(A);
2995                                                 }
2996                                               }
2998     do                               vs.      do {
2999       --i;                                      --i;
3000     while (i);                                } while (i);
3002 **InsertTrailingCommas** (``TrailingCommaStyle``) :versionbadge:`clang-format 11`
3003   If set to ``TCS_Wrapped`` will insert trailing commas in container
3004   literals (arrays and objects) that wrap across multiple lines.
3005   It is currently only available for JavaScript
3006   and disabled by default ``TCS_None``.
3007   ``InsertTrailingCommas`` cannot be used together with ``BinPackArguments``
3008   as inserting the comma disables bin-packing.
3010   .. code-block:: c++
3012     TSC_Wrapped:
3013     const someArray = [
3014     aaaaaaaaaaaaaaaaaaaaaaaaaa,
3015     aaaaaaaaaaaaaaaaaaaaaaaaaa,
3016     aaaaaaaaaaaaaaaaaaaaaaaaaa,
3017     //                        ^ inserted
3018     ]
3020   Possible values:
3022   * ``TCS_None`` (in configuration: ``None``)
3023     Do not insert trailing commas.
3025   * ``TCS_Wrapped`` (in configuration: ``Wrapped``)
3026     Insert trailing commas in container literals that were wrapped over
3027     multiple lines. Note that this is conceptually incompatible with
3028     bin-packing, because the trailing comma is used as an indicator
3029     that a container should be formatted one-per-line (i.e. not bin-packed).
3030     So inserting a trailing comma counteracts bin-packing.
3034 **JavaImportGroups** (``List of Strings``) :versionbadge:`clang-format 8`
3035   A vector of prefixes ordered by the desired groups for Java imports.
3037   One group's prefix can be a subset of another - the longest prefix is
3038   always matched. Within a group, the imports are ordered lexicographically.
3039   Static imports are grouped separately and follow the same group rules.
3040   By default, static imports are placed before non-static imports,
3041   but this behavior is changed by another option,
3042   ``SortJavaStaticImport``.
3044   In the .clang-format configuration file, this can be configured like
3045   in the following yaml example. This will result in imports being
3046   formatted as in the Java example below.
3048   .. code-block:: yaml
3050     JavaImportGroups: ['com.example', 'com', 'org']
3053   .. code-block:: java
3055      import static com.example.function1;
3057      import static com.test.function2;
3059      import static org.example.function3;
3061      import com.example.ClassA;
3062      import com.example.Test;
3063      import com.example.a.ClassB;
3065      import com.test.ClassC;
3067      import org.example.ClassD;
3069 **JavaScriptQuotes** (``JavaScriptQuoteStyle``) :versionbadge:`clang-format 3.9`
3070   The JavaScriptQuoteStyle to use for JavaScript strings.
3072   Possible values:
3074   * ``JSQS_Leave`` (in configuration: ``Leave``)
3075     Leave string quotes as they are.
3077     .. code-block:: js
3079        string1 = "foo";
3080        string2 = 'bar';
3082   * ``JSQS_Single`` (in configuration: ``Single``)
3083     Always use single quotes.
3085     .. code-block:: js
3087        string1 = 'foo';
3088        string2 = 'bar';
3090   * ``JSQS_Double`` (in configuration: ``Double``)
3091     Always use double quotes.
3093     .. code-block:: js
3095        string1 = "foo";
3096        string2 = "bar";
3100 **JavaScriptWrapImports** (``Boolean``) :versionbadge:`clang-format 3.9`
3101   Whether to wrap JavaScript import/export statements.
3103   .. code-block:: js
3105      true:
3106      import {
3107          VeryLongImportsAreAnnoying,
3108          VeryLongImportsAreAnnoying,
3109          VeryLongImportsAreAnnoying,
3110      } from 'some/module.js'
3112      false:
3113      import {VeryLongImportsAreAnnoying, VeryLongImportsAreAnnoying, VeryLongImportsAreAnnoying,} from "some/module.js"
3115 **KeepEmptyLinesAtTheStartOfBlocks** (``Boolean``) :versionbadge:`clang-format 3.7`
3116   If true, the empty line at the start of blocks is kept.
3118   .. code-block:: c++
3120      true:                                  false:
3121      if (foo) {                     vs.     if (foo) {
3122                                               bar();
3123        bar();                               }
3124      }
3126 **LambdaBodyIndentation** (``LambdaBodyIndentationKind``) :versionbadge:`clang-format 13`
3127   The indentation style of lambda bodies. ``Signature`` (the default)
3128   causes the lambda body to be indented one additional level relative to
3129   the indentation level of the signature. ``OuterScope`` forces the lambda
3130   body to be indented one additional level relative to the parent scope
3131   containing the lambda signature. For callback-heavy code, it may improve
3132   readability to have the signature indented two levels and to use
3133   ``OuterScope``. The KJ style guide requires ``OuterScope``.
3134   `KJ style guide
3135   <https://github.com/capnproto/capnproto/blob/master/style-guide.md>`_
3137   Possible values:
3139   * ``LBI_Signature`` (in configuration: ``Signature``)
3140     Align lambda body relative to the lambda signature. This is the default.
3142     .. code-block:: c++
3144        someMethod(
3145            [](SomeReallyLongLambdaSignatureArgument foo) {
3146              return;
3147            });
3149   * ``LBI_OuterScope`` (in configuration: ``OuterScope``)
3150     Align lambda body relative to the indentation level of the outer scope
3151     the lambda signature resides in.
3153     .. code-block:: c++
3155        someMethod(
3156            [](SomeReallyLongLambdaSignatureArgument foo) {
3157          return;
3158        });
3162 **Language** (``LanguageKind``) :versionbadge:`clang-format 3.5`
3163   Language, this format style is targeted at.
3165   Possible values:
3167   * ``LK_None`` (in configuration: ``None``)
3168     Do not use.
3170   * ``LK_Cpp`` (in configuration: ``Cpp``)
3171     Should be used for C, C++.
3173   * ``LK_CSharp`` (in configuration: ``CSharp``)
3174     Should be used for C#.
3176   * ``LK_Java`` (in configuration: ``Java``)
3177     Should be used for Java.
3179   * ``LK_JavaScript`` (in configuration: ``JavaScript``)
3180     Should be used for JavaScript.
3182   * ``LK_Json`` (in configuration: ``Json``)
3183     Should be used for JSON.
3185   * ``LK_ObjC`` (in configuration: ``ObjC``)
3186     Should be used for Objective-C, Objective-C++.
3188   * ``LK_Proto`` (in configuration: ``Proto``)
3189     Should be used for Protocol Buffers
3190     (https://developers.google.com/protocol-buffers/).
3192   * ``LK_TableGen`` (in configuration: ``TableGen``)
3193     Should be used for TableGen code.
3195   * ``LK_TextProto`` (in configuration: ``TextProto``)
3196     Should be used for Protocol Buffer messages in text format
3197     (https://developers.google.com/protocol-buffers/).
3199   * ``LK_Verilog`` (in configuration: ``Verilog``)
3200     Should be used for Verilog and SystemVerilog.
3201     https://standards.ieee.org/ieee/1800/6700/
3202     https://sci-hub.st/10.1109/IEEESTD.2018.8299595
3206 **MacroBlockBegin** (``String``) :versionbadge:`clang-format 3.7`
3207   A regular expression matching macros that start a block.
3209   .. code-block:: c++
3211      # With:
3212      MacroBlockBegin: "^NS_MAP_BEGIN|\
3213      NS_TABLE_HEAD$"
3214      MacroBlockEnd: "^\
3215      NS_MAP_END|\
3216      NS_TABLE_.*_END$"
3218      NS_MAP_BEGIN
3219        foo();
3220      NS_MAP_END
3222      NS_TABLE_HEAD
3223        bar();
3224      NS_TABLE_FOO_END
3226      # Without:
3227      NS_MAP_BEGIN
3228      foo();
3229      NS_MAP_END
3231      NS_TABLE_HEAD
3232      bar();
3233      NS_TABLE_FOO_END
3235 **MacroBlockEnd** (``String``) :versionbadge:`clang-format 3.7`
3236   A regular expression matching macros that end a block.
3238 **MaxEmptyLinesToKeep** (``Unsigned``) :versionbadge:`clang-format 3.7`
3239   The maximum number of consecutive empty lines to keep.
3241   .. code-block:: c++
3243      MaxEmptyLinesToKeep: 1         vs.     MaxEmptyLinesToKeep: 0
3244      int f() {                              int f() {
3245        int = 1;                                 int i = 1;
3246                                                 i = foo();
3247        i = foo();                               return i;
3248                                             }
3249        return i;
3250      }
3252 **NamespaceIndentation** (``NamespaceIndentationKind``) :versionbadge:`clang-format 3.7`
3253   The indentation used for namespaces.
3255   Possible values:
3257   * ``NI_None`` (in configuration: ``None``)
3258     Don't indent in namespaces.
3260     .. code-block:: c++
3262        namespace out {
3263        int i;
3264        namespace in {
3265        int i;
3266        }
3267        }
3269   * ``NI_Inner`` (in configuration: ``Inner``)
3270     Indent only in inner namespaces (nested in other namespaces).
3272     .. code-block:: c++
3274        namespace out {
3275        int i;
3276        namespace in {
3277          int i;
3278        }
3279        }
3281   * ``NI_All`` (in configuration: ``All``)
3282     Indent in all namespaces.
3284     .. code-block:: c++
3286        namespace out {
3287          int i;
3288          namespace in {
3289            int i;
3290          }
3291        }
3295 **NamespaceMacros** (``List of Strings``) :versionbadge:`clang-format 9`
3296   A vector of macros which are used to open namespace blocks.
3298   These are expected to be macros of the form:
3300   .. code-block:: c++
3302     NAMESPACE(<namespace-name>, ...) {
3303       <namespace-content>
3304     }
3306   For example: TESTSUITE
3308 **ObjCBinPackProtocolList** (``BinPackStyle``) :versionbadge:`clang-format 7`
3309   Controls bin-packing Objective-C protocol conformance list
3310   items into as few lines as possible when they go over ``ColumnLimit``.
3312   If ``Auto`` (the default), delegates to the value in
3313   ``BinPackParameters``. If that is ``true``, bin-packs Objective-C
3314   protocol conformance list items into as few lines as possible
3315   whenever they go over ``ColumnLimit``.
3317   If ``Always``, always bin-packs Objective-C protocol conformance
3318   list items into as few lines as possible whenever they go over
3319   ``ColumnLimit``.
3321   If ``Never``, lays out Objective-C protocol conformance list items
3322   onto individual lines whenever they go over ``ColumnLimit``.
3325   .. code-block:: objc
3327      Always (or Auto, if BinPackParameters=true):
3328      @interface ccccccccccccc () <
3329          ccccccccccccc, ccccccccccccc,
3330          ccccccccccccc, ccccccccccccc> {
3331      }
3333      Never (or Auto, if BinPackParameters=false):
3334      @interface ddddddddddddd () <
3335          ddddddddddddd,
3336          ddddddddddddd,
3337          ddddddddddddd,
3338          ddddddddddddd> {
3339      }
3341   Possible values:
3343   * ``BPS_Auto`` (in configuration: ``Auto``)
3344     Automatically determine parameter bin-packing behavior.
3346   * ``BPS_Always`` (in configuration: ``Always``)
3347     Always bin-pack parameters.
3349   * ``BPS_Never`` (in configuration: ``Never``)
3350     Never bin-pack parameters.
3354 **ObjCBlockIndentWidth** (``Unsigned``) :versionbadge:`clang-format 3.7`
3355   The number of characters to use for indentation of ObjC blocks.
3357   .. code-block:: objc
3359      ObjCBlockIndentWidth: 4
3361      [operation setCompletionBlock:^{
3362          [self onOperationDone];
3363      }];
3365 **ObjCBreakBeforeNestedBlockParam** (``Boolean``) :versionbadge:`clang-format 11`
3366   Break parameters list into lines when there is nested block
3367   parameters in a function call.
3369   .. code-block:: c++
3371     false:
3372      - (void)_aMethod
3373      {
3374          [self.test1 t:self w:self callback:^(typeof(self) self, NSNumber
3375          *u, NSNumber *v) {
3376              u = c;
3377          }]
3378      }
3379      true:
3380      - (void)_aMethod
3381      {
3382         [self.test1 t:self
3383                      w:self
3384             callback:^(typeof(self) self, NSNumber *u, NSNumber *v) {
3385                  u = c;
3386              }]
3387      }
3389 **ObjCSpaceAfterProperty** (``Boolean``) :versionbadge:`clang-format 3.7`
3390   Add a space after ``@property`` in Objective-C, i.e. use
3391   ``@property (readonly)`` instead of ``@property(readonly)``.
3393 **ObjCSpaceBeforeProtocolList** (``Boolean``) :versionbadge:`clang-format 3.7`
3394   Add a space in front of an Objective-C protocol list, i.e. use
3395   ``Foo <Protocol>`` instead of ``Foo<Protocol>``.
3397 **PPIndentWidth** (``Integer``) :versionbadge:`clang-format 13`
3398   The number of columns to use for indentation of preprocessor statements.
3399   When set to -1 (default) ``IndentWidth`` is used also for preprocessor
3400   statements.
3402   .. code-block:: c++
3404      PPIndentWidth: 1
3406      #ifdef __linux__
3407      # define FOO
3408      #else
3409      # define BAR
3410      #endif
3412 **PackConstructorInitializers** (``PackConstructorInitializersStyle``) :versionbadge:`clang-format 14`
3413   The pack constructor initializers style to use.
3415   Possible values:
3417   * ``PCIS_Never`` (in configuration: ``Never``)
3418     Always put each constructor initializer on its own line.
3420     .. code-block:: c++
3422        Constructor()
3423            : a(),
3424              b()
3426   * ``PCIS_BinPack`` (in configuration: ``BinPack``)
3427     Bin-pack constructor initializers.
3429     .. code-block:: c++
3431        Constructor()
3432            : aaaaaaaaaaaaaaaaaaaa(), bbbbbbbbbbbbbbbbbbbb(),
3433              cccccccccccccccccccc()
3435   * ``PCIS_CurrentLine`` (in configuration: ``CurrentLine``)
3436     Put all constructor initializers on the current line if they fit.
3437     Otherwise, put each one on its own line.
3439     .. code-block:: c++
3441        Constructor() : a(), b()
3443        Constructor()
3444            : aaaaaaaaaaaaaaaaaaaa(),
3445              bbbbbbbbbbbbbbbbbbbb(),
3446              ddddddddddddd()
3448   * ``PCIS_NextLine`` (in configuration: ``NextLine``)
3449     Same as ``PCIS_CurrentLine`` except that if all constructor initializers
3450     do not fit on the current line, try to fit them on the next line.
3452     .. code-block:: c++
3454        Constructor() : a(), b()
3456        Constructor()
3457            : aaaaaaaaaaaaaaaaaaaa(), bbbbbbbbbbbbbbbbbbbb(), ddddddddddddd()
3459        Constructor()
3460            : aaaaaaaaaaaaaaaaaaaa(),
3461              bbbbbbbbbbbbbbbbbbbb(),
3462              cccccccccccccccccccc()
3466 **PenaltyBreakAssignment** (``Unsigned``) :versionbadge:`clang-format 5`
3467   The penalty for breaking around an assignment operator.
3469 **PenaltyBreakBeforeFirstCallParameter** (``Unsigned``) :versionbadge:`clang-format 3.7`
3470   The penalty for breaking a function call after ``call(``.
3472 **PenaltyBreakComment** (``Unsigned``) :versionbadge:`clang-format 3.7`
3473   The penalty for each line break introduced inside a comment.
3475 **PenaltyBreakFirstLessLess** (``Unsigned``) :versionbadge:`clang-format 3.7`
3476   The penalty for breaking before the first ``<<``.
3478 **PenaltyBreakOpenParenthesis** (``Unsigned``) :versionbadge:`clang-format 14`
3479   The penalty for breaking after ``(``.
3481 **PenaltyBreakString** (``Unsigned``) :versionbadge:`clang-format 3.7`
3482   The penalty for each line break introduced inside a string literal.
3484 **PenaltyBreakTemplateDeclaration** (``Unsigned``) :versionbadge:`clang-format 7`
3485   The penalty for breaking after template declaration.
3487 **PenaltyExcessCharacter** (``Unsigned``) :versionbadge:`clang-format 3.7`
3488   The penalty for each character outside of the column limit.
3490 **PenaltyIndentedWhitespace** (``Unsigned``) :versionbadge:`clang-format 12`
3491   Penalty for each character of whitespace indentation
3492   (counted relative to leading non-whitespace column).
3494 **PenaltyReturnTypeOnItsOwnLine** (``Unsigned``) :versionbadge:`clang-format 3.7`
3495   Penalty for putting the return type of a function onto its own
3496   line.
3498 **PointerAlignment** (``PointerAlignmentStyle``) :versionbadge:`clang-format 3.7`
3499   Pointer and reference alignment style.
3501   Possible values:
3503   * ``PAS_Left`` (in configuration: ``Left``)
3504     Align pointer to the left.
3506     .. code-block:: c++
3508       int* a;
3510   * ``PAS_Right`` (in configuration: ``Right``)
3511     Align pointer to the right.
3513     .. code-block:: c++
3515       int *a;
3517   * ``PAS_Middle`` (in configuration: ``Middle``)
3518     Align pointer in the middle.
3520     .. code-block:: c++
3522       int * a;
3526 **QualifierAlignment** (``QualifierAlignmentStyle``) :versionbadge:`clang-format 14`
3527   Different ways to arrange specifiers and qualifiers (e.g. const/volatile).
3529   .. warning:: 
3531    Setting ``QualifierAlignment``  to something other than `Leave`, COULD
3532    lead to incorrect code formatting due to incorrect decisions made due to
3533    clang-formats lack of complete semantic information.
3534    As such extra care should be taken to review code changes made by the use
3535    of this option.
3537   Possible values:
3539   * ``QAS_Leave`` (in configuration: ``Leave``)
3540     Don't change specifiers/qualifiers to either Left or Right alignment
3541     (default).
3543     .. code-block:: c++
3545        int const a;
3546        const int *a;
3548   * ``QAS_Left`` (in configuration: ``Left``)
3549     Change specifiers/qualifiers to be left-aligned.
3551     .. code-block:: c++
3553        const int a;
3554        const int *a;
3556   * ``QAS_Right`` (in configuration: ``Right``)
3557     Change specifiers/qualifiers to be right-aligned.
3559     .. code-block:: c++
3561        int const a;
3562        int const *a;
3564   * ``QAS_Custom`` (in configuration: ``Custom``)
3565     Change specifiers/qualifiers to be aligned based on ``QualifierOrder``.
3566     With:
3568     .. code-block:: yaml
3570       QualifierOrder: ['inline', 'static', 'type', 'const']
3573     .. code-block:: c++
3576        int const a;
3577        int const *a;
3581 **QualifierOrder** (``List of Strings``) :versionbadge:`clang-format 14`
3582   The order in which the qualifiers appear.
3583   Order is an array that can contain any of the following:
3585     * const
3586     * inline
3587     * static
3588     * constexpr
3589     * volatile
3590     * restrict
3591     * type
3593   Note: it MUST contain 'type'.
3594   Items to the left of 'type' will be placed to the left of the type and
3595   aligned in the order supplied. Items to the right of 'type' will be placed
3596   to the right of the type and aligned in the order supplied.
3599   .. code-block:: yaml
3601     QualifierOrder: ['inline', 'static', 'type', 'const', 'volatile' ]
3603 **RawStringFormats** (``List of RawStringFormats``) :versionbadge:`clang-format 6`
3604   Defines hints for detecting supported languages code blocks in raw
3605   strings.
3607   A raw string with a matching delimiter or a matching enclosing function
3608   name will be reformatted assuming the specified language based on the
3609   style for that language defined in the .clang-format file. If no style has
3610   been defined in the .clang-format file for the specific language, a
3611   predefined style given by 'BasedOnStyle' is used. If 'BasedOnStyle' is not
3612   found, the formatting is based on llvm style. A matching delimiter takes
3613   precedence over a matching enclosing function name for determining the
3614   language of the raw string contents.
3616   If a canonical delimiter is specified, occurrences of other delimiters for
3617   the same language will be updated to the canonical if possible.
3619   There should be at most one specification per language and each delimiter
3620   and enclosing function should not occur in multiple specifications.
3622   To configure this in the .clang-format file, use:
3624   .. code-block:: yaml
3626     RawStringFormats:
3627       - Language: TextProto
3628           Delimiters:
3629             - 'pb'
3630             - 'proto'
3631           EnclosingFunctions:
3632             - 'PARSE_TEXT_PROTO'
3633           BasedOnStyle: google
3634       - Language: Cpp
3635           Delimiters:
3636             - 'cc'
3637             - 'cpp'
3638           BasedOnStyle: llvm
3639           CanonicalDelimiter: 'cc'
3641 **ReferenceAlignment** (``ReferenceAlignmentStyle``) :versionbadge:`clang-format 13`
3642   Reference alignment style (overrides ``PointerAlignment`` for
3643   references).
3645   Possible values:
3647   * ``RAS_Pointer`` (in configuration: ``Pointer``)
3648     Align reference like ``PointerAlignment``.
3650   * ``RAS_Left`` (in configuration: ``Left``)
3651     Align reference to the left.
3653     .. code-block:: c++
3655       int& a;
3657   * ``RAS_Right`` (in configuration: ``Right``)
3658     Align reference to the right.
3660     .. code-block:: c++
3662       int &a;
3664   * ``RAS_Middle`` (in configuration: ``Middle``)
3665     Align reference in the middle.
3667     .. code-block:: c++
3669       int & a;
3673 **ReflowComments** (``Boolean``) :versionbadge:`clang-format 4`
3674   If ``true``, clang-format will attempt to re-flow comments.
3676   .. code-block:: c++
3678      false:
3679      // veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of information
3680      /* second veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of information */
3682      true:
3683      // veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of
3684      // information
3685      /* second veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of
3686       * information */
3688 **RemoveBracesLLVM** (``Boolean``) :versionbadge:`clang-format 14`
3689   Remove optional braces of control statements (``if``, ``else``, ``for``,
3690   and ``while``) in C++ according to the LLVM coding style.
3692   .. warning:: 
3694    This option will be renamed and expanded to support other styles.
3696   .. warning:: 
3698    Setting this option to `true` could lead to incorrect code formatting due
3699    to clang-format's lack of complete semantic information. As such, extra
3700    care should be taken to review code changes made by this option.
3702   .. code-block:: c++
3704     false:                                     true:
3706     if (isa<FunctionDecl>(D)) {        vs.     if (isa<FunctionDecl>(D))
3707       handleFunctionDecl(D);                     handleFunctionDecl(D);
3708     } else if (isa<VarDecl>(D)) {              else if (isa<VarDecl>(D))
3709       handleVarDecl(D);                          handleVarDecl(D);
3710     }
3712     if (isa<VarDecl>(D)) {             vs.     if (isa<VarDecl>(D)) {
3713       for (auto *A : D.attrs()) {                for (auto *A : D.attrs())
3714         if (shouldProcessAttr(A)) {                if (shouldProcessAttr(A))
3715           handleAttr(A);                             handleAttr(A);
3716         }                                      }
3717       }
3718     }
3720     if (isa<FunctionDecl>(D)) {        vs.     if (isa<FunctionDecl>(D))
3721       for (auto *A : D.attrs()) {                for (auto *A : D.attrs())
3722         handleAttr(A);                             handleAttr(A);
3723       }
3724     }
3726     if (auto *D = (T)(D)) {            vs.     if (auto *D = (T)(D)) {
3727       if (shouldProcess(D)) {                    if (shouldProcess(D))
3728         handleVarDecl(D);                          handleVarDecl(D);
3729       } else {                                   else
3730         markAsIgnored(D);                          markAsIgnored(D);
3731       }                                        }
3732     }
3734     if (a) {                           vs.     if (a)
3735       b();                                       b();
3736     } else {                                   else if (c)
3737       if (c) {                                   d();
3738         d();                                   else
3739       } else {                                   e();
3740         e();
3741       }
3742     }
3744 **RequiresClausePosition** (``RequiresClausePositionStyle``) :versionbadge:`clang-format 15`
3745   The position of the ``requires`` clause.
3747   Possible values:
3749   * ``RCPS_OwnLine`` (in configuration: ``OwnLine``)
3750     Always put the ``requires`` clause on its own line.
3752     .. code-block:: c++
3754       template <typename T>
3755       requires C<T>
3756       struct Foo {...
3758       template <typename T>
3759       requires C<T>
3760       void bar(T t) {...
3762       template <typename T>
3763       void baz(T t)
3764       requires C<T>
3765       {...
3767   * ``RCPS_WithPreceding`` (in configuration: ``WithPreceding``)
3768     Try to put the clause together with the preceding part of a declaration.
3769     For class templates: stick to the template declaration.
3770     For function templates: stick to the template declaration.
3771     For function declaration followed by a requires clause: stick to the
3772     parameter list.
3774     .. code-block:: c++
3776       template <typename T> requires C<T>
3777       struct Foo {...
3779       template <typename T> requires C<T>
3780       void bar(T t) {...
3782       template <typename T>
3783       void baz(T t) requires C<T>
3784       {...
3786   * ``RCPS_WithFollowing`` (in configuration: ``WithFollowing``)
3787     Try to put the ``requires`` clause together with the class or function
3788     declaration.
3790     .. code-block:: c++
3792       template <typename T>
3793       requires C<T> struct Foo {...
3795       template <typename T>
3796       requires C<T> void bar(T t) {...
3798       template <typename T>
3799       void baz(T t)
3800       requires C<T> {...
3802   * ``RCPS_SingleLine`` (in configuration: ``SingleLine``)
3803     Try to put everything in the same line if possible. Otherwise normal
3804     line breaking rules take over.
3806     .. code-block:: c++
3808       // Fitting:
3809       template <typename T> requires C<T> struct Foo {...
3811       template <typename T> requires C<T> void bar(T t) {...
3813       template <typename T> void bar(T t) requires C<T> {...
3815       // Not fitting, one possible example:
3816       template <typename LongName>
3817       requires C<LongName>
3818       struct Foo {...
3820       template <typename LongName>
3821       requires C<LongName>
3822       void bar(LongName ln) {
3824       template <typename LongName>
3825       void bar(LongName ln)
3826           requires C<LongName> {
3830 **SeparateDefinitionBlocks** (``SeparateDefinitionStyle``) :versionbadge:`clang-format 14`
3831   Specifies the use of empty lines to separate definition blocks, including
3832   classes, structs, enums, and functions.
3834   .. code-block:: c++
3836      Never                  v.s.     Always
3837      #include <cstring>              #include <cstring>
3838      struct Foo {
3839        int a, b, c;                  struct Foo {
3840      };                                int a, b, c;
3841      namespace Ns {                  };
3842      class Bar {
3843      public:                         namespace Ns {
3844        struct Foobar {               class Bar {
3845          int a;                      public:
3846          int b;                        struct Foobar {
3847        };                                int a;
3848      private:                            int b;
3849        int t;                          };
3850        int method1() {
3851          // ...                      private:
3852        }                               int t;
3853        enum List {
3854          ITEM1,                        int method1() {
3855          ITEM2                           // ...
3856        };                              }
3857        template<typename T>
3858        int method2(T x) {              enum List {
3859          // ...                          ITEM1,
3860        }                                 ITEM2
3861        int i, j, k;                    };
3862        int method3(int par) {
3863          // ...                        template<typename T>
3864        }                               int method2(T x) {
3865      };                                  // ...
3866      class C {};                       }
3867      }
3868                                        int i, j, k;
3870                                        int method3(int par) {
3871                                          // ...
3872                                        }
3873                                      };
3875                                      class C {};
3876                                      }
3878   Possible values:
3880   * ``SDS_Leave`` (in configuration: ``Leave``)
3881     Leave definition blocks as they are.
3883   * ``SDS_Always`` (in configuration: ``Always``)
3884     Insert an empty line between definition blocks.
3886   * ``SDS_Never`` (in configuration: ``Never``)
3887     Remove any empty line between definition blocks.
3891 **ShortNamespaceLines** (``Unsigned``) :versionbadge:`clang-format 13`
3892   The maximal number of unwrapped lines that a short namespace spans.
3893   Defaults to 1.
3895   This determines the maximum length of short namespaces by counting
3896   unwrapped lines (i.e. containing neither opening nor closing
3897   namespace brace) and makes "FixNamespaceComments" omit adding
3898   end comments for those.
3900   .. code-block:: c++
3902      ShortNamespaceLines: 1     vs.     ShortNamespaceLines: 0
3903      namespace a {                      namespace a {
3904        int foo;                           int foo;
3905      }                                  } // namespace a
3907      ShortNamespaceLines: 1     vs.     ShortNamespaceLines: 0
3908      namespace b {                      namespace b {
3909        int foo;                           int foo;
3910        int bar;                           int bar;
3911      } // namespace b                   } // namespace b
3913 **SortIncludes** (``SortIncludesOptions``) :versionbadge:`clang-format 4`
3914   Controls if and how clang-format will sort ``#includes``.
3915   If ``Never``, includes are never sorted.
3916   If ``CaseInsensitive``, includes are sorted in an ASCIIbetical or case
3917   insensitive fashion.
3918   If ``CaseSensitive``, includes are sorted in an alphabetical or case
3919   sensitive fashion.
3921   Possible values:
3923   * ``SI_Never`` (in configuration: ``Never``)
3924     Includes are never sorted.
3926     .. code-block:: c++
3928        #include "B/A.h"
3929        #include "A/B.h"
3930        #include "a/b.h"
3931        #include "A/b.h"
3932        #include "B/a.h"
3934   * ``SI_CaseSensitive`` (in configuration: ``CaseSensitive``)
3935     Includes are sorted in an ASCIIbetical or case sensitive fashion.
3937     .. code-block:: c++
3939        #include "A/B.h"
3940        #include "A/b.h"
3941        #include "B/A.h"
3942        #include "B/a.h"
3943        #include "a/b.h"
3945   * ``SI_CaseInsensitive`` (in configuration: ``CaseInsensitive``)
3946     Includes are sorted in an alphabetical or case insensitive fashion.
3948     .. code-block:: c++
3950        #include "A/B.h"
3951        #include "A/b.h"
3952        #include "a/b.h"
3953        #include "B/A.h"
3954        #include "B/a.h"
3958 **SortJavaStaticImport** (``SortJavaStaticImportOptions``) :versionbadge:`clang-format 12`
3959   When sorting Java imports, by default static imports are placed before
3960   non-static imports. If ``JavaStaticImportAfterImport`` is ``After``,
3961   static imports are placed after non-static imports.
3963   Possible values:
3965   * ``SJSIO_Before`` (in configuration: ``Before``)
3966     Static imports are placed before non-static imports.
3968     .. code-block:: java
3970       import static org.example.function1;
3972       import org.example.ClassA;
3974   * ``SJSIO_After`` (in configuration: ``After``)
3975     Static imports are placed after non-static imports.
3977     .. code-block:: java
3979       import org.example.ClassA;
3981       import static org.example.function1;
3985 **SortUsingDeclarations** (``Boolean``) :versionbadge:`clang-format 5`
3986   If ``true``, clang-format will sort using declarations.
3988   The order of using declarations is defined as follows:
3989   Split the strings by "::" and discard any initial empty strings. The last
3990   element of each list is a non-namespace name; all others are namespace
3991   names. Sort the lists of names lexicographically, where the sort order of
3992   individual names is that all non-namespace names come before all namespace
3993   names, and within those groups, names are in case-insensitive
3994   lexicographic order.
3996   .. code-block:: c++
3998      false:                                 true:
3999      using std::cout;               vs.     using std::cin;
4000      using std::cin;                        using std::cout;
4002 **SpaceAfterCStyleCast** (``Boolean``) :versionbadge:`clang-format 3.5`
4003   If ``true``, a space is inserted after C style casts.
4005   .. code-block:: c++
4007      true:                                  false:
4008      (int) i;                       vs.     (int)i;
4010 **SpaceAfterLogicalNot** (``Boolean``) :versionbadge:`clang-format 9`
4011   If ``true``, a space is inserted after the logical not operator (``!``).
4013   .. code-block:: c++
4015      true:                                  false:
4016      ! someExpression();            vs.     !someExpression();
4018 **SpaceAfterTemplateKeyword** (``Boolean``) :versionbadge:`clang-format 4`
4019   If ``true``, a space will be inserted after the 'template' keyword.
4021   .. code-block:: c++
4023      true:                                  false:
4024      template <int> void foo();     vs.     template<int> void foo();
4026 **SpaceAroundPointerQualifiers** (``SpaceAroundPointerQualifiersStyle``) :versionbadge:`clang-format 12`
4027   Defines in which cases to put a space before or after pointer qualifiers
4029   Possible values:
4031   * ``SAPQ_Default`` (in configuration: ``Default``)
4032     Don't ensure spaces around pointer qualifiers and use PointerAlignment
4033     instead.
4035     .. code-block:: c++
4037        PointerAlignment: Left                 PointerAlignment: Right
4038        void* const* x = NULL;         vs.     void *const *x = NULL;
4040   * ``SAPQ_Before`` (in configuration: ``Before``)
4041     Ensure that there is a space before pointer qualifiers.
4043     .. code-block:: c++
4045        PointerAlignment: Left                 PointerAlignment: Right
4046        void* const* x = NULL;         vs.     void * const *x = NULL;
4048   * ``SAPQ_After`` (in configuration: ``After``)
4049     Ensure that there is a space after pointer qualifiers.
4051     .. code-block:: c++
4053        PointerAlignment: Left                 PointerAlignment: Right
4054        void* const * x = NULL;         vs.     void *const *x = NULL;
4056   * ``SAPQ_Both`` (in configuration: ``Both``)
4057     Ensure that there is a space both before and after pointer qualifiers.
4059     .. code-block:: c++
4061        PointerAlignment: Left                 PointerAlignment: Right
4062        void* const * x = NULL;         vs.     void * const *x = NULL;
4066 **SpaceBeforeAssignmentOperators** (``Boolean``) :versionbadge:`clang-format 3.7`
4067   If ``false``, spaces will be removed before assignment operators.
4069   .. code-block:: c++
4071      true:                                  false:
4072      int a = 5;                     vs.     int a= 5;
4073      a += 42;                               a+= 42;
4075 **SpaceBeforeCaseColon** (``Boolean``) :versionbadge:`clang-format 12`
4076   If ``false``, spaces will be removed before case colon.
4078   .. code-block:: c++
4080     true:                                   false
4081     switch (x) {                    vs.     switch (x) {
4082       case 1 : break;                         case 1: break;
4083     }                                       }
4085 **SpaceBeforeCpp11BracedList** (``Boolean``) :versionbadge:`clang-format 7`
4086   If ``true``, a space will be inserted before a C++11 braced list
4087   used to initialize an object (after the preceding identifier or type).
4089   .. code-block:: c++
4091      true:                                  false:
4092      Foo foo { bar };               vs.     Foo foo{ bar };
4093      Foo {};                                Foo{};
4094      vector<int> { 1, 2, 3 };               vector<int>{ 1, 2, 3 };
4095      new int[3] { 1, 2, 3 };                new int[3]{ 1, 2, 3 };
4097 **SpaceBeforeCtorInitializerColon** (``Boolean``) :versionbadge:`clang-format 7`
4098   If ``false``, spaces will be removed before constructor initializer
4099   colon.
4101   .. code-block:: c++
4103      true:                                  false:
4104      Foo::Foo() : a(a) {}                   Foo::Foo(): a(a) {}
4106 **SpaceBeforeInheritanceColon** (``Boolean``) :versionbadge:`clang-format 7`
4107   If ``false``, spaces will be removed before inheritance colon.
4109   .. code-block:: c++
4111      true:                                  false:
4112      class Foo : Bar {}             vs.     class Foo: Bar {}
4114 **SpaceBeforeParens** (``SpaceBeforeParensStyle``) :versionbadge:`clang-format 3.5`
4115   Defines in which cases to put a space before opening parentheses.
4117   Possible values:
4119   * ``SBPO_Never`` (in configuration: ``Never``)
4120     Never put a space before opening parentheses.
4122     .. code-block:: c++
4124        void f() {
4125          if(true) {
4126            f();
4127          }
4128        }
4130   * ``SBPO_ControlStatements`` (in configuration: ``ControlStatements``)
4131     Put a space before opening parentheses only after control statement
4132     keywords (``for/if/while...``).
4134     .. code-block:: c++
4136        void f() {
4137          if (true) {
4138            f();
4139          }
4140        }
4142   * ``SBPO_ControlStatementsExceptControlMacros`` (in configuration: ``ControlStatementsExceptControlMacros``)
4143     Same as ``SBPO_ControlStatements`` except this option doesn't apply to
4144     ForEach and If macros. This is useful in projects where ForEach/If
4145     macros are treated as function calls instead of control statements.
4146     ``SBPO_ControlStatementsExceptForEachMacros`` remains an alias for
4147     backward compatibility.
4149     .. code-block:: c++
4151        void f() {
4152          Q_FOREACH(...) {
4153            f();
4154          }
4155        }
4157   * ``SBPO_NonEmptyParentheses`` (in configuration: ``NonEmptyParentheses``)
4158     Put a space before opening parentheses only if the parentheses are not
4159     empty i.e. '()'
4161     .. code-block:: c++
4163       void() {
4164         if (true) {
4165           f();
4166           g (x, y, z);
4167         }
4168       }
4170   * ``SBPO_Always`` (in configuration: ``Always``)
4171     Always put a space before opening parentheses, except when it's
4172     prohibited by the syntax rules (in function-like macro definitions) or
4173     when determined by other style rules (after unary operators, opening
4174     parentheses, etc.)
4176     .. code-block:: c++
4178        void f () {
4179          if (true) {
4180            f ();
4181          }
4182        }
4184   * ``SBPO_Custom`` (in configuration: ``Custom``)
4185     Configure each individual space before parentheses in
4186     `SpaceBeforeParensOptions`.
4190 **SpaceBeforeParensOptions** (``SpaceBeforeParensCustom``) :versionbadge:`clang-format 14`
4191   Control of individual space before parentheses.
4193   If ``SpaceBeforeParens`` is set to ``Custom``, use this to specify
4194   how each individual space before parentheses case should be handled.
4195   Otherwise, this is ignored.
4197   .. code-block:: yaml
4199     # Example of usage:
4200     SpaceBeforeParens: Custom
4201     SpaceBeforeParensOptions:
4202       AfterControlStatements: true
4203       AfterFunctionDefinitionName: true
4205   Nested configuration flags:
4207   Precise control over the spacing before parentheses.
4209   .. code-block:: c++
4211     # Should be declared this way:
4212     SpaceBeforeParens: Custom
4213     SpaceBeforeParensOptions:
4214       AfterControlStatements: true
4215       AfterFunctionDefinitionName: true
4217   * ``bool AfterControlStatements`` If ``true``, put space betwee control statement keywords
4218     (for/if/while...) and opening parentheses.
4220     .. code-block:: c++
4222        true:                                  false:
4223        if (...) {}                     vs.    if(...) {}
4225   * ``bool AfterForeachMacros`` If ``true``, put space between foreach macros and opening parentheses.
4227     .. code-block:: c++
4229        true:                                  false:
4230        FOREACH (...)                   vs.    FOREACH(...)
4231          <loop-body>                            <loop-body>
4233   * ``bool AfterFunctionDeclarationName`` If ``true``, put a space between function declaration name and opening
4234     parentheses.
4236     .. code-block:: c++
4238        true:                                  false:
4239        void f ();                      vs.    void f();
4241   * ``bool AfterFunctionDefinitionName`` If ``true``, put a space between function definition name and opening
4242     parentheses.
4244     .. code-block:: c++
4246        true:                                  false:
4247        void f () {}                    vs.    void f() {}
4249   * ``bool AfterIfMacros`` If ``true``, put space between if macros and opening parentheses.
4251     .. code-block:: c++
4253        true:                                  false:
4254        IF (...)                        vs.    IF(...)
4255          <conditional-body>                     <conditional-body>
4257   * ``bool AfterOverloadedOperator`` If ``true``, put a space between operator overloading and opening
4258     parentheses.
4260     .. code-block:: c++
4262        true:                                  false:
4263        void operator++ (int a);        vs.    void operator++(int a);
4264        object.operator++ (10);                object.operator++(10);
4266   * ``bool AfterRequiresInClause`` If ``true``, put space between requires keyword in a requires clause and
4267     opening parentheses, if there is one.
4269     .. code-block:: c++
4271        true:                                  false:
4272        template<typename T>            vs.    template<typename T>
4273        requires (A<T> && B<T>)                requires(A<T> && B<T>)
4274        ...                                    ...
4276   * ``bool AfterRequiresInExpression`` If ``true``, put space between requires keyword in a requires expression
4277     and opening parentheses.
4279     .. code-block:: c++
4281        true:                                  false:
4282        template<typename T>            vs.    template<typename T>
4283        concept C = requires (T t) {           concept C = requires(T t) {
4284                      ...                                    ...
4285                    }                                      }
4287   * ``bool BeforeNonEmptyParentheses`` If ``true``, put a space before opening parentheses only if the
4288     parentheses are not empty.
4290     .. code-block:: c++
4292        true:                                  false:
4293        void f (int a);                 vs.    void f();
4294        f (a);                                 f();
4297 **SpaceBeforeRangeBasedForLoopColon** (``Boolean``) :versionbadge:`clang-format 7`
4298   If ``false``, spaces will be removed before range-based for loop
4299   colon.
4301   .. code-block:: c++
4303      true:                                  false:
4304      for (auto v : values) {}       vs.     for(auto v: values) {}
4306 **SpaceBeforeSquareBrackets** (``Boolean``) :versionbadge:`clang-format 10`
4307   If ``true``, spaces will be before  ``[``.
4308   Lambdas will not be affected. Only the first ``[`` will get a space added.
4310   .. code-block:: c++
4312      true:                                  false:
4313      int a [5];                    vs.      int a[5];
4314      int a [5][5];                 vs.      int a[5][5];
4316 **SpaceInEmptyBlock** (``Boolean``) :versionbadge:`clang-format 10`
4317   If ``true``, spaces will be inserted into ``{}``.
4319   .. code-block:: c++
4321      true:                                false:
4322      void f() { }                   vs.   void f() {}
4323      while (true) { }                     while (true) {}
4325 **SpaceInEmptyParentheses** (``Boolean``) :versionbadge:`clang-format 3.7`
4326   If ``true``, spaces may be inserted into ``()``.
4328   .. code-block:: c++
4330      true:                                false:
4331      void f( ) {                    vs.   void f() {
4332        int x[] = {foo( ), bar( )};          int x[] = {foo(), bar()};
4333        if (true) {                          if (true) {
4334          f( );                                f();
4335        }                                    }
4336      }                                    }
4338 **SpacesBeforeTrailingComments** (``Unsigned``) :versionbadge:`clang-format 3.7`
4339   The number of spaces before trailing line comments
4340   (``//`` - comments).
4342   This does not affect trailing block comments (``/*`` - comments) as
4343   those commonly have different usage patterns and a number of special
4344   cases.
4346   .. code-block:: c++
4348      SpacesBeforeTrailingComments: 3
4349      void f() {
4350        if (true) {   // foo1
4351          f();        // bar
4352        }             // foo
4353      }
4355 **SpacesInAngles** (``SpacesInAnglesStyle``) :versionbadge:`clang-format 3.4`
4356   The SpacesInAnglesStyle to use for template argument lists.
4358   Possible values:
4360   * ``SIAS_Never`` (in configuration: ``Never``)
4361     Remove spaces after ``<`` and before ``>``.
4363     .. code-block:: c++
4365        static_cast<int>(arg);
4366        std::function<void(int)> fct;
4368   * ``SIAS_Always`` (in configuration: ``Always``)
4369     Add spaces after ``<`` and before ``>``.
4371     .. code-block:: c++
4373        static_cast< int >(arg);
4374        std::function< void(int) > fct;
4376   * ``SIAS_Leave`` (in configuration: ``Leave``)
4377     Keep a single space after ``<`` and before ``>`` if any spaces were
4378     present. Option ``Standard: Cpp03`` takes precedence.
4382 **SpacesInCStyleCastParentheses** (``Boolean``) :versionbadge:`clang-format 3.7`
4383   If ``true``, spaces may be inserted into C style casts.
4385   .. code-block:: c++
4387      true:                                  false:
4388      x = ( int32 )y                 vs.     x = (int32)y
4390 **SpacesInConditionalStatement** (``Boolean``) :versionbadge:`clang-format 10`
4391   If ``true``, spaces will be inserted around if/for/switch/while
4392   conditions.
4394   .. code-block:: c++
4396      true:                                  false:
4397      if ( a )  { ... }              vs.     if (a) { ... }
4398      while ( i < 5 )  { ... }               while (i < 5) { ... }
4400 **SpacesInContainerLiterals** (``Boolean``) :versionbadge:`clang-format 3.7`
4401   If ``true``, spaces are inserted inside container literals (e.g.
4402   ObjC and Javascript array and dict literals).
4404   .. code-block:: js
4406      true:                                  false:
4407      var arr = [ 1, 2, 3 ];         vs.     var arr = [1, 2, 3];
4408      f({a : 1, b : 2, c : 3});              f({a: 1, b: 2, c: 3});
4410 **SpacesInLineCommentPrefix** (``SpacesInLineComment``) :versionbadge:`clang-format 13`
4411   How many spaces are allowed at the start of a line comment. To disable the
4412   maximum set it to ``-1``, apart from that the maximum takes precedence
4413   over the minimum.
4415   .. code-block:: c++
4417     Minimum = 1
4418     Maximum = -1
4419     // One space is forced
4421     //  but more spaces are possible
4423     Minimum = 0
4424     Maximum = 0
4425     //Forces to start every comment directly after the slashes
4427   Note that in line comment sections the relative indent of the subsequent
4428   lines is kept, that means the following:
4430   .. code-block:: c++
4432     before:                                   after:
4433     Minimum: 1
4434     //if (b) {                                // if (b) {
4435     //  return true;                          //   return true;
4436     //}                                       // }
4438     Maximum: 0
4439     /// List:                                 ///List:
4440     ///  - Foo                                /// - Foo
4441     ///    - Bar                              ///   - Bar
4443   Nested configuration flags:
4445   Control of spaces within a single line comment
4447   * ``unsigned Minimum`` The minimum number of spaces at the start of the comment.
4449   * ``unsigned Maximum`` The maximum number of spaces at the start of the comment.
4452 **SpacesInParentheses** (``Boolean``) :versionbadge:`clang-format 3.7`
4453   If ``true``, spaces will be inserted after ``(`` and before ``)``.
4455   .. code-block:: c++
4457      true:                                  false:
4458      t f( Deleted & ) & = delete;   vs.     t f(Deleted &) & = delete;
4460 **SpacesInSquareBrackets** (``Boolean``) :versionbadge:`clang-format 3.7`
4461   If ``true``, spaces will be inserted after ``[`` and before ``]``.
4462   Lambdas without arguments or unspecified size array declarations will not
4463   be affected.
4465   .. code-block:: c++
4467      true:                                  false:
4468      int a[ 5 ];                    vs.     int a[5];
4469      std::unique_ptr<int[]> foo() {} // Won't be affected
4471 **Standard** (``LanguageStandard``) :versionbadge:`clang-format 3.7`
4472   Parse and format C++ constructs compatible with this standard.
4474   .. code-block:: c++
4476      c++03:                                 latest:
4477      vector<set<int> > x;           vs.     vector<set<int>> x;
4479   Possible values:
4481   * ``LS_Cpp03`` (in configuration: ``c++03``)
4482     Parse and format as C++03.
4483     ``Cpp03`` is a deprecated alias for ``c++03``
4485   * ``LS_Cpp11`` (in configuration: ``c++11``)
4486     Parse and format as C++11.
4488   * ``LS_Cpp14`` (in configuration: ``c++14``)
4489     Parse and format as C++14.
4491   * ``LS_Cpp17`` (in configuration: ``c++17``)
4492     Parse and format as C++17.
4494   * ``LS_Cpp20`` (in configuration: ``c++20``)
4495     Parse and format as C++20.
4497   * ``LS_Latest`` (in configuration: ``Latest``)
4498     Parse and format using the latest supported language version.
4499     ``Cpp11`` is a deprecated alias for ``Latest``
4501   * ``LS_Auto`` (in configuration: ``Auto``)
4502     Automatic detection based on the input.
4506 **StatementAttributeLikeMacros** (``List of Strings``) :versionbadge:`clang-format 12`
4507   Macros which are ignored in front of a statement, as if they were an
4508   attribute. So that they are not parsed as identifier, for example for Qts
4509   emit.
4511   .. code-block:: c++
4513     AlignConsecutiveDeclarations: true
4514     StatementAttributeLikeMacros: []
4515     unsigned char data = 'x';
4516     emit          signal(data); // This is parsed as variable declaration.
4518     AlignConsecutiveDeclarations: true
4519     StatementAttributeLikeMacros: [emit]
4520     unsigned char data = 'x';
4521     emit signal(data); // Now it's fine again.
4523 **StatementMacros** (``List of Strings``) :versionbadge:`clang-format 8`
4524   A vector of macros that should be interpreted as complete
4525   statements.
4527   Typical macros are expressions, and require a semi-colon to be
4528   added; sometimes this is not the case, and this allows to make
4529   clang-format aware of such cases.
4531   For example: Q_UNUSED
4533 **TabWidth** (``Unsigned``) :versionbadge:`clang-format 3.7`
4534   The number of columns used for tab stops.
4536 **TypenameMacros** (``List of Strings``) :versionbadge:`clang-format 9`
4537   A vector of macros that should be interpreted as type declarations
4538   instead of as function calls.
4540   These are expected to be macros of the form:
4542   .. code-block:: c++
4544     STACK_OF(...)
4546   In the .clang-format configuration file, this can be configured like:
4548   .. code-block:: yaml
4550     TypenameMacros: ['STACK_OF', 'LIST']
4552   For example: OpenSSL STACK_OF, BSD LIST_ENTRY.
4554 **UseCRLF** (``Boolean``) :versionbadge:`clang-format 10`
4555   Use ``\r\n`` instead of ``\n`` for line breaks.
4556   Also used as fallback if ``DeriveLineEnding`` is true.
4558 **UseTab** (``UseTabStyle``) :versionbadge:`clang-format 3.7`
4559   The way to use tab characters in the resulting file.
4561   Possible values:
4563   * ``UT_Never`` (in configuration: ``Never``)
4564     Never use tab.
4566   * ``UT_ForIndentation`` (in configuration: ``ForIndentation``)
4567     Use tabs only for indentation.
4569   * ``UT_ForContinuationAndIndentation`` (in configuration: ``ForContinuationAndIndentation``)
4570     Fill all leading whitespace with tabs, and use spaces for alignment that
4571     appears within a line (e.g. consecutive assignments and declarations).
4573   * ``UT_AlignWithSpaces`` (in configuration: ``AlignWithSpaces``)
4574     Use tabs for line continuation and indentation, and spaces for
4575     alignment.
4577   * ``UT_Always`` (in configuration: ``Always``)
4578     Use tabs whenever we need to fill whitespace that spans at least from
4579     one tab stop to the next one.
4583 **WhitespaceSensitiveMacros** (``List of Strings``) :versionbadge:`clang-format 11`
4584   A vector of macros which are whitespace-sensitive and should not
4585   be touched.
4587   These are expected to be macros of the form:
4589   .. code-block:: c++
4591     STRINGIZE(...)
4593   In the .clang-format configuration file, this can be configured like:
4595   .. code-block:: yaml
4597     WhitespaceSensitiveMacros: ['STRINGIZE', 'PP_STRINGIZE']
4599   For example: BOOST_PP_STRINGIZE
4601 .. END_FORMAT_STYLE_OPTIONS
4603 Adding additional style options
4604 ===============================
4606 Each additional style option adds costs to the clang-format project. Some of
4607 these costs affect the clang-format development itself, as we need to make
4608 sure that any given combination of options work and that new features don't
4609 break any of the existing options in any way. There are also costs for end users
4610 as options become less discoverable and people have to think about and make a
4611 decision on options they don't really care about.
4613 The goal of the clang-format project is more on the side of supporting a
4614 limited set of styles really well as opposed to supporting every single style
4615 used by a codebase somewhere in the wild. Of course, we do want to support all
4616 major projects and thus have established the following bar for adding style
4617 options. Each new style option must ..
4619   * be used in a project of significant size (have dozens of contributors)
4620   * have a publicly accessible style guide
4621   * have a person willing to contribute and maintain patches
4623 Examples
4624 ========
4626 A style similar to the `Linux Kernel style
4627 <https://www.kernel.org/doc/Documentation/CodingStyle>`_:
4629 .. code-block:: yaml
4631   BasedOnStyle: LLVM
4632   IndentWidth: 8
4633   UseTab: Always
4634   BreakBeforeBraces: Linux
4635   AllowShortIfStatementsOnASingleLine: false
4636   IndentCaseLabels: false
4638 The result is (imagine that tabs are used for indentation here):
4640 .. code-block:: c++
4642   void test()
4643   {
4644           switch (x) {
4645           case 0:
4646           case 1:
4647                   do_something();
4648                   break;
4649           case 2:
4650                   do_something_else();
4651                   break;
4652           default:
4653                   break;
4654           }
4655           if (condition)
4656                   do_something_completely_different();
4658           if (x == y) {
4659                   q();
4660           } else if (x > y) {
4661                   w();
4662           } else {
4663                   r();
4664           }
4665   }
4667 A style similar to the default Visual Studio formatting style:
4669 .. code-block:: yaml
4671   UseTab: Never
4672   IndentWidth: 4
4673   BreakBeforeBraces: Allman
4674   AllowShortIfStatementsOnASingleLine: false
4675   IndentCaseLabels: false
4676   ColumnLimit: 0
4678 The result is:
4680 .. code-block:: c++
4682   void test()
4683   {
4684       switch (suffix)
4685       {
4686       case 0:
4687       case 1:
4688           do_something();
4689           break;
4690       case 2:
4691           do_something_else();
4692           break;
4693       default:
4694           break;
4695       }
4696       if (condition)
4697           do_something_completely_different();
4699       if (x == y)
4700       {
4701           q();
4702       }
4703       else if (x > y)
4704       {
4705           w();
4706       }
4707       else
4708       {
4709           r();
4710       }
4711   }