1//===--- Format.h - Format C++ code -----------------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8///
9/// \file
10/// Various functions to configurably format source code.
11///
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_CLANG_FORMAT_FORMAT_H
15#define LLVM_CLANG_FORMAT_FORMAT_H
16
17#include "clang/Basic/LangOptions.h"
18#include "clang/Tooling/Core/Replacement.h"
19#include "clang/Tooling/Inclusions/IncludeStyle.h"
20#include "llvm/ADT/ArrayRef.h"
21#include "llvm/Support/Regex.h"
22#include <system_error>
23
24namespace llvm {
25namespace vfs {
26class FileSystem;
27}
28} // namespace llvm
29
30namespace clang {
31
32class Lexer;
33class SourceManager;
34class DiagnosticConsumer;
35
36namespace format {
37
38enum class ParseError { Success = 0, Error, Unsuitable };
39class ParseErrorCategory final : public std::error_category {
40public:
41  const char *name() const noexcept override;
42  std::string message(int EV) const override;
43};
44const std::error_category &getParseCategory();
45std::error_code make_error_code(ParseError e);
46
47/// The ``FormatStyle`` is used to configure the formatting to follow
48/// specific guidelines.
49struct FormatStyle {
50  /// The extra indent or outdent of access modifiers, e.g. ``public:``.
51  int AccessModifierOffset;
52
53  /// Different styles for aligning after open brackets.
54  enum BracketAlignmentStyle {
55    /// Align parameters on the open bracket, e.g.:
56    /// \code
57    ///   someLongFunction(argument1,
58    ///                    argument2);
59    /// \endcode
60    BAS_Align,
61    /// Don't align, instead use ``ContinuationIndentWidth``, e.g.:
62    /// \code
63    ///   someLongFunction(argument1,
64    ///       argument2);
65    /// \endcode
66    BAS_DontAlign,
67    /// Always break after an open bracket, if the parameters don't fit
68    /// on a single line, e.g.:
69    /// \code
70    ///   someLongFunction(
71    ///       argument1, argument2);
72    /// \endcode
73    BAS_AlwaysBreak,
74  };
75
76  /// If ``true``, horizontally aligns arguments after an open bracket.
77  ///
78  /// This applies to round brackets (parentheses), angle brackets and square
79  /// brackets.
80  BracketAlignmentStyle AlignAfterOpenBracket;
81
82  /// \brief If ``true``, aligns consecutive C/C++ preprocessor macros.
83  ///
84  /// This will align C/C++ preprocessor macros of consecutive lines.
85  /// Will result in formattings like
86  /// \code
87  ///   #define SHORT_NAME       42
88  ///   #define LONGER_NAME      0x007f
89  ///   #define EVEN_LONGER_NAME (2)
90  ///   #define foo(x)           (x * x)
91  ///   #define bar(y, z)        (y + z)
92  /// \endcode
93  bool AlignConsecutiveMacros;
94
95  /// If ``true``, aligns consecutive assignments.
96  ///
97  /// This will align the assignment operators of consecutive lines. This
98  /// will result in formattings like
99  /// \code
100  ///   int aaaa = 12;
101  ///   int b    = 23;
102  ///   int ccc  = 23;
103  /// \endcode
104  bool AlignConsecutiveAssignments;
105
106  /// If ``true``, aligns consecutive declarations.
107  ///
108  /// This will align the declaration names of consecutive lines. This
109  /// will result in formattings like
110  /// \code
111  ///   int         aaaa = 12;
112  ///   float       b = 23;
113  ///   std::string ccc = 23;
114  /// \endcode
115  bool AlignConsecutiveDeclarations;
116
117  /// Different styles for aligning escaped newlines.
118  enum EscapedNewlineAlignmentStyle {
119    /// Don't align escaped newlines.
120    /// \code
121    ///   #define A \
122    ///     int aaaa; \
123    ///     int b; \
124    ///     int dddddddddd;
125    /// \endcode
126    ENAS_DontAlign,
127    /// Align escaped newlines as far left as possible.
128    /// \code
129    ///   true:
130    ///   #define A   \
131    ///     int aaaa; \
132    ///     int b;    \
133    ///     int dddddddddd;
134    ///
135    ///   false:
136    /// \endcode
137    ENAS_Left,
138    /// Align escaped newlines in the right-most column.
139    /// \code
140    ///   #define A                                                                      \
141    ///     int aaaa;                                                                    \
142    ///     int b;                                                                       \
143    ///     int dddddddddd;
144    /// \endcode
145    ENAS_Right,
146  };
147
148  /// Options for aligning backslashes in escaped newlines.
149  EscapedNewlineAlignmentStyle AlignEscapedNewlines;
150
151  /// If ``true``, horizontally align operands of binary and ternary
152  /// expressions.
153  ///
154  /// Specifically, this aligns operands of a single expression that needs to be
155  /// split over multiple lines, e.g.:
156  /// \code
157  ///   int aaa = bbbbbbbbbbbbbbb +
158  ///             ccccccccccccccc;
159  /// \endcode
160  bool AlignOperands;
161
162  /// If ``true``, aligns trailing comments.
163  /// \code
164  ///   true:                                   false:
165  ///   int a;     // My comment a      vs.     int a; // My comment a
166  ///   int b = 2; // comment  b                int b = 2; // comment about b
167  /// \endcode
168  bool AlignTrailingComments;
169
170  /// \brief If a function call or braced initializer list doesn't fit on a
171  /// line, allow putting all arguments onto the next line, even if
172  /// ``BinPackArguments`` is ``false``.
173  /// \code
174  ///   true:
175  ///   callFunction(
176  ///       a, b, c, d);
177  ///
178  ///   false:
179  ///   callFunction(a,
180  ///                b,
181  ///                c,
182  ///                d);
183  /// \endcode
184  bool AllowAllArgumentsOnNextLine;
185
186  /// \brief If a constructor definition with a member initializer list doesn't
187  /// fit on a single line, allow putting all member initializers onto the next
188  /// line, if ```ConstructorInitializerAllOnOneLineOrOnePerLine``` is true.
189  /// Note that this parameter has no effect if
190  /// ```ConstructorInitializerAllOnOneLineOrOnePerLine``` is false.
191  /// \code
192  ///   true:
193  ///   MyClass::MyClass() :
194  ///       member0(0), member1(2) {}
195  ///
196  ///   false:
197  ///   MyClass::MyClass() :
198  ///       member0(0),
199  ///       member1(2) {}
200  bool AllowAllConstructorInitializersOnNextLine;
201
202  /// If the function declaration doesn't fit on a line,
203  /// allow putting all parameters of a function declaration onto
204  /// the next line even if ``BinPackParameters`` is ``false``.
205  /// \code
206  ///   true:
207  ///   void myFunction(
208  ///       int a, int b, int c, int d, int e);
209  ///
210  ///   false:
211  ///   void myFunction(int a,
212  ///                   int b,
213  ///                   int c,
214  ///                   int d,
215  ///                   int e);
216  /// \endcode
217  bool AllowAllParametersOfDeclarationOnNextLine;
218
219  /// Different styles for merging short blocks containing at most one
220  /// statement.
221  enum ShortBlockStyle {
222    /// Never merge blocks into a single line.
223    /// \code
224    ///   while (true) {
225    ///   }
226    ///   while (true) {
227    ///     continue;
228    ///   }
229    /// \endcode
230    SBS_Never,
231    /// Only merge empty blocks.
232    /// \code
233    ///   while (true) {}
234    ///   while (true) {
235    ///     continue;
236    ///   }
237    /// \endcode
238    SBS_Empty,
239    /// Always merge short blocks into a single line.
240    /// \code
241    ///   while (true) {}
242    ///   while (true) { continue; }
243    /// \endcode
244    SBS_Always,
245  };
246
247  /// Dependent on the value, ``while (true) { continue; }`` can be put on a
248  /// single line.
249  ShortBlockStyle AllowShortBlocksOnASingleLine;
250
251  /// If ``true``, short case labels will be contracted to a single line.
252  /// \code
253  ///   true:                                   false:
254  ///   switch (a) {                    vs.     switch (a) {
255  ///   case 1: x = 1; break;                   case 1:
256  ///   case 2: return;                           x = 1;
257  ///   }                                         break;
258  ///                                           case 2:
259  ///                                             return;
260  ///                                           }
261  /// \endcode
262  bool AllowShortCaseLabelsOnASingleLine;
263
264  /// Different styles for merging short functions containing at most one
265  /// statement.
266  enum ShortFunctionStyle {
267    /// Never merge functions into a single line.
268    SFS_None,
269    /// Only merge functions defined inside a class. Same as "inline",
270    /// except it does not implies "empty": i.e. top level empty functions
271    /// are not merged either.
272    /// \code
273    ///   class Foo {
274    ///     void f() { foo(); }
275    ///   };
276    ///   void f() {
277    ///     foo();
278    ///   }
279    ///   void f() {
280    ///   }
281    /// \endcode
282    SFS_InlineOnly,
283    /// Only merge empty functions.
284    /// \code
285    ///   void f() {}
286    ///   void f2() {
287    ///     bar2();
288    ///   }
289    /// \endcode
290    SFS_Empty,
291    /// Only merge functions defined inside a class. Implies "empty".
292    /// \code
293    ///   class Foo {
294    ///     void f() { foo(); }
295    ///   };
296    ///   void f() {
297    ///     foo();
298    ///   }
299    ///   void f() {}
300    /// \endcode
301    SFS_Inline,
302    /// Merge all functions fitting on a single line.
303    /// \code
304    ///   class Foo {
305    ///     void f() { foo(); }
306    ///   };
307    ///   void f() { bar(); }
308    /// \endcode
309    SFS_All,
310  };
311
312  /// Dependent on the value, ``int f() { return 0; }`` can be put on a
313  /// single line.
314  ShortFunctionStyle AllowShortFunctionsOnASingleLine;
315
316  /// Different styles for handling short if lines
317  enum ShortIfStyle {
318    /// Never put short ifs on the same line.
319    /// \code
320    ///   if (a)
321    ///     return ;
322    ///   else {
323    ///     return;
324    ///   }
325    /// \endcode
326    SIS_Never,
327    /// Without else put short ifs on the same line only if
328    /// the else is not a compound statement.
329    /// \code
330    ///   if (a) return;
331    ///   else
332    ///     return;
333    /// \endcode
334    SIS_WithoutElse,
335    /// Always put short ifs on the same line if
336    /// the else is not a compound statement or not.
337    /// \code
338    ///   if (a) return;
339    ///   else {
340    ///     return;
341    ///   }
342    /// \endcode
343    SIS_Always,
344  };
345
346  /// If ``true``, ``if (a) return;`` can be put on a single line.
347  ShortIfStyle AllowShortIfStatementsOnASingleLine;
348
349  /// Different styles for merging short lambdas containing at most one
350  /// statement.
351  enum ShortLambdaStyle {
352    /// Never merge lambdas into a single line.
353    SLS_None,
354    /// Only merge empty lambdas.
355    /// \code
356    ///   auto lambda = [](int a) {}
357    ///   auto lambda2 = [](int a) {
358    ///       return a;
359    ///   };
360    /// \endcode
361    SLS_Empty,
362    /// Merge lambda into a single line if argument of a function.
363    /// \code
364    ///   auto lambda = [](int a) {
365    ///       return a;
366    ///   };
367    ///   sort(a.begin(), a.end(), ()[] { return x < y; })
368    /// \endcode
369    SLS_Inline,
370    /// Merge all lambdas fitting on a single line.
371    /// \code
372    ///   auto lambda = [](int a) {}
373    ///   auto lambda2 = [](int a) { return a; };
374    /// \endcode
375    SLS_All,
376  };
377
378  /// Dependent on the value, ``auto lambda []() { return 0; }`` can be put on a
379  /// single line.
380  ShortLambdaStyle AllowShortLambdasOnASingleLine;
381
382  /// If ``true``, ``while (true) continue;`` can be put on a single
383  /// line.
384  bool AllowShortLoopsOnASingleLine;
385
386  /// Different ways to break after the function definition return type.
387  /// This option is **deprecated** and is retained for backwards compatibility.
388  enum DefinitionReturnTypeBreakingStyle {
389    /// Break after return type automatically.
390    /// ``PenaltyReturnTypeOnItsOwnLine`` is taken into account.
391    DRTBS_None,
392    /// Always break after the return type.
393    DRTBS_All,
394    /// Always break after the return types of top-level functions.
395    DRTBS_TopLevel,
396  };
397
398  /// Different ways to break after the function definition or
399  /// declaration return type.
400  enum ReturnTypeBreakingStyle {
401    /// Break after return type automatically.
402    /// ``PenaltyReturnTypeOnItsOwnLine`` is taken into account.
403    /// \code
404    ///   class A {
405    ///     int f() { return 0; };
406    ///   };
407    ///   int f();
408    ///   int f() { return 1; }
409    /// \endcode
410    RTBS_None,
411    /// Always break after the return type.
412    /// \code
413    ///   class A {
414    ///     int
415    ///     f() {
416    ///       return 0;
417    ///     };
418    ///   };
419    ///   int
420    ///   f();
421    ///   int
422    ///   f() {
423    ///     return 1;
424    ///   }
425    /// \endcode
426    RTBS_All,
427    /// Always break after the return types of top-level functions.
428    /// \code
429    ///   class A {
430    ///     int f() { return 0; };
431    ///   };
432    ///   int
433    ///   f();
434    ///   int
435    ///   f() {
436    ///     return 1;
437    ///   }
438    /// \endcode
439    RTBS_TopLevel,
440    /// Always break after the return type of function definitions.
441    /// \code
442    ///   class A {
443    ///     int
444    ///     f() {
445    ///       return 0;
446    ///     };
447    ///   };
448    ///   int f();
449    ///   int
450    ///   f() {
451    ///     return 1;
452    ///   }
453    /// \endcode
454    RTBS_AllDefinitions,
455    /// Always break after the return type of top-level definitions.
456    /// \code
457    ///   class A {
458    ///     int f() { return 0; };
459    ///   };
460    ///   int f();
461    ///   int
462    ///   f() {
463    ///     return 1;
464    ///   }
465    /// \endcode
466    RTBS_TopLevelDefinitions,
467  };
468
469  /// The function definition return type breaking style to use.  This
470  /// option is **deprecated** and is retained for backwards compatibility.
471  DefinitionReturnTypeBreakingStyle AlwaysBreakAfterDefinitionReturnType;
472
473  /// The function declaration return type breaking style to use.
474  ReturnTypeBreakingStyle AlwaysBreakAfterReturnType;
475
476  /// If ``true``, always break before multiline string literals.
477  ///
478  /// This flag is mean to make cases where there are multiple multiline strings
479  /// in a file look more consistent. Thus, it will only take effect if wrapping
480  /// the string at that point leads to it being indented
481  /// ``ContinuationIndentWidth`` spaces from the start of the line.
482  /// \code
483  ///    true:                                  false:
484  ///    aaaa =                         vs.     aaaa = "bbbb"
485  ///        "bbbb"                                    "cccc";
486  ///        "cccc";
487  /// \endcode
488  bool AlwaysBreakBeforeMultilineStrings;
489
490  /// Different ways to break after the template declaration.
491  enum BreakTemplateDeclarationsStyle {
492    /// Do not force break before declaration.
493    /// ``PenaltyBreakTemplateDeclaration`` is taken into account.
494    /// \code
495    ///    template <typename T> T foo() {
496    ///    }
497    ///    template <typename T> T foo(int aaaaaaaaaaaaaaaaaaaaa,
498    ///                                int bbbbbbbbbbbbbbbbbbbbb) {
499    ///    }
500    /// \endcode
501    BTDS_No,
502    /// Force break after template declaration only when the following
503    /// declaration spans multiple lines.
504    /// \code
505    ///    template <typename T> T foo() {
506    ///    }
507    ///    template <typename T>
508    ///    T foo(int aaaaaaaaaaaaaaaaaaaaa,
509    ///          int bbbbbbbbbbbbbbbbbbbbb) {
510    ///    }
511    /// \endcode
512    BTDS_MultiLine,
513    /// Always break after template declaration.
514    /// \code
515    ///    template <typename T>
516    ///    T foo() {
517    ///    }
518    ///    template <typename T>
519    ///    T foo(int aaaaaaaaaaaaaaaaaaaaa,
520    ///          int bbbbbbbbbbbbbbbbbbbbb) {
521    ///    }
522    /// \endcode
523    BTDS_Yes
524  };
525
526  /// The template declaration breaking style to use.
527  BreakTemplateDeclarationsStyle AlwaysBreakTemplateDeclarations;
528
529  /// If ``false``, a function call's arguments will either be all on the
530  /// same line or will have one line each.
531  /// \code
532  ///   true:
533  ///   void f() {
534  ///     f(aaaaaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaaaaaa,
535  ///       aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa);
536  ///   }
537  ///
538  ///   false:
539  ///   void f() {
540  ///     f(aaaaaaaaaaaaaaaaaaaa,
541  ///       aaaaaaaaaaaaaaaaaaaa,
542  ///       aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa);
543  ///   }
544  /// \endcode
545  bool BinPackArguments;
546
547  /// If ``false``, a function declaration's or function definition's
548  /// parameters will either all be on the same line or will have one line each.
549  /// \code
550  ///   true:
551  ///   void f(int aaaaaaaaaaaaaaaaaaaa, int aaaaaaaaaaaaaaaaaaaa,
552  ///          int aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) {}
553  ///
554  ///   false:
555  ///   void f(int aaaaaaaaaaaaaaaaaaaa,
556  ///          int aaaaaaaaaaaaaaaaaaaa,
557  ///          int aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) {}
558  /// \endcode
559  bool BinPackParameters;
560
561  /// The style of wrapping parameters on the same line (bin-packed) or
562  /// on one line each.
563  enum BinPackStyle {
564    /// Automatically determine parameter bin-packing behavior.
565    BPS_Auto,
566    /// Always bin-pack parameters.
567    BPS_Always,
568    /// Never bin-pack parameters.
569    BPS_Never,
570  };
571
572  /// The style of breaking before or after binary operators.
573  enum BinaryOperatorStyle {
574    /// Break after operators.
575    /// \code
576    ///    LooooooooooongType loooooooooooooooooooooongVariable =
577    ///        someLooooooooooooooooongFunction();
578    ///
579    ///    bool value = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +
580    ///                         aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ==
581    ///                     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa &&
582    ///                 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa >
583    ///                     ccccccccccccccccccccccccccccccccccccccccc;
584    /// \endcode
585    BOS_None,
586    /// Break before operators that aren't assignments.
587    /// \code
588    ///    LooooooooooongType loooooooooooooooooooooongVariable =
589    ///        someLooooooooooooooooongFunction();
590    ///
591    ///    bool value = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
592    ///                         + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
593    ///                     == aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
594    ///                 && aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
595    ///                        > ccccccccccccccccccccccccccccccccccccccccc;
596    /// \endcode
597    BOS_NonAssignment,
598    /// Break before operators.
599    /// \code
600    ///    LooooooooooongType loooooooooooooooooooooongVariable
601    ///        = someLooooooooooooooooongFunction();
602    ///
603    ///    bool value = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
604    ///                         + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
605    ///                     == aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
606    ///                 && aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
607    ///                        > ccccccccccccccccccccccccccccccccccccccccc;
608    /// \endcode
609    BOS_All,
610  };
611
612  /// The way to wrap binary operators.
613  BinaryOperatorStyle BreakBeforeBinaryOperators;
614
615  /// Different ways to attach braces to their surrounding context.
616  enum BraceBreakingStyle {
617    /// Always attach braces to surrounding context.
618    /// \code
619    ///   try {
620    ///     foo();
621    ///   } catch () {
622    ///   }
623    ///   void foo() { bar(); }
624    ///   class foo {};
625    ///   if (foo()) {
626    ///   } else {
627    ///   }
628    ///   enum X : int { A, B };
629    /// \endcode
630    BS_Attach,
631    /// Like ``Attach``, but break before braces on function, namespace and
632    /// class definitions.
633    /// \code
634    ///   try {
635    ///     foo();
636    ///   } catch () {
637    ///   }
638    ///   void foo() { bar(); }
639    ///   class foo
640    ///   {
641    ///   };
642    ///   if (foo()) {
643    ///   } else {
644    ///   }
645    ///   enum X : int { A, B };
646    /// \endcode
647    BS_Linux,
648    /// Like ``Attach``, but break before braces on enum, function, and record
649    /// definitions.
650    /// \code
651    ///   try {
652    ///     foo();
653    ///   } catch () {
654    ///   }
655    ///   void foo() { bar(); }
656    ///   class foo
657    ///   {
658    ///   };
659    ///   if (foo()) {
660    ///   } else {
661    ///   }
662    ///   enum X : int { A, B };
663    /// \endcode
664    BS_Mozilla,
665    /// Like ``Attach``, but break before function definitions, ``catch``, and
666    /// ``else``.
667    /// \code
668    ///   try {
669    ///     foo();
670    ///   }
671    ///   catch () {
672    ///   }
673    ///   void foo() { bar(); }
674    ///   class foo {
675    ///   };
676    ///   if (foo()) {
677    ///   }
678    ///   else {
679    ///   }
680    ///   enum X : int { A, B };
681    /// \endcode
682    BS_Stroustrup,
683    /// Always break before braces.
684    /// \code
685    ///   try
686    ///   {
687    ///     foo();
688    ///   }
689    ///   catch ()
690    ///   {
691    ///   }
692    ///   void foo() { bar(); }
693    ///   class foo
694    ///   {
695    ///   };
696    ///   if (foo())
697    ///   {
698    ///   }
699    ///   else
700    ///   {
701    ///   }
702    ///   enum X : int
703    ///   {
704    ///     A,
705    ///     B
706    ///   };
707    /// \endcode
708    BS_Allman,
709    /// Like ``Allman`` but always indent braces and line up code with braces.
710    /// \code
711    ///   try
712    ///     {
713    ///     foo();
714    ///     }
715    ///   catch ()
716    ///     {
717    ///     }
718    ///   void foo() { bar(); }
719    ///   class foo
720    ///     {
721    ///     };
722    ///   if (foo())
723    ///     {
724    ///     }
725    ///   else
726    ///     {
727    ///     }
728    ///   enum X : int
729    ///     {
730    ///     A,
731    ///     B
732    ///     };
733    /// \endcode
734    BS_Whitesmiths,
735    /// Always break before braces and add an extra level of indentation to
736    /// braces of control statements, not to those of class, function
737    /// or other definitions.
738    /// \code
739    ///   try
740    ///     {
741    ///       foo();
742    ///     }
743    ///   catch ()
744    ///     {
745    ///     }
746    ///   void foo() { bar(); }
747    ///   class foo
748    ///   {
749    ///   };
750    ///   if (foo())
751    ///     {
752    ///     }
753    ///   else
754    ///     {
755    ///     }
756    ///   enum X : int
757    ///   {
758    ///     A,
759    ///     B
760    ///   };
761    /// \endcode
762    BS_GNU,
763    /// Like ``Attach``, but break before functions.
764    /// \code
765    ///   try {
766    ///     foo();
767    ///   } catch () {
768    ///   }
769    ///   void foo() { bar(); }
770    ///   class foo {
771    ///   };
772    ///   if (foo()) {
773    ///   } else {
774    ///   }
775    ///   enum X : int { A, B };
776    /// \endcode
777    BS_WebKit,
778    /// Configure each individual brace in `BraceWrapping`.
779    BS_Custom
780  };
781
782  /// The brace breaking style to use.
783  BraceBreakingStyle BreakBeforeBraces;
784
785  /// Different ways to wrap braces after control statements.
786  enum BraceWrappingAfterControlStatementStyle {
787    /// Never wrap braces after a control statement.
788    /// \code
789    ///   if (foo()) {
790    ///   } else {
791    ///   }
792    ///   for (int i = 0; i < 10; ++i) {
793    ///   }
794    /// \endcode
795    BWACS_Never,
796    /// Only wrap braces after a multi-line control statement.
797    /// \code
798    ///   if (foo && bar &&
799    ///       baz)
800    ///   {
801    ///     quux();
802    ///   }
803    ///   while (foo || bar) {
804    ///   }
805    /// \endcode
806    BWACS_MultiLine,
807    /// Always wrap braces after a control statement.
808    /// \code
809    ///   if (foo())
810    ///   {
811    ///   } else
812    ///   {}
813    ///   for (int i = 0; i < 10; ++i)
814    ///   {}
815    /// \endcode
816    BWACS_Always
817  };
818
819  /// Precise control over the wrapping of braces.
820  /// \code
821  ///   # Should be declared this way:
822  ///   BreakBeforeBraces: Custom
823  ///   BraceWrapping:
824  ///       AfterClass: true
825  /// \endcode
826  struct BraceWrappingFlags {
827    /// Wrap case labels.
828    /// \code
829    ///   false:                                true:
830    ///   switch (foo) {                vs.     switch (foo) {
831    ///     case 1: {                             case 1:
832    ///       bar();                              {
833    ///       break;                                bar();
834    ///     }                                       break;
835    ///     default: {                            }
836    ///       plop();                             default:
837    ///     }                                     {
838    ///   }                                         plop();
839    ///                                           }
840    ///                                         }
841    /// \endcode
842    bool AfterCaseLabel;
843    /// Wrap class definitions.
844    /// \code
845    ///   true:
846    ///   class foo {};
847    ///
848    ///   false:
849    ///   class foo
850    ///   {};
851    /// \endcode
852    bool AfterClass;
853
854    /// Wrap control statements (``if``/``for``/``while``/``switch``/..).
855    BraceWrappingAfterControlStatementStyle AfterControlStatement;
856    /// Wrap enum definitions.
857    /// \code
858    ///   true:
859    ///   enum X : int
860    ///   {
861    ///     B
862    ///   };
863    ///
864    ///   false:
865    ///   enum X : int { B };
866    /// \endcode
867    bool AfterEnum;
868    /// Wrap function definitions.
869    /// \code
870    ///   true:
871    ///   void foo()
872    ///   {
873    ///     bar();
874    ///     bar2();
875    ///   }
876    ///
877    ///   false:
878    ///   void foo() {
879    ///     bar();
880    ///     bar2();
881    ///   }
882    /// \endcode
883    bool AfterFunction;
884    /// Wrap namespace definitions.
885    /// \code
886    ///   true:
887    ///   namespace
888    ///   {
889    ///   int foo();
890    ///   int bar();
891    ///   }
892    ///
893    ///   false:
894    ///   namespace {
895    ///   int foo();
896    ///   int bar();
897    ///   }
898    /// \endcode
899    bool AfterNamespace;
900    /// Wrap ObjC definitions (interfaces, implementations...).
901    /// \note @autoreleasepool and @synchronized blocks are wrapped
902    /// according to `AfterControlStatement` flag.
903    bool AfterObjCDeclaration;
904    /// Wrap struct definitions.
905    /// \code
906    ///   true:
907    ///   struct foo
908    ///   {
909    ///     int x;
910    ///   };
911    ///
912    ///   false:
913    ///   struct foo {
914    ///     int x;
915    ///   };
916    /// \endcode
917    bool AfterStruct;
918    /// Wrap union definitions.
919    /// \code
920    ///   true:
921    ///   union foo
922    ///   {
923    ///     int x;
924    ///   }
925    ///
926    ///   false:
927    ///   union foo {
928    ///     int x;
929    ///   }
930    /// \endcode
931    bool AfterUnion;
932    /// Wrap extern blocks.
933    /// \code
934    ///   true:
935    ///   extern "C"
936    ///   {
937    ///     int foo();
938    ///   }
939    ///
940    ///   false:
941    ///   extern "C" {
942    ///   int foo();
943    ///   }
944    /// \endcode
945    bool AfterExternBlock;
946    /// Wrap before ``catch``.
947    /// \code
948    ///   true:
949    ///   try {
950    ///     foo();
951    ///   }
952    ///   catch () {
953    ///   }
954    ///
955    ///   false:
956    ///   try {
957    ///     foo();
958    ///   } catch () {
959    ///   }
960    /// \endcode
961    bool BeforeCatch;
962    /// Wrap before ``else``.
963    /// \code
964    ///   true:
965    ///   if (foo()) {
966    ///   }
967    ///   else {
968    ///   }
969    ///
970    ///   false:
971    ///   if (foo()) {
972    ///   } else {
973    ///   }
974    /// \endcode
975    bool BeforeElse;
976    /// Indent the wrapped braces themselves.
977    bool IndentBraces;
978    /// If ``false``, empty function body can be put on a single line.
979    /// This option is used only if the opening brace of the function has
980    /// already been wrapped, i.e. the `AfterFunction` brace wrapping mode is
981    /// set, and the function could/should not be put on a single line (as per
982    /// `AllowShortFunctionsOnASingleLine` and constructor formatting options).
983    /// \code
984    ///   int f()   vs.   int f()
985    ///   {}              {
986    ///                   }
987    /// \endcode
988    ///
989    bool SplitEmptyFunction;
990    /// If ``false``, empty record (e.g. class, struct or union) body
991    /// can be put on a single line. This option is used only if the opening
992    /// brace of the record has already been wrapped, i.e. the `AfterClass`
993    /// (for classes) brace wrapping mode is set.
994    /// \code
995    ///   class Foo   vs.  class Foo
996    ///   {}               {
997    ///                    }
998    /// \endcode
999    ///
1000    bool SplitEmptyRecord;
1001    /// If ``false``, empty namespace body can be put on a single line.
1002    /// This option is used only if the opening brace of the namespace has
1003    /// already been wrapped, i.e. the `AfterNamespace` brace wrapping mode is
1004    /// set.
1005    /// \code
1006    ///   namespace Foo   vs.  namespace Foo
1007    ///   {}                   {
1008    ///                        }
1009    /// \endcode
1010    ///
1011    bool SplitEmptyNamespace;
1012  };
1013
1014  /// Control of individual brace wrapping cases.
1015  ///
1016  /// If ``BreakBeforeBraces`` is set to ``BS_Custom``, use this to specify how
1017  /// each individual brace case should be handled. Otherwise, this is ignored.
1018  /// \code{.yaml}
1019  ///   # Example of usage:
1020  ///   BreakBeforeBraces: Custom
1021  ///   BraceWrapping:
1022  ///     AfterEnum: true
1023  ///     AfterStruct: false
1024  ///     SplitEmptyFunction: false
1025  /// \endcode
1026  BraceWrappingFlags BraceWrapping;
1027
1028  /// If ``true``, ternary operators will be placed after line breaks.
1029  /// \code
1030  ///    true:
1031  ///    veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongDescription
1032  ///        ? firstValue
1033  ///        : SecondValueVeryVeryVeryVeryLong;
1034  ///
1035  ///    false:
1036  ///    veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongDescription ?
1037  ///        firstValue :
1038  ///        SecondValueVeryVeryVeryVeryLong;
1039  /// \endcode
1040  bool BreakBeforeTernaryOperators;
1041
1042  /// Different ways to break initializers.
1043  enum BreakConstructorInitializersStyle {
1044    /// Break constructor initializers before the colon and after the commas.
1045    /// \code
1046    ///    Constructor()
1047    ///        : initializer1(),
1048    ///          initializer2()
1049    /// \endcode
1050    BCIS_BeforeColon,
1051    /// Break constructor initializers before the colon and commas, and align
1052    /// the commas with the colon.
1053    /// \code
1054    ///    Constructor()
1055    ///        : initializer1()
1056    ///        , initializer2()
1057    /// \endcode
1058    BCIS_BeforeComma,
1059    /// Break constructor initializers after the colon and commas.
1060    /// \code
1061    ///    Constructor() :
1062    ///        initializer1(),
1063    ///        initializer2()
1064    /// \endcode
1065    BCIS_AfterColon
1066  };
1067
1068  /// The constructor initializers style to use.
1069  BreakConstructorInitializersStyle BreakConstructorInitializers;
1070
1071  /// Break after each annotation on a field in Java files.
1072  /// \code{.java}
1073  ///    true:                                  false:
1074  ///    @Partial                       vs.     @Partial @Mock DataLoad loader;
1075  ///    @Mock
1076  ///    DataLoad loader;
1077  /// \endcode
1078  bool BreakAfterJavaFieldAnnotations;
1079
1080  /// Allow breaking string literals when formatting.
1081  /// \code
1082  ///    true:
1083  ///    const char* x = "veryVeryVeryVeryVeryVe"
1084  ///                    "ryVeryVeryVeryVeryVery"
1085  ///                    "VeryLongString";
1086  ///
1087  ///    false:
1088  ///    const char* x =
1089  ///      "veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongString";
1090  /// \endcode
1091  bool BreakStringLiterals;
1092
1093  /// The column limit.
1094  ///
1095  /// A column limit of ``0`` means that there is no column limit. In this case,
1096  /// clang-format will respect the input's line breaking decisions within
1097  /// statements unless they contradict other rules.
1098  unsigned ColumnLimit;
1099
1100  /// A regular expression that describes comments with special meaning,
1101  /// which should not be split into lines or otherwise changed.
1102  /// \code
1103  ///    // CommentPragmas: '^ FOOBAR pragma:'
1104  ///    // Will leave the following line unaffected
1105  ///    #include <vector> // FOOBAR pragma: keep
1106  /// \endcode
1107  std::string CommentPragmas;
1108
1109  /// Different ways to break inheritance list.
1110  enum BreakInheritanceListStyle {
1111    /// Break inheritance list before the colon and after the commas.
1112    /// \code
1113    ///    class Foo
1114    ///        : Base1,
1115    ///          Base2
1116    ///    {};
1117    /// \endcode
1118    BILS_BeforeColon,
1119    /// Break inheritance list before the colon and commas, and align
1120    /// the commas with the colon.
1121    /// \code
1122    ///    class Foo
1123    ///        : Base1
1124    ///        , Base2
1125    ///    {};
1126    /// \endcode
1127    BILS_BeforeComma,
1128    /// Break inheritance list after the colon and commas.
1129    /// \code
1130    ///    class Foo :
1131    ///        Base1,
1132    ///        Base2
1133    ///    {};
1134    /// \endcode
1135    BILS_AfterColon
1136  };
1137
1138  /// The inheritance list style to use.
1139  BreakInheritanceListStyle BreakInheritanceList;
1140
1141  /// If ``true``, consecutive namespace declarations will be on the same
1142  /// line. If ``false``, each namespace is declared on a new line.
1143  /// \code
1144  ///   true:
1145  ///   namespace Foo { namespace Bar {
1146  ///   }}
1147  ///
1148  ///   false:
1149  ///   namespace Foo {
1150  ///   namespace Bar {
1151  ///   }
1152  ///   }
1153  /// \endcode
1154  ///
1155  /// If it does not fit on a single line, the overflowing namespaces get
1156  /// wrapped:
1157  /// \code
1158  ///   namespace Foo { namespace Bar {
1159  ///   namespace Extra {
1160  ///   }}}
1161  /// \endcode
1162  bool CompactNamespaces;
1163
1164  // clang-format off
1165  /// If the constructor initializers don't fit on a line, put each
1166  /// initializer on its own line.
1167  /// \code
1168  ///   true:
1169  ///   SomeClass::Constructor()
1170  ///       : aaaaaaaa(aaaaaaaa), aaaaaaaa(aaaaaaaa), aaaaaaaa(aaaaaaaaaaaaaaaaaaaaaaaaa) {
1171  ///     return 0;
1172  ///   }
1173  ///
1174  ///   false:
1175  ///   SomeClass::Constructor()
1176  ///       : aaaaaaaa(aaaaaaaa), aaaaaaaa(aaaaaaaa),
1177  ///         aaaaaaaa(aaaaaaaaaaaaaaaaaaaaaaaaa) {
1178  ///     return 0;
1179  ///   }
1180  /// \endcode
1181  bool ConstructorInitializerAllOnOneLineOrOnePerLine;
1182  // clang-format on
1183
1184  /// The number of characters to use for indentation of constructor
1185  /// initializer lists as well as inheritance lists.
1186  unsigned ConstructorInitializerIndentWidth;
1187
1188  /// Indent width for line continuations.
1189  /// \code
1190  ///    ContinuationIndentWidth: 2
1191  ///
1192  ///    int i =         //  VeryVeryVeryVeryVeryLongComment
1193  ///      longFunction( // Again a long comment
1194  ///        arg);
1195  /// \endcode
1196  unsigned ContinuationIndentWidth;
1197
1198  /// If ``true``, format braced lists as best suited for C++11 braced
1199  /// lists.
1200  ///
1201  /// Important differences:
1202  /// - No spaces inside the braced list.
1203  /// - No line break before the closing brace.
1204  /// - Indentation with the continuation indent, not with the block indent.
1205  ///
1206  /// Fundamentally, C++11 braced lists are formatted exactly like function
1207  /// calls would be formatted in their place. If the braced list follows a name
1208  /// (e.g. a type or variable name), clang-format formats as if the ``{}`` were
1209  /// the parentheses of a function call with that name. If there is no name,
1210  /// a zero-length name is assumed.
1211  /// \code
1212  ///    true:                                  false:
1213  ///    vector<int> x{1, 2, 3, 4};     vs.     vector<int> x{ 1, 2, 3, 4 };
1214  ///    vector<T> x{{}, {}, {}, {}};           vector<T> x{ {}, {}, {}, {} };
1215  ///    f(MyMap[{composite, key}]);            f(MyMap[{ composite, key }]);
1216  ///    new int[3]{1, 2, 3};                   new int[3]{ 1, 2, 3 };
1217  /// \endcode
1218  bool Cpp11BracedListStyle;
1219
1220  /// \brief Analyze the formatted file for the most used line ending (``\r\n``
1221  /// or ``\n``). ``UseCRLF`` is only used as a fallback if none can be derived.
1222  bool DeriveLineEnding;
1223
1224  /// If ``true``, analyze the formatted file for the most common
1225  /// alignment of ``&`` and ``*``.
1226  /// Pointer and reference alignment styles are going to be updated according
1227  /// to the preferences found in the file.
1228  /// ``PointerAlignment`` is then used only as fallback.
1229  bool DerivePointerAlignment;
1230
1231  /// Disables formatting completely.
1232  bool DisableFormat;
1233
1234  /// If ``true``, clang-format detects whether function calls and
1235  /// definitions are formatted with one parameter per line.
1236  ///
1237  /// Each call can be bin-packed, one-per-line or inconclusive. If it is
1238  /// inconclusive, e.g. completely on one line, but a decision needs to be
1239  /// made, clang-format analyzes whether there are other bin-packed cases in
1240  /// the input file and act accordingly.
1241  ///
1242  /// NOTE: This is an experimental flag, that might go away or be renamed. Do
1243  /// not use this in config files, etc. Use at your own risk.
1244  bool ExperimentalAutoDetectBinPacking;
1245
1246  /// If ``true``, clang-format adds missing namespace end comments and
1247  /// fixes invalid existing ones.
1248  /// \code
1249  ///    true:                                  false:
1250  ///    namespace a {                  vs.     namespace a {
1251  ///    foo();                                 foo();
1252  ///    } // namespace a                       }
1253  /// \endcode
1254  bool FixNamespaceComments;
1255
1256  /// A vector of macros that should be interpreted as foreach loops
1257  /// instead of as function calls.
1258  ///
1259  /// These are expected to be macros of the form:
1260  /// \code
1261  ///   FOREACH(<variable-declaration>, ...)
1262  ///     <loop-body>
1263  /// \endcode
1264  ///
1265  /// In the .clang-format configuration file, this can be configured like:
1266  /// \code{.yaml}
1267  ///   ForEachMacros: ['RANGES_FOR', 'FOREACH']
1268  /// \endcode
1269  ///
1270  /// For example: BOOST_FOREACH.
1271  std::vector<std::string> ForEachMacros;
1272
1273  /// \brief A vector of macros that should be interpreted as type declarations
1274  /// instead of as function calls.
1275  ///
1276  /// These are expected to be macros of the form:
1277  /// \code
1278  ///   STACK_OF(...)
1279  /// \endcode
1280  ///
1281  /// In the .clang-format configuration file, this can be configured like:
1282  /// \code{.yaml}
1283  ///   TypenameMacros: ['STACK_OF', 'LIST']
1284  /// \endcode
1285  ///
1286  /// For example: OpenSSL STACK_OF, BSD LIST_ENTRY.
1287  std::vector<std::string> TypenameMacros;
1288
1289  /// A vector of macros that should be interpreted as complete
1290  /// statements.
1291  ///
1292  /// Typical macros are expressions, and require a semi-colon to be
1293  /// added; sometimes this is not the case, and this allows to make
1294  /// clang-format aware of such cases.
1295  ///
1296  /// For example: Q_UNUSED
1297  std::vector<std::string> StatementMacros;
1298
1299  /// A vector of macros which are used to open namespace blocks.
1300  ///
1301  /// These are expected to be macros of the form:
1302  /// \code
1303  ///   NAMESPACE(<namespace-name>, ...) {
1304  ///     <namespace-content>
1305  ///   }
1306  /// \endcode
1307  ///
1308  /// For example: TESTSUITE
1309  std::vector<std::string> NamespaceMacros;
1310
1311  tooling::IncludeStyle IncludeStyle;
1312
1313  /// Indent case labels one level from the switch statement.
1314  ///
1315  /// When ``false``, use the same indentation level as for the switch
1316  /// statement. Switch statement body is always indented one level more than
1317  /// case labels.
1318  /// \code
1319  ///    false:                                 true:
1320  ///    switch (fool) {                vs.     switch (fool) {
1321  ///    case 1:                                  case 1:
1322  ///      bar();                                   bar();
1323  ///      break;                                   break;
1324  ///    default:                                 default:
1325  ///      plop();                                  plop();
1326  ///    }                                      }
1327  /// \endcode
1328  bool IndentCaseLabels;
1329
1330  /// Indent goto labels.
1331  ///
1332  /// When ``false``, goto labels are flushed left.
1333  /// \code
1334  ///    true:                                  false:
1335  ///    int f() {                      vs.     int f() {
1336  ///      if (foo()) {                           if (foo()) {
1337  ///      label1:                              label1:
1338  ///        bar();                                 bar();
1339  ///      }                                      }
1340  ///    label2:                                label2:
1341  ///      return 1;                              return 1;
1342  ///    }                                      }
1343  /// \endcode
1344  bool IndentGotoLabels;
1345
1346  /// Options for indenting preprocessor directives.
1347  enum PPDirectiveIndentStyle {
1348    /// Does not indent any directives.
1349    /// \code
1350    ///    #if FOO
1351    ///    #if BAR
1352    ///    #include <foo>
1353    ///    #endif
1354    ///    #endif
1355    /// \endcode
1356    PPDIS_None,
1357    /// Indents directives after the hash.
1358    /// \code
1359    ///    #if FOO
1360    ///    #  if BAR
1361    ///    #    include <foo>
1362    ///    #  endif
1363    ///    #endif
1364    /// \endcode
1365    PPDIS_AfterHash,
1366    /// Indents directives before the hash.
1367    /// \code
1368    ///    #if FOO
1369    ///      #if BAR
1370    ///        #include <foo>
1371    ///      #endif
1372    ///    #endif
1373    /// \endcode
1374    PPDIS_BeforeHash
1375  };
1376
1377  /// The preprocessor directive indenting style to use.
1378  PPDirectiveIndentStyle IndentPPDirectives;
1379
1380  /// The number of columns to use for indentation.
1381  /// \code
1382  ///    IndentWidth: 3
1383  ///
1384  ///    void f() {
1385  ///       someFunction();
1386  ///       if (true, false) {
1387  ///          f();
1388  ///       }
1389  ///    }
1390  /// \endcode
1391  unsigned IndentWidth;
1392
1393  /// Indent if a function definition or declaration is wrapped after the
1394  /// type.
1395  /// \code
1396  ///    true:
1397  ///    LoooooooooooooooooooooooooooooooooooooooongReturnType
1398  ///        LoooooooooooooooooooooooooooooooongFunctionDeclaration();
1399  ///
1400  ///    false:
1401  ///    LoooooooooooooooooooooooooooooooooooooooongReturnType
1402  ///    LoooooooooooooooooooooooooooooooongFunctionDeclaration();
1403  /// \endcode
1404  bool IndentWrappedFunctionNames;
1405
1406  /// A vector of prefixes ordered by the desired groups for Java imports.
1407  ///
1408  /// Each group is separated by a newline. Static imports will also follow the
1409  /// same grouping convention above all non-static imports. One group's prefix
1410  /// can be a subset of another - the longest prefix is always matched. Within
1411  /// a group, the imports are ordered lexicographically.
1412  ///
1413  /// In the .clang-format configuration file, this can be configured like
1414  /// in the following yaml example. This will result in imports being
1415  /// formatted as in the Java example below.
1416  /// \code{.yaml}
1417  ///   JavaImportGroups: ['com.example', 'com', 'org']
1418  /// \endcode
1419  ///
1420  /// \code{.java}
1421  ///    import static com.example.function1;
1422  ///
1423  ///    import static com.test.function2;
1424  ///
1425  ///    import static org.example.function3;
1426  ///
1427  ///    import com.example.ClassA;
1428  ///    import com.example.Test;
1429  ///    import com.example.a.ClassB;
1430  ///
1431  ///    import com.test.ClassC;
1432  ///
1433  ///    import org.example.ClassD;
1434  /// \endcode
1435  std::vector<std::string> JavaImportGroups;
1436
1437  /// Quotation styles for JavaScript strings. Does not affect template
1438  /// strings.
1439  enum JavaScriptQuoteStyle {
1440    /// Leave string quotes as they are.
1441    /// \code{.js}
1442    ///    string1 = "foo";
1443    ///    string2 = 'bar';
1444    /// \endcode
1445    JSQS_Leave,
1446    /// Always use single quotes.
1447    /// \code{.js}
1448    ///    string1 = 'foo';
1449    ///    string2 = 'bar';
1450    /// \endcode
1451    JSQS_Single,
1452    /// Always use double quotes.
1453    /// \code{.js}
1454    ///    string1 = "foo";
1455    ///    string2 = "bar";
1456    /// \endcode
1457    JSQS_Double
1458  };
1459
1460  /// The JavaScriptQuoteStyle to use for JavaScript strings.
1461  JavaScriptQuoteStyle JavaScriptQuotes;
1462
1463  // clang-format off
1464  /// Whether to wrap JavaScript import/export statements.
1465  /// \code{.js}
1466  ///    true:
1467  ///    import {
1468  ///        VeryLongImportsAreAnnoying,
1469  ///        VeryLongImportsAreAnnoying,
1470  ///        VeryLongImportsAreAnnoying,
1471  ///    } from 'some/module.js'
1472  ///
1473  ///    false:
1474  ///    import {VeryLongImportsAreAnnoying, VeryLongImportsAreAnnoying, VeryLongImportsAreAnnoying,} from "some/module.js"
1475  /// \endcode
1476  bool JavaScriptWrapImports;
1477  // clang-format on
1478
1479  /// If true, the empty line at the start of blocks is kept.
1480  /// \code
1481  ///    true:                                  false:
1482  ///    if (foo) {                     vs.     if (foo) {
1483  ///                                             bar();
1484  ///      bar();                               }
1485  ///    }
1486  /// \endcode
1487  bool KeepEmptyLinesAtTheStartOfBlocks;
1488
1489  /// Supported languages.
1490  ///
1491  /// When stored in a configuration file, specifies the language, that the
1492  /// configuration targets. When passed to the ``reformat()`` function, enables
1493  /// syntax features specific to the language.
1494  enum LanguageKind {
1495    /// Do not use.
1496    LK_None,
1497    /// Should be used for C, C++.
1498    LK_Cpp,
1499    /// Should be used for C#.
1500    LK_CSharp,
1501    /// Should be used for Java.
1502    LK_Java,
1503    /// Should be used for JavaScript.
1504    LK_JavaScript,
1505    /// Should be used for Objective-C, Objective-C++.
1506    LK_ObjC,
1507    /// Should be used for Protocol Buffers
1508    /// (https://developers.google.com/protocol-buffers/).
1509    LK_Proto,
1510    /// Should be used for TableGen code.
1511    LK_TableGen,
1512    /// Should be used for Protocol Buffer messages in text format
1513    /// (https://developers.google.com/protocol-buffers/).
1514    LK_TextProto
1515  };
1516  bool isCpp() const { return Language == LK_Cpp || Language == LK_ObjC; }
1517  bool isCSharp() const { return Language == LK_CSharp; }
1518
1519  /// Language, this format style is targeted at.
1520  LanguageKind Language;
1521
1522  /// A regular expression matching macros that start a block.
1523  /// \code
1524  ///    # With:
1525  ///    MacroBlockBegin: "^NS_MAP_BEGIN|\
1526  ///    NS_TABLE_HEAD$"
1527  ///    MacroBlockEnd: "^\
1528  ///    NS_MAP_END|\
1529  ///    NS_TABLE_.*_END$"
1530  ///
1531  ///    NS_MAP_BEGIN
1532  ///      foo();
1533  ///    NS_MAP_END
1534  ///
1535  ///    NS_TABLE_HEAD
1536  ///      bar();
1537  ///    NS_TABLE_FOO_END
1538  ///
1539  ///    # Without:
1540  ///    NS_MAP_BEGIN
1541  ///    foo();
1542  ///    NS_MAP_END
1543  ///
1544  ///    NS_TABLE_HEAD
1545  ///    bar();
1546  ///    NS_TABLE_FOO_END
1547  /// \endcode
1548  std::string MacroBlockBegin;
1549
1550  /// A regular expression matching macros that end a block.
1551  std::string MacroBlockEnd;
1552
1553  /// The maximum number of consecutive empty lines to keep.
1554  /// \code
1555  ///    MaxEmptyLinesToKeep: 1         vs.     MaxEmptyLinesToKeep: 0
1556  ///    int f() {                              int f() {
1557  ///      int = 1;                                 int i = 1;
1558  ///                                               i = foo();
1559  ///      i = foo();                               return i;
1560  ///                                           }
1561  ///      return i;
1562  ///    }
1563  /// \endcode
1564  unsigned MaxEmptyLinesToKeep;
1565
1566  /// Different ways to indent namespace contents.
1567  enum NamespaceIndentationKind {
1568    /// Don't indent in namespaces.
1569    /// \code
1570    ///    namespace out {
1571    ///    int i;
1572    ///    namespace in {
1573    ///    int i;
1574    ///    }
1575    ///    }
1576    /// \endcode
1577    NI_None,
1578    /// Indent only in inner namespaces (nested in other namespaces).
1579    /// \code
1580    ///    namespace out {
1581    ///    int i;
1582    ///    namespace in {
1583    ///      int i;
1584    ///    }
1585    ///    }
1586    /// \endcode
1587    NI_Inner,
1588    /// Indent in all namespaces.
1589    /// \code
1590    ///    namespace out {
1591    ///      int i;
1592    ///      namespace in {
1593    ///        int i;
1594    ///      }
1595    ///    }
1596    /// \endcode
1597    NI_All
1598  };
1599
1600  /// The indentation used for namespaces.
1601  NamespaceIndentationKind NamespaceIndentation;
1602
1603  /// Controls bin-packing Objective-C protocol conformance list
1604  /// items into as few lines as possible when they go over ``ColumnLimit``.
1605  ///
1606  /// If ``Auto`` (the default), delegates to the value in
1607  /// ``BinPackParameters``. If that is ``true``, bin-packs Objective-C
1608  /// protocol conformance list items into as few lines as possible
1609  /// whenever they go over ``ColumnLimit``.
1610  ///
1611  /// If ``Always``, always bin-packs Objective-C protocol conformance
1612  /// list items into as few lines as possible whenever they go over
1613  /// ``ColumnLimit``.
1614  ///
1615  /// If ``Never``, lays out Objective-C protocol conformance list items
1616  /// onto individual lines whenever they go over ``ColumnLimit``.
1617  ///
1618  /// \code{.objc}
1619  ///    Always (or Auto, if BinPackParameters=true):
1620  ///    @interface ccccccccccccc () <
1621  ///        ccccccccccccc, ccccccccccccc,
1622  ///        ccccccccccccc, ccccccccccccc> {
1623  ///    }
1624  ///
1625  ///    Never (or Auto, if BinPackParameters=false):
1626  ///    @interface ddddddddddddd () <
1627  ///        ddddddddddddd,
1628  ///        ddddddddddddd,
1629  ///        ddddddddddddd,
1630  ///        ddddddddddddd> {
1631  ///    }
1632  /// \endcode
1633  BinPackStyle ObjCBinPackProtocolList;
1634
1635  /// The number of characters to use for indentation of ObjC blocks.
1636  /// \code{.objc}
1637  ///    ObjCBlockIndentWidth: 4
1638  ///
1639  ///    [operation setCompletionBlock:^{
1640  ///        [self onOperationDone];
1641  ///    }];
1642  /// \endcode
1643  unsigned ObjCBlockIndentWidth;
1644
1645  /// Add a space after ``@property`` in Objective-C, i.e. use
1646  /// ``@property (readonly)`` instead of ``@property(readonly)``.
1647  bool ObjCSpaceAfterProperty;
1648
1649  /// Add a space in front of an Objective-C protocol list, i.e. use
1650  /// ``Foo <Protocol>`` instead of ``Foo<Protocol>``.
1651  bool ObjCSpaceBeforeProtocolList;
1652
1653  /// The penalty for breaking around an assignment operator.
1654  unsigned PenaltyBreakAssignment;
1655
1656  /// The penalty for breaking a function call after ``call(``.
1657  unsigned PenaltyBreakBeforeFirstCallParameter;
1658
1659  /// The penalty for each line break introduced inside a comment.
1660  unsigned PenaltyBreakComment;
1661
1662  /// The penalty for breaking before the first ``<<``.
1663  unsigned PenaltyBreakFirstLessLess;
1664
1665  /// The penalty for each line break introduced inside a string literal.
1666  unsigned PenaltyBreakString;
1667
1668  /// The penalty for breaking after template declaration.
1669  unsigned PenaltyBreakTemplateDeclaration;
1670
1671  /// The penalty for each character outside of the column limit.
1672  unsigned PenaltyExcessCharacter;
1673
1674  /// Penalty for putting the return type of a function onto its own
1675  /// line.
1676  unsigned PenaltyReturnTypeOnItsOwnLine;
1677
1678  /// The ``&`` and ``*`` alignment style.
1679  enum PointerAlignmentStyle {
1680    /// Align pointer to the left.
1681    /// \code
1682    ///   int* a;
1683    /// \endcode
1684    PAS_Left,
1685    /// Align pointer to the right.
1686    /// \code
1687    ///   int *a;
1688    /// \endcode
1689    PAS_Right,
1690    /// Align pointer in the middle.
1691    /// \code
1692    ///   int * a;
1693    /// \endcode
1694    PAS_Middle
1695  };
1696
1697  /// Pointer and reference alignment style.
1698  PointerAlignmentStyle PointerAlignment;
1699
1700  /// See documentation of ``RawStringFormats``.
1701  struct RawStringFormat {
1702    /// The language of this raw string.
1703    LanguageKind Language;
1704    /// A list of raw string delimiters that match this language.
1705    std::vector<std::string> Delimiters;
1706    /// A list of enclosing function names that match this language.
1707    std::vector<std::string> EnclosingFunctions;
1708    /// The canonical delimiter for this language.
1709    std::string CanonicalDelimiter;
1710    /// The style name on which this raw string format is based on.
1711    /// If not specified, the raw string format is based on the style that this
1712    /// format is based on.
1713    std::string BasedOnStyle;
1714    bool operator==(const RawStringFormat &Other) const {
1715      return Language == Other.Language && Delimiters == Other.Delimiters &&
1716             EnclosingFunctions == Other.EnclosingFunctions &&
1717             CanonicalDelimiter == Other.CanonicalDelimiter &&
1718             BasedOnStyle == Other.BasedOnStyle;
1719    }
1720  };
1721
1722  /// Defines hints for detecting supported languages code blocks in raw
1723  /// strings.
1724  ///
1725  /// A raw string with a matching delimiter or a matching enclosing function
1726  /// name will be reformatted assuming the specified language based on the
1727  /// style for that language defined in the .clang-format file. If no style has
1728  /// been defined in the .clang-format file for the specific language, a
1729  /// predefined style given by 'BasedOnStyle' is used. If 'BasedOnStyle' is not
1730  /// found, the formatting is based on llvm style. A matching delimiter takes
1731  /// precedence over a matching enclosing function name for determining the
1732  /// language of the raw string contents.
1733  ///
1734  /// If a canonical delimiter is specified, occurrences of other delimiters for
1735  /// the same language will be updated to the canonical if possible.
1736  ///
1737  /// There should be at most one specification per language and each delimiter
1738  /// and enclosing function should not occur in multiple specifications.
1739  ///
1740  /// To configure this in the .clang-format file, use:
1741  /// \code{.yaml}
1742  ///   RawStringFormats:
1743  ///     - Language: TextProto
1744  ///         Delimiters:
1745  ///           - 'pb'
1746  ///           - 'proto'
1747  ///         EnclosingFunctions:
1748  ///           - 'PARSE_TEXT_PROTO'
1749  ///         BasedOnStyle: google
1750  ///     - Language: Cpp
1751  ///         Delimiters:
1752  ///           - 'cc'
1753  ///           - 'cpp'
1754  ///         BasedOnStyle: llvm
1755  ///         CanonicalDelimiter: 'cc'
1756  /// \endcode
1757  std::vector<RawStringFormat> RawStringFormats;
1758
1759  // clang-format off
1760  /// If ``true``, clang-format will attempt to re-flow comments.
1761  /// \code
1762  ///    false:
1763  ///    // veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of information
1764  ///    /* second veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of information */
1765  ///
1766  ///    true:
1767  ///    // veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of
1768  ///    // information
1769  ///    /* second veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of
1770  ///     * information */
1771  /// \endcode
1772  bool ReflowComments;
1773  // clang-format on
1774
1775  /// If ``true``, clang-format will sort ``#includes``.
1776  /// \code
1777  ///    false:                                 true:
1778  ///    #include "b.h"                 vs.     #include "a.h"
1779  ///    #include "a.h"                         #include "b.h"
1780  /// \endcode
1781  bool SortIncludes;
1782
1783  /// If ``true``, clang-format will sort using declarations.
1784  ///
1785  /// The order of using declarations is defined as follows:
1786  /// Split the strings by "::" and discard any initial empty strings. The last
1787  /// element of each list is a non-namespace name; all others are namespace
1788  /// names. Sort the lists of names lexicographically, where the sort order of
1789  /// individual names is that all non-namespace names come before all namespace
1790  /// names, and within those groups, names are in case-insensitive
1791  /// lexicographic order.
1792  /// \code
1793  ///    false:                                 true:
1794  ///    using std::cout;               vs.     using std::cin;
1795  ///    using std::cin;                        using std::cout;
1796  /// \endcode
1797  bool SortUsingDeclarations;
1798
1799  /// If ``true``, a space is inserted after C style casts.
1800  /// \code
1801  ///    true:                                  false:
1802  ///    (int) i;                       vs.     (int)i;
1803  /// \endcode
1804  bool SpaceAfterCStyleCast;
1805
1806  /// If ``true``, a space is inserted after the logical not operator (``!``).
1807  /// \code
1808  ///    true:                                  false:
1809  ///    ! someExpression();            vs.     !someExpression();
1810  /// \endcode
1811  bool SpaceAfterLogicalNot;
1812
1813  /// If \c true, a space will be inserted after the 'template' keyword.
1814  /// \code
1815  ///    true:                                  false:
1816  ///    template <int> void foo();     vs.     template<int> void foo();
1817  /// \endcode
1818  bool SpaceAfterTemplateKeyword;
1819
1820  /// If ``false``, spaces will be removed before assignment operators.
1821  /// \code
1822  ///    true:                                  false:
1823  ///    int a = 5;                     vs.     int a= 5;
1824  ///    a += 42;                               a+= 42;
1825  /// \endcode
1826  bool SpaceBeforeAssignmentOperators;
1827
1828  /// If ``true``, a space will be inserted before a C++11 braced list
1829  /// used to initialize an object (after the preceding identifier or type).
1830  /// \code
1831  ///    true:                                  false:
1832  ///    Foo foo { bar };               vs.     Foo foo{ bar };
1833  ///    Foo {};                                Foo{};
1834  ///    vector<int> { 1, 2, 3 };               vector<int>{ 1, 2, 3 };
1835  ///    new int[3] { 1, 2, 3 };                new int[3]{ 1, 2, 3 };
1836  /// \endcode
1837  bool SpaceBeforeCpp11BracedList;
1838
1839  /// If ``false``, spaces will be removed before constructor initializer
1840  /// colon.
1841  /// \code
1842  ///    true:                                  false:
1843  ///    Foo::Foo() : a(a) {}                   Foo::Foo(): a(a) {}
1844  /// \endcode
1845  bool SpaceBeforeCtorInitializerColon;
1846
1847  /// If ``false``, spaces will be removed before inheritance colon.
1848  /// \code
1849  ///    true:                                  false:
1850  ///    class Foo : Bar {}             vs.     class Foo: Bar {}
1851  /// \endcode
1852  bool SpaceBeforeInheritanceColon;
1853
1854  /// Different ways to put a space before opening parentheses.
1855  enum SpaceBeforeParensOptions {
1856    /// Never put a space before opening parentheses.
1857    /// \code
1858    ///    void f() {
1859    ///      if(true) {
1860    ///        f();
1861    ///      }
1862    ///    }
1863    /// \endcode
1864    SBPO_Never,
1865    /// Put a space before opening parentheses only after control statement
1866    /// keywords (``for/if/while...``).
1867    /// \code
1868    ///    void f() {
1869    ///      if (true) {
1870    ///        f();
1871    ///      }
1872    ///    }
1873    /// \endcode
1874    SBPO_ControlStatements,
1875    /// Put a space before opening parentheses only if the parentheses are not
1876    /// empty i.e. '()'
1877    /// \code
1878    ///   void() {
1879    ///     if (true) {
1880    ///       f();
1881    ///       g (x, y, z);
1882    ///     }
1883    ///   }
1884    /// \endcode
1885    SBPO_NonEmptyParentheses,
1886    /// Always put a space before opening parentheses, except when it's
1887    /// prohibited by the syntax rules (in function-like macro definitions) or
1888    /// when determined by other style rules (after unary operators, opening
1889    /// parentheses, etc.)
1890    /// \code
1891    ///    void f () {
1892    ///      if (true) {
1893    ///        f ();
1894    ///      }
1895    ///    }
1896    /// \endcode
1897    SBPO_Always
1898  };
1899
1900  /// Defines in which cases to put a space before opening parentheses.
1901  SpaceBeforeParensOptions SpaceBeforeParens;
1902
1903  /// If ``false``, spaces will be removed before range-based for loop
1904  /// colon.
1905  /// \code
1906  ///    true:                                  false:
1907  ///    for (auto v : values) {}       vs.     for(auto v: values) {}
1908  /// \endcode
1909  bool SpaceBeforeRangeBasedForLoopColon;
1910
1911  /// If ``true``, spaces will be inserted into ``{}``.
1912  /// \code
1913  ///    true:                                false:
1914  ///    void f() { }                   vs.   void f() {}
1915  ///    while (true) { }                     while (true) {}
1916  /// \endcode
1917  bool SpaceInEmptyBlock;
1918
1919  /// If ``true``, spaces may be inserted into ``()``.
1920  /// \code
1921  ///    true:                                false:
1922  ///    void f( ) {                    vs.   void f() {
1923  ///      int x[] = {foo( ), bar( )};          int x[] = {foo(), bar()};
1924  ///      if (true) {                          if (true) {
1925  ///        f( );                                f();
1926  ///      }                                    }
1927  ///    }                                    }
1928  /// \endcode
1929  bool SpaceInEmptyParentheses;
1930
1931  /// The number of spaces before trailing line comments
1932  /// (``//`` - comments).
1933  ///
1934  /// This does not affect trailing block comments (``/*`` - comments) as
1935  /// those commonly have different usage patterns and a number of special
1936  /// cases.
1937  /// \code
1938  ///    SpacesBeforeTrailingComments: 3
1939  ///    void f() {
1940  ///      if (true) {   // foo1
1941  ///        f();        // bar
1942  ///      }             // foo
1943  ///    }
1944  /// \endcode
1945  unsigned SpacesBeforeTrailingComments;
1946
1947  /// If ``true``, spaces will be inserted after ``<`` and before ``>``
1948  /// in template argument lists.
1949  /// \code
1950  ///    true:                                  false:
1951  ///    static_cast< int >(arg);       vs.     static_cast<int>(arg);
1952  ///    std::function< void(int) > fct;        std::function<void(int)> fct;
1953  /// \endcode
1954  bool SpacesInAngles;
1955
1956  /// If ``true``, spaces will be inserted around if/for/switch/while
1957  /// conditions.
1958  /// \code
1959  ///    true:                                  false:
1960  ///    if ( a )  { ... }              vs.     if (a) { ... }
1961  ///    while ( i < 5 )  { ... }               while (i < 5) { ... }
1962  /// \endcode
1963  bool SpacesInConditionalStatement;
1964
1965  /// If ``true``, spaces are inserted inside container literals (e.g.
1966  /// ObjC and Javascript array and dict literals).
1967  /// \code{.js}
1968  ///    true:                                  false:
1969  ///    var arr = [ 1, 2, 3 ];         vs.     var arr = [1, 2, 3];
1970  ///    f({a : 1, b : 2, c : 3});              f({a: 1, b: 2, c: 3});
1971  /// \endcode
1972  bool SpacesInContainerLiterals;
1973
1974  /// If ``true``, spaces may be inserted into C style casts.
1975  /// \code
1976  ///    true:                                  false:
1977  ///    x = ( int32 )y                 vs.     x = (int32)y
1978  /// \endcode
1979  bool SpacesInCStyleCastParentheses;
1980
1981  /// If ``true``, spaces will be inserted after ``(`` and before ``)``.
1982  /// \code
1983  ///    true:                                  false:
1984  ///    t f( Deleted & ) & = delete;   vs.     t f(Deleted &) & = delete;
1985  /// \endcode
1986  bool SpacesInParentheses;
1987
1988  /// If ``true``, spaces will be inserted after ``[`` and before ``]``.
1989  /// Lambdas without arguments or unspecified size array declarations will not
1990  /// be affected.
1991  /// \code
1992  ///    true:                                  false:
1993  ///    int a[ 5 ];                    vs.     int a[5];
1994  ///    std::unique_ptr<int[]> foo() {} // Won't be affected
1995  /// \endcode
1996  bool SpacesInSquareBrackets;
1997
1998  /// If ``true``, spaces will be before  ``[``.
1999  /// Lambdas will not be affected. Only the first ``[`` will get a space added.
2000  /// \code
2001  ///    true:                                  false:
2002  ///    int a [5];                    vs.      int a[5];
2003  ///    int a [5][5];                 vs.      int a[5][5];
2004  /// \endcode
2005  bool SpaceBeforeSquareBrackets;
2006
2007  /// Supported language standards for parsing and formatting C++ constructs.
2008  /// \code
2009  ///    Latest:                                vector<set<int>>
2010  ///    c++03                          vs.     vector<set<int> >
2011  /// \endcode
2012  ///
2013  /// The correct way to spell a specific language version is e.g. ``c++11``.
2014  /// The historical aliases ``Cpp03`` and ``Cpp11`` are deprecated.
2015  enum LanguageStandard {
2016    /// Parse and format as C++03.
2017    /// ``Cpp03`` is a deprecated alias for ``c++03``
2018    LS_Cpp03, // c++03
2019    /// Parse and format as C++11.
2020    LS_Cpp11, // c++11
2021    /// Parse and format as C++14.
2022    LS_Cpp14, // c++14
2023    /// Parse and format as C++17.
2024    LS_Cpp17, // c++17
2025    /// Parse and format as C++20.
2026    LS_Cpp20, // c++20
2027    /// Parse and format using the latest supported language version.
2028    /// ``Cpp11`` is a deprecated alias for ``Latest``
2029    LS_Latest,
2030    /// Automatic detection based on the input.
2031    LS_Auto,
2032  };
2033
2034  /// Parse and format C++ constructs compatible with this standard.
2035  /// \code
2036  ///    c++03:                                 latest:
2037  ///    vector<set<int> > x;           vs.     vector<set<int>> x;
2038  /// \endcode
2039  LanguageStandard Standard;
2040
2041  /// The number of columns used for tab stops.
2042  unsigned TabWidth;
2043
2044  /// Different ways to use tab in formatting.
2045  enum UseTabStyle {
2046    /// Never use tab.
2047    UT_Never,
2048    /// Use tabs only for indentation.
2049    UT_ForIndentation,
2050    /// Use tabs only for line continuation and indentation.
2051    UT_ForContinuationAndIndentation,
2052    /// Use tabs whenever we need to fill whitespace that spans at least from
2053    /// one tab stop to the next one.
2054    UT_Always
2055  };
2056
2057  /// \brief Use ``\r\n`` instead of ``\n`` for line breaks.
2058  /// Also used as fallback if ``DeriveLineEnding`` is true.
2059  bool UseCRLF;
2060
2061  /// The way to use tab characters in the resulting file.
2062  UseTabStyle UseTab;
2063
2064  bool operator==(const FormatStyle &R) const {
2065    return AccessModifierOffset == R.AccessModifierOffset &&
2066           AlignAfterOpenBracket == R.AlignAfterOpenBracket &&
2067           AlignConsecutiveAssignments == R.AlignConsecutiveAssignments &&
2068           AlignConsecutiveDeclarations == R.AlignConsecutiveDeclarations &&
2069           AlignEscapedNewlines == R.AlignEscapedNewlines &&
2070           AlignOperands == R.AlignOperands &&
2071           AlignTrailingComments == R.AlignTrailingComments &&
2072           AllowAllArgumentsOnNextLine == R.AllowAllArgumentsOnNextLine &&
2073           AllowAllConstructorInitializersOnNextLine ==
2074               R.AllowAllConstructorInitializersOnNextLine &&
2075           AllowAllParametersOfDeclarationOnNextLine ==
2076               R.AllowAllParametersOfDeclarationOnNextLine &&
2077           AllowShortBlocksOnASingleLine == R.AllowShortBlocksOnASingleLine &&
2078           AllowShortCaseLabelsOnASingleLine ==
2079               R.AllowShortCaseLabelsOnASingleLine &&
2080           AllowShortFunctionsOnASingleLine ==
2081               R.AllowShortFunctionsOnASingleLine &&
2082           AllowShortIfStatementsOnASingleLine ==
2083               R.AllowShortIfStatementsOnASingleLine &&
2084           AllowShortLambdasOnASingleLine == R.AllowShortLambdasOnASingleLine &&
2085           AllowShortLoopsOnASingleLine == R.AllowShortLoopsOnASingleLine &&
2086           AlwaysBreakAfterReturnType == R.AlwaysBreakAfterReturnType &&
2087           AlwaysBreakBeforeMultilineStrings ==
2088               R.AlwaysBreakBeforeMultilineStrings &&
2089           AlwaysBreakTemplateDeclarations ==
2090               R.AlwaysBreakTemplateDeclarations &&
2091           BinPackArguments == R.BinPackArguments &&
2092           BinPackParameters == R.BinPackParameters &&
2093           BreakBeforeBinaryOperators == R.BreakBeforeBinaryOperators &&
2094           BreakBeforeBraces == R.BreakBeforeBraces &&
2095           BreakBeforeTernaryOperators == R.BreakBeforeTernaryOperators &&
2096           BreakConstructorInitializers == R.BreakConstructorInitializers &&
2097           CompactNamespaces == R.CompactNamespaces &&
2098           BreakAfterJavaFieldAnnotations == R.BreakAfterJavaFieldAnnotations &&
2099           BreakStringLiterals == R.BreakStringLiterals &&
2100           ColumnLimit == R.ColumnLimit && CommentPragmas == R.CommentPragmas &&
2101           BreakInheritanceList == R.BreakInheritanceList &&
2102           ConstructorInitializerAllOnOneLineOrOnePerLine ==
2103               R.ConstructorInitializerAllOnOneLineOrOnePerLine &&
2104           ConstructorInitializerIndentWidth ==
2105               R.ConstructorInitializerIndentWidth &&
2106           ContinuationIndentWidth == R.ContinuationIndentWidth &&
2107           Cpp11BracedListStyle == R.Cpp11BracedListStyle &&
2108           DeriveLineEnding == R.DeriveLineEnding &&
2109           DerivePointerAlignment == R.DerivePointerAlignment &&
2110           DisableFormat == R.DisableFormat &&
2111           ExperimentalAutoDetectBinPacking ==
2112               R.ExperimentalAutoDetectBinPacking &&
2113           FixNamespaceComments == R.FixNamespaceComments &&
2114           ForEachMacros == R.ForEachMacros &&
2115           IncludeStyle.IncludeBlocks == R.IncludeStyle.IncludeBlocks &&
2116           IncludeStyle.IncludeCategories == R.IncludeStyle.IncludeCategories &&
2117           IncludeStyle.IncludeIsMainRegex ==
2118               R.IncludeStyle.IncludeIsMainRegex &&
2119           IncludeStyle.IncludeIsMainSourceRegex ==
2120               R.IncludeStyle.IncludeIsMainSourceRegex &&
2121           IndentCaseLabels == R.IndentCaseLabels &&
2122           IndentGotoLabels == R.IndentGotoLabels &&
2123           IndentPPDirectives == R.IndentPPDirectives &&
2124           IndentWidth == R.IndentWidth && Language == R.Language &&
2125           IndentWrappedFunctionNames == R.IndentWrappedFunctionNames &&
2126           JavaImportGroups == R.JavaImportGroups &&
2127           JavaScriptQuotes == R.JavaScriptQuotes &&
2128           JavaScriptWrapImports == R.JavaScriptWrapImports &&
2129           KeepEmptyLinesAtTheStartOfBlocks ==
2130               R.KeepEmptyLinesAtTheStartOfBlocks &&
2131           MacroBlockBegin == R.MacroBlockBegin &&
2132           MacroBlockEnd == R.MacroBlockEnd &&
2133           MaxEmptyLinesToKeep == R.MaxEmptyLinesToKeep &&
2134           NamespaceIndentation == R.NamespaceIndentation &&
2135           NamespaceMacros == R.NamespaceMacros &&
2136           ObjCBinPackProtocolList == R.ObjCBinPackProtocolList &&
2137           ObjCBlockIndentWidth == R.ObjCBlockIndentWidth &&
2138           ObjCSpaceAfterProperty == R.ObjCSpaceAfterProperty &&
2139           ObjCSpaceBeforeProtocolList == R.ObjCSpaceBeforeProtocolList &&
2140           PenaltyBreakAssignment == R.PenaltyBreakAssignment &&
2141           PenaltyBreakBeforeFirstCallParameter ==
2142               R.PenaltyBreakBeforeFirstCallParameter &&
2143           PenaltyBreakComment == R.PenaltyBreakComment &&
2144           PenaltyBreakFirstLessLess == R.PenaltyBreakFirstLessLess &&
2145           PenaltyBreakString == R.PenaltyBreakString &&
2146           PenaltyExcessCharacter == R.PenaltyExcessCharacter &&
2147           PenaltyReturnTypeOnItsOwnLine == R.PenaltyReturnTypeOnItsOwnLine &&
2148           PenaltyBreakTemplateDeclaration ==
2149               R.PenaltyBreakTemplateDeclaration &&
2150           PointerAlignment == R.PointerAlignment &&
2151           RawStringFormats == R.RawStringFormats &&
2152           SpaceAfterCStyleCast == R.SpaceAfterCStyleCast &&
2153           SpaceAfterLogicalNot == R.SpaceAfterLogicalNot &&
2154           SpaceAfterTemplateKeyword == R.SpaceAfterTemplateKeyword &&
2155           SpaceBeforeAssignmentOperators == R.SpaceBeforeAssignmentOperators &&
2156           SpaceBeforeCpp11BracedList == R.SpaceBeforeCpp11BracedList &&
2157           SpaceBeforeCtorInitializerColon ==
2158               R.SpaceBeforeCtorInitializerColon &&
2159           SpaceBeforeInheritanceColon == R.SpaceBeforeInheritanceColon &&
2160           SpaceBeforeParens == R.SpaceBeforeParens &&
2161           SpaceBeforeRangeBasedForLoopColon ==
2162               R.SpaceBeforeRangeBasedForLoopColon &&
2163           SpaceInEmptyBlock == R.SpaceInEmptyBlock &&
2164           SpaceInEmptyParentheses == R.SpaceInEmptyParentheses &&
2165           SpacesBeforeTrailingComments == R.SpacesBeforeTrailingComments &&
2166           SpacesInAngles == R.SpacesInAngles &&
2167           SpacesInConditionalStatement == R.SpacesInConditionalStatement &&
2168           SpacesInContainerLiterals == R.SpacesInContainerLiterals &&
2169           SpacesInCStyleCastParentheses == R.SpacesInCStyleCastParentheses &&
2170           SpacesInParentheses == R.SpacesInParentheses &&
2171           SpacesInSquareBrackets == R.SpacesInSquareBrackets &&
2172           SpaceBeforeSquareBrackets == R.SpaceBeforeSquareBrackets &&
2173           Standard == R.Standard && TabWidth == R.TabWidth &&
2174           StatementMacros == R.StatementMacros && UseTab == R.UseTab &&
2175           UseCRLF == R.UseCRLF && TypenameMacros == R.TypenameMacros;
2176  }
2177
2178  llvm::Optional<FormatStyle> GetLanguageStyle(LanguageKind Language) const;
2179
2180  // Stores per-language styles. A FormatStyle instance inside has an empty
2181  // StyleSet. A FormatStyle instance returned by the Get method has its
2182  // StyleSet set to a copy of the originating StyleSet, effectively keeping the
2183  // internal representation of that StyleSet alive.
2184  //
2185  // The memory management and ownership reminds of a birds nest: chicks
2186  // leaving the nest take photos of the nest with them.
2187  struct FormatStyleSet {
2188    typedef std::map<FormatStyle::LanguageKind, FormatStyle> MapType;
2189
2190    llvm::Optional<FormatStyle> Get(FormatStyle::LanguageKind Language) const;
2191
2192    // Adds \p Style to this FormatStyleSet. Style must not have an associated
2193    // FormatStyleSet.
2194    // Style.Language should be different than LK_None. If this FormatStyleSet
2195    // already contains an entry for Style.Language, that gets replaced with the
2196    // passed Style.
2197    void Add(FormatStyle Style);
2198
2199    // Clears this FormatStyleSet.
2200    void Clear();
2201
2202  private:
2203    std::shared_ptr<MapType> Styles;
2204  };
2205
2206  static FormatStyleSet BuildStyleSetFromConfiguration(
2207      const FormatStyle &MainStyle,
2208      const std::vector<FormatStyle> &ConfigurationStyles);
2209
2210private:
2211  FormatStyleSet StyleSet;
2212
2213  friend std::error_code parseConfiguration(StringRef Text, FormatStyle *Style);
2214};
2215
2216/// Returns a format style complying with the LLVM coding standards:
2217/// http://llvm.org/docs/CodingStandards.html.
2218FormatStyle getLLVMStyle(
2219    FormatStyle::LanguageKind Language = FormatStyle::LanguageKind::LK_Cpp);
2220
2221/// Returns a format style complying with one of Google's style guides:
2222/// http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml.
2223/// http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml.
2224/// https://developers.google.com/protocol-buffers/docs/style.
2225FormatStyle getGoogleStyle(FormatStyle::LanguageKind Language);
2226
2227/// Returns a format style complying with Chromium's style guide:
2228/// http://www.chromium.org/developers/coding-style.
2229FormatStyle getChromiumStyle(FormatStyle::LanguageKind Language);
2230
2231/// Returns a format style complying with Mozilla's style guide:
2232/// https://developer.mozilla.org/en-US/docs/Developer_Guide/Coding_Style.
2233FormatStyle getMozillaStyle();
2234
2235/// Returns a format style complying with Webkit's style guide:
2236/// http://www.webkit.org/coding/coding-style.html
2237FormatStyle getWebKitStyle();
2238
2239/// Returns a format style complying with GNU Coding Standards:
2240/// http://www.gnu.org/prep/standards/standards.html
2241FormatStyle getGNUStyle();
2242
2243/// Returns a format style complying with Microsoft style guide:
2244/// https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference?view=vs-2017
2245FormatStyle getMicrosoftStyle(FormatStyle::LanguageKind Language);
2246
2247/// Returns style indicating formatting should be not applied at all.
2248FormatStyle getNoStyle();
2249
2250/// Gets a predefined style for the specified language by name.
2251///
2252/// Currently supported names: LLVM, Google, Chromium, Mozilla. Names are
2253/// compared case-insensitively.
2254///
2255/// Returns ``true`` if the Style has been set.
2256bool getPredefinedStyle(StringRef Name, FormatStyle::LanguageKind Language,
2257                        FormatStyle *Style);
2258
2259/// Parse configuration from YAML-formatted text.
2260///
2261/// Style->Language is used to get the base style, if the ``BasedOnStyle``
2262/// option is present.
2263///
2264/// The FormatStyleSet of Style is reset.
2265///
2266/// When ``BasedOnStyle`` is not present, options not present in the YAML
2267/// document, are retained in \p Style.
2268std::error_code parseConfiguration(StringRef Text, FormatStyle *Style);
2269
2270/// Gets configuration in a YAML string.
2271std::string configurationAsText(const FormatStyle &Style);
2272
2273/// Returns the replacements necessary to sort all ``#include`` blocks
2274/// that are affected by ``Ranges``.
2275tooling::Replacements sortIncludes(const FormatStyle &Style, StringRef Code,
2276                                   ArrayRef<tooling::Range> Ranges,
2277                                   StringRef FileName,
2278                                   unsigned *Cursor = nullptr);
2279
2280/// Returns the replacements corresponding to applying and formatting
2281/// \p Replaces on success; otheriwse, return an llvm::Error carrying
2282/// llvm::StringError.
2283llvm::Expected<tooling::Replacements>
2284formatReplacements(StringRef Code, const tooling::Replacements &Replaces,
2285                   const FormatStyle &Style);
2286
2287/// Returns the replacements corresponding to applying \p Replaces and
2288/// cleaning up the code after that on success; otherwise, return an llvm::Error
2289/// carrying llvm::StringError.
2290/// This also supports inserting/deleting C++ #include directives:
2291/// - If a replacement has offset UINT_MAX, length 0, and a replacement text
2292///   that is an #include directive, this will insert the #include into the
2293///   correct block in the \p Code.
2294/// - If a replacement has offset UINT_MAX, length 1, and a replacement text
2295///   that is the name of the header to be removed, the header will be removed
2296///   from \p Code if it exists.
2297/// The include manipulation is done via `tooling::HeaderInclude`, see its
2298/// documentation for more details on how include insertion points are found and
2299/// what edits are produced.
2300llvm::Expected<tooling::Replacements>
2301cleanupAroundReplacements(StringRef Code, const tooling::Replacements &Replaces,
2302                          const FormatStyle &Style);
2303
2304/// Represents the status of a formatting attempt.
2305struct FormattingAttemptStatus {
2306  /// A value of ``false`` means that any of the affected ranges were not
2307  /// formatted due to a non-recoverable syntax error.
2308  bool FormatComplete = true;
2309
2310  /// If ``FormatComplete`` is false, ``Line`` records a one-based
2311  /// original line number at which a syntax error might have occurred. This is
2312  /// based on a best-effort analysis and could be imprecise.
2313  unsigned Line = 0;
2314};
2315
2316/// Reformats the given \p Ranges in \p Code.
2317///
2318/// Each range is extended on either end to its next bigger logic unit, i.e.
2319/// everything that might influence its formatting or might be influenced by its
2320/// formatting.
2321///
2322/// Returns the ``Replacements`` necessary to make all \p Ranges comply with
2323/// \p Style.
2324///
2325/// If ``Status`` is non-null, its value will be populated with the status of
2326/// this formatting attempt. See \c FormattingAttemptStatus.
2327tooling::Replacements reformat(const FormatStyle &Style, StringRef Code,
2328                               ArrayRef<tooling::Range> Ranges,
2329                               StringRef FileName = "<stdin>",
2330                               FormattingAttemptStatus *Status = nullptr);
2331
2332/// Same as above, except if ``IncompleteFormat`` is non-null, its value
2333/// will be set to true if any of the affected ranges were not formatted due to
2334/// a non-recoverable syntax error.
2335tooling::Replacements reformat(const FormatStyle &Style, StringRef Code,
2336                               ArrayRef<tooling::Range> Ranges,
2337                               StringRef FileName, bool *IncompleteFormat);
2338
2339/// Clean up any erroneous/redundant code in the given \p Ranges in \p
2340/// Code.
2341///
2342/// Returns the ``Replacements`` that clean up all \p Ranges in \p Code.
2343tooling::Replacements cleanup(const FormatStyle &Style, StringRef Code,
2344                              ArrayRef<tooling::Range> Ranges,
2345                              StringRef FileName = "<stdin>");
2346
2347/// Fix namespace end comments in the given \p Ranges in \p Code.
2348///
2349/// Returns the ``Replacements`` that fix the namespace comments in all
2350/// \p Ranges in \p Code.
2351tooling::Replacements fixNamespaceEndComments(const FormatStyle &Style,
2352                                              StringRef Code,
2353                                              ArrayRef<tooling::Range> Ranges,
2354                                              StringRef FileName = "<stdin>");
2355
2356/// Sort consecutive using declarations in the given \p Ranges in
2357/// \p Code.
2358///
2359/// Returns the ``Replacements`` that sort the using declarations in all
2360/// \p Ranges in \p Code.
2361tooling::Replacements sortUsingDeclarations(const FormatStyle &Style,
2362                                            StringRef Code,
2363                                            ArrayRef<tooling::Range> Ranges,
2364                                            StringRef FileName = "<stdin>");
2365
2366/// Returns the ``LangOpts`` that the formatter expects you to set.
2367///
2368/// \param Style determines specific settings for lexing mode.
2369LangOptions getFormattingLangOpts(const FormatStyle &Style = getLLVMStyle());
2370
2371/// Description to be used for help text for a ``llvm::cl`` option for
2372/// specifying format style. The description is closely related to the operation
2373/// of ``getStyle()``.
2374extern const char *StyleOptionHelpDescription;
2375
2376/// The suggested format style to use by default. This allows tools using
2377/// `getStyle` to have a consistent default style.
2378/// Different builds can modify the value to the preferred styles.
2379extern const char *DefaultFormatStyle;
2380
2381/// The suggested predefined style to use as the fallback style in `getStyle`.
2382/// Different builds can modify the value to the preferred styles.
2383extern const char *DefaultFallbackStyle;
2384
2385/// Construct a FormatStyle based on ``StyleName``.
2386///
2387/// ``StyleName`` can take several forms:
2388/// * "{<key>: <value>, ...}" - Set specic style parameters.
2389/// * "<style name>" - One of the style names supported by
2390/// getPredefinedStyle().
2391/// * "file" - Load style configuration from a file called ``.clang-format``
2392/// located in one of the parent directories of ``FileName`` or the current
2393/// directory if ``FileName`` is empty.
2394///
2395/// \param[in] StyleName Style name to interpret according to the description
2396/// above.
2397/// \param[in] FileName Path to start search for .clang-format if ``StyleName``
2398/// == "file".
2399/// \param[in] FallbackStyle The name of a predefined style used to fallback to
2400/// in case \p StyleName is "file" and no file can be found.
2401/// \param[in] Code The actual code to be formatted. Used to determine the
2402/// language if the filename isn't sufficient.
2403/// \param[in] FS The underlying file system, in which the file resides. By
2404/// default, the file system is the real file system.
2405///
2406/// \returns FormatStyle as specified by ``StyleName``. If ``StyleName`` is
2407/// "file" and no file is found, returns ``FallbackStyle``. If no style could be
2408/// determined, returns an Error.
2409llvm::Expected<FormatStyle> getStyle(StringRef StyleName, StringRef FileName,
2410                                     StringRef FallbackStyle,
2411                                     StringRef Code = "",
2412                                     llvm::vfs::FileSystem *FS = nullptr);
2413
2414// Guesses the language from the ``FileName`` and ``Code`` to be formatted.
2415// Defaults to FormatStyle::LK_Cpp.
2416FormatStyle::LanguageKind guessLanguage(StringRef FileName, StringRef Code);
2417
2418// Returns a string representation of ``Language``.
2419inline StringRef getLanguageName(FormatStyle::LanguageKind Language) {
2420  switch (Language) {
2421  case FormatStyle::LK_Cpp:
2422    return "C++";
2423  case FormatStyle::LK_CSharp:
2424    return "CSharp";
2425  case FormatStyle::LK_ObjC:
2426    return "Objective-C";
2427  case FormatStyle::LK_Java:
2428    return "Java";
2429  case FormatStyle::LK_JavaScript:
2430    return "JavaScript";
2431  case FormatStyle::LK_Proto:
2432    return "Proto";
2433  case FormatStyle::LK_TableGen:
2434    return "TableGen";
2435  case FormatStyle::LK_TextProto:
2436    return "TextProto";
2437  default:
2438    return "Unknown";
2439  }
2440}
2441
2442} // end namespace format
2443} // end namespace clang
2444
2445namespace std {
2446template <>
2447struct is_error_code_enum<clang::format::ParseError> : std::true_type {};
2448} // namespace std
2449
2450#endif // LLVM_CLANG_FORMAT_FORMAT_H
2451