aboutsummaryrefslogtreecommitdiff
path: root/docs/ClangFormatStyleOptions.rst
diff options
context:
space:
mode:
Diffstat (limited to 'docs/ClangFormatStyleOptions.rst')
-rw-r--r--docs/ClangFormatStyleOptions.rst2151
1 files changed, 0 insertions, 2151 deletions
diff --git a/docs/ClangFormatStyleOptions.rst b/docs/ClangFormatStyleOptions.rst
deleted file mode 100644
index 054d5c32c6f2..000000000000
--- a/docs/ClangFormatStyleOptions.rst
+++ /dev/null
@@ -1,2151 +0,0 @@
-==========================
-Clang-Format Style Options
-==========================
-
-:doc:`ClangFormatStyleOptions` describes configurable formatting style options
-supported by :doc:`LibFormat` and :doc:`ClangFormat`.
-
-When using :program:`clang-format` command line utility or
-``clang::format::reformat(...)`` functions from code, one can either use one of
-the predefined styles (LLVM, Google, Chromium, Mozilla, WebKit) or create a
-custom style by configuring specific style options.
-
-
-Configuring Style with clang-format
-===================================
-
-:program:`clang-format` supports two ways to provide custom style options:
-directly specify style configuration in the ``-style=`` command line option or
-use ``-style=file`` and put style configuration in the ``.clang-format`` or
-``_clang-format`` file in the project directory.
-
-When using ``-style=file``, :program:`clang-format` for each input file will
-try to find the ``.clang-format`` file located in the closest parent directory
-of the input file. When the standard input is used, the search is started from
-the current directory.
-
-The ``.clang-format`` file uses YAML format:
-
-.. code-block:: yaml
-
- key1: value1
- key2: value2
- # A comment.
- ...
-
-The configuration file can consist of several sections each having different
-``Language:`` parameter denoting the programming language this section of the
-configuration is targeted at. See the description of the **Language** option
-below for the list of supported languages. The first section may have no
-language set, it will set the default style options for all lanugages.
-Configuration sections for specific language will override options set in the
-default section.
-
-When :program:`clang-format` formats a file, it auto-detects the language using
-the file name. When formatting standard input or a file that doesn't have the
-extension corresponding to its language, ``-assume-filename=`` option can be
-used to override the file name :program:`clang-format` uses to detect the
-language.
-
-An example of a configuration file for multiple languages:
-
-.. code-block:: yaml
-
- ---
- # We'll use defaults from the LLVM style, but with 4 columns indentation.
- BasedOnStyle: LLVM
- IndentWidth: 4
- ---
- Language: Cpp
- # Force pointers to the type for C++.
- DerivePointerAlignment: false
- PointerAlignment: Left
- ---
- Language: JavaScript
- # Use 100 columns for JS.
- ColumnLimit: 100
- ---
- Language: Proto
- # Don't format .proto files.
- DisableFormat: true
- ...
-
-An easy way to get a valid ``.clang-format`` file containing all configuration
-options of a certain predefined style is:
-
-.. code-block:: console
-
- clang-format -style=llvm -dump-config > .clang-format
-
-When specifying configuration in the ``-style=`` option, the same configuration
-is applied for all input files. The format of the configuration is:
-
-.. code-block:: console
-
- -style='{key1: value1, key2: value2, ...}'
-
-
-Disabling Formatting on a Piece of Code
-=======================================
-
-Clang-format understands also special comments that switch formatting in a
-delimited range. The code between a comment ``// clang-format off`` or
-``/* clang-format off */`` up to a comment ``// clang-format on`` or
-``/* clang-format on */`` will not be formatted. The comments themselves
-will be formatted (aligned) normally.
-
-.. code-block:: c++
-
- int formatted_code;
- // clang-format off
- void unformatted_code ;
- // clang-format on
- void formatted_code_again;
-
-
-Configuring Style in Code
-=========================
-
-When using ``clang::format::reformat(...)`` functions, the format is specified
-by supplying the `clang::format::FormatStyle
-<https://clang.llvm.org/doxygen/structclang_1_1format_1_1FormatStyle.html>`_
-structure.
-
-
-Configurable Format Style Options
-=================================
-
-This section lists the supported style options. Value type is specified for
-each option. For enumeration types possible values are specified both as a C++
-enumeration member (with a prefix, e.g. ``LS_Auto``), and as a value usable in
-the configuration (without a prefix: ``Auto``).
-
-
-**BasedOnStyle** (``string``)
- The style used for all options not specifically set in the configuration.
-
- This option is supported only in the :program:`clang-format` configuration
- (both within ``-style='{...}'`` and the ``.clang-format`` file).
-
- Possible values:
-
- * ``LLVM``
- A style complying with the `LLVM coding standards
- <https://llvm.org/docs/CodingStandards.html>`_
- * ``Google``
- A style complying with `Google's C++ style guide
- <http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml>`_
- * ``Chromium``
- A style complying with `Chromium's style guide
- <http://www.chromium.org/developers/coding-style>`_
- * ``Mozilla``
- A style complying with `Mozilla's style guide
- <https://developer.mozilla.org/en-US/docs/Developer_Guide/Coding_Style>`_
- * ``WebKit``
- A style complying with `WebKit's style guide
- <http://www.webkit.org/coding/coding-style.html>`_
-
-.. START_FORMAT_STYLE_OPTIONS
-
-**AccessModifierOffset** (``int``)
- The extra indent or outdent of access modifiers, e.g. ``public:``.
-
-**AlignAfterOpenBracket** (``BracketAlignmentStyle``)
- If ``true``, horizontally aligns arguments after an open bracket.
-
- This applies to round brackets (parentheses), angle brackets and square
- brackets.
-
- Possible values:
-
- * ``BAS_Align`` (in configuration: ``Align``)
- Align parameters on the open bracket, e.g.:
-
- .. code-block:: c++
-
- someLongFunction(argument1,
- argument2);
-
- * ``BAS_DontAlign`` (in configuration: ``DontAlign``)
- Don't align, instead use ``ContinuationIndentWidth``, e.g.:
-
- .. code-block:: c++
-
- someLongFunction(argument1,
- argument2);
-
- * ``BAS_AlwaysBreak`` (in configuration: ``AlwaysBreak``)
- Always break after an open bracket, if the parameters don't fit
- on a single line, e.g.:
-
- .. code-block:: c++
-
- someLongFunction(
- argument1, argument2);
-
-
-
-**AlignConsecutiveAssignments** (``bool``)
- If ``true``, aligns consecutive assignments.
-
- This will align the assignment operators of consecutive lines. This
- will result in formattings like
-
- .. code-block:: c++
-
- int aaaa = 12;
- int b = 23;
- int ccc = 23;
-
-**AlignConsecutiveDeclarations** (``bool``)
- If ``true``, aligns consecutive declarations.
-
- This will align the declaration names of consecutive lines. This
- will result in formattings like
-
- .. code-block:: c++
-
- int aaaa = 12;
- float b = 23;
- std::string ccc = 23;
-
-**AlignEscapedNewlines** (``EscapedNewlineAlignmentStyle``)
- Options for aligning backslashes in escaped newlines.
-
- Possible values:
-
- * ``ENAS_DontAlign`` (in configuration: ``DontAlign``)
- Don't align escaped newlines.
-
- .. code-block:: c++
-
- #define A \
- int aaaa; \
- int b; \
- int dddddddddd;
-
- * ``ENAS_Left`` (in configuration: ``Left``)
- Align escaped newlines as far left as possible.
-
- .. code-block:: c++
-
- true:
- #define A \
- int aaaa; \
- int b; \
- int dddddddddd;
-
- false:
-
- * ``ENAS_Right`` (in configuration: ``Right``)
- Align escaped newlines in the right-most column.
-
- .. code-block:: c++
-
- #define A \
- int aaaa; \
- int b; \
- int dddddddddd;
-
-
-
-**AlignOperands** (``bool``)
- If ``true``, horizontally align operands of binary and ternary
- expressions.
-
- Specifically, this aligns operands of a single expression that needs to be
- split over multiple lines, e.g.:
-
- .. code-block:: c++
-
- int aaa = bbbbbbbbbbbbbbb +
- ccccccccccccccc;
-
-**AlignTrailingComments** (``bool``)
- If ``true``, aligns trailing comments.
-
- .. code-block:: c++
-
- true: false:
- int a; // My comment a vs. int a; // My comment a
- int b = 2; // comment b int b = 2; // comment about b
-
-**AllowAllParametersOfDeclarationOnNextLine** (``bool``)
- If the function declaration doesn't fit on a line,
- allow putting all parameters of a function declaration onto
- the next line even if ``BinPackParameters`` is ``false``.
-
- .. code-block:: c++
-
- true:
- void myFunction(
- int a, int b, int c, int d, int e);
-
- false:
- void myFunction(int a,
- int b,
- int c,
- int d,
- int e);
-
-**AllowShortBlocksOnASingleLine** (``bool``)
- Allows contracting simple braced statements to a single line.
-
- E.g., this allows ``if (a) { return; }`` to be put on a single line.
-
-**AllowShortCaseLabelsOnASingleLine** (``bool``)
- If ``true``, short case labels will be contracted to a single line.
-
- .. code-block:: c++
-
- true: false:
- switch (a) { vs. switch (a) {
- case 1: x = 1; break; case 1:
- case 2: return; x = 1;
- } break;
- case 2:
- return;
- }
-
-**AllowShortFunctionsOnASingleLine** (``ShortFunctionStyle``)
- Dependent on the value, ``int f() { return 0; }`` can be put on a
- single line.
-
- Possible values:
-
- * ``SFS_None`` (in configuration: ``None``)
- Never merge functions into a single line.
-
- * ``SFS_InlineOnly`` (in configuration: ``InlineOnly``)
- Only merge functions defined inside a class. Same as "inline",
- except it does not implies "empty": i.e. top level empty functions
- are not merged either.
-
- .. code-block:: c++
-
- class Foo {
- void f() { foo(); }
- };
- void f() {
- foo();
- }
- void f() {
- }
-
- * ``SFS_Empty`` (in configuration: ``Empty``)
- Only merge empty functions.
-
- .. code-block:: c++
-
- void f() {}
- void f2() {
- bar2();
- }
-
- * ``SFS_Inline`` (in configuration: ``Inline``)
- Only merge functions defined inside a class. Implies "empty".
-
- .. code-block:: c++
-
- class Foo {
- void f() { foo(); }
- };
- void f() {
- foo();
- }
- void f() {}
-
- * ``SFS_All`` (in configuration: ``All``)
- Merge all functions fitting on a single line.
-
- .. code-block:: c++
-
- class Foo {
- void f() { foo(); }
- };
- void f() { bar(); }
-
-
-
-**AllowShortIfStatementsOnASingleLine** (``bool``)
- If ``true``, ``if (a) return;`` can be put on a single line.
-
-**AllowShortLoopsOnASingleLine** (``bool``)
- If ``true``, ``while (true) continue;`` can be put on a single
- line.
-
-**AlwaysBreakAfterDefinitionReturnType** (``DefinitionReturnTypeBreakingStyle``)
- The function definition return type breaking style to use. This
- option is **deprecated** and is retained for backwards compatibility.
-
- Possible values:
-
- * ``DRTBS_None`` (in configuration: ``None``)
- Break after return type automatically.
- ``PenaltyReturnTypeOnItsOwnLine`` is taken into account.
-
- * ``DRTBS_All`` (in configuration: ``All``)
- Always break after the return type.
-
- * ``DRTBS_TopLevel`` (in configuration: ``TopLevel``)
- Always break after the return types of top-level functions.
-
-
-
-**AlwaysBreakAfterReturnType** (``ReturnTypeBreakingStyle``)
- The function declaration return type breaking style to use.
-
- Possible values:
-
- * ``RTBS_None`` (in configuration: ``None``)
- Break after return type automatically.
- ``PenaltyReturnTypeOnItsOwnLine`` is taken into account.
-
- .. code-block:: c++
-
- class A {
- int f() { return 0; };
- };
- int f();
- int f() { return 1; }
-
- * ``RTBS_All`` (in configuration: ``All``)
- Always break after the return type.
-
- .. code-block:: c++
-
- class A {
- int
- f() {
- return 0;
- };
- };
- int
- f();
- int
- f() {
- return 1;
- }
-
- * ``RTBS_TopLevel`` (in configuration: ``TopLevel``)
- Always break after the return types of top-level functions.
-
- .. code-block:: c++
-
- class A {
- int f() { return 0; };
- };
- int
- f();
- int
- f() {
- return 1;
- }
-
- * ``RTBS_AllDefinitions`` (in configuration: ``AllDefinitions``)
- Always break after the return type of function definitions.
-
- .. code-block:: c++
-
- class A {
- int
- f() {
- return 0;
- };
- };
- int f();
- int
- f() {
- return 1;
- }
-
- * ``RTBS_TopLevelDefinitions`` (in configuration: ``TopLevelDefinitions``)
- Always break after the return type of top-level definitions.
-
- .. code-block:: c++
-
- class A {
- int f() { return 0; };
- };
- int f();
- int
- f() {
- return 1;
- }
-
-
-
-**AlwaysBreakBeforeMultilineStrings** (``bool``)
- If ``true``, always break before multiline string literals.
-
- This flag is mean to make cases where there are multiple multiline strings
- in a file look more consistent. Thus, it will only take effect if wrapping
- the string at that point leads to it being indented
- ``ContinuationIndentWidth`` spaces from the start of the line.
-
- .. code-block:: c++
-
- true: false:
- aaaa = vs. aaaa = "bbbb"
- "bbbb" "cccc";
- "cccc";
-
-**AlwaysBreakTemplateDeclarations** (``BreakTemplateDeclarationsStyle``)
- The template declaration breaking style to use.
-
- Possible values:
-
- * ``BTDS_No`` (in configuration: ``No``)
- Do not force break before declaration.
- ``PenaltyBreakTemplateDeclaration`` is taken into account.
-
- .. code-block:: c++
-
- template <typename T> T foo() {
- }
- template <typename T> T foo(int aaaaaaaaaaaaaaaaaaaaa,
- int bbbbbbbbbbbbbbbbbbbbb) {
- }
-
- * ``BTDS_MultiLine`` (in configuration: ``MultiLine``)
- Force break after template declaration only when the following
- declaration spans multiple lines.
-
- .. code-block:: c++
-
- template <typename T> T foo() {
- }
- template <typename T>
- T foo(int aaaaaaaaaaaaaaaaaaaaa,
- int bbbbbbbbbbbbbbbbbbbbb) {
- }
-
- * ``BTDS_Yes`` (in configuration: ``Yes``)
- Always break after template declaration.
-
- .. code-block:: c++
-
- template <typename T>
- T foo() {
- }
- template <typename T>
- T foo(int aaaaaaaaaaaaaaaaaaaaa,
- int bbbbbbbbbbbbbbbbbbbbb) {
- }
-
-
-
-**BinPackArguments** (``bool``)
- If ``false``, a function call's arguments will either be all on the
- same line or will have one line each.
-
- .. code-block:: c++
-
- true:
- void f() {
- f(aaaaaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaaaaaa,
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa);
- }
-
- false:
- void f() {
- f(aaaaaaaaaaaaaaaaaaaa,
- aaaaaaaaaaaaaaaaaaaa,
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa);
- }
-
-**BinPackParameters** (``bool``)
- If ``false``, a function declaration's or function definition's
- parameters will either all be on the same line or will have one line each.
-
- .. code-block:: c++
-
- true:
- void f(int aaaaaaaaaaaaaaaaaaaa, int aaaaaaaaaaaaaaaaaaaa,
- int aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) {}
-
- false:
- void f(int aaaaaaaaaaaaaaaaaaaa,
- int aaaaaaaaaaaaaaaaaaaa,
- int aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) {}
-
-**BraceWrapping** (``BraceWrappingFlags``)
- Control of individual brace wrapping cases.
-
- If ``BreakBeforeBraces`` is set to ``BS_Custom``, use this to specify how
- each individual brace case should be handled. Otherwise, this is ignored.
-
- .. code-block:: yaml
-
- # Example of usage:
- BreakBeforeBraces: Custom
- BraceWrapping:
- AfterEnum: true
- AfterStruct: false
- SplitEmptyFunction: false
-
- Nested configuration flags:
-
-
- * ``bool AfterClass`` Wrap class definitions.
-
- .. code-block:: c++
-
- true:
- class foo {};
-
- false:
- class foo
- {};
-
- * ``bool AfterControlStatement`` Wrap control statements (``if``/``for``/``while``/``switch``/..).
-
- .. code-block:: c++
-
- true:
- if (foo())
- {
- } else
- {}
- for (int i = 0; i < 10; ++i)
- {}
-
- false:
- if (foo()) {
- } else {
- }
- for (int i = 0; i < 10; ++i) {
- }
-
- * ``bool AfterEnum`` Wrap enum definitions.
-
- .. code-block:: c++
-
- true:
- enum X : int
- {
- B
- };
-
- false:
- enum X : int { B };
-
- * ``bool AfterFunction`` Wrap function definitions.
-
- .. code-block:: c++
-
- true:
- void foo()
- {
- bar();
- bar2();
- }
-
- false:
- void foo() {
- bar();
- bar2();
- }
-
- * ``bool AfterNamespace`` Wrap namespace definitions.
-
- .. code-block:: c++
-
- true:
- namespace
- {
- int foo();
- int bar();
- }
-
- false:
- namespace {
- int foo();
- int bar();
- }
-
- * ``bool AfterObjCDeclaration`` Wrap ObjC definitions (interfaces, implementations...).
- @autoreleasepool and @synchronized blocks are wrapped
- according to `AfterControlStatement` flag.
-
- * ``bool AfterStruct`` Wrap struct definitions.
-
- .. code-block:: c++
-
- true:
- struct foo
- {
- int x;
- };
-
- false:
- struct foo {
- int x;
- };
-
- * ``bool AfterUnion`` Wrap union definitions.
-
- .. code-block:: c++
-
- true:
- union foo
- {
- int x;
- }
-
- false:
- union foo {
- int x;
- }
-
- * ``bool AfterExternBlock`` Wrap extern blocks.
-
- .. code-block:: c++
-
- true:
- extern "C"
- {
- int foo();
- }
-
- false:
- extern "C" {
- int foo();
- }
-
- * ``bool BeforeCatch`` Wrap before ``catch``.
-
- .. code-block:: c++
-
- true:
- try {
- foo();
- }
- catch () {
- }
-
- false:
- try {
- foo();
- } catch () {
- }
-
- * ``bool BeforeElse`` Wrap before ``else``.
-
- .. code-block:: c++
-
- true:
- if (foo()) {
- }
- else {
- }
-
- false:
- if (foo()) {
- } else {
- }
-
- * ``bool IndentBraces`` Indent the wrapped braces themselves.
-
- * ``bool SplitEmptyFunction`` If ``false``, empty function body can be put on a single line.
- This option is used only if the opening brace of the function has
- already been wrapped, i.e. the `AfterFunction` brace wrapping mode is
- set, and the function could/should not be put on a single line (as per
- `AllowShortFunctionsOnASingleLine` and constructor formatting options).
-
- .. code-block:: c++
-
- int f() vs. inf f()
- {} {
- }
-
- * ``bool SplitEmptyRecord`` If ``false``, empty record (e.g. class, struct or union) body
- can be put on a single line. This option is used only if the opening
- brace of the record has already been wrapped, i.e. the `AfterClass`
- (for classes) brace wrapping mode is set.
-
- .. code-block:: c++
-
- class Foo vs. class Foo
- {} {
- }
-
- * ``bool SplitEmptyNamespace`` If ``false``, empty namespace body can be put on a single line.
- This option is used only if the opening brace of the namespace has
- already been wrapped, i.e. the `AfterNamespace` brace wrapping mode is
- set.
-
- .. code-block:: c++
-
- namespace Foo vs. namespace Foo
- {} {
- }
-
-
-**BreakAfterJavaFieldAnnotations** (``bool``)
- Break after each annotation on a field in Java files.
-
- .. code-block:: java
-
- true: false:
- @Partial vs. @Partial @Mock DataLoad loader;
- @Mock
- DataLoad loader;
-
-**BreakBeforeBinaryOperators** (``BinaryOperatorStyle``)
- The way to wrap binary operators.
-
- Possible values:
-
- * ``BOS_None`` (in configuration: ``None``)
- Break after operators.
-
- .. code-block:: c++
-
- LooooooooooongType loooooooooooooooooooooongVariable =
- someLooooooooooooooooongFunction();
-
- bool value = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ==
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa &&
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa >
- ccccccccccccccccccccccccccccccccccccccccc;
-
- * ``BOS_NonAssignment`` (in configuration: ``NonAssignment``)
- Break before operators that aren't assignments.
-
- .. code-block:: c++
-
- LooooooooooongType loooooooooooooooooooooongVariable =
- someLooooooooooooooooongFunction();
-
- bool value = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- == aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- && aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- > ccccccccccccccccccccccccccccccccccccccccc;
-
- * ``BOS_All`` (in configuration: ``All``)
- Break before operators.
-
- .. code-block:: c++
-
- LooooooooooongType loooooooooooooooooooooongVariable
- = someLooooooooooooooooongFunction();
-
- bool value = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- == aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- && aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- > ccccccccccccccccccccccccccccccccccccccccc;
-
-
-
-**BreakBeforeBraces** (``BraceBreakingStyle``)
- The brace breaking style to use.
-
- Possible values:
-
- * ``BS_Attach`` (in configuration: ``Attach``)
- Always attach braces to surrounding context.
-
- .. code-block:: c++
-
- try {
- foo();
- } catch () {
- }
- void foo() { bar(); }
- class foo {};
- if (foo()) {
- } else {
- }
- enum X : int { A, B };
-
- * ``BS_Linux`` (in configuration: ``Linux``)
- Like ``Attach``, but break before braces on function, namespace and
- class definitions.
-
- .. code-block:: c++
-
- try {
- foo();
- } catch () {
- }
- void foo() { bar(); }
- class foo
- {
- };
- if (foo()) {
- } else {
- }
- enum X : int { A, B };
-
- * ``BS_Mozilla`` (in configuration: ``Mozilla``)
- Like ``Attach``, but break before braces on enum, function, and record
- definitions.
-
- .. code-block:: c++
-
- try {
- foo();
- } catch () {
- }
- void foo() { bar(); }
- class foo
- {
- };
- if (foo()) {
- } else {
- }
- enum X : int { A, B };
-
- * ``BS_Stroustrup`` (in configuration: ``Stroustrup``)
- Like ``Attach``, but break before function definitions, ``catch``, and
- ``else``.
-
- .. code-block:: c++
-
- try {
- foo();
- }
- catch () {
- }
- void foo() { bar(); }
- class foo {
- };
- if (foo()) {
- }
- else {
- }
- enum X : int { A, B };
-
- * ``BS_Allman`` (in configuration: ``Allman``)
- Always break before braces.
-
- .. code-block:: c++
-
- try {
- foo();
- }
- catch () {
- }
- void foo() { bar(); }
- class foo {
- };
- if (foo()) {
- }
- else {
- }
- enum X : int { A, B };
-
- * ``BS_GNU`` (in configuration: ``GNU``)
- Always break before braces and add an extra level of indentation to
- braces of control statements, not to those of class, function
- or other definitions.
-
- .. code-block:: c++
-
- try
- {
- foo();
- }
- catch ()
- {
- }
- void foo() { bar(); }
- class foo
- {
- };
- if (foo())
- {
- }
- else
- {
- }
- enum X : int
- {
- A,
- B
- };
-
- * ``BS_WebKit`` (in configuration: ``WebKit``)
- Like ``Attach``, but break before functions.
-
- .. code-block:: c++
-
- try {
- foo();
- } catch () {
- }
- void foo() { bar(); }
- class foo {
- };
- if (foo()) {
- } else {
- }
- enum X : int { A, B };
-
- * ``BS_Custom`` (in configuration: ``Custom``)
- Configure each individual brace in `BraceWrapping`.
-
-
-
-**BreakBeforeTernaryOperators** (``bool``)
- If ``true``, ternary operators will be placed after line breaks.
-
- .. code-block:: c++
-
- true:
- veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongDescription
- ? firstValue
- : SecondValueVeryVeryVeryVeryLong;
-
- false:
- veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongDescription ?
- firstValue :
- SecondValueVeryVeryVeryVeryLong;
-
-**BreakConstructorInitializers** (``BreakConstructorInitializersStyle``)
- The constructor initializers style to use.
-
- Possible values:
-
- * ``BCIS_BeforeColon`` (in configuration: ``BeforeColon``)
- Break constructor initializers before the colon and after the commas.
-
- .. code-block:: c++
-
- Constructor()
- : initializer1(),
- initializer2()
-
- * ``BCIS_BeforeComma`` (in configuration: ``BeforeComma``)
- Break constructor initializers before the colon and commas, and align
- the commas with the colon.
-
- .. code-block:: c++
-
- Constructor()
- : initializer1()
- , initializer2()
-
- * ``BCIS_AfterColon`` (in configuration: ``AfterColon``)
- Break constructor initializers after the colon and commas.
-
- .. code-block:: c++
-
- Constructor() :
- initializer1(),
- initializer2()
-
-
-
-**BreakInheritanceList** (``BreakInheritanceListStyle``)
- The inheritance list style to use.
-
- Possible values:
-
- * ``BILS_BeforeColon`` (in configuration: ``BeforeColon``)
- Break inheritance list before the colon and after the commas.
-
- .. code-block:: c++
-
- class Foo
- : Base1,
- Base2
- {};
-
- * ``BILS_BeforeComma`` (in configuration: ``BeforeComma``)
- Break inheritance list before the colon and commas, and align
- the commas with the colon.
-
- .. code-block:: c++
-
- class Foo
- : Base1
- , Base2
- {};
-
- * ``BILS_AfterColon`` (in configuration: ``AfterColon``)
- Break inheritance list after the colon and commas.
-
- .. code-block:: c++
-
- class Foo :
- Base1,
- Base2
- {};
-
-
-
-**BreakStringLiterals** (``bool``)
- Allow breaking string literals when formatting.
-
-**ColumnLimit** (``unsigned``)
- The column limit.
-
- A column limit of ``0`` means that there is no column limit. In this case,
- clang-format will respect the input's line breaking decisions within
- statements unless they contradict other rules.
-
-**CommentPragmas** (``std::string``)
- A regular expression that describes comments with special meaning,
- which should not be split into lines or otherwise changed.
-
- .. code-block:: c++
-
- // CommentPragmas: '^ FOOBAR pragma:'
- // Will leave the following line unaffected
- #include <vector> // FOOBAR pragma: keep
-
-**CompactNamespaces** (``bool``)
- If ``true``, consecutive namespace declarations will be on the same
- line. If ``false``, each namespace is declared on a new line.
-
- .. code-block:: c++
-
- true:
- namespace Foo { namespace Bar {
- }}
-
- false:
- namespace Foo {
- namespace Bar {
- }
- }
-
- If it does not fit on a single line, the overflowing namespaces get
- wrapped:
-
- .. code-block:: c++
-
- namespace Foo { namespace Bar {
- namespace Extra {
- }}}
-
-**ConstructorInitializerAllOnOneLineOrOnePerLine** (``bool``)
- If the constructor initializers don't fit on a line, put each
- initializer on its own line.
-
- .. code-block:: c++
-
- true:
- SomeClass::Constructor()
- : aaaaaaaa(aaaaaaaa), aaaaaaaa(aaaaaaaa), aaaaaaaa(aaaaaaaaaaaaaaaaaaaaaaaaa) {
- return 0;
- }
-
- false:
- SomeClass::Constructor()
- : aaaaaaaa(aaaaaaaa), aaaaaaaa(aaaaaaaa),
- aaaaaaaa(aaaaaaaaaaaaaaaaaaaaaaaaa) {
- return 0;
- }
-
-**ConstructorInitializerIndentWidth** (``unsigned``)
- The number of characters to use for indentation of constructor
- initializer lists as well as inheritance lists.
-
-**ContinuationIndentWidth** (``unsigned``)
- Indent width for line continuations.
-
- .. code-block:: c++
-
- ContinuationIndentWidth: 2
-
- int i = // VeryVeryVeryVeryVeryLongComment
- longFunction( // Again a long comment
- arg);
-
-**Cpp11BracedListStyle** (``bool``)
- If ``true``, format braced lists as best suited for C++11 braced
- lists.
-
- Important differences:
- - No spaces inside the braced list.
- - No line break before the closing brace.
- - Indentation with the continuation indent, not with the block indent.
-
- Fundamentally, C++11 braced lists are formatted exactly like function
- calls would be formatted in their place. If the braced list follows a name
- (e.g. a type or variable name), clang-format formats as if the ``{}`` were
- the parentheses of a function call with that name. If there is no name,
- a zero-length name is assumed.
-
- .. code-block:: c++
-
- true: false:
- vector<int> x{1, 2, 3, 4}; vs. vector<int> x{ 1, 2, 3, 4 };
- vector<T> x{{}, {}, {}, {}}; vector<T> x{ {}, {}, {}, {} };
- f(MyMap[{composite, key}]); f(MyMap[{ composite, key }]);
- new int[3]{1, 2, 3}; new int[3]{ 1, 2, 3 };
-
-**DerivePointerAlignment** (``bool``)
- If ``true``, analyze the formatted file for the most common
- alignment of ``&`` and ``*``.
- Pointer and reference alignment styles are going to be updated according
- to the preferences found in the file.
- ``PointerAlignment`` is then used only as fallback.
-
-**DisableFormat** (``bool``)
- Disables formatting completely.
-
-**ExperimentalAutoDetectBinPacking** (``bool``)
- If ``true``, clang-format detects whether function calls and
- definitions are formatted with one parameter per line.
-
- Each call can be bin-packed, one-per-line or inconclusive. If it is
- inconclusive, e.g. completely on one line, but a decision needs to be
- made, clang-format analyzes whether there are other bin-packed cases in
- the input file and act accordingly.
-
- NOTE: This is an experimental flag, that might go away or be renamed. Do
- not use this in config files, etc. Use at your own risk.
-
-**FixNamespaceComments** (``bool``)
- If ``true``, clang-format adds missing namespace end comments and
- fixes invalid existing ones.
-
- .. code-block:: c++
-
- true: false:
- namespace a { vs. namespace a {
- foo(); foo();
- } // namespace a; }
-
-**ForEachMacros** (``std::vector<std::string>``)
- A vector of macros that should be interpreted as foreach loops
- instead of as function calls.
-
- These are expected to be macros of the form:
-
- .. code-block:: c++
-
- FOREACH(<variable-declaration>, ...)
- <loop-body>
-
- In the .clang-format configuration file, this can be configured like:
-
- .. code-block:: yaml
-
- ForEachMacros: ['RANGES_FOR', 'FOREACH']
-
- For example: BOOST_FOREACH.
-
-**IncludeBlocks** (``IncludeBlocksStyle``)
- Dependent on the value, multiple ``#include`` blocks can be sorted
- as one and divided based on category.
-
- Possible values:
-
- * ``IBS_Preserve`` (in configuration: ``Preserve``)
- Sort each ``#include`` block separately.
-
- .. code-block:: c++
-
- #include "b.h" into #include "b.h"
-
- #include <lib/main.h> #include "a.h"
- #include "a.h" #include <lib/main.h>
-
- * ``IBS_Merge`` (in configuration: ``Merge``)
- Merge multiple ``#include`` blocks together and sort as one.
-
- .. code-block:: c++
-
- #include "b.h" into #include "a.h"
- #include "b.h"
- #include <lib/main.h> #include <lib/main.h>
- #include "a.h"
-
- * ``IBS_Regroup`` (in configuration: ``Regroup``)
- Merge multiple ``#include`` blocks together and sort as one.
- Then split into groups based on category priority. See
- ``IncludeCategories``.
-
- .. code-block:: c++
-
- #include "b.h" into #include "a.h"
- #include "b.h"
- #include <lib/main.h>
- #include "a.h" #include <lib/main.h>
-
-
-
-**IncludeCategories** (``std::vector<IncludeCategory>``)
- Regular expressions denoting the different ``#include`` categories
- used for ordering ``#includes``.
-
- `POSIX extended
- <http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html>`_
- regular expressions are supported.
-
- These regular expressions are matched against the filename of an include
- (including the <> or "") in order. The value belonging to the first
- matching regular expression is assigned and ``#includes`` are sorted first
- according to increasing category number and then alphabetically within
- each category.
-
- If none of the regular expressions match, INT_MAX is assigned as
- category. The main header for a source file automatically gets category 0.
- so that it is generally kept at the beginning of the ``#includes``
- (https://llvm.org/docs/CodingStandards.html#include-style). However, you
- can also assign negative priorities if you have certain headers that
- always need to be first.
-
- To configure this in the .clang-format file, use:
-
- .. code-block:: yaml
-
- IncludeCategories:
- - Regex: '^"(llvm|llvm-c|clang|clang-c)/'
- Priority: 2
- - Regex: '^(<|"(gtest|gmock|isl|json)/)'
- Priority: 3
- - Regex: '<[[:alnum:].]+>'
- Priority: 4
- - Regex: '.*'
- Priority: 1
-
-**IncludeIsMainRegex** (``std::string``)
- Specify a regular expression of suffixes that are allowed in the
- file-to-main-include mapping.
-
- When guessing whether a #include is the "main" include (to assign
- category 0, see above), use this regex of allowed suffixes to the header
- stem. A partial match is done, so that:
- - "" means "arbitrary suffix"
- - "$" means "no suffix"
-
- For example, if configured to "(_test)?$", then a header a.h would be seen
- as the "main" include in both a.cc and a_test.cc.
-
-**IndentCaseLabels** (``bool``)
- Indent case labels one level from the switch statement.
-
- When ``false``, use the same indentation level as for the switch statement.
- Switch statement body is always indented one level more than case labels.
-
- .. code-block:: c++
-
- false: true:
- switch (fool) { vs. switch (fool) {
- case 1: case 1:
- bar(); bar();
- break; break;
- default: default:
- plop(); plop();
- } }
-
-**IndentPPDirectives** (``PPDirectiveIndentStyle``)
- The preprocessor directive indenting style to use.
-
- Possible values:
-
- * ``PPDIS_None`` (in configuration: ``None``)
- Does not indent any directives.
-
- .. code-block:: c++
-
- #if FOO
- #if BAR
- #include <foo>
- #endif
- #endif
-
- * ``PPDIS_AfterHash`` (in configuration: ``AfterHash``)
- Indents directives after the hash.
-
- .. code-block:: c++
-
- #if FOO
- # if BAR
- # include <foo>
- # endif
- #endif
-
-
-
-**IndentWidth** (``unsigned``)
- The number of columns to use for indentation.
-
- .. code-block:: c++
-
- IndentWidth: 3
-
- void f() {
- someFunction();
- if (true, false) {
- f();
- }
- }
-
-**IndentWrappedFunctionNames** (``bool``)
- Indent if a function definition or declaration is wrapped after the
- type.
-
- .. code-block:: c++
-
- true:
- LoooooooooooooooooooooooooooooooooooooooongReturnType
- LoooooooooooooooooooooooooooooooongFunctionDeclaration();
-
- false:
- LoooooooooooooooooooooooooooooooooooooooongReturnType
- LoooooooooooooooooooooooooooooooongFunctionDeclaration();
-
-**JavaImportGroups** (``std::vector<std::string>``)
- A vector of prefixes ordered by the desired groups for Java imports.
-
- Each group is separated by a newline. Static imports will also follow the
- same grouping convention above all non-static imports. One group's prefix
- can be a subset of another - the longest prefix is always matched. Within
- a group, the imports are ordered lexicographically.
-
- In the .clang-format configuration file, this can be configured like
- in the following yaml example. This will result in imports being
- formatted as in the Java example below.
-
- .. code-block:: yaml
-
- JavaImportGroups: ['com.example', 'com', 'org']
-
-
- .. code-block:: java
-
- import static com.example.function1;
-
- import static com.test.function2;
-
- import static org.example.function3;
-
- import com.example.ClassA;
- import com.example.Test;
- import com.example.a.ClassB;
-
- import com.test.ClassC;
-
- import org.example.ClassD;
-
-**JavaScriptQuotes** (``JavaScriptQuoteStyle``)
- The JavaScriptQuoteStyle to use for JavaScript strings.
-
- Possible values:
-
- * ``JSQS_Leave`` (in configuration: ``Leave``)
- Leave string quotes as they are.
-
- .. code-block:: js
-
- string1 = "foo";
- string2 = 'bar';
-
- * ``JSQS_Single`` (in configuration: ``Single``)
- Always use single quotes.
-
- .. code-block:: js
-
- string1 = 'foo';
- string2 = 'bar';
-
- * ``JSQS_Double`` (in configuration: ``Double``)
- Always use double quotes.
-
- .. code-block:: js
-
- string1 = "foo";
- string2 = "bar";
-
-
-
-**JavaScriptWrapImports** (``bool``)
- Whether to wrap JavaScript import/export statements.
-
- .. code-block:: js
-
- true:
- import {
- VeryLongImportsAreAnnoying,
- VeryLongImportsAreAnnoying,
- VeryLongImportsAreAnnoying,
- } from 'some/module.js'
-
- false:
- import {VeryLongImportsAreAnnoying, VeryLongImportsAreAnnoying, VeryLongImportsAreAnnoying,} from "some/module.js"
-
-**KeepEmptyLinesAtTheStartOfBlocks** (``bool``)
- If true, the empty line at the start of blocks is kept.
-
- .. code-block:: c++
-
- true: false:
- if (foo) { vs. if (foo) {
- bar();
- bar(); }
- }
-
-**Language** (``LanguageKind``)
- Language, this format style is targeted at.
-
- Possible values:
-
- * ``LK_None`` (in configuration: ``None``)
- Do not use.
-
- * ``LK_Cpp`` (in configuration: ``Cpp``)
- Should be used for C, C++.
-
- * ``LK_Java`` (in configuration: ``Java``)
- Should be used for Java.
-
- * ``LK_JavaScript`` (in configuration: ``JavaScript``)
- Should be used for JavaScript.
-
- * ``LK_ObjC`` (in configuration: ``ObjC``)
- Should be used for Objective-C, Objective-C++.
-
- * ``LK_Proto`` (in configuration: ``Proto``)
- Should be used for Protocol Buffers
- (https://developers.google.com/protocol-buffers/).
-
- * ``LK_TableGen`` (in configuration: ``TableGen``)
- Should be used for TableGen code.
-
- * ``LK_TextProto`` (in configuration: ``TextProto``)
- Should be used for Protocol Buffer messages in text format
- (https://developers.google.com/protocol-buffers/).
-
-
-
-**MacroBlockBegin** (``std::string``)
- A regular expression matching macros that start a block.
-
- .. code-block:: c++
-
- # With:
- MacroBlockBegin: "^NS_MAP_BEGIN|\
- NS_TABLE_HEAD$"
- MacroBlockEnd: "^\
- NS_MAP_END|\
- NS_TABLE_.*_END$"
-
- NS_MAP_BEGIN
- foo();
- NS_MAP_END
-
- NS_TABLE_HEAD
- bar();
- NS_TABLE_FOO_END
-
- # Without:
- NS_MAP_BEGIN
- foo();
- NS_MAP_END
-
- NS_TABLE_HEAD
- bar();
- NS_TABLE_FOO_END
-
-**MacroBlockEnd** (``std::string``)
- A regular expression matching macros that end a block.
-
-**MaxEmptyLinesToKeep** (``unsigned``)
- The maximum number of consecutive empty lines to keep.
-
- .. code-block:: c++
-
- MaxEmptyLinesToKeep: 1 vs. MaxEmptyLinesToKeep: 0
- int f() { int f() {
- int = 1; int i = 1;
- i = foo();
- i = foo(); return i;
- }
- return i;
- }
-
-**NamespaceIndentation** (``NamespaceIndentationKind``)
- The indentation used for namespaces.
-
- Possible values:
-
- * ``NI_None`` (in configuration: ``None``)
- Don't indent in namespaces.
-
- .. code-block:: c++
-
- namespace out {
- int i;
- namespace in {
- int i;
- }
- }
-
- * ``NI_Inner`` (in configuration: ``Inner``)
- Indent only in inner namespaces (nested in other namespaces).
-
- .. code-block:: c++
-
- namespace out {
- int i;
- namespace in {
- int i;
- }
- }
-
- * ``NI_All`` (in configuration: ``All``)
- Indent in all namespaces.
-
- .. code-block:: c++
-
- namespace out {
- int i;
- namespace in {
- int i;
- }
- }
-
-
-
-**ObjCBinPackProtocolList** (``BinPackStyle``)
- Controls bin-packing Objective-C protocol conformance list
- items into as few lines as possible when they go over ``ColumnLimit``.
-
- If ``Auto`` (the default), delegates to the value in
- ``BinPackParameters``. If that is ``true``, bin-packs Objective-C
- protocol conformance list items into as few lines as possible
- whenever they go over ``ColumnLimit``.
-
- If ``Always``, always bin-packs Objective-C protocol conformance
- list items into as few lines as possible whenever they go over
- ``ColumnLimit``.
-
- If ``Never``, lays out Objective-C protocol conformance list items
- onto individual lines whenever they go over ``ColumnLimit``.
-
-
- .. code-block:: objc
-
- Always (or Auto, if BinPackParameters=true):
- @interface ccccccccccccc () <
- ccccccccccccc, ccccccccccccc,
- ccccccccccccc, ccccccccccccc> {
- }
-
- Never (or Auto, if BinPackParameters=false):
- @interface ddddddddddddd () <
- ddddddddddddd,
- ddddddddddddd,
- ddddddddddddd,
- ddddddddddddd> {
- }
-
- Possible values:
-
- * ``BPS_Auto`` (in configuration: ``Auto``)
- Automatically determine parameter bin-packing behavior.
-
- * ``BPS_Always`` (in configuration: ``Always``)
- Always bin-pack parameters.
-
- * ``BPS_Never`` (in configuration: ``Never``)
- Never bin-pack parameters.
-
-
-
-**ObjCBlockIndentWidth** (``unsigned``)
- The number of characters to use for indentation of ObjC blocks.
-
- .. code-block:: objc
-
- ObjCBlockIndentWidth: 4
-
- [operation setCompletionBlock:^{
- [self onOperationDone];
- }];
-
-**ObjCSpaceAfterProperty** (``bool``)
- Add a space after ``@property`` in Objective-C, i.e. use
- ``@property (readonly)`` instead of ``@property(readonly)``.
-
-**ObjCSpaceBeforeProtocolList** (``bool``)
- Add a space in front of an Objective-C protocol list, i.e. use
- ``Foo <Protocol>`` instead of ``Foo<Protocol>``.
-
-**PenaltyBreakAssignment** (``unsigned``)
- The penalty for breaking around an assignment operator.
-
-**PenaltyBreakBeforeFirstCallParameter** (``unsigned``)
- The penalty for breaking a function call after ``call(``.
-
-**PenaltyBreakComment** (``unsigned``)
- The penalty for each line break introduced inside a comment.
-
-**PenaltyBreakFirstLessLess** (``unsigned``)
- The penalty for breaking before the first ``<<``.
-
-**PenaltyBreakString** (``unsigned``)
- The penalty for each line break introduced inside a string literal.
-
-**PenaltyBreakTemplateDeclaration** (``unsigned``)
- The penalty for breaking after template declaration.
-
-**PenaltyExcessCharacter** (``unsigned``)
- The penalty for each character outside of the column limit.
-
-**PenaltyReturnTypeOnItsOwnLine** (``unsigned``)
- Penalty for putting the return type of a function onto its own
- line.
-
-**PointerAlignment** (``PointerAlignmentStyle``)
- Pointer and reference alignment style.
-
- Possible values:
-
- * ``PAS_Left`` (in configuration: ``Left``)
- Align pointer to the left.
-
- .. code-block:: c++
-
- int* a;
-
- * ``PAS_Right`` (in configuration: ``Right``)
- Align pointer to the right.
-
- .. code-block:: c++
-
- int *a;
-
- * ``PAS_Middle`` (in configuration: ``Middle``)
- Align pointer in the middle.
-
- .. code-block:: c++
-
- int * a;
-
-
-
-**RawStringFormats** (``std::vector<RawStringFormat>``)
- Defines hints for detecting supported languages code blocks in raw
- strings.
-
- A raw string with a matching delimiter or a matching enclosing function
- name will be reformatted assuming the specified language based on the
- style for that language defined in the .clang-format file. If no style has
- been defined in the .clang-format file for the specific language, a
- predefined style given by 'BasedOnStyle' is used. If 'BasedOnStyle' is not
- found, the formatting is based on llvm style. A matching delimiter takes
- precedence over a matching enclosing function name for determining the
- language of the raw string contents.
-
- If a canonical delimiter is specified, occurrences of other delimiters for
- the same language will be updated to the canonical if possible.
-
- There should be at most one specification per language and each delimiter
- and enclosing function should not occur in multiple specifications.
-
- To configure this in the .clang-format file, use:
-
- .. code-block:: yaml
-
- RawStringFormats:
- - Language: TextProto
- Delimiters:
- - 'pb'
- - 'proto'
- EnclosingFunctions:
- - 'PARSE_TEXT_PROTO'
- BasedOnStyle: google
- - Language: Cpp
- Delimiters:
- - 'cc'
- - 'cpp'
- BasedOnStyle: llvm
- CanonicalDelimiter: 'cc'
-
-**ReflowComments** (``bool``)
- If ``true``, clang-format will attempt to re-flow comments.
-
- .. code-block:: c++
-
- false:
- // veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of information
- /* second veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of information */
-
- true:
- // veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of
- // information
- /* second veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of
- * information */
-
-**SortIncludes** (``bool``)
- If ``true``, clang-format will sort ``#includes``.
-
- .. code-block:: c++
-
- false: true:
- #include "b.h" vs. #include "a.h"
- #include "a.h" #include "b.h"
-
-**SortUsingDeclarations** (``bool``)
- If ``true``, clang-format will sort using declarations.
-
- The order of using declarations is defined as follows:
- Split the strings by "::" and discard any initial empty strings. The last
- element of each list is a non-namespace name; all others are namespace
- names. Sort the lists of names lexicographically, where the sort order of
- individual names is that all non-namespace names come before all namespace
- names, and within those groups, names are in case-insensitive
- lexicographic order.
-
- .. code-block:: c++
-
- false: true:
- using std::cout; vs. using std::cin;
- using std::cin; using std::cout;
-
-**SpaceAfterCStyleCast** (``bool``)
- If ``true``, a space is inserted after C style casts.
-
- .. code-block:: c++
-
- true: false:
- (int) i; vs. (int)i;
-
-**SpaceAfterTemplateKeyword** (``bool``)
- If ``true``, a space will be inserted after the 'template' keyword.
-
- .. code-block:: c++
-
- true: false:
- template <int> void foo(); vs. template<int> void foo();
-
-**SpaceBeforeAssignmentOperators** (``bool``)
- If ``false``, spaces will be removed before assignment operators.
-
- .. code-block:: c++
-
- true: false:
- int a = 5; vs. int a=5;
- a += 42 a+=42;
-
-**SpaceBeforeCpp11BracedList** (``bool``)
- If ``true``, a space will be inserted before a C++11 braced list
- used to initialize an object (after the preceding identifier or type).
-
- .. code-block:: c++
-
- true: false:
- Foo foo { bar }; vs. Foo foo{ bar };
- Foo {}; Foo{};
- vector<int> { 1, 2, 3 }; vector<int>{ 1, 2, 3 };
- new int[3] { 1, 2, 3 }; new int[3]{ 1, 2, 3 };
-
-**SpaceBeforeCtorInitializerColon** (``bool``)
- If ``false``, spaces will be removed before constructor initializer
- colon.
-
- .. code-block:: c++
-
- true: false:
- Foo::Foo() : a(a) {} Foo::Foo(): a(a) {}
-
-**SpaceBeforeInheritanceColon** (``bool``)
- If ``false``, spaces will be removed before inheritance colon.
-
- .. code-block:: c++
-
- true: false:
- class Foo : Bar {} vs. class Foo: Bar {}
-
-**SpaceBeforeParens** (``SpaceBeforeParensOptions``)
- Defines in which cases to put a space before opening parentheses.
-
- Possible values:
-
- * ``SBPO_Never`` (in configuration: ``Never``)
- Never put a space before opening parentheses.
-
- .. code-block:: c++
-
- void f() {
- if(true) {
- f();
- }
- }
-
- * ``SBPO_ControlStatements`` (in configuration: ``ControlStatements``)
- Put a space before opening parentheses only after control statement
- keywords (``for/if/while...``).
-
- .. code-block:: c++
-
- void f() {
- if (true) {
- f();
- }
- }
-
- * ``SBPO_Always`` (in configuration: ``Always``)
- Always put a space before opening parentheses, except when it's
- prohibited by the syntax rules (in function-like macro definitions) or
- when determined by other style rules (after unary operators, opening
- parentheses, etc.)
-
- .. code-block:: c++
-
- void f () {
- if (true) {
- f ();
- }
- }
-
-
-
-**SpaceBeforeRangeBasedForLoopColon** (``bool``)
- If ``false``, spaces will be removed before range-based for loop
- colon.
-
- .. code-block:: c++
-
- true: false:
- for (auto v : values) {} vs. for(auto v: values) {}
-
-**SpaceInEmptyParentheses** (``bool``)
- If ``true``, spaces may be inserted into ``()``.
-
- .. code-block:: c++
-
- true: false:
- void f( ) { vs. void f() {
- int x[] = {foo( ), bar( )}; int x[] = {foo(), bar()};
- if (true) { if (true) {
- f( ); f();
- } }
- } }
-
-**SpacesBeforeTrailingComments** (``unsigned``)
- The number of spaces before trailing line comments
- (``//`` - comments).
-
- This does not affect trailing block comments (``/*`` - comments) as
- those commonly have different usage patterns and a number of special
- cases.
-
- .. code-block:: c++
-
- SpacesBeforeTrailingComments: 3
- void f() {
- if (true) { // foo1
- f(); // bar
- } // foo
- }
-
-**SpacesInAngles** (``bool``)
- If ``true``, spaces will be inserted after ``<`` and before ``>``
- in template argument lists.
-
- .. code-block:: c++
-
- true: false:
- static_cast< int >(arg); vs. static_cast<int>(arg);
- std::function< void(int) > fct; std::function<void(int)> fct;
-
-**SpacesInCStyleCastParentheses** (``bool``)
- If ``true``, spaces may be inserted into C style casts.
-
- .. code-block:: c++
-
- true: false:
- x = ( int32 )y vs. x = (int32)y
-
-**SpacesInContainerLiterals** (``bool``)
- If ``true``, spaces are inserted inside container literals (e.g.
- ObjC and Javascript array and dict literals).
-
- .. code-block:: js
-
- true: false:
- var arr = [ 1, 2, 3 ]; vs. var arr = [1, 2, 3];
- f({a : 1, b : 2, c : 3}); f({a: 1, b: 2, c: 3});
-
-**SpacesInParentheses** (``bool``)
- If ``true``, spaces will be inserted after ``(`` and before ``)``.
-
- .. code-block:: c++
-
- true: false:
- t f( Deleted & ) & = delete; vs. t f(Deleted &) & = delete;
-
-**SpacesInSquareBrackets** (``bool``)
- If ``true``, spaces will be inserted after ``[`` and before ``]``.
- Lambdas or unspecified size array declarations will not be affected.
-
- .. code-block:: c++
-
- true: false:
- int a[ 5 ]; vs. int a[5];
- std::unique_ptr<int[]> foo() {} // Won't be affected
-
-**Standard** (``LanguageStandard``)
- Format compatible with this standard, e.g. use ``A<A<int> >``
- instead of ``A<A<int>>`` for ``LS_Cpp03``.
-
- Possible values:
-
- * ``LS_Cpp03`` (in configuration: ``Cpp03``)
- Use C++03-compatible syntax.
-
- * ``LS_Cpp11`` (in configuration: ``Cpp11``)
- Use features of C++11, C++14 and C++1z (e.g. ``A<A<int>>`` instead of
- ``A<A<int> >``).
-
- * ``LS_Auto`` (in configuration: ``Auto``)
- Automatic detection based on the input.
-
-
-
-**StatementMacros** (``std::vector<std::string>``)
- A vector of macros that should be interpreted as complete
- statements.
-
- Typical macros are expressions, and require a semi-colon to be
- added; sometimes this is not the case, and this allows to make
- clang-format aware of such cases.
-
- For example: Q_UNUSED
-
-**TabWidth** (``unsigned``)
- The number of columns used for tab stops.
-
-**UseTab** (``UseTabStyle``)
- The way to use tab characters in the resulting file.
-
- Possible values:
-
- * ``UT_Never`` (in configuration: ``Never``)
- Never use tab.
-
- * ``UT_ForIndentation`` (in configuration: ``ForIndentation``)
- Use tabs only for indentation.
-
- * ``UT_ForContinuationAndIndentation`` (in configuration: ``ForContinuationAndIndentation``)
- Use tabs only for line continuation and indentation.
-
- * ``UT_Always`` (in configuration: ``Always``)
- Use tabs whenever we need to fill whitespace that spans at least from
- one tab stop to the next one.
-
-
-
-.. END_FORMAT_STYLE_OPTIONS
-
-Adding additional style options
-===============================
-
-Each additional style option adds costs to the clang-format project. Some of
-these costs affect the clang-format development itself, as we need to make
-sure that any given combination of options work and that new features don't
-break any of the existing options in any way. There are also costs for end users
-as options become less discoverable and people have to think about and make a
-decision on options they don't really care about.
-
-The goal of the clang-format project is more on the side of supporting a
-limited set of styles really well as opposed to supporting every single style
-used by a codebase somewhere in the wild. Of course, we do want to support all
-major projects and thus have established the following bar for adding style
-options. Each new style option must ..
-
- * be used in a project of significant size (have dozens of contributors)
- * have a publicly accessible style guide
- * have a person willing to contribute and maintain patches
-
-Examples
-========
-
-A style similar to the `Linux Kernel style
-<https://www.kernel.org/doc/Documentation/CodingStyle>`_:
-
-.. code-block:: yaml
-
- BasedOnStyle: LLVM
- IndentWidth: 8
- UseTab: Always
- BreakBeforeBraces: Linux
- AllowShortIfStatementsOnASingleLine: false
- IndentCaseLabels: false
-
-The result is (imagine that tabs are used for indentation here):
-
-.. code-block:: c++
-
- void test()
- {
- switch (x) {
- case 0:
- case 1:
- do_something();
- break;
- case 2:
- do_something_else();
- break;
- default:
- break;
- }
- if (condition)
- do_something_completely_different();
-
- if (x == y) {
- q();
- } else if (x > y) {
- w();
- } else {
- r();
- }
- }
-
-A style similar to the default Visual Studio formatting style:
-
-.. code-block:: yaml
-
- UseTab: Never
- IndentWidth: 4
- BreakBeforeBraces: Allman
- AllowShortIfStatementsOnASingleLine: false
- IndentCaseLabels: false
- ColumnLimit: 0
-
-The result is:
-
-.. code-block:: c++
-
- void test()
- {
- switch (suffix)
- {
- case 0:
- case 1:
- do_something();
- break;
- case 2:
- do_something_else();
- break;
- default:
- break;
- }
- if (condition)
- do_somthing_completely_different();
-
- if (x == y)
- {
- q();
- }
- else if (x > y)
- {
- w();
- }
- else
- {
- r();
- }
- }