blob: ce6fae19c09b3e8d28f539994f067c978cc6c3d6 [file] [log] [blame]
Alexander Kornienko62d06b72013-09-04 15:09:13 +00001==========================
2Clang-Format Style Options
3==========================
4
5:doc:`ClangFormatStyleOptions` describes configurable formatting style options
6supported by :doc:`LibFormat` and :doc:`ClangFormat`.
7
8When using :program:`clang-format` command line utility or
9``clang::format::reformat(...)`` functions from code, one can either use one of
10the predefined styles (LLVM, Google, Chromium, Mozilla, WebKit) or create a
11custom style by configuring specific style options.
12
13
14Configuring Style with clang-format
15===================================
16
17:program:`clang-format` supports two ways to provide custom style options:
18directly specify style configuration in the ``-style=`` command line option or
Hans Wennborg9a7a50e2013-09-10 15:41:12 +000019use ``-style=file`` and put style configuration in the ``.clang-format`` or
20``_clang-format`` file in the project directory.
Alexander Kornienko62d06b72013-09-04 15:09:13 +000021
22When using ``-style=file``, :program:`clang-format` for each input file will
23try to find the ``.clang-format`` file located in the closest parent directory
24of the input file. When the standard input is used, the search is started from
25the current directory.
26
27The ``.clang-format`` file uses YAML format:
28
29.. code-block:: yaml
30
31 key1: value1
32 key2: value2
33 # A comment.
34 ...
35
Stephen Hines176edba2014-12-01 14:53:08 -080036The configuration file can consist of several sections each having different
37``Language:`` parameter denoting the programming language this section of the
38configuration is targeted at. See the description of the **Language** option
39below for the list of supported languages. The first section may have no
40language set, it will set the default style options for all lanugages.
41Configuration sections for specific language will override options set in the
42default section.
43
44When :program:`clang-format` formats a file, it auto-detects the language using
45the file name. When formatting standard input or a file that doesn't have the
46extension corresponding to its language, ``-assume-filename=`` option can be
47used to override the file name :program:`clang-format` uses to detect the
48language.
49
50An example of a configuration file for multiple languages:
51
52.. code-block:: yaml
53
54 ---
55 # We'll use defaults from the LLVM style, but with 4 columns indentation.
56 BasedOnStyle: LLVM
57 IndentWidth: 4
58 ---
59 Language: Cpp
60 # Force pointers to the type for C++.
61 DerivePointerAlignment: false
62 PointerAlignment: Left
63 ---
64 Language: JavaScript
65 # Use 100 columns for JS.
66 ColumnLimit: 100
67 ---
68 Language: Proto
69 # Don't format .proto files.
70 DisableFormat: true
71 ...
72
Alexander Kornienko62d06b72013-09-04 15:09:13 +000073An easy way to get a valid ``.clang-format`` file containing all configuration
74options of a certain predefined style is:
75
76.. code-block:: console
77
78 clang-format -style=llvm -dump-config > .clang-format
79
80When specifying configuration in the ``-style=`` option, the same configuration
81is applied for all input files. The format of the configuration is:
82
83.. code-block:: console
84
85 -style='{key1: value1, key2: value2, ...}'
86
87
Stephen Hines176edba2014-12-01 14:53:08 -080088Disabling Formatting on a Piece of Code
89=======================================
90
91Clang-format understands also special comments that switch formatting in a
92delimited range. The code between a comment ``// clang-format off`` or
93``/* clang-format off */`` up to a comment ``// clang-format on`` or
94``/* clang-format on */`` will not be formatted. The comments themselves
95will be formatted (aligned) normally.
96
97.. code-block:: c++
98
99 int formatted_code;
100 // clang-format off
101 void unformatted_code ;
102 // clang-format on
103 void formatted_code_again;
104
105
Alexander Kornienko62d06b72013-09-04 15:09:13 +0000106Configuring Style in Code
107=========================
108
109When using ``clang::format::reformat(...)`` functions, the format is specified
110by supplying the `clang::format::FormatStyle
111<http://clang.llvm.org/doxygen/structclang_1_1format_1_1FormatStyle.html>`_
112structure.
113
114
115Configurable Format Style Options
116=================================
117
118This section lists the supported style options. Value type is specified for
119each option. For enumeration types possible values are specified both as a C++
Alexander Kornienkoc4f73e02013-09-04 15:14:18 +0000120enumeration member (with a prefix, e.g. ``LS_Auto``), and as a value usable in
121the configuration (without a prefix: ``Auto``).
Alexander Kornienko62d06b72013-09-04 15:09:13 +0000122
123
124**BasedOnStyle** (``string``)
125 The style used for all options not specifically set in the configuration.
126
127 This option is supported only in the :program:`clang-format` configuration
128 (both within ``-style='{...}'`` and the ``.clang-format`` file).
129
130 Possible values:
131
132 * ``LLVM``
133 A style complying with the `LLVM coding standards
134 <http://llvm.org/docs/CodingStandards.html>`_
135 * ``Google``
136 A style complying with `Google's C++ style guide
137 <http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml>`_
138 * ``Chromium``
139 A style complying with `Chromium's style guide
140 <http://www.chromium.org/developers/coding-style>`_
141 * ``Mozilla``
142 A style complying with `Mozilla's style guide
143 <https://developer.mozilla.org/en-US/docs/Developer_Guide/Coding_Style>`_
144 * ``WebKit``
145 A style complying with `WebKit's style guide
146 <http://www.webkit.org/coding/coding-style.html>`_
147
148.. START_FORMAT_STYLE_OPTIONS
149
150**AccessModifierOffset** (``int``)
151 The extra indent or outdent of access modifiers, e.g. ``public:``.
152
Stephen Hines0e2c34f2015-03-23 12:09:02 -0700153**AlignAfterOpenBracket** (``bool``)
154 If ``true``, horizontally aligns arguments after an open bracket.
155
156 This applies to round brackets (parentheses), angle brackets and square
157 brackets. This will result in formattings like
158 \code
159 someLongFunction(argument1,
160 argument2);
161 \endcode
162
Alexander Kornienko62d06b72013-09-04 15:09:13 +0000163**AlignEscapedNewlinesLeft** (``bool``)
164 If ``true``, aligns escaped newlines as far left as possible.
165 Otherwise puts them into the right-most column.
166
Stephen Hines0e2c34f2015-03-23 12:09:02 -0700167**AlignOperands** (``bool``)
168 If ``true``, horizontally align operands of binary and ternary
169 expressions.
170
Alexander Kornienko62d06b72013-09-04 15:09:13 +0000171**AlignTrailingComments** (``bool``)
172 If ``true``, aligns trailing comments.
173
174**AllowAllParametersOfDeclarationOnNextLine** (``bool``)
175 Allow putting all parameters of a function declaration onto
176 the next line even if ``BinPackParameters`` is ``false``.
177
Stephen Hines6bcf27b2014-05-29 04:14:42 -0700178**AllowShortBlocksOnASingleLine** (``bool``)
179 Allows contracting simple braced statements to a single line.
180
181 E.g., this allows ``if (a) { return; }`` to be put on a single line.
182
Stephen Hines176edba2014-12-01 14:53:08 -0800183**AllowShortCaseLabelsOnASingleLine** (``bool``)
184 If ``true``, short case labels will be contracted to a single line.
185
Stephen Hines6bcf27b2014-05-29 04:14:42 -0700186**AllowShortFunctionsOnASingleLine** (``ShortFunctionStyle``)
187 Dependent on the value, ``int f() { return 0; }`` can be put
188 on a single line.
189
190 Possible values:
191
192 * ``SFS_None`` (in configuration: ``None``)
193 Never merge functions into a single line.
194 * ``SFS_Inline`` (in configuration: ``Inline``)
195 Only merge functions defined inside a class.
Stephen Hines0e2c34f2015-03-23 12:09:02 -0700196 * ``SFS_Empty`` (in configuration: ``Empty``)
197 Only merge empty functions.
Stephen Hines6bcf27b2014-05-29 04:14:42 -0700198 * ``SFS_All`` (in configuration: ``All``)
199 Merge all functions fitting on a single line.
200
Stephen Hines651f13c2014-04-23 16:59:28 -0700201
Alexander Kornienko62d06b72013-09-04 15:09:13 +0000202**AllowShortIfStatementsOnASingleLine** (``bool``)
203 If ``true``, ``if (a) return;`` can be put on a single
204 line.
205
206**AllowShortLoopsOnASingleLine** (``bool``)
207 If ``true``, ``while (true) continue;`` can be put on a
208 single line.
209
Stephen Hines176edba2014-12-01 14:53:08 -0800210**AlwaysBreakAfterDefinitionReturnType** (``bool``)
211 If ``true``, always break after function definition return types.
212
213 More truthfully called 'break before the identifier following the type
214 in a function definition'. PenaltyReturnTypeOnItsOwnLine becomes
215 irrelevant.
216
Alexander Kornienko62d06b72013-09-04 15:09:13 +0000217**AlwaysBreakBeforeMultilineStrings** (``bool``)
218 If ``true``, always break before multiline string literals.
219
220**AlwaysBreakTemplateDeclarations** (``bool``)
221 If ``true``, always break after the ``template<...>`` of a
222 template declaration.
223
Stephen Hines176edba2014-12-01 14:53:08 -0800224**BinPackArguments** (``bool``)
225 If ``false``, a function call's arguments will either be all on the
226 same line or will have one line each.
Alexander Kornienko62d06b72013-09-04 15:09:13 +0000227
Stephen Hines176edba2014-12-01 14:53:08 -0800228**BinPackParameters** (``bool``)
229 If ``false``, a function declaration's or function definition's
230 parameters will either all be on the same line or will have one line each.
231
232**BreakBeforeBinaryOperators** (``BinaryOperatorStyle``)
233 The way to wrap binary operators.
234
235 Possible values:
236
237 * ``BOS_None`` (in configuration: ``None``)
238 Break after operators.
239 * ``BOS_NonAssignment`` (in configuration: ``NonAssignment``)
240 Break before operators that aren't assignments.
241 * ``BOS_All`` (in configuration: ``All``)
242 Break before operators.
243
Alexander Kornienko62d06b72013-09-04 15:09:13 +0000244
245**BreakBeforeBraces** (``BraceBreakingStyle``)
246 The brace breaking style to use.
247
248 Possible values:
249
250 * ``BS_Attach`` (in configuration: ``Attach``)
251 Always attach braces to surrounding context.
252 * ``BS_Linux`` (in configuration: ``Linux``)
253 Like ``Attach``, but break before braces on function, namespace and
254 class definitions.
255 * ``BS_Stroustrup`` (in configuration: ``Stroustrup``)
Stephen Hines176edba2014-12-01 14:53:08 -0800256 Like ``Attach``, but break before function definitions, and 'else'.
Alexander Kornienko62d06b72013-09-04 15:09:13 +0000257 * ``BS_Allman`` (in configuration: ``Allman``)
258 Always break before braces.
Stephen Hines651f13c2014-04-23 16:59:28 -0700259 * ``BS_GNU`` (in configuration: ``GNU``)
260 Always break before braces and add an extra level of indentation to
261 braces of control statements, not to those of class, function
262 or other definitions.
Alexander Kornienko62d06b72013-09-04 15:09:13 +0000263
264
Stephen Hines651f13c2014-04-23 16:59:28 -0700265**BreakBeforeTernaryOperators** (``bool``)
266 If ``true``, ternary operators will be placed after line breaks.
267
Alexander Kornienko62d06b72013-09-04 15:09:13 +0000268**BreakConstructorInitializersBeforeComma** (``bool``)
269 Always break constructor initializers before commas and align
270 the commas with the colon.
271
272**ColumnLimit** (``unsigned``)
273 The column limit.
274
275 A column limit of ``0`` means that there is no column limit. In this case,
276 clang-format will respect the input's line breaking decisions within
Stephen Hines651f13c2014-04-23 16:59:28 -0700277 statements unless they contradict other rules.
278
279**CommentPragmas** (``std::string``)
280 A regular expression that describes comments with special meaning,
281 which should not be split into lines or otherwise changed.
Alexander Kornienko62d06b72013-09-04 15:09:13 +0000282
283**ConstructorInitializerAllOnOneLineOrOnePerLine** (``bool``)
284 If the constructor initializers don't fit on a line, put each
285 initializer on its own line.
286
287**ConstructorInitializerIndentWidth** (``unsigned``)
288 The number of characters to use for indentation of constructor
289 initializer lists.
290
Stephen Hines651f13c2014-04-23 16:59:28 -0700291**ContinuationIndentWidth** (``unsigned``)
292 Indent width for line continuations.
293
Alexander Kornienko62d06b72013-09-04 15:09:13 +0000294**Cpp11BracedListStyle** (``bool``)
295 If ``true``, format braced lists as best suited for C++11 braced
296 lists.
297
298 Important differences:
299 - No spaces inside the braced list.
300 - No line break before the closing brace.
301 - Indentation with the continuation indent, not with the block indent.
302
303 Fundamentally, C++11 braced lists are formatted exactly like function
304 calls would be formatted in their place. If the braced list follows a name
305 (e.g. a type or variable name), clang-format formats as if the ``{}`` were
306 the parentheses of a function call with that name. If there is no name,
307 a zero-length name is assumed.
308
Stephen Hinesc568f1e2014-07-21 00:47:37 -0700309**DerivePointerAlignment** (``bool``)
310 If ``true``, analyze the formatted file for the most common
Stephen Hines176edba2014-12-01 14:53:08 -0800311 alignment of & and \*. ``PointerAlignment`` is then used only as fallback.
Stephen Hinesc568f1e2014-07-21 00:47:37 -0700312
313**DisableFormat** (``bool``)
314 Disables formatting at all.
Alexander Kornienko62d06b72013-09-04 15:09:13 +0000315
316**ExperimentalAutoDetectBinPacking** (``bool``)
317 If ``true``, clang-format detects whether function calls and
318 definitions are formatted with one parameter per line.
319
320 Each call can be bin-packed, one-per-line or inconclusive. If it is
321 inconclusive, e.g. completely on one line, but a decision needs to be
322 made, clang-format analyzes whether there are other bin-packed cases in
323 the input file and act accordingly.
324
325 NOTE: This is an experimental flag, that might go away or be renamed. Do
326 not use this in config files, etc. Use at your own risk.
327
Stephen Hines651f13c2014-04-23 16:59:28 -0700328**ForEachMacros** (``std::vector<std::string>``)
Stephen Hines6bcf27b2014-05-29 04:14:42 -0700329 A vector of macros that should be interpreted as foreach loops
330 instead of as function calls.
Stephen Hines651f13c2014-04-23 16:59:28 -0700331
Stephen Hines6bcf27b2014-05-29 04:14:42 -0700332 These are expected to be macros of the form:
333 \code
334 FOREACH(<variable-declaration>, ...)
335 <loop-body>
336 \endcode
337
338 For example: BOOST_FOREACH.
Stephen Hines651f13c2014-04-23 16:59:28 -0700339
Alexander Kornienko62d06b72013-09-04 15:09:13 +0000340**IndentCaseLabels** (``bool``)
341 Indent case labels one level from the switch statement.
342
343 When ``false``, use the same indentation level as for the switch statement.
344 Switch statement body is always indented one level more than case labels.
345
Alexander Kornienko62d06b72013-09-04 15:09:13 +0000346**IndentWidth** (``unsigned``)
Alexander Kornienkof6a68822013-09-27 16:16:55 +0000347 The number of columns to use for indentation.
Alexander Kornienko62d06b72013-09-04 15:09:13 +0000348
Stephen Hinesc568f1e2014-07-21 00:47:37 -0700349**IndentWrappedFunctionNames** (``bool``)
350 Indent if a function definition or declaration is wrapped after the
351 type.
352
Stephen Hines6bcf27b2014-05-29 04:14:42 -0700353**KeepEmptyLinesAtTheStartOfBlocks** (``bool``)
354 If true, empty lines at the start of blocks are kept.
355
Stephen Hines651f13c2014-04-23 16:59:28 -0700356**Language** (``LanguageKind``)
357 Language, this format style is targeted at.
358
359 Possible values:
360
361 * ``LK_None`` (in configuration: ``None``)
362 Do not use.
363 * ``LK_Cpp`` (in configuration: ``Cpp``)
364 Should be used for C, C++, ObjectiveC, ObjectiveC++.
Stephen Hines176edba2014-12-01 14:53:08 -0800365 * ``LK_Java`` (in configuration: ``Java``)
366 Should be used for Java.
Stephen Hines651f13c2014-04-23 16:59:28 -0700367 * ``LK_JavaScript`` (in configuration: ``JavaScript``)
368 Should be used for JavaScript.
369 * ``LK_Proto`` (in configuration: ``Proto``)
370 Should be used for Protocol Buffers
371 (https://developers.google.com/protocol-buffers/).
372
373
Alexander Kornienko62d06b72013-09-04 15:09:13 +0000374**MaxEmptyLinesToKeep** (``unsigned``)
375 The maximum number of consecutive empty lines to keep.
376
377**NamespaceIndentation** (``NamespaceIndentationKind``)
378 The indentation used for namespaces.
379
380 Possible values:
381
382 * ``NI_None`` (in configuration: ``None``)
383 Don't indent in namespaces.
384 * ``NI_Inner`` (in configuration: ``Inner``)
385 Indent only in inner namespaces (nested in other namespaces).
386 * ``NI_All`` (in configuration: ``All``)
387 Indent in all namespaces.
388
389
Stephen Hines176edba2014-12-01 14:53:08 -0800390**ObjCBlockIndentWidth** (``unsigned``)
391 The number of characters to use for indentation of ObjC blocks.
392
Stephen Hines651f13c2014-04-23 16:59:28 -0700393**ObjCSpaceAfterProperty** (``bool``)
394 Add a space after ``@property`` in Objective-C, i.e. use
Stephen Hines6bcf27b2014-05-29 04:14:42 -0700395 ``\@property (readonly)`` instead of ``\@property(readonly)``.
Stephen Hines651f13c2014-04-23 16:59:28 -0700396
Alexander Kornienko62d06b72013-09-04 15:09:13 +0000397**ObjCSpaceBeforeProtocolList** (``bool``)
398 Add a space in front of an Objective-C protocol list, i.e. use
399 ``Foo <Protocol>`` instead of ``Foo<Protocol>``.
400
Stephen Hines651f13c2014-04-23 16:59:28 -0700401**PenaltyBreakBeforeFirstCallParameter** (``unsigned``)
402 The penalty for breaking a function call after "call(".
403
Alexander Kornienko62d06b72013-09-04 15:09:13 +0000404**PenaltyBreakComment** (``unsigned``)
405 The penalty for each line break introduced inside a comment.
406
407**PenaltyBreakFirstLessLess** (``unsigned``)
408 The penalty for breaking before the first ``<<``.
409
410**PenaltyBreakString** (``unsigned``)
411 The penalty for each line break introduced inside a string literal.
412
413**PenaltyExcessCharacter** (``unsigned``)
414 The penalty for each character outside of the column limit.
415
416**PenaltyReturnTypeOnItsOwnLine** (``unsigned``)
417 Penalty for putting the return type of a function onto its own
418 line.
419
Stephen Hinesc568f1e2014-07-21 00:47:37 -0700420**PointerAlignment** (``PointerAlignmentStyle``)
421 Pointer and reference alignment style.
422
423 Possible values:
424
425 * ``PAS_Left`` (in configuration: ``Left``)
426 Align pointer to the left.
427 * ``PAS_Right`` (in configuration: ``Right``)
428 Align pointer to the right.
429 * ``PAS_Middle`` (in configuration: ``Middle``)
430 Align pointer in the middle.
431
Alexander Kornienko62d06b72013-09-04 15:09:13 +0000432
Stephen Hines176edba2014-12-01 14:53:08 -0800433**SpaceAfterCStyleCast** (``bool``)
434 If ``true``, a space may be inserted after C style casts.
435
Daniel Jasper9b4de852013-09-25 15:15:02 +0000436**SpaceBeforeAssignmentOperators** (``bool``)
Alexander Kornienkof6a68822013-09-27 16:16:55 +0000437 If ``false``, spaces will be removed before assignment operators.
Daniel Jasper9b4de852013-09-25 15:15:02 +0000438
Stephen Hines651f13c2014-04-23 16:59:28 -0700439**SpaceBeforeParens** (``SpaceBeforeParensOptions``)
440 Defines in which cases to put a space before opening parentheses.
441
442 Possible values:
443
444 * ``SBPO_Never`` (in configuration: ``Never``)
445 Never put a space before opening parentheses.
446 * ``SBPO_ControlStatements`` (in configuration: ``ControlStatements``)
447 Put a space before opening parentheses only after control statement
448 keywords (``for/if/while...``).
449 * ``SBPO_Always`` (in configuration: ``Always``)
450 Always put a space before opening parentheses, except when it's
451 prohibited by the syntax rules (in function-like macro definitions) or
452 when determined by other style rules (after unary operators, opening
453 parentheses, etc.)
454
455
Alexander Kornienko62d06b72013-09-04 15:09:13 +0000456**SpaceInEmptyParentheses** (``bool``)
Stephen Hines651f13c2014-04-23 16:59:28 -0700457 If ``true``, spaces may be inserted into '()'.
Alexander Kornienko62d06b72013-09-04 15:09:13 +0000458
459**SpacesBeforeTrailingComments** (``unsigned``)
Stephen Hines6bcf27b2014-05-29 04:14:42 -0700460 The number of spaces before trailing line comments
461 (``//`` - comments).
462
463 This does not affect trailing block comments (``/**/`` - comments) as those
464 commonly have different usage patterns and a number of special cases.
Alexander Kornienko62d06b72013-09-04 15:09:13 +0000465
Stephen Hines651f13c2014-04-23 16:59:28 -0700466**SpacesInAngles** (``bool``)
467 If ``true``, spaces will be inserted after '<' and before '>' in
468 template argument lists
469
Alexander Kornienko62d06b72013-09-04 15:09:13 +0000470**SpacesInCStyleCastParentheses** (``bool``)
Stephen Hines651f13c2014-04-23 16:59:28 -0700471 If ``true``, spaces may be inserted into C style casts.
472
473**SpacesInContainerLiterals** (``bool``)
474 If ``true``, spaces are inserted inside container literals (e.g.
475 ObjC and Javascript array and dict literals).
Alexander Kornienko62d06b72013-09-04 15:09:13 +0000476
477**SpacesInParentheses** (``bool``)
Stephen Hines651f13c2014-04-23 16:59:28 -0700478 If ``true``, spaces will be inserted after '(' and before ')'.
Alexander Kornienko62d06b72013-09-04 15:09:13 +0000479
Stephen Hines176edba2014-12-01 14:53:08 -0800480**SpacesInSquareBrackets** (``bool``)
481 If ``true``, spaces will be inserted after '[' and before ']'.
482
Alexander Kornienko62d06b72013-09-04 15:09:13 +0000483**Standard** (``LanguageStandard``)
484 Format compatible with this standard, e.g. use
485 ``A<A<int> >`` instead of ``A<A<int>>`` for LS_Cpp03.
486
487 Possible values:
488
489 * ``LS_Cpp03`` (in configuration: ``Cpp03``)
490 Use C++03-compatible syntax.
491 * ``LS_Cpp11`` (in configuration: ``Cpp11``)
492 Use features of C++11 (e.g. ``A<A<int>>`` instead of
493 ``A<A<int> >``).
494 * ``LS_Auto`` (in configuration: ``Auto``)
495 Automatic detection based on the input.
496
497
Alexander Kornienkof6a68822013-09-27 16:16:55 +0000498**TabWidth** (``unsigned``)
499 The number of columns used for tab stops.
500
501**UseTab** (``UseTabStyle``)
502 The way to use tab characters in the resulting file.
503
504 Possible values:
505
506 * ``UT_Never`` (in configuration: ``Never``)
507 Never use tab.
508 * ``UT_ForIndentation`` (in configuration: ``ForIndentation``)
509 Use tabs only for indentation.
510 * ``UT_Always`` (in configuration: ``Always``)
511 Use tabs whenever we need to fill whitespace that spans at least from
512 one tab stop to the next one.
513
Alexander Kornienko62d06b72013-09-04 15:09:13 +0000514
515.. END_FORMAT_STYLE_OPTIONS
516
517Examples
518========
519
520A style similar to the `Linux Kernel style
521<https://www.kernel.org/doc/Documentation/CodingStyle>`_:
522
523.. code-block:: yaml
524
525 BasedOnStyle: LLVM
526 IndentWidth: 8
Alexander Kornienko62a55652013-09-27 16:19:25 +0000527 UseTab: Always
Alexander Kornienko62d06b72013-09-04 15:09:13 +0000528 BreakBeforeBraces: Linux
529 AllowShortIfStatementsOnASingleLine: false
530 IndentCaseLabels: false
531
532The result is (imagine that tabs are used for indentation here):
533
534.. code-block:: c++
535
536 void test()
537 {
538 switch (x) {
539 case 0:
540 case 1:
541 do_something();
542 break;
543 case 2:
544 do_something_else();
545 break;
546 default:
547 break;
548 }
549 if (condition)
550 do_something_completely_different();
551
552 if (x == y) {
553 q();
554 } else if (x > y) {
555 w();
556 } else {
557 r();
558 }
559 }
560
561A style similar to the default Visual Studio formatting style:
562
563.. code-block:: yaml
564
Alexander Kornienko62a55652013-09-27 16:19:25 +0000565 UseTab: Never
Alexander Kornienko62d06b72013-09-04 15:09:13 +0000566 IndentWidth: 4
567 BreakBeforeBraces: Allman
568 AllowShortIfStatementsOnASingleLine: false
569 IndentCaseLabels: false
570 ColumnLimit: 0
571
572The result is:
573
574.. code-block:: c++
575
576 void test()
577 {
578 switch (suffix)
579 {
580 case 0:
581 case 1:
582 do_something();
583 break;
584 case 2:
585 do_something_else();
586 break;
587 default:
588 break;
589 }
590 if (condition)
591 do_somthing_completely_different();
592
593 if (x == y)
594 {
595 q();
596 }
597 else if (x > y)
598 {
599 w();
600 }
601 else
602 {
603 r();
604 }
605 }
606