1 ========================== 2 Clang-Format Style Options 3 ========================== 4 5 :doc:`ClangFormatStyleOptions` describes configurable formatting style options 6 supported by :doc:`LibFormat` and :doc:`ClangFormat`. 7 8 When using :program:`clang-format` command line utility or 9 ``clang::format::reformat(...)`` functions from code, one can either use one of 10 the predefined styles (LLVM, Google, Chromium, Mozilla, WebKit) or create a 11 custom style by configuring specific style options. 12 13 14 Configuring Style with clang-format 15 =================================== 16 17 :program:`clang-format` supports two ways to provide custom style options: 18 directly specify style configuration in the ``-style=`` command line option or 19 use ``-style=file`` and put style configuration in the ``.clang-format`` or 20 ``_clang-format`` file in the project directory. 21 22 When using ``-style=file``, :program:`clang-format` for each input file will 23 try to find the ``.clang-format`` file located in the closest parent directory 24 of the input file. When the standard input is used, the search is started from 25 the current directory. 26 27 The ``.clang-format`` file uses YAML format: 28 29 .. code-block:: yaml 30 31 key1: value1 32 key2: value2 33 # A comment. 34 ... 35 36 An easy way to get a valid ``.clang-format`` file containing all configuration 37 options of a certain predefined style is: 38 39 .. code-block:: console 40 41 clang-format -style=llvm -dump-config > .clang-format 42 43 When specifying configuration in the ``-style=`` option, the same configuration 44 is applied for all input files. The format of the configuration is: 45 46 .. code-block:: console 47 48 -style='{key1: value1, key2: value2, ...}' 49 50 51 Configuring Style in Code 52 ========================= 53 54 When using ``clang::format::reformat(...)`` functions, the format is specified 55 by supplying the `clang::format::FormatStyle 56 <http://clang.llvm.org/doxygen/structclang_1_1format_1_1FormatStyle.html>`_ 57 structure. 58 59 60 Configurable Format Style Options 61 ================================= 62 63 This section lists the supported style options. Value type is specified for 64 each option. For enumeration types possible values are specified both as a C++ 65 enumeration member (with a prefix, e.g. ``LS_Auto``), and as a value usable in 66 the configuration (without a prefix: ``Auto``). 67 68 69 **BasedOnStyle** (``string``) 70 The style used for all options not specifically set in the configuration. 71 72 This option is supported only in the :program:`clang-format` configuration 73 (both within ``-style='{...}'`` and the ``.clang-format`` file). 74 75 Possible values: 76 77 * ``LLVM`` 78 A style complying with the `LLVM coding standards 79 <http://llvm.org/docs/CodingStandards.html>`_ 80 * ``Google`` 81 A style complying with `Google's C++ style guide 82 <http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml>`_ 83 * ``Chromium`` 84 A style complying with `Chromium's style guide 85 <http://www.chromium.org/developers/coding-style>`_ 86 * ``Mozilla`` 87 A style complying with `Mozilla's style guide 88 <https://developer.mozilla.org/en-US/docs/Developer_Guide/Coding_Style>`_ 89 * ``WebKit`` 90 A style complying with `WebKit's style guide 91 <http://www.webkit.org/coding/coding-style.html>`_ 92 93 .. START_FORMAT_STYLE_OPTIONS 94 95 **AccessModifierOffset** (``int``) 96 The extra indent or outdent of access modifiers, e.g. ``public:``. 97 98 **AlignEscapedNewlinesLeft** (``bool``) 99 If ``true``, aligns escaped newlines as far left as possible. 100 Otherwise puts them into the right-most column. 101 102 **AlignTrailingComments** (``bool``) 103 If ``true``, aligns trailing comments. 104 105 **AllowAllParametersOfDeclarationOnNextLine** (``bool``) 106 Allow putting all parameters of a function declaration onto 107 the next line even if ``BinPackParameters`` is ``false``. 108 109 **AllowShortBlocksOnASingleLine** (``bool``) 110 Allows contracting simple braced statements to a single line. 111 112 E.g., this allows ``if (a) { return; }`` to be put on a single line. 113 114 **AllowShortFunctionsOnASingleLine** (``ShortFunctionStyle``) 115 Dependent on the value, ``int f() { return 0; }`` can be put 116 on a single line. 117 118 Possible values: 119 120 * ``SFS_None`` (in configuration: ``None``) 121 Never merge functions into a single line. 122 * ``SFS_Inline`` (in configuration: ``Inline``) 123 Only merge functions defined inside a class. 124 * ``SFS_All`` (in configuration: ``All``) 125 Merge all functions fitting on a single line. 126 127 128 **AllowShortIfStatementsOnASingleLine** (``bool``) 129 If ``true``, ``if (a) return;`` can be put on a single 130 line. 131 132 **AllowShortLoopsOnASingleLine** (``bool``) 133 If ``true``, ``while (true) continue;`` can be put on a 134 single line. 135 136 **AlwaysBreakBeforeMultilineStrings** (``bool``) 137 If ``true``, always break before multiline string literals. 138 139 **AlwaysBreakTemplateDeclarations** (``bool``) 140 If ``true``, always break after the ``template<...>`` of a 141 template declaration. 142 143 **BinPackParameters** (``bool``) 144 If ``false``, a function call's or function definition's parameters 145 will either all be on the same line or will have one line each. 146 147 **BreakBeforeBinaryOperators** (``bool``) 148 If ``true``, binary operators will be placed after line breaks. 149 150 **BreakBeforeBraces** (``BraceBreakingStyle``) 151 The brace breaking style to use. 152 153 Possible values: 154 155 * ``BS_Attach`` (in configuration: ``Attach``) 156 Always attach braces to surrounding context. 157 * ``BS_Linux`` (in configuration: ``Linux``) 158 Like ``Attach``, but break before braces on function, namespace and 159 class definitions. 160 * ``BS_Stroustrup`` (in configuration: ``Stroustrup``) 161 Like ``Attach``, but break before function definitions. 162 * ``BS_Allman`` (in configuration: ``Allman``) 163 Always break before braces. 164 * ``BS_GNU`` (in configuration: ``GNU``) 165 Always break before braces and add an extra level of indentation to 166 braces of control statements, not to those of class, function 167 or other definitions. 168 169 170 **BreakBeforeTernaryOperators** (``bool``) 171 If ``true``, ternary operators will be placed after line breaks. 172 173 **BreakConstructorInitializersBeforeComma** (``bool``) 174 Always break constructor initializers before commas and align 175 the commas with the colon. 176 177 **ColumnLimit** (``unsigned``) 178 The column limit. 179 180 A column limit of ``0`` means that there is no column limit. In this case, 181 clang-format will respect the input's line breaking decisions within 182 statements unless they contradict other rules. 183 184 **CommentPragmas** (``std::string``) 185 A regular expression that describes comments with special meaning, 186 which should not be split into lines or otherwise changed. 187 188 **ConstructorInitializerAllOnOneLineOrOnePerLine** (``bool``) 189 If the constructor initializers don't fit on a line, put each 190 initializer on its own line. 191 192 **ConstructorInitializerIndentWidth** (``unsigned``) 193 The number of characters to use for indentation of constructor 194 initializer lists. 195 196 **ContinuationIndentWidth** (``unsigned``) 197 Indent width for line continuations. 198 199 **Cpp11BracedListStyle** (``bool``) 200 If ``true``, format braced lists as best suited for C++11 braced 201 lists. 202 203 Important differences: 204 - No spaces inside the braced list. 205 - No line break before the closing brace. 206 - Indentation with the continuation indent, not with the block indent. 207 208 Fundamentally, C++11 braced lists are formatted exactly like function 209 calls would be formatted in their place. If the braced list follows a name 210 (e.g. a type or variable name), clang-format formats as if the ``{}`` were 211 the parentheses of a function call with that name. If there is no name, 212 a zero-length name is assumed. 213 214 **DerivePointerAlignment** (``bool``) 215 If ``true``, analyze the formatted file for the most common 216 alignment of & and *. ``PointerAlignment`` is then used only as fallback. 217 218 **DisableFormat** (``bool``) 219 Disables formatting at all. 220 221 **ExperimentalAutoDetectBinPacking** (``bool``) 222 If ``true``, clang-format detects whether function calls and 223 definitions are formatted with one parameter per line. 224 225 Each call can be bin-packed, one-per-line or inconclusive. If it is 226 inconclusive, e.g. completely on one line, but a decision needs to be 227 made, clang-format analyzes whether there are other bin-packed cases in 228 the input file and act accordingly. 229 230 NOTE: This is an experimental flag, that might go away or be renamed. Do 231 not use this in config files, etc. Use at your own risk. 232 233 **ForEachMacros** (``std::vector<std::string>``) 234 A vector of macros that should be interpreted as foreach loops 235 instead of as function calls. 236 237 These are expected to be macros of the form: 238 \code 239 FOREACH(<variable-declaration>, ...) 240 <loop-body> 241 \endcode 242 243 For example: BOOST_FOREACH. 244 245 **IndentCaseLabels** (``bool``) 246 Indent case labels one level from the switch statement. 247 248 When ``false``, use the same indentation level as for the switch statement. 249 Switch statement body is always indented one level more than case labels. 250 251 **IndentWidth** (``unsigned``) 252 The number of columns to use for indentation. 253 254 **IndentWrappedFunctionNames** (``bool``) 255 Indent if a function definition or declaration is wrapped after the 256 type. 257 258 **KeepEmptyLinesAtTheStartOfBlocks** (``bool``) 259 If true, empty lines at the start of blocks are kept. 260 261 **Language** (``LanguageKind``) 262 Language, this format style is targeted at. 263 264 Possible values: 265 266 * ``LK_None`` (in configuration: ``None``) 267 Do not use. 268 * ``LK_Cpp`` (in configuration: ``Cpp``) 269 Should be used for C, C++, ObjectiveC, ObjectiveC++. 270 * ``LK_JavaScript`` (in configuration: ``JavaScript``) 271 Should be used for JavaScript. 272 * ``LK_Proto`` (in configuration: ``Proto``) 273 Should be used for Protocol Buffers 274 (https://developers.google.com/protocol-buffers/). 275 276 277 **MaxEmptyLinesToKeep** (``unsigned``) 278 The maximum number of consecutive empty lines to keep. 279 280 **NamespaceIndentation** (``NamespaceIndentationKind``) 281 The indentation used for namespaces. 282 283 Possible values: 284 285 * ``NI_None`` (in configuration: ``None``) 286 Don't indent in namespaces. 287 * ``NI_Inner`` (in configuration: ``Inner``) 288 Indent only in inner namespaces (nested in other namespaces). 289 * ``NI_All`` (in configuration: ``All``) 290 Indent in all namespaces. 291 292 293 **ObjCSpaceAfterProperty** (``bool``) 294 Add a space after ``@property`` in Objective-C, i.e. use 295 ``\@property (readonly)`` instead of ``\@property(readonly)``. 296 297 **ObjCSpaceBeforeProtocolList** (``bool``) 298 Add a space in front of an Objective-C protocol list, i.e. use 299 ``Foo <Protocol>`` instead of ``Foo<Protocol>``. 300 301 **PenaltyBreakBeforeFirstCallParameter** (``unsigned``) 302 The penalty for breaking a function call after "call(". 303 304 **PenaltyBreakComment** (``unsigned``) 305 The penalty for each line break introduced inside a comment. 306 307 **PenaltyBreakFirstLessLess** (``unsigned``) 308 The penalty for breaking before the first ``<<``. 309 310 **PenaltyBreakString** (``unsigned``) 311 The penalty for each line break introduced inside a string literal. 312 313 **PenaltyExcessCharacter** (``unsigned``) 314 The penalty for each character outside of the column limit. 315 316 **PenaltyReturnTypeOnItsOwnLine** (``unsigned``) 317 Penalty for putting the return type of a function onto its own 318 line. 319 320 **PointerAlignment** (``PointerAlignmentStyle``) 321 Pointer and reference alignment style. 322 323 Possible values: 324 325 * ``PAS_Left`` (in configuration: ``Left``) 326 Align pointer to the left. 327 * ``PAS_Right`` (in configuration: ``Right``) 328 Align pointer to the right. 329 * ``PAS_Middle`` (in configuration: ``Middle``) 330 Align pointer in the middle. 331 332 333 **SpaceBeforeAssignmentOperators** (``bool``) 334 If ``false``, spaces will be removed before assignment operators. 335 336 **SpaceBeforeParens** (``SpaceBeforeParensOptions``) 337 Defines in which cases to put a space before opening parentheses. 338 339 Possible values: 340 341 * ``SBPO_Never`` (in configuration: ``Never``) 342 Never put a space before opening parentheses. 343 * ``SBPO_ControlStatements`` (in configuration: ``ControlStatements``) 344 Put a space before opening parentheses only after control statement 345 keywords (``for/if/while...``). 346 * ``SBPO_Always`` (in configuration: ``Always``) 347 Always put a space before opening parentheses, except when it's 348 prohibited by the syntax rules (in function-like macro definitions) or 349 when determined by other style rules (after unary operators, opening 350 parentheses, etc.) 351 352 353 **SpaceInEmptyParentheses** (``bool``) 354 If ``true``, spaces may be inserted into '()'. 355 356 **SpacesBeforeTrailingComments** (``unsigned``) 357 The number of spaces before trailing line comments 358 (``//`` - comments). 359 360 This does not affect trailing block comments (``/**/`` - comments) as those 361 commonly have different usage patterns and a number of special cases. 362 363 **SpacesInAngles** (``bool``) 364 If ``true``, spaces will be inserted after '<' and before '>' in 365 template argument lists 366 367 **SpacesInCStyleCastParentheses** (``bool``) 368 If ``true``, spaces may be inserted into C style casts. 369 370 **SpacesInContainerLiterals** (``bool``) 371 If ``true``, spaces are inserted inside container literals (e.g. 372 ObjC and Javascript array and dict literals). 373 374 **SpacesInParentheses** (``bool``) 375 If ``true``, spaces will be inserted after '(' and before ')'. 376 377 **Standard** (``LanguageStandard``) 378 Format compatible with this standard, e.g. use 379 ``A<A<int> >`` instead of ``A<A<int>>`` for LS_Cpp03. 380 381 Possible values: 382 383 * ``LS_Cpp03`` (in configuration: ``Cpp03``) 384 Use C++03-compatible syntax. 385 * ``LS_Cpp11`` (in configuration: ``Cpp11``) 386 Use features of C++11 (e.g. ``A<A<int>>`` instead of 387 ``A<A<int> >``). 388 * ``LS_Auto`` (in configuration: ``Auto``) 389 Automatic detection based on the input. 390 391 392 **TabWidth** (``unsigned``) 393 The number of columns used for tab stops. 394 395 **UseTab** (``UseTabStyle``) 396 The way to use tab characters in the resulting file. 397 398 Possible values: 399 400 * ``UT_Never`` (in configuration: ``Never``) 401 Never use tab. 402 * ``UT_ForIndentation`` (in configuration: ``ForIndentation``) 403 Use tabs only for indentation. 404 * ``UT_Always`` (in configuration: ``Always``) 405 Use tabs whenever we need to fill whitespace that spans at least from 406 one tab stop to the next one. 407 408 409 .. END_FORMAT_STYLE_OPTIONS 410 411 Examples 412 ======== 413 414 A style similar to the `Linux Kernel style 415 <https://www.kernel.org/doc/Documentation/CodingStyle>`_: 416 417 .. code-block:: yaml 418 419 BasedOnStyle: LLVM 420 IndentWidth: 8 421 UseTab: Always 422 BreakBeforeBraces: Linux 423 AllowShortIfStatementsOnASingleLine: false 424 IndentCaseLabels: false 425 426 The result is (imagine that tabs are used for indentation here): 427 428 .. code-block:: c++ 429 430 void test() 431 { 432 switch (x) { 433 case 0: 434 case 1: 435 do_something(); 436 break; 437 case 2: 438 do_something_else(); 439 break; 440 default: 441 break; 442 } 443 if (condition) 444 do_something_completely_different(); 445 446 if (x == y) { 447 q(); 448 } else if (x > y) { 449 w(); 450 } else { 451 r(); 452 } 453 } 454 455 A style similar to the default Visual Studio formatting style: 456 457 .. code-block:: yaml 458 459 UseTab: Never 460 IndentWidth: 4 461 BreakBeforeBraces: Allman 462 AllowShortIfStatementsOnASingleLine: false 463 IndentCaseLabels: false 464 ColumnLimit: 0 465 466 The result is: 467 468 .. code-block:: c++ 469 470 void test() 471 { 472 switch (suffix) 473 { 474 case 0: 475 case 1: 476 do_something(); 477 break; 478 case 2: 479 do_something_else(); 480 break; 481 default: 482 break; 483 } 484 if (condition) 485 do_somthing_completely_different(); 486 487 if (x == y) 488 { 489 q(); 490 } 491 else if (x > y) 492 { 493 w(); 494 } 495 else 496 { 497 r(); 498 } 499 } 500 501