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 "llvm/Support/SourceMgr.h"
23 #include <system_error>
24 
25 namespace llvm {
26 namespace vfs {
27 class FileSystem;
28 }
29 } // namespace llvm
30 
31 namespace clang {
32 
33 class Lexer;
34 class SourceManager;
35 class DiagnosticConsumer;
36 
37 namespace format {
38 
39 enum class ParseError {
40   Success = 0,
41   Error,
42   Unsuitable,
43   BinPackTrailingCommaConflict
44 };
45 class ParseErrorCategory final : public std::error_category {
46 public:
47   const char *name() const noexcept override;
48   std::string message(int EV) const override;
49 };
50 const std::error_category &getParseCategory();
51 std::error_code make_error_code(ParseError e);
52 
53 /// The ``FormatStyle`` is used to configure the formatting to follow
54 /// specific guidelines.
55 struct FormatStyle {
56   // If the BasedOn: was InheritParentConfig and this style needs the file from
57   // the parent directories. It is not part of the actual style for formatting.
58   // Thus the // instead of ///.
59   bool InheritsParentConfig;
60 
61   /// The extra indent or outdent of access modifiers, e.g. ``public:``.
62   int AccessModifierOffset;
63 
64   /// Different styles for aligning after open brackets.
65   enum BracketAlignmentStyle : unsigned char {
66     /// Align parameters on the open bracket, e.g.:
67     /// \code
68     ///   someLongFunction(argument1,
69     ///                    argument2);
70     /// \endcode
71     BAS_Align,
72     /// Don't align, instead use ``ContinuationIndentWidth``, e.g.:
73     /// \code
74     ///   someLongFunction(argument1,
75     ///       argument2);
76     /// \endcode
77     BAS_DontAlign,
78     /// Always break after an open bracket, if the parameters don't fit
79     /// on a single line, e.g.:
80     /// \code
81     ///   someLongFunction(
82     ///       argument1, argument2);
83     /// \endcode
84     BAS_AlwaysBreak,
85   };
86 
87   /// If ``true``, horizontally aligns arguments after an open bracket.
88   ///
89   /// This applies to round brackets (parentheses), angle brackets and square
90   /// brackets.
91   BracketAlignmentStyle AlignAfterOpenBracket;
92 
93   /// Styles for alignment of consecutive tokens. Tokens can be assignment signs
94   /// (see
95   /// ``AlignConsecutiveAssignments``), bitfield member separators (see
96   /// ``AlignConsecutiveBitFields``), names in declarations (see
97   /// ``AlignConsecutiveDeclarations``) or macro definitions (see
98   /// ``AlignConsecutiveMacros``).
99   enum AlignConsecutiveStyle {
100     ACS_None,
101     ACS_Consecutive,
102     ACS_AcrossEmptyLines,
103     ACS_AcrossComments,
104     ACS_AcrossEmptyLinesAndComments
105   };
106 
107   /// Style of aligning consecutive macro definitions.
108   ///
109   /// ``Consecutive`` will result in formattings like:
110   /// \code
111   ///   #define SHORT_NAME       42
112   ///   #define LONGER_NAME      0x007f
113   ///   #define EVEN_LONGER_NAME (2)
114   ///   #define foo(x)           (x * x)
115   ///   #define bar(y, z)        (y + z)
116   /// \endcode
117   ///
118   /// Possible values:
119   ///
120   /// * ``ACS_None`` (in configuration: ``None``)
121   ///    Do not align macro definitions on consecutive lines.
122   ///
123   /// * ``ACS_Consecutive`` (in configuration: ``Consecutive``)
124   ///    Align macro definitions on consecutive lines. This will result in
125   ///    formattings like:
126   ///    \code
127   ///      #define SHORT_NAME       42
128   ///      #define LONGER_NAME      0x007f
129   ///      #define EVEN_LONGER_NAME (2)
130   ///
131   ///      #define foo(x) (x * x)
132   ///      /* some comment */
133   ///      #define bar(y, z) (y + z)
134   ///    \endcode
135   ///
136   /// * ``ACS_AcrossEmptyLines`` (in configuration: ``AcrossEmptyLines``)
137   ///    Same as ACS_Consecutive, but also spans over empty lines, e.g.
138   ///    \code
139   ///      #define SHORT_NAME       42
140   ///      #define LONGER_NAME      0x007f
141   ///      #define EVEN_LONGER_NAME (2)
142   ///
143   ///      #define foo(x)           (x * x)
144   ///      /* some comment */
145   ///      #define bar(y, z) (y + z)
146   ///    \endcode
147   ///
148   /// * ``ACS_AcrossComments`` (in configuration: ``AcrossComments``)
149   ///    Same as ACS_Consecutive, but also spans over lines only containing
150   ///    comments, e.g.
151   ///    \code
152   ///      #define SHORT_NAME       42
153   ///      #define LONGER_NAME      0x007f
154   ///      #define EVEN_LONGER_NAME (2)
155   ///
156   ///      #define foo(x)    (x * x)
157   ///      /* some comment */
158   ///      #define bar(y, z) (y + z)
159   ///    \endcode
160   ///
161   /// * ``ACS_AcrossEmptyLinesAndComments``
162   ///   (in configuration: ``AcrossEmptyLinesAndComments``)
163   ///
164   ///    Same as ACS_Consecutive, but also spans over lines only containing
165   ///    comments and empty lines, e.g.
166   ///    \code
167   ///      #define SHORT_NAME       42
168   ///      #define LONGER_NAME      0x007f
169   ///      #define EVEN_LONGER_NAME (2)
170   ///
171   ///      #define foo(x)           (x * x)
172   ///      /* some comment */
173   ///      #define bar(y, z)        (y + z)
174   ///    \endcode
175   AlignConsecutiveStyle AlignConsecutiveMacros;
176 
177   /// Style of aligning consecutive assignments.
178   ///
179   /// ``Consecutive`` will result in formattings like:
180   /// \code
181   ///   int a            = 1;
182   ///   int somelongname = 2;
183   ///   double c         = 3;
184   /// \endcode
185   ///
186   /// Possible values:
187   ///
188   /// * ``ACS_None`` (in configuration: ``None``)
189   ///    Do not align assignments on consecutive lines.
190   ///
191   /// * ``ACS_Consecutive`` (in configuration: ``Consecutive``)
192   ///    Align assignments on consecutive lines. This will result in
193   ///    formattings like:
194   ///    \code
195   ///      int a            = 1;
196   ///      int somelongname = 2;
197   ///      double c         = 3;
198   ///
199   ///      int d = 3;
200   ///      /* A comment. */
201   ///      double e = 4;
202   ///    \endcode
203   ///
204   /// * ``ACS_AcrossEmptyLines`` (in configuration: ``AcrossEmptyLines``)
205   ///    Same as ACS_Consecutive, but also spans over empty lines, e.g.
206   ///    \code
207   ///      int a            = 1;
208   ///      int somelongname = 2;
209   ///      double c         = 3;
210   ///
211   ///      int d            = 3;
212   ///      /* A comment. */
213   ///      double e = 4;
214   ///    \endcode
215   ///
216   /// * ``ACS_AcrossComments`` (in configuration: ``AcrossComments``)
217   ///    Same as ACS_Consecutive, but also spans over lines only containing
218   ///    comments, e.g.
219   ///    \code
220   ///      int a            = 1;
221   ///      int somelongname = 2;
222   ///      double c         = 3;
223   ///
224   ///      int d    = 3;
225   ///      /* A comment. */
226   ///      double e = 4;
227   ///    \endcode
228   ///
229   /// * ``ACS_AcrossEmptyLinesAndComments``
230   ///   (in configuration: ``AcrossEmptyLinesAndComments``)
231   ///
232   ///    Same as ACS_Consecutive, but also spans over lines only containing
233   ///    comments and empty lines, e.g.
234   ///    \code
235   ///      int a            = 1;
236   ///      int somelongname = 2;
237   ///      double c         = 3;
238   ///
239   ///      int d            = 3;
240   ///      /* A comment. */
241   ///      double e         = 4;
242   ///    \endcode
243   AlignConsecutiveStyle AlignConsecutiveAssignments;
244 
245   /// Style of aligning consecutive bit field.
246   ///
247   /// ``Consecutive`` will align the bitfield separators of consecutive lines.
248   /// This will result in formattings like:
249   /// \code
250   ///   int aaaa : 1;
251   ///   int b    : 12;
252   ///   int ccc  : 8;
253   /// \endcode
254   ///
255   /// Possible values:
256   ///
257   /// * ``ACS_None`` (in configuration: ``None``)
258   ///    Do not align bit fields on consecutive lines.
259   ///
260   /// * ``ACS_Consecutive`` (in configuration: ``Consecutive``)
261   ///    Align bit fields on consecutive lines. This will result in
262   ///    formattings like:
263   ///    \code
264   ///      int aaaa : 1;
265   ///      int b    : 12;
266   ///      int ccc  : 8;
267   ///
268   ///      int d : 2;
269   ///      /* A comment. */
270   ///      int ee : 3;
271   ///    \endcode
272   ///
273   /// * ``ACS_AcrossEmptyLines`` (in configuration: ``AcrossEmptyLines``)
274   ///    Same as ACS_Consecutive, but also spans over empty lines, e.g.
275   ///    \code
276   ///      int aaaa : 1;
277   ///      int b    : 12;
278   ///      int ccc  : 8;
279   ///
280   ///      int d    : 2;
281   ///      /* A comment. */
282   ///      int ee : 3;
283   ///    \endcode
284   ///
285   /// * ``ACS_AcrossComments`` (in configuration: ``AcrossComments``)
286   ///    Same as ACS_Consecutive, but also spans over lines only containing
287   ///    comments, e.g.
288   ///    \code
289   ///      int aaaa : 1;
290   ///      int b    : 12;
291   ///      int ccc  : 8;
292   ///
293   ///      int d  : 2;
294   ///      /* A comment. */
295   ///      int ee : 3;
296   ///    \endcode
297   ///
298   /// * ``ACS_AcrossEmptyLinesAndComments``
299   ///   (in configuration: ``AcrossEmptyLinesAndComments``)
300   ///
301   ///    Same as ACS_Consecutive, but also spans over lines only containing
302   ///    comments and empty lines, e.g.
303   ///    \code
304   ///      int aaaa : 1;
305   ///      int b    : 12;
306   ///      int ccc  : 8;
307   ///
308   ///      int d    : 2;
309   ///      /* A comment. */
310   ///      int ee   : 3;
311   ///    \endcode
312   AlignConsecutiveStyle AlignConsecutiveBitFields;
313 
314   /// Style of aligning consecutive declarations.
315   ///
316   /// ``Consecutive`` will align the declaration names of consecutive lines.
317   /// This will result in formattings like:
318   /// \code
319   ///   int         aaaa = 12;
320   ///   float       b = 23;
321   ///   std::string ccc;
322   /// \endcode
323   ///
324   /// Possible values:
325   ///
326   /// * ``ACS_None`` (in configuration: ``None``)
327   ///    Do not align bit declarations on consecutive lines.
328   ///
329   /// * ``ACS_Consecutive`` (in configuration: ``Consecutive``)
330   ///    Align declarations on consecutive lines. This will result in
331   ///    formattings like:
332   ///    \code
333   ///      int         aaaa = 12;
334   ///      float       b = 23;
335   ///      std::string ccc;
336   ///
337   ///      int a = 42;
338   ///      /* A comment. */
339   ///      bool c = false;
340   ///    \endcode
341   ///
342   /// * ``ACS_AcrossEmptyLines`` (in configuration: ``AcrossEmptyLines``)
343   ///    Same as ACS_Consecutive, but also spans over empty lines, e.g.
344   ///    \code
345   ///      int         aaaa = 12;
346   ///      float       b = 23;
347   ///      std::string ccc;
348   ///
349   ///      int         a = 42;
350   ///      /* A comment. */
351   ///      bool c = false;
352   ///    \endcode
353   ///
354   /// * ``ACS_AcrossComments`` (in configuration: ``AcrossComments``)
355   ///    Same as ACS_Consecutive, but also spans over lines only containing
356   ///    comments, e.g.
357   ///    \code
358   ///      int         aaaa = 12;
359   ///      float       b = 23;
360   ///      std::string ccc;
361   ///
362   ///      int  a = 42;
363   ///      /* A comment. */
364   ///      bool c = false;
365   ///    \endcode
366   ///
367   /// * ``ACS_AcrossEmptyLinesAndComments``
368   ///   (in configuration: ``AcrossEmptyLinesAndComments``)
369   ///
370   ///    Same as ACS_Consecutive, but also spans over lines only containing
371   ///    comments and empty lines, e.g.
372   ///    \code
373   ///      int         aaaa = 12;
374   ///      float       b = 23;
375   ///      std::string ccc;
376   ///
377   ///      int         a = 42;
378   ///      /* A comment. */
379   ///      bool        c = false;
380   ///    \endcode
381   AlignConsecutiveStyle AlignConsecutiveDeclarations;
382 
383   /// Different styles for aligning escaped newlines.
384   enum EscapedNewlineAlignmentStyle : unsigned char {
385     /// Don't align escaped newlines.
386     /// \code
387     ///   #define A \
388     ///     int aaaa; \
389     ///     int b; \
390     ///     int dddddddddd;
391     /// \endcode
392     ENAS_DontAlign,
393     /// Align escaped newlines as far left as possible.
394     /// \code
395     ///   true:
396     ///   #define A   \
397     ///     int aaaa; \
398     ///     int b;    \
399     ///     int dddddddddd;
400     ///
401     ///   false:
402     /// \endcode
403     ENAS_Left,
404     /// Align escaped newlines in the right-most column.
405     /// \code
406     ///   #define A                                                                      \
407     ///     int aaaa;                                                                    \
408     ///     int b;                                                                       \
409     ///     int dddddddddd;
410     /// \endcode
411     ENAS_Right,
412   };
413 
414   /// Options for aligning backslashes in escaped newlines.
415   EscapedNewlineAlignmentStyle AlignEscapedNewlines;
416 
417   /// Different styles for aligning operands.
418   enum OperandAlignmentStyle : unsigned char {
419     /// Do not align operands of binary and ternary expressions.
420     /// The wrapped lines are indented ``ContinuationIndentWidth`` spaces from
421     /// the start of the line.
422     OAS_DontAlign,
423     /// Horizontally align operands of binary and ternary expressions.
424     ///
425     /// Specifically, this aligns operands of a single expression that needs
426     /// to be split over multiple lines, e.g.:
427     /// \code
428     ///   int aaa = bbbbbbbbbbbbbbb +
429     ///             ccccccccccccccc;
430     /// \endcode
431     ///
432     /// When ``BreakBeforeBinaryOperators`` is set, the wrapped operator is
433     /// aligned with the operand on the first line.
434     /// \code
435     ///   int aaa = bbbbbbbbbbbbbbb
436     ///             + ccccccccccccccc;
437     /// \endcode
438     OAS_Align,
439     /// Horizontally align operands of binary and ternary expressions.
440     ///
441     /// This is similar to ``AO_Align``, except when
442     /// ``BreakBeforeBinaryOperators`` is set, the operator is un-indented so
443     /// that the wrapped operand is aligned with the operand on the first line.
444     /// \code
445     ///   int aaa = bbbbbbbbbbbbbbb
446     ///           + ccccccccccccccc;
447     /// \endcode
448     OAS_AlignAfterOperator,
449   };
450 
451   /// If ``true``, horizontally align operands of binary and ternary
452   /// expressions.
453   OperandAlignmentStyle AlignOperands;
454 
455   /// If ``true``, aligns trailing comments.
456   /// \code
457   ///   true:                                   false:
458   ///   int a;     // My comment a      vs.     int a; // My comment a
459   ///   int b = 2; // comment  b                int b = 2; // comment about b
460   /// \endcode
461   bool AlignTrailingComments;
462 
463   /// \brief If a function call or braced initializer list doesn't fit on a
464   /// line, allow putting all arguments onto the next line, even if
465   /// ``BinPackArguments`` is ``false``.
466   /// \code
467   ///   true:
468   ///   callFunction(
469   ///       a, b, c, d);
470   ///
471   ///   false:
472   ///   callFunction(a,
473   ///                b,
474   ///                c,
475   ///                d);
476   /// \endcode
477   bool AllowAllArgumentsOnNextLine;
478 
479   /// \brief If a constructor definition with a member initializer list doesn't
480   /// fit on a single line, allow putting all member initializers onto the next
481   /// line, if ```ConstructorInitializerAllOnOneLineOrOnePerLine``` is true.
482   /// Note that this parameter has no effect if
483   /// ```ConstructorInitializerAllOnOneLineOrOnePerLine``` is false.
484   /// \code
485   ///   true:
486   ///   MyClass::MyClass() :
487   ///       member0(0), member1(2) {}
488   ///
489   ///   false:
490   ///   MyClass::MyClass() :
491   ///       member0(0),
492   ///       member1(2) {}
493   bool AllowAllConstructorInitializersOnNextLine;
494 
495   /// If the function declaration doesn't fit on a line,
496   /// allow putting all parameters of a function declaration onto
497   /// the next line even if ``BinPackParameters`` is ``false``.
498   /// \code
499   ///   true:
500   ///   void myFunction(
501   ///       int a, int b, int c, int d, int e);
502   ///
503   ///   false:
504   ///   void myFunction(int a,
505   ///                   int b,
506   ///                   int c,
507   ///                   int d,
508   ///                   int e);
509   /// \endcode
510   bool AllowAllParametersOfDeclarationOnNextLine;
511 
512   /// Allow short enums on a single line.
513   /// \code
514   ///   true:
515   ///   enum { A, B } myEnum;
516   ///
517   ///   false:
518   ///   enum
519   ///   {
520   ///     A,
521   ///     B
522   ///   } myEnum;
523   /// \endcode
524   bool AllowShortEnumsOnASingleLine;
525 
526   /// Different styles for merging short blocks containing at most one
527   /// statement.
528   enum ShortBlockStyle : unsigned char {
529     /// Never merge blocks into a single line.
530     /// \code
531     ///   while (true) {
532     ///   }
533     ///   while (true) {
534     ///     continue;
535     ///   }
536     /// \endcode
537     SBS_Never,
538     /// Only merge empty blocks.
539     /// \code
540     ///   while (true) {}
541     ///   while (true) {
542     ///     continue;
543     ///   }
544     /// \endcode
545     SBS_Empty,
546     /// Always merge short blocks into a single line.
547     /// \code
548     ///   while (true) {}
549     ///   while (true) { continue; }
550     /// \endcode
551     SBS_Always,
552   };
553 
554   /// Dependent on the value, ``while (true) { continue; }`` can be put on a
555   /// single line.
556   ShortBlockStyle AllowShortBlocksOnASingleLine;
557 
558   /// If ``true``, short case labels will be contracted to a single line.
559   /// \code
560   ///   true:                                   false:
561   ///   switch (a) {                    vs.     switch (a) {
562   ///   case 1: x = 1; break;                   case 1:
563   ///   case 2: return;                           x = 1;
564   ///   }                                         break;
565   ///                                           case 2:
566   ///                                             return;
567   ///                                           }
568   /// \endcode
569   bool AllowShortCaseLabelsOnASingleLine;
570 
571   /// Different styles for merging short functions containing at most one
572   /// statement.
573   enum ShortFunctionStyle : unsigned char {
574     /// Never merge functions into a single line.
575     SFS_None,
576     /// Only merge functions defined inside a class. Same as "inline",
577     /// except it does not implies "empty": i.e. top level empty functions
578     /// are not merged either.
579     /// \code
580     ///   class Foo {
581     ///     void f() { foo(); }
582     ///   };
583     ///   void f() {
584     ///     foo();
585     ///   }
586     ///   void f() {
587     ///   }
588     /// \endcode
589     SFS_InlineOnly,
590     /// Only merge empty functions.
591     /// \code
592     ///   void f() {}
593     ///   void f2() {
594     ///     bar2();
595     ///   }
596     /// \endcode
597     SFS_Empty,
598     /// Only merge functions defined inside a class. Implies "empty".
599     /// \code
600     ///   class Foo {
601     ///     void f() { foo(); }
602     ///   };
603     ///   void f() {
604     ///     foo();
605     ///   }
606     ///   void f() {}
607     /// \endcode
608     SFS_Inline,
609     /// Merge all functions fitting on a single line.
610     /// \code
611     ///   class Foo {
612     ///     void f() { foo(); }
613     ///   };
614     ///   void f() { bar(); }
615     /// \endcode
616     SFS_All,
617   };
618 
619   /// Dependent on the value, ``int f() { return 0; }`` can be put on a
620   /// single line.
621   ShortFunctionStyle AllowShortFunctionsOnASingleLine;
622 
623   /// Different styles for handling short if statements.
624   enum ShortIfStyle : unsigned char {
625     /// Never put short ifs on the same line.
626     /// \code
627     ///   if (a)
628     ///     return;
629     ///
630     ///   if (b)
631     ///     return;
632     ///   else
633     ///     return;
634     ///
635     ///   if (c)
636     ///     return;
637     ///   else {
638     ///     return;
639     ///   }
640     /// \endcode
641     SIS_Never,
642     /// Put short ifs on the same line only if there is no else statement.
643     /// \code
644     ///   if (a) return;
645     ///
646     ///   if (b)
647     ///     return;
648     ///   else
649     ///     return;
650     ///
651     ///   if (c)
652     ///     return;
653     ///   else {
654     ///     return;
655     ///   }
656     /// \endcode
657     SIS_WithoutElse,
658     /// Put short ifs, but not else ifs nor else statements, on the same line.
659     /// \code
660     ///   if (a) return;
661     ///
662     ///   if (b) return;
663     ///   else if (b)
664     ///     return;
665     ///   else
666     ///     return;
667     ///
668     ///   if (c) return;
669     ///   else {
670     ///     return;
671     ///   }
672     /// \endcode
673     SIS_OnlyFirstIf,
674     /// Always put short ifs, else ifs and else statements on the same
675     /// line.
676     /// \code
677     ///   if (a) return;
678     ///
679     ///   if (b) return;
680     ///   else return;
681     ///
682     ///   if (c) return;
683     ///   else {
684     ///     return;
685     ///   }
686     /// \endcode
687     SIS_AllIfsAndElse,
688   };
689 
690   /// Dependent on the value, ``if (a) return;`` can be put on a single line.
691   ShortIfStyle AllowShortIfStatementsOnASingleLine;
692 
693   /// Different styles for merging short lambdas containing at most one
694   /// statement.
695   enum ShortLambdaStyle : unsigned char {
696     /// Never merge lambdas into a single line.
697     SLS_None,
698     /// Only merge empty lambdas.
699     /// \code
700     ///   auto lambda = [](int a) {}
701     ///   auto lambda2 = [](int a) {
702     ///       return a;
703     ///   };
704     /// \endcode
705     SLS_Empty,
706     /// Merge lambda into a single line if argument of a function.
707     /// \code
708     ///   auto lambda = [](int a) {
709     ///       return a;
710     ///   };
711     ///   sort(a.begin(), a.end(), ()[] { return x < y; })
712     /// \endcode
713     SLS_Inline,
714     /// Merge all lambdas fitting on a single line.
715     /// \code
716     ///   auto lambda = [](int a) {}
717     ///   auto lambda2 = [](int a) { return a; };
718     /// \endcode
719     SLS_All,
720   };
721 
722   /// Dependent on the value, ``auto lambda []() { return 0; }`` can be put on a
723   /// single line.
724   ShortLambdaStyle AllowShortLambdasOnASingleLine;
725 
726   /// If ``true``, ``while (true) continue;`` can be put on a single
727   /// line.
728   bool AllowShortLoopsOnASingleLine;
729 
730   /// Different ways to break after the function definition return type.
731   /// This option is **deprecated** and is retained for backwards compatibility.
732   enum DefinitionReturnTypeBreakingStyle : unsigned char {
733     /// Break after return type automatically.
734     /// ``PenaltyReturnTypeOnItsOwnLine`` is taken into account.
735     DRTBS_None,
736     /// Always break after the return type.
737     DRTBS_All,
738     /// Always break after the return types of top-level functions.
739     DRTBS_TopLevel,
740   };
741 
742   /// Different ways to break after the function definition or
743   /// declaration return type.
744   enum ReturnTypeBreakingStyle : unsigned char {
745     /// Break after return type automatically.
746     /// ``PenaltyReturnTypeOnItsOwnLine`` is taken into account.
747     /// \code
748     ///   class A {
749     ///     int f() { return 0; };
750     ///   };
751     ///   int f();
752     ///   int f() { return 1; }
753     /// \endcode
754     RTBS_None,
755     /// Always break after the return type.
756     /// \code
757     ///   class A {
758     ///     int
759     ///     f() {
760     ///       return 0;
761     ///     };
762     ///   };
763     ///   int
764     ///   f();
765     ///   int
766     ///   f() {
767     ///     return 1;
768     ///   }
769     /// \endcode
770     RTBS_All,
771     /// Always break after the return types of top-level functions.
772     /// \code
773     ///   class A {
774     ///     int f() { return 0; };
775     ///   };
776     ///   int
777     ///   f();
778     ///   int
779     ///   f() {
780     ///     return 1;
781     ///   }
782     /// \endcode
783     RTBS_TopLevel,
784     /// Always break after the return type of function definitions.
785     /// \code
786     ///   class A {
787     ///     int
788     ///     f() {
789     ///       return 0;
790     ///     };
791     ///   };
792     ///   int f();
793     ///   int
794     ///   f() {
795     ///     return 1;
796     ///   }
797     /// \endcode
798     RTBS_AllDefinitions,
799     /// Always break after the return type of top-level definitions.
800     /// \code
801     ///   class A {
802     ///     int f() { return 0; };
803     ///   };
804     ///   int f();
805     ///   int
806     ///   f() {
807     ///     return 1;
808     ///   }
809     /// \endcode
810     RTBS_TopLevelDefinitions,
811   };
812 
813   /// The function definition return type breaking style to use.  This
814   /// option is **deprecated** and is retained for backwards compatibility.
815   DefinitionReturnTypeBreakingStyle AlwaysBreakAfterDefinitionReturnType;
816 
817   /// The function declaration return type breaking style to use.
818   ReturnTypeBreakingStyle AlwaysBreakAfterReturnType;
819 
820   /// If ``true``, always break before multiline string literals.
821   ///
822   /// This flag is mean to make cases where there are multiple multiline strings
823   /// in a file look more consistent. Thus, it will only take effect if wrapping
824   /// the string at that point leads to it being indented
825   /// ``ContinuationIndentWidth`` spaces from the start of the line.
826   /// \code
827   ///    true:                                  false:
828   ///    aaaa =                         vs.     aaaa = "bbbb"
829   ///        "bbbb"                                    "cccc";
830   ///        "cccc";
831   /// \endcode
832   bool AlwaysBreakBeforeMultilineStrings;
833 
834   /// Different ways to break after the template declaration.
835   enum BreakTemplateDeclarationsStyle : unsigned char {
836     /// Do not force break before declaration.
837     /// ``PenaltyBreakTemplateDeclaration`` is taken into account.
838     /// \code
839     ///    template <typename T> T foo() {
840     ///    }
841     ///    template <typename T> T foo(int aaaaaaaaaaaaaaaaaaaaa,
842     ///                                int bbbbbbbbbbbbbbbbbbbbb) {
843     ///    }
844     /// \endcode
845     BTDS_No,
846     /// Force break after template declaration only when the following
847     /// declaration spans multiple lines.
848     /// \code
849     ///    template <typename T> T foo() {
850     ///    }
851     ///    template <typename T>
852     ///    T foo(int aaaaaaaaaaaaaaaaaaaaa,
853     ///          int bbbbbbbbbbbbbbbbbbbbb) {
854     ///    }
855     /// \endcode
856     BTDS_MultiLine,
857     /// Always break after template declaration.
858     /// \code
859     ///    template <typename T>
860     ///    T foo() {
861     ///    }
862     ///    template <typename T>
863     ///    T foo(int aaaaaaaaaaaaaaaaaaaaa,
864     ///          int bbbbbbbbbbbbbbbbbbbbb) {
865     ///    }
866     /// \endcode
867     BTDS_Yes
868   };
869 
870   /// The template declaration breaking style to use.
871   BreakTemplateDeclarationsStyle AlwaysBreakTemplateDeclarations;
872 
873   /// A vector of strings that should be interpreted as attributes/qualifiers
874   /// instead of identifiers. This can be useful for language extensions or
875   /// static analyzer annotations.
876   ///
877   /// For example:
878   /// \code
879   ///   x = (char *__capability)&y;
880   ///   int function(void) __ununsed;
881   ///   void only_writes_to_buffer(char *__output buffer);
882   /// \endcode
883   ///
884   /// In the .clang-format configuration file, this can be configured like:
885   /// \code{.yaml}
886   ///   AttributeMacros: ['__capability', '__output', '__ununsed']
887   /// \endcode
888   ///
889   std::vector<std::string> AttributeMacros;
890 
891   /// If ``false``, a function call's arguments will either be all on the
892   /// same line or will have one line each.
893   /// \code
894   ///   true:
895   ///   void f() {
896   ///     f(aaaaaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaaaaaa,
897   ///       aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa);
898   ///   }
899   ///
900   ///   false:
901   ///   void f() {
902   ///     f(aaaaaaaaaaaaaaaaaaaa,
903   ///       aaaaaaaaaaaaaaaaaaaa,
904   ///       aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa);
905   ///   }
906   /// \endcode
907   bool BinPackArguments;
908 
909   /// The style of inserting trailing commas into container literals.
910   enum TrailingCommaStyle : unsigned char {
911     /// Do not insert trailing commas.
912     TCS_None,
913     /// Insert trailing commas in container literals that were wrapped over
914     /// multiple lines. Note that this is conceptually incompatible with
915     /// bin-packing, because the trailing comma is used as an indicator
916     /// that a container should be formatted one-per-line (i.e. not bin-packed).
917     /// So inserting a trailing comma counteracts bin-packing.
918     TCS_Wrapped,
919   };
920 
921   /// If set to ``TCS_Wrapped`` will insert trailing commas in container
922   /// literals (arrays and objects) that wrap across multiple lines.
923   /// It is currently only available for JavaScript
924   /// and disabled by default ``TCS_None``.
925   /// ``InsertTrailingCommas`` cannot be used together with ``BinPackArguments``
926   /// as inserting the comma disables bin-packing.
927   /// \code
928   ///   TSC_Wrapped:
929   ///   const someArray = [
930   ///   aaaaaaaaaaaaaaaaaaaaaaaaaa,
931   ///   aaaaaaaaaaaaaaaaaaaaaaaaaa,
932   ///   aaaaaaaaaaaaaaaaaaaaaaaaaa,
933   ///   //                        ^ inserted
934   ///   ]
935   /// \endcode
936   TrailingCommaStyle InsertTrailingCommas;
937 
938   /// If ``false``, a function declaration's or function definition's
939   /// parameters will either all be on the same line or will have one line each.
940   /// \code
941   ///   true:
942   ///   void f(int aaaaaaaaaaaaaaaaaaaa, int aaaaaaaaaaaaaaaaaaaa,
943   ///          int aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) {}
944   ///
945   ///   false:
946   ///   void f(int aaaaaaaaaaaaaaaaaaaa,
947   ///          int aaaaaaaaaaaaaaaaaaaa,
948   ///          int aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) {}
949   /// \endcode
950   bool BinPackParameters;
951 
952   /// The style of wrapping parameters on the same line (bin-packed) or
953   /// on one line each.
954   enum BinPackStyle : unsigned char {
955     /// Automatically determine parameter bin-packing behavior.
956     BPS_Auto,
957     /// Always bin-pack parameters.
958     BPS_Always,
959     /// Never bin-pack parameters.
960     BPS_Never,
961   };
962 
963   /// The style of breaking before or after binary operators.
964   enum BinaryOperatorStyle : unsigned char {
965     /// Break after operators.
966     /// \code
967     ///    LooooooooooongType loooooooooooooooooooooongVariable =
968     ///        someLooooooooooooooooongFunction();
969     ///
970     ///    bool value = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +
971     ///                         aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ==
972     ///                     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa &&
973     ///                 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa >
974     ///                     ccccccccccccccccccccccccccccccccccccccccc;
975     /// \endcode
976     BOS_None,
977     /// Break before operators that aren't assignments.
978     /// \code
979     ///    LooooooooooongType loooooooooooooooooooooongVariable =
980     ///        someLooooooooooooooooongFunction();
981     ///
982     ///    bool value = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
983     ///                         + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
984     ///                     == aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
985     ///                 && aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
986     ///                        > ccccccccccccccccccccccccccccccccccccccccc;
987     /// \endcode
988     BOS_NonAssignment,
989     /// Break before operators.
990     /// \code
991     ///    LooooooooooongType loooooooooooooooooooooongVariable
992     ///        = someLooooooooooooooooongFunction();
993     ///
994     ///    bool value = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
995     ///                         + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
996     ///                     == aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
997     ///                 && aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
998     ///                        > ccccccccccccccccccccccccccccccccccccccccc;
999     /// \endcode
1000     BOS_All,
1001   };
1002 
1003   /// The way to wrap binary operators.
1004   BinaryOperatorStyle BreakBeforeBinaryOperators;
1005 
1006   /// Different ways to attach braces to their surrounding context.
1007   enum BraceBreakingStyle : unsigned char {
1008     /// Always attach braces to surrounding context.
1009     /// \code
1010     ///   namespace N {
1011     ///   enum E {
1012     ///     E1,
1013     ///     E2,
1014     ///   };
1015     ///
1016     ///   class C {
1017     ///   public:
1018     ///     C();
1019     ///   };
1020     ///
1021     ///   bool baz(int i) {
1022     ///     try {
1023     ///       do {
1024     ///         switch (i) {
1025     ///         case 1: {
1026     ///           foobar();
1027     ///           break;
1028     ///         }
1029     ///         default: {
1030     ///           break;
1031     ///         }
1032     ///         }
1033     ///       } while (--i);
1034     ///       return true;
1035     ///     } catch (...) {
1036     ///       handleError();
1037     ///       return false;
1038     ///     }
1039     ///   }
1040     ///
1041     ///   void foo(bool b) {
1042     ///     if (b) {
1043     ///       baz(2);
1044     ///     } else {
1045     ///       baz(5);
1046     ///     }
1047     ///   }
1048     ///
1049     ///   void bar() { foo(true); }
1050     ///   } // namespace N
1051     /// \endcode
1052     BS_Attach,
1053     /// Like ``Attach``, but break before braces on function, namespace and
1054     /// class definitions.
1055     /// \code
1056     ///   namespace N
1057     ///   {
1058     ///   enum E {
1059     ///     E1,
1060     ///     E2,
1061     ///   };
1062     ///
1063     ///   class C
1064     ///   {
1065     ///   public:
1066     ///     C();
1067     ///   };
1068     ///
1069     ///   bool baz(int i)
1070     ///   {
1071     ///     try {
1072     ///       do {
1073     ///         switch (i) {
1074     ///         case 1: {
1075     ///           foobar();
1076     ///           break;
1077     ///         }
1078     ///         default: {
1079     ///           break;
1080     ///         }
1081     ///         }
1082     ///       } while (--i);
1083     ///       return true;
1084     ///     } catch (...) {
1085     ///       handleError();
1086     ///       return false;
1087     ///     }
1088     ///   }
1089     ///
1090     ///   void foo(bool b)
1091     ///   {
1092     ///     if (b) {
1093     ///       baz(2);
1094     ///     } else {
1095     ///       baz(5);
1096     ///     }
1097     ///   }
1098     ///
1099     ///   void bar() { foo(true); }
1100     ///   } // namespace N
1101     /// \endcode
1102     BS_Linux,
1103     /// Like ``Attach``, but break before braces on enum, function, and record
1104     /// definitions.
1105     /// \code
1106     ///   namespace N {
1107     ///   enum E
1108     ///   {
1109     ///     E1,
1110     ///     E2,
1111     ///   };
1112     ///
1113     ///   class C
1114     ///   {
1115     ///   public:
1116     ///     C();
1117     ///   };
1118     ///
1119     ///   bool baz(int i)
1120     ///   {
1121     ///     try {
1122     ///       do {
1123     ///         switch (i) {
1124     ///         case 1: {
1125     ///           foobar();
1126     ///           break;
1127     ///         }
1128     ///         default: {
1129     ///           break;
1130     ///         }
1131     ///         }
1132     ///       } while (--i);
1133     ///       return true;
1134     ///     } catch (...) {
1135     ///       handleError();
1136     ///       return false;
1137     ///     }
1138     ///   }
1139     ///
1140     ///   void foo(bool b)
1141     ///   {
1142     ///     if (b) {
1143     ///       baz(2);
1144     ///     } else {
1145     ///       baz(5);
1146     ///     }
1147     ///   }
1148     ///
1149     ///   void bar() { foo(true); }
1150     ///   } // namespace N
1151     /// \endcode
1152     BS_Mozilla,
1153     /// Like ``Attach``, but break before function definitions, ``catch``, and
1154     /// ``else``.
1155     /// \code
1156     ///   namespace N {
1157     ///   enum E {
1158     ///     E1,
1159     ///     E2,
1160     ///   };
1161     ///
1162     ///   class C {
1163     ///   public:
1164     ///     C();
1165     ///   };
1166     ///
1167     ///   bool baz(int i)
1168     ///   {
1169     ///     try {
1170     ///       do {
1171     ///         switch (i) {
1172     ///         case 1: {
1173     ///           foobar();
1174     ///           break;
1175     ///         }
1176     ///         default: {
1177     ///           break;
1178     ///         }
1179     ///         }
1180     ///       } while (--i);
1181     ///       return true;
1182     ///     }
1183     ///     catch (...) {
1184     ///       handleError();
1185     ///       return false;
1186     ///     }
1187     ///   }
1188     ///
1189     ///   void foo(bool b)
1190     ///   {
1191     ///     if (b) {
1192     ///       baz(2);
1193     ///     }
1194     ///     else {
1195     ///       baz(5);
1196     ///     }
1197     ///   }
1198     ///
1199     ///   void bar() { foo(true); }
1200     ///   } // namespace N
1201     /// \endcode
1202     BS_Stroustrup,
1203     /// Always break before braces.
1204     /// \code
1205     ///   namespace N
1206     ///   {
1207     ///   enum E
1208     ///   {
1209     ///     E1,
1210     ///     E2,
1211     ///   };
1212     ///
1213     ///   class C
1214     ///   {
1215     ///   public:
1216     ///     C();
1217     ///   };
1218     ///
1219     ///   bool baz(int i)
1220     ///   {
1221     ///     try
1222     ///     {
1223     ///       do
1224     ///       {
1225     ///         switch (i)
1226     ///         {
1227     ///         case 1:
1228     ///         {
1229     ///           foobar();
1230     ///           break;
1231     ///         }
1232     ///         default:
1233     ///         {
1234     ///           break;
1235     ///         }
1236     ///         }
1237     ///       } while (--i);
1238     ///       return true;
1239     ///     }
1240     ///     catch (...)
1241     ///     {
1242     ///       handleError();
1243     ///       return false;
1244     ///     }
1245     ///   }
1246     ///
1247     ///   void foo(bool b)
1248     ///   {
1249     ///     if (b)
1250     ///     {
1251     ///       baz(2);
1252     ///     }
1253     ///     else
1254     ///     {
1255     ///       baz(5);
1256     ///     }
1257     ///   }
1258     ///
1259     ///   void bar() { foo(true); }
1260     ///   } // namespace N
1261     /// \endcode
1262     BS_Allman,
1263     /// Like ``Allman`` but always indent braces and line up code with braces.
1264     /// \code
1265     ///   namespace N
1266     ///     {
1267     ///   enum E
1268     ///     {
1269     ///     E1,
1270     ///     E2,
1271     ///     };
1272     ///
1273     ///   class C
1274     ///     {
1275     ///   public:
1276     ///     C();
1277     ///     };
1278     ///
1279     ///   bool baz(int i)
1280     ///     {
1281     ///     try
1282     ///       {
1283     ///       do
1284     ///         {
1285     ///         switch (i)
1286     ///           {
1287     ///           case 1:
1288     ///           {
1289     ///           foobar();
1290     ///           break;
1291     ///           }
1292     ///           default:
1293     ///           {
1294     ///           break;
1295     ///           }
1296     ///           }
1297     ///         } while (--i);
1298     ///       return true;
1299     ///       }
1300     ///     catch (...)
1301     ///       {
1302     ///       handleError();
1303     ///       return false;
1304     ///       }
1305     ///     }
1306     ///
1307     ///   void foo(bool b)
1308     ///     {
1309     ///     if (b)
1310     ///       {
1311     ///       baz(2);
1312     ///       }
1313     ///     else
1314     ///       {
1315     ///       baz(5);
1316     ///       }
1317     ///     }
1318     ///
1319     ///   void bar() { foo(true); }
1320     ///     } // namespace N
1321     /// \endcode
1322     BS_Whitesmiths,
1323     /// Always break before braces and add an extra level of indentation to
1324     /// braces of control statements, not to those of class, function
1325     /// or other definitions.
1326     /// \code
1327     ///   namespace N
1328     ///   {
1329     ///   enum E
1330     ///   {
1331     ///     E1,
1332     ///     E2,
1333     ///   };
1334     ///
1335     ///   class C
1336     ///   {
1337     ///   public:
1338     ///     C();
1339     ///   };
1340     ///
1341     ///   bool baz(int i)
1342     ///   {
1343     ///     try
1344     ///       {
1345     ///         do
1346     ///           {
1347     ///             switch (i)
1348     ///               {
1349     ///               case 1:
1350     ///                 {
1351     ///                   foobar();
1352     ///                   break;
1353     ///                 }
1354     ///               default:
1355     ///                 {
1356     ///                   break;
1357     ///                 }
1358     ///               }
1359     ///           }
1360     ///         while (--i);
1361     ///         return true;
1362     ///       }
1363     ///     catch (...)
1364     ///       {
1365     ///         handleError();
1366     ///         return false;
1367     ///       }
1368     ///   }
1369     ///
1370     ///   void foo(bool b)
1371     ///   {
1372     ///     if (b)
1373     ///       {
1374     ///         baz(2);
1375     ///       }
1376     ///     else
1377     ///       {
1378     ///         baz(5);
1379     ///       }
1380     ///   }
1381     ///
1382     ///   void bar() { foo(true); }
1383     ///   } // namespace N
1384     /// \endcode
1385     BS_GNU,
1386     /// Like ``Attach``, but break before functions.
1387     /// \code
1388     ///   namespace N {
1389     ///   enum E {
1390     ///     E1,
1391     ///     E2,
1392     ///   };
1393     ///
1394     ///   class C {
1395     ///   public:
1396     ///     C();
1397     ///   };
1398     ///
1399     ///   bool baz(int i)
1400     ///   {
1401     ///     try {
1402     ///       do {
1403     ///         switch (i) {
1404     ///         case 1: {
1405     ///           foobar();
1406     ///           break;
1407     ///         }
1408     ///         default: {
1409     ///           break;
1410     ///         }
1411     ///         }
1412     ///       } while (--i);
1413     ///       return true;
1414     ///     } catch (...) {
1415     ///       handleError();
1416     ///       return false;
1417     ///     }
1418     ///   }
1419     ///
1420     ///   void foo(bool b)
1421     ///   {
1422     ///     if (b) {
1423     ///       baz(2);
1424     ///     } else {
1425     ///       baz(5);
1426     ///     }
1427     ///   }
1428     ///
1429     ///   void bar() { foo(true); }
1430     ///   } // namespace N
1431     /// \endcode
1432     BS_WebKit,
1433     /// Configure each individual brace in `BraceWrapping`.
1434     BS_Custom
1435   };
1436 
1437   /// The brace breaking style to use.
1438   BraceBreakingStyle BreakBeforeBraces;
1439 
1440   /// Different ways to wrap braces after control statements.
1441   enum BraceWrappingAfterControlStatementStyle : unsigned char {
1442     /// Never wrap braces after a control statement.
1443     /// \code
1444     ///   if (foo()) {
1445     ///   } else {
1446     ///   }
1447     ///   for (int i = 0; i < 10; ++i) {
1448     ///   }
1449     /// \endcode
1450     BWACS_Never,
1451     /// Only wrap braces after a multi-line control statement.
1452     /// \code
1453     ///   if (foo && bar &&
1454     ///       baz)
1455     ///   {
1456     ///     quux();
1457     ///   }
1458     ///   while (foo || bar) {
1459     ///   }
1460     /// \endcode
1461     BWACS_MultiLine,
1462     /// Always wrap braces after a control statement.
1463     /// \code
1464     ///   if (foo())
1465     ///   {
1466     ///   } else
1467     ///   {}
1468     ///   for (int i = 0; i < 10; ++i)
1469     ///   {}
1470     /// \endcode
1471     BWACS_Always
1472   };
1473 
1474   /// Precise control over the wrapping of braces.
1475   /// \code
1476   ///   # Should be declared this way:
1477   ///   BreakBeforeBraces: Custom
1478   ///   BraceWrapping:
1479   ///       AfterClass: true
1480   /// \endcode
1481   struct BraceWrappingFlags {
1482     /// Wrap case labels.
1483     /// \code
1484     ///   false:                                true:
1485     ///   switch (foo) {                vs.     switch (foo) {
1486     ///     case 1: {                             case 1:
1487     ///       bar();                              {
1488     ///       break;                                bar();
1489     ///     }                                       break;
1490     ///     default: {                            }
1491     ///       plop();                             default:
1492     ///     }                                     {
1493     ///   }                                         plop();
1494     ///                                           }
1495     ///                                         }
1496     /// \endcode
1497     bool AfterCaseLabel;
1498     /// Wrap class definitions.
1499     /// \code
1500     ///   true:
1501     ///   class foo {};
1502     ///
1503     ///   false:
1504     ///   class foo
1505     ///   {};
1506     /// \endcode
1507     bool AfterClass;
1508 
1509     /// Wrap control statements (``if``/``for``/``while``/``switch``/..).
1510     BraceWrappingAfterControlStatementStyle AfterControlStatement;
1511     /// Wrap enum definitions.
1512     /// \code
1513     ///   true:
1514     ///   enum X : int
1515     ///   {
1516     ///     B
1517     ///   };
1518     ///
1519     ///   false:
1520     ///   enum X : int { B };
1521     /// \endcode
1522     bool AfterEnum;
1523     /// Wrap function definitions.
1524     /// \code
1525     ///   true:
1526     ///   void foo()
1527     ///   {
1528     ///     bar();
1529     ///     bar2();
1530     ///   }
1531     ///
1532     ///   false:
1533     ///   void foo() {
1534     ///     bar();
1535     ///     bar2();
1536     ///   }
1537     /// \endcode
1538     bool AfterFunction;
1539     /// Wrap namespace definitions.
1540     /// \code
1541     ///   true:
1542     ///   namespace
1543     ///   {
1544     ///   int foo();
1545     ///   int bar();
1546     ///   }
1547     ///
1548     ///   false:
1549     ///   namespace {
1550     ///   int foo();
1551     ///   int bar();
1552     ///   }
1553     /// \endcode
1554     bool AfterNamespace;
1555     /// Wrap ObjC definitions (interfaces, implementations...).
1556     /// \note @autoreleasepool and @synchronized blocks are wrapped
1557     /// according to `AfterControlStatement` flag.
1558     bool AfterObjCDeclaration;
1559     /// Wrap struct definitions.
1560     /// \code
1561     ///   true:
1562     ///   struct foo
1563     ///   {
1564     ///     int x;
1565     ///   };
1566     ///
1567     ///   false:
1568     ///   struct foo {
1569     ///     int x;
1570     ///   };
1571     /// \endcode
1572     bool AfterStruct;
1573     /// Wrap union definitions.
1574     /// \code
1575     ///   true:
1576     ///   union foo
1577     ///   {
1578     ///     int x;
1579     ///   }
1580     ///
1581     ///   false:
1582     ///   union foo {
1583     ///     int x;
1584     ///   }
1585     /// \endcode
1586     bool AfterUnion;
1587     /// Wrap extern blocks.
1588     /// \code
1589     ///   true:
1590     ///   extern "C"
1591     ///   {
1592     ///     int foo();
1593     ///   }
1594     ///
1595     ///   false:
1596     ///   extern "C" {
1597     ///   int foo();
1598     ///   }
1599     /// \endcode
1600     bool AfterExternBlock; // Partially superseded by IndentExternBlock
1601     /// Wrap before ``catch``.
1602     /// \code
1603     ///   true:
1604     ///   try {
1605     ///     foo();
1606     ///   }
1607     ///   catch () {
1608     ///   }
1609     ///
1610     ///   false:
1611     ///   try {
1612     ///     foo();
1613     ///   } catch () {
1614     ///   }
1615     /// \endcode
1616     bool BeforeCatch;
1617     /// Wrap before ``else``.
1618     /// \code
1619     ///   true:
1620     ///   if (foo()) {
1621     ///   }
1622     ///   else {
1623     ///   }
1624     ///
1625     ///   false:
1626     ///   if (foo()) {
1627     ///   } else {
1628     ///   }
1629     /// \endcode
1630     bool BeforeElse;
1631     /// Wrap lambda block.
1632     /// \code
1633     ///   true:
1634     ///   connect(
1635     ///     []()
1636     ///     {
1637     ///       foo();
1638     ///       bar();
1639     ///     });
1640     ///
1641     ///   false:
1642     ///   connect([]() {
1643     ///     foo();
1644     ///     bar();
1645     ///   });
1646     /// \endcode
1647     bool BeforeLambdaBody;
1648     /// Wrap before ``while``.
1649     /// \code
1650     ///   true:
1651     ///   do {
1652     ///     foo();
1653     ///   }
1654     ///   while (1);
1655     ///
1656     ///   false:
1657     ///   do {
1658     ///     foo();
1659     ///   } while (1);
1660     /// \endcode
1661     bool BeforeWhile;
1662     /// Indent the wrapped braces themselves.
1663     bool IndentBraces;
1664     /// If ``false``, empty function body can be put on a single line.
1665     /// This option is used only if the opening brace of the function has
1666     /// already been wrapped, i.e. the `AfterFunction` brace wrapping mode is
1667     /// set, and the function could/should not be put on a single line (as per
1668     /// `AllowShortFunctionsOnASingleLine` and constructor formatting options).
1669     /// \code
1670     ///   int f()   vs.   int f()
1671     ///   {}              {
1672     ///                   }
1673     /// \endcode
1674     ///
1675     bool SplitEmptyFunction;
1676     /// If ``false``, empty record (e.g. class, struct or union) body
1677     /// can be put on a single line. This option is used only if the opening
1678     /// brace of the record has already been wrapped, i.e. the `AfterClass`
1679     /// (for classes) brace wrapping mode is set.
1680     /// \code
1681     ///   class Foo   vs.  class Foo
1682     ///   {}               {
1683     ///                    }
1684     /// \endcode
1685     ///
1686     bool SplitEmptyRecord;
1687     /// If ``false``, empty namespace body can be put on a single line.
1688     /// This option is used only if the opening brace of the namespace has
1689     /// already been wrapped, i.e. the `AfterNamespace` brace wrapping mode is
1690     /// set.
1691     /// \code
1692     ///   namespace Foo   vs.  namespace Foo
1693     ///   {}                   {
1694     ///                        }
1695     /// \endcode
1696     ///
1697     bool SplitEmptyNamespace;
1698   };
1699 
1700   /// Control of individual brace wrapping cases.
1701   ///
1702   /// If ``BreakBeforeBraces`` is set to ``BS_Custom``, use this to specify how
1703   /// each individual brace case should be handled. Otherwise, this is ignored.
1704   /// \code{.yaml}
1705   ///   # Example of usage:
1706   ///   BreakBeforeBraces: Custom
1707   ///   BraceWrapping:
1708   ///     AfterEnum: true
1709   ///     AfterStruct: false
1710   ///     SplitEmptyFunction: false
1711   /// \endcode
1712   BraceWrappingFlags BraceWrapping;
1713 
1714   /// If ``true``, concept will be placed on a new line.
1715   /// \code
1716   ///   true:
1717   ///    template<typename T>
1718   ///    concept ...
1719   ///
1720   ///   false:
1721   ///    template<typename T> concept ...
1722   /// \endcode
1723   bool BreakBeforeConceptDeclarations;
1724 
1725   /// If ``true``, ternary operators will be placed after line breaks.
1726   /// \code
1727   ///    true:
1728   ///    veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongDescription
1729   ///        ? firstValue
1730   ///        : SecondValueVeryVeryVeryVeryLong;
1731   ///
1732   ///    false:
1733   ///    veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongDescription ?
1734   ///        firstValue :
1735   ///        SecondValueVeryVeryVeryVeryLong;
1736   /// \endcode
1737   bool BreakBeforeTernaryOperators;
1738 
1739   /// Different ways to break initializers.
1740   enum BreakConstructorInitializersStyle : unsigned char {
1741     /// Break constructor initializers before the colon and after the commas.
1742     /// \code
1743     ///    Constructor()
1744     ///        : initializer1(),
1745     ///          initializer2()
1746     /// \endcode
1747     BCIS_BeforeColon,
1748     /// Break constructor initializers before the colon and commas, and align
1749     /// the commas with the colon.
1750     /// \code
1751     ///    Constructor()
1752     ///        : initializer1()
1753     ///        , initializer2()
1754     /// \endcode
1755     BCIS_BeforeComma,
1756     /// Break constructor initializers after the colon and commas.
1757     /// \code
1758     ///    Constructor() :
1759     ///        initializer1(),
1760     ///        initializer2()
1761     /// \endcode
1762     BCIS_AfterColon
1763   };
1764 
1765   /// The constructor initializers style to use.
1766   BreakConstructorInitializersStyle BreakConstructorInitializers;
1767 
1768   /// Break after each annotation on a field in Java files.
1769   /// \code{.java}
1770   ///    true:                                  false:
1771   ///    @Partial                       vs.     @Partial @Mock DataLoad loader;
1772   ///    @Mock
1773   ///    DataLoad loader;
1774   /// \endcode
1775   bool BreakAfterJavaFieldAnnotations;
1776 
1777   /// Allow breaking string literals when formatting.
1778   /// \code
1779   ///    true:
1780   ///    const char* x = "veryVeryVeryVeryVeryVe"
1781   ///                    "ryVeryVeryVeryVeryVery"
1782   ///                    "VeryLongString";
1783   ///
1784   ///    false:
1785   ///    const char* x =
1786   ///      "veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongString";
1787   /// \endcode
1788   bool BreakStringLiterals;
1789 
1790   /// The column limit.
1791   ///
1792   /// A column limit of ``0`` means that there is no column limit. In this case,
1793   /// clang-format will respect the input's line breaking decisions within
1794   /// statements unless they contradict other rules.
1795   unsigned ColumnLimit;
1796 
1797   /// A regular expression that describes comments with special meaning,
1798   /// which should not be split into lines or otherwise changed.
1799   /// \code
1800   ///    // CommentPragmas: '^ FOOBAR pragma:'
1801   ///    // Will leave the following line unaffected
1802   ///    #include <vector> // FOOBAR pragma: keep
1803   /// \endcode
1804   std::string CommentPragmas;
1805 
1806   /// Different ways to break inheritance list.
1807   enum BreakInheritanceListStyle : unsigned char {
1808     /// Break inheritance list before the colon and after the commas.
1809     /// \code
1810     ///    class Foo
1811     ///        : Base1,
1812     ///          Base2
1813     ///    {};
1814     /// \endcode
1815     BILS_BeforeColon,
1816     /// Break inheritance list before the colon and commas, and align
1817     /// the commas with the colon.
1818     /// \code
1819     ///    class Foo
1820     ///        : Base1
1821     ///        , Base2
1822     ///    {};
1823     /// \endcode
1824     BILS_BeforeComma,
1825     /// Break inheritance list after the colon and commas.
1826     /// \code
1827     ///    class Foo :
1828     ///        Base1,
1829     ///        Base2
1830     ///    {};
1831     /// \endcode
1832     BILS_AfterColon
1833   };
1834 
1835   /// The inheritance list style to use.
1836   BreakInheritanceListStyle BreakInheritanceList;
1837 
1838   /// If ``true``, consecutive namespace declarations will be on the same
1839   /// line. If ``false``, each namespace is declared on a new line.
1840   /// \code
1841   ///   true:
1842   ///   namespace Foo { namespace Bar {
1843   ///   }}
1844   ///
1845   ///   false:
1846   ///   namespace Foo {
1847   ///   namespace Bar {
1848   ///   }
1849   ///   }
1850   /// \endcode
1851   ///
1852   /// If it does not fit on a single line, the overflowing namespaces get
1853   /// wrapped:
1854   /// \code
1855   ///   namespace Foo { namespace Bar {
1856   ///   namespace Extra {
1857   ///   }}}
1858   /// \endcode
1859   bool CompactNamespaces;
1860 
1861   // clang-format off
1862   /// If the constructor initializers don't fit on a line, put each
1863   /// initializer on its own line.
1864   /// \code
1865   ///   true:
1866   ///   SomeClass::Constructor()
1867   ///       : aaaaaaaa(aaaaaaaa), aaaaaaaa(aaaaaaaa), aaaaaaaa(aaaaaaaaaaaaaaaaaaaaaaaaa) {
1868   ///     return 0;
1869   ///   }
1870   ///
1871   ///   false:
1872   ///   SomeClass::Constructor()
1873   ///       : aaaaaaaa(aaaaaaaa), aaaaaaaa(aaaaaaaa),
1874   ///         aaaaaaaa(aaaaaaaaaaaaaaaaaaaaaaaaa) {
1875   ///     return 0;
1876   ///   }
1877   /// \endcode
1878   bool ConstructorInitializerAllOnOneLineOrOnePerLine;
1879   // clang-format on
1880 
1881   /// The number of characters to use for indentation of constructor
1882   /// initializer lists as well as inheritance lists.
1883   unsigned ConstructorInitializerIndentWidth;
1884 
1885   /// Indent width for line continuations.
1886   /// \code
1887   ///    ContinuationIndentWidth: 2
1888   ///
1889   ///    int i =         //  VeryVeryVeryVeryVeryLongComment
1890   ///      longFunction( // Again a long comment
1891   ///        arg);
1892   /// \endcode
1893   unsigned ContinuationIndentWidth;
1894 
1895   /// If ``true``, format braced lists as best suited for C++11 braced
1896   /// lists.
1897   ///
1898   /// Important differences:
1899   /// - No spaces inside the braced list.
1900   /// - No line break before the closing brace.
1901   /// - Indentation with the continuation indent, not with the block indent.
1902   ///
1903   /// Fundamentally, C++11 braced lists are formatted exactly like function
1904   /// calls would be formatted in their place. If the braced list follows a name
1905   /// (e.g. a type or variable name), clang-format formats as if the ``{}`` were
1906   /// the parentheses of a function call with that name. If there is no name,
1907   /// a zero-length name is assumed.
1908   /// \code
1909   ///    true:                                  false:
1910   ///    vector<int> x{1, 2, 3, 4};     vs.     vector<int> x{ 1, 2, 3, 4 };
1911   ///    vector<T> x{{}, {}, {}, {}};           vector<T> x{ {}, {}, {}, {} };
1912   ///    f(MyMap[{composite, key}]);            f(MyMap[{ composite, key }]);
1913   ///    new int[3]{1, 2, 3};                   new int[3]{ 1, 2, 3 };
1914   /// \endcode
1915   bool Cpp11BracedListStyle;
1916 
1917   /// \brief Analyze the formatted file for the most used line ending (``\r\n``
1918   /// or ``\n``). ``UseCRLF`` is only used as a fallback if none can be derived.
1919   bool DeriveLineEnding;
1920 
1921   /// If ``true``, analyze the formatted file for the most common
1922   /// alignment of ``&`` and ``*``.
1923   /// Pointer and reference alignment styles are going to be updated according
1924   /// to the preferences found in the file.
1925   /// ``PointerAlignment`` is then used only as fallback.
1926   bool DerivePointerAlignment;
1927 
1928   /// Disables formatting completely.
1929   bool DisableFormat;
1930 
1931   /// Different styles for empty line after access modifiers.
1932   /// ``EmptyLineBeforeAccessModifier`` configuration handles the number of
1933   /// empty lines between two access modifiers.
1934   enum EmptyLineAfterAccessModifierStyle : unsigned char {
1935     /// Remove all empty lines after access modifiers.
1936     /// \code
1937     ///   struct foo {
1938     ///   private:
1939     ///     int i;
1940     ///   protected:
1941     ///     int j;
1942     ///     /* comment */
1943     ///   public:
1944     ///     foo() {}
1945     ///   private:
1946     ///   protected:
1947     ///   };
1948     /// \endcode
1949     ELAAMS_Never,
1950     /// Keep existing empty lines after access modifiers.
1951     /// MaxEmptyLinesToKeep is applied instead.
1952     ELAAMS_Leave,
1953     /// Always add empty line after access modifiers if there are none.
1954     /// MaxEmptyLinesToKeep is applied also.
1955     /// \code
1956     ///   struct foo {
1957     ///   private:
1958     ///
1959     ///     int i;
1960     ///   protected:
1961     ///
1962     ///     int j;
1963     ///     /* comment */
1964     ///   public:
1965     ///
1966     ///     foo() {}
1967     ///   private:
1968     ///
1969     ///   protected:
1970     ///
1971     ///   };
1972     /// \endcode
1973     ELAAMS_Always,
1974   };
1975 
1976   /// Defines in which cases to put empty line after access modifiers.
1977   EmptyLineAfterAccessModifierStyle EmptyLineAfterAccessModifier;
1978 
1979   /// Different styles for empty line before access modifiers.
1980   enum EmptyLineBeforeAccessModifierStyle : unsigned char {
1981     /// Remove all empty lines before access modifiers.
1982     /// \code
1983     ///   struct foo {
1984     ///   private:
1985     ///     int i;
1986     ///   protected:
1987     ///     int j;
1988     ///     /* comment */
1989     ///   public:
1990     ///     foo() {}
1991     ///   private:
1992     ///   protected:
1993     ///   };
1994     /// \endcode
1995     ELBAMS_Never,
1996     /// Keep existing empty lines before access modifiers.
1997     ELBAMS_Leave,
1998     /// Add empty line only when access modifier starts a new logical block.
1999     /// Logical block is a group of one or more member fields or functions.
2000     /// \code
2001     ///   struct foo {
2002     ///   private:
2003     ///     int i;
2004     ///
2005     ///   protected:
2006     ///     int j;
2007     ///     /* comment */
2008     ///   public:
2009     ///     foo() {}
2010     ///
2011     ///   private:
2012     ///   protected:
2013     ///   };
2014     /// \endcode
2015     ELBAMS_LogicalBlock,
2016     /// Always add empty line before access modifiers unless access modifier
2017     /// is at the start of struct or class definition.
2018     /// \code
2019     ///   struct foo {
2020     ///   private:
2021     ///     int i;
2022     ///
2023     ///   protected:
2024     ///     int j;
2025     ///     /* comment */
2026     ///
2027     ///   public:
2028     ///     foo() {}
2029     ///
2030     ///   private:
2031     ///
2032     ///   protected:
2033     ///   };
2034     /// \endcode
2035     ELBAMS_Always,
2036   };
2037 
2038   /// Defines in which cases to put empty line before access modifiers.
2039   EmptyLineBeforeAccessModifierStyle EmptyLineBeforeAccessModifier;
2040 
2041   /// If ``true``, clang-format detects whether function calls and
2042   /// definitions are formatted with one parameter per line.
2043   ///
2044   /// Each call can be bin-packed, one-per-line or inconclusive. If it is
2045   /// inconclusive, e.g. completely on one line, but a decision needs to be
2046   /// made, clang-format analyzes whether there are other bin-packed cases in
2047   /// the input file and act accordingly.
2048   ///
2049   /// NOTE: This is an experimental flag, that might go away or be renamed. Do
2050   /// not use this in config files, etc. Use at your own risk.
2051   bool ExperimentalAutoDetectBinPacking;
2052 
2053   /// If ``true``, clang-format adds missing namespace end comments for
2054   /// short namespaces and fixes invalid existing ones. Short ones are
2055   /// controlled by "ShortNamespaceLines".
2056   /// \code
2057   ///    true:                                  false:
2058   ///    namespace a {                  vs.     namespace a {
2059   ///    foo();                                 foo();
2060   ///    bar();                                 bar();
2061   ///    } // namespace a                       }
2062   /// \endcode
2063   bool FixNamespaceComments;
2064 
2065   /// A vector of macros that should be interpreted as foreach loops
2066   /// instead of as function calls.
2067   ///
2068   /// These are expected to be macros of the form:
2069   /// \code
2070   ///   FOREACH(<variable-declaration>, ...)
2071   ///     <loop-body>
2072   /// \endcode
2073   ///
2074   /// In the .clang-format configuration file, this can be configured like:
2075   /// \code{.yaml}
2076   ///   ForEachMacros: ['RANGES_FOR', 'FOREACH']
2077   /// \endcode
2078   ///
2079   /// For example: BOOST_FOREACH.
2080   std::vector<std::string> ForEachMacros;
2081 
2082   /// \brief A vector of macros that should be interpreted as type declarations
2083   /// instead of as function calls.
2084   ///
2085   /// These are expected to be macros of the form:
2086   /// \code
2087   ///   STACK_OF(...)
2088   /// \endcode
2089   ///
2090   /// In the .clang-format configuration file, this can be configured like:
2091   /// \code{.yaml}
2092   ///   TypenameMacros: ['STACK_OF', 'LIST']
2093   /// \endcode
2094   ///
2095   /// For example: OpenSSL STACK_OF, BSD LIST_ENTRY.
2096   std::vector<std::string> TypenameMacros;
2097 
2098   /// A vector of macros that should be interpreted as complete
2099   /// statements.
2100   ///
2101   /// Typical macros are expressions, and require a semi-colon to be
2102   /// added; sometimes this is not the case, and this allows to make
2103   /// clang-format aware of such cases.
2104   ///
2105   /// For example: Q_UNUSED
2106   std::vector<std::string> StatementMacros;
2107 
2108   /// A vector of macros which are used to open namespace blocks.
2109   ///
2110   /// These are expected to be macros of the form:
2111   /// \code
2112   ///   NAMESPACE(<namespace-name>, ...) {
2113   ///     <namespace-content>
2114   ///   }
2115   /// \endcode
2116   ///
2117   /// For example: TESTSUITE
2118   std::vector<std::string> NamespaceMacros;
2119 
2120   /// A vector of macros which are whitespace-sensitive and should not
2121   /// be touched.
2122   ///
2123   /// These are expected to be macros of the form:
2124   /// \code
2125   ///   STRINGIZE(...)
2126   /// \endcode
2127   ///
2128   /// In the .clang-format configuration file, this can be configured like:
2129   /// \code{.yaml}
2130   ///   WhitespaceSensitiveMacros: ['STRINGIZE', 'PP_STRINGIZE']
2131   /// \endcode
2132   ///
2133   /// For example: BOOST_PP_STRINGIZE
2134   std::vector<std::string> WhitespaceSensitiveMacros;
2135 
2136   tooling::IncludeStyle IncludeStyle;
2137 
2138   /// Specify whether access modifiers should have their own indentation level.
2139   ///
2140   /// When ``false``, access modifiers are indented (or outdented) relative to
2141   /// the record members, respecting the ``AccessModifierOffset``. Record
2142   /// members are indented one level below the record.
2143   /// When ``true``, access modifiers get their own indentation level. As a
2144   /// consequence, record members are always indented 2 levels below the record,
2145   /// regardless of the access modifier presence. Value of the
2146   /// ``AccessModifierOffset`` is ignored.
2147   /// \code
2148   ///    false:                                 true:
2149   ///    class C {                      vs.     class C {
2150   ///      class D {                                class D {
2151   ///        void bar();                                void bar();
2152   ///      protected:                                 protected:
2153   ///        D();                                       D();
2154   ///      };                                       };
2155   ///    public:                                  public:
2156   ///      C();                                     C();
2157   ///    };                                     };
2158   ///    void foo() {                           void foo() {
2159   ///      return 1;                              return 1;
2160   ///    }                                      }
2161   /// \endcode
2162   bool IndentAccessModifiers;
2163 
2164   /// Indent case labels one level from the switch statement.
2165   ///
2166   /// When ``false``, use the same indentation level as for the switch
2167   /// statement. Switch statement body is always indented one level more than
2168   /// case labels (except the first block following the case label, which
2169   /// itself indents the code - unless IndentCaseBlocks is enabled).
2170   /// \code
2171   ///    false:                                 true:
2172   ///    switch (fool) {                vs.     switch (fool) {
2173   ///    case 1:                                  case 1:
2174   ///      bar();                                   bar();
2175   ///      break;                                   break;
2176   ///    default:                                 default:
2177   ///      plop();                                  plop();
2178   ///    }                                      }
2179   /// \endcode
2180   bool IndentCaseLabels;
2181 
2182   /// Indent case label blocks one level from the case label.
2183   ///
2184   /// When ``false``, the block following the case label uses the same
2185   /// indentation level as for the case label, treating the case label the same
2186   /// as an if-statement.
2187   /// When ``true``, the block gets indented as a scope block.
2188   /// \code
2189   ///    false:                                 true:
2190   ///    switch (fool) {                vs.     switch (fool) {
2191   ///    case 1: {                              case 1:
2192   ///      bar();                                 {
2193   ///    } break;                                   bar();
2194   ///    default: {                               }
2195   ///      plop();                                break;
2196   ///    }                                      default:
2197   ///    }                                        {
2198   ///                                               plop();
2199   ///                                             }
2200   ///                                           }
2201   /// \endcode
2202   bool IndentCaseBlocks;
2203 
2204   /// Indent goto labels.
2205   ///
2206   /// When ``false``, goto labels are flushed left.
2207   /// \code
2208   ///    true:                                  false:
2209   ///    int f() {                      vs.     int f() {
2210   ///      if (foo()) {                           if (foo()) {
2211   ///      label1:                              label1:
2212   ///        bar();                                 bar();
2213   ///      }                                      }
2214   ///    label2:                                label2:
2215   ///      return 1;                              return 1;
2216   ///    }                                      }
2217   /// \endcode
2218   bool IndentGotoLabels;
2219 
2220   /// Options for indenting preprocessor directives.
2221   enum PPDirectiveIndentStyle : unsigned char {
2222     /// Does not indent any directives.
2223     /// \code
2224     ///    #if FOO
2225     ///    #if BAR
2226     ///    #include <foo>
2227     ///    #endif
2228     ///    #endif
2229     /// \endcode
2230     PPDIS_None,
2231     /// Indents directives after the hash.
2232     /// \code
2233     ///    #if FOO
2234     ///    #  if BAR
2235     ///    #    include <foo>
2236     ///    #  endif
2237     ///    #endif
2238     /// \endcode
2239     PPDIS_AfterHash,
2240     /// Indents directives before the hash.
2241     /// \code
2242     ///    #if FOO
2243     ///      #if BAR
2244     ///        #include <foo>
2245     ///      #endif
2246     ///    #endif
2247     /// \endcode
2248     PPDIS_BeforeHash
2249   };
2250 
2251   /// The preprocessor directive indenting style to use.
2252   PPDirectiveIndentStyle IndentPPDirectives;
2253 
2254   /// Indents extern blocks
2255   enum IndentExternBlockStyle : unsigned char {
2256     /// Backwards compatible with AfterExternBlock's indenting.
2257     /// \code
2258     ///    IndentExternBlock: AfterExternBlock
2259     ///    BraceWrapping.AfterExternBlock: true
2260     ///    extern "C"
2261     ///    {
2262     ///        void foo();
2263     ///    }
2264     /// \endcode
2265     ///
2266     /// \code
2267     ///    IndentExternBlock: AfterExternBlock
2268     ///    BraceWrapping.AfterExternBlock: false
2269     ///    extern "C" {
2270     ///    void foo();
2271     ///    }
2272     /// \endcode
2273     IEBS_AfterExternBlock,
2274     /// Does not indent extern blocks.
2275     /// \code
2276     ///     extern "C" {
2277     ///     void foo();
2278     ///     }
2279     /// \endcode
2280     IEBS_NoIndent,
2281     /// Indents extern blocks.
2282     /// \code
2283     ///     extern "C" {
2284     ///       void foo();
2285     ///     }
2286     /// \endcode
2287     IEBS_Indent,
2288   };
2289 
2290   /// IndentExternBlockStyle is the type of indenting of extern blocks.
2291   IndentExternBlockStyle IndentExternBlock;
2292 
2293   /// Indent the requires clause in a template
2294   /// \code
2295   ///    true:
2296   ///    template <typename It>
2297   ///      requires Iterator<It>
2298   ///    void sort(It begin, It end) {
2299   ///      //....
2300   ///    }
2301   ///
2302   ///    false:
2303   ///    template <typename It>
2304   ///    requires Iterator<It>
2305   ///    void sort(It begin, It end) {
2306   ///      //....
2307   ///    }
2308   /// \endcode
2309   bool IndentRequires;
2310 
2311   /// The number of columns to use for indentation.
2312   /// \code
2313   ///    IndentWidth: 3
2314   ///
2315   ///    void f() {
2316   ///       someFunction();
2317   ///       if (true, false) {
2318   ///          f();
2319   ///       }
2320   ///    }
2321   /// \endcode
2322   unsigned IndentWidth;
2323 
2324   /// Indent if a function definition or declaration is wrapped after the
2325   /// type.
2326   /// \code
2327   ///    true:
2328   ///    LoooooooooooooooooooooooooooooooooooooooongReturnType
2329   ///        LoooooooooooooooooooooooooooooooongFunctionDeclaration();
2330   ///
2331   ///    false:
2332   ///    LoooooooooooooooooooooooooooooooooooooooongReturnType
2333   ///    LoooooooooooooooooooooooooooooooongFunctionDeclaration();
2334   /// \endcode
2335   bool IndentWrappedFunctionNames;
2336 
2337   /// A vector of prefixes ordered by the desired groups for Java imports.
2338   ///
2339   /// One group's prefix can be a subset of another - the longest prefix is
2340   /// always matched. Within a group, the imports are ordered lexicographically.
2341   /// Static imports are grouped separately and follow the same group rules.
2342   /// By default, static imports are placed before non-static imports,
2343   /// but this behavior is changed by another option,
2344   /// ``SortJavaStaticImport``.
2345   ///
2346   /// In the .clang-format configuration file, this can be configured like
2347   /// in the following yaml example. This will result in imports being
2348   /// formatted as in the Java example below.
2349   /// \code{.yaml}
2350   ///   JavaImportGroups: ['com.example', 'com', 'org']
2351   /// \endcode
2352   ///
2353   /// \code{.java}
2354   ///    import static com.example.function1;
2355   ///
2356   ///    import static com.test.function2;
2357   ///
2358   ///    import static org.example.function3;
2359   ///
2360   ///    import com.example.ClassA;
2361   ///    import com.example.Test;
2362   ///    import com.example.a.ClassB;
2363   ///
2364   ///    import com.test.ClassC;
2365   ///
2366   ///    import org.example.ClassD;
2367   /// \endcode
2368   std::vector<std::string> JavaImportGroups;
2369 
2370   /// Quotation styles for JavaScript strings. Does not affect template
2371   /// strings.
2372   enum JavaScriptQuoteStyle : unsigned char {
2373     /// Leave string quotes as they are.
2374     /// \code{.js}
2375     ///    string1 = "foo";
2376     ///    string2 = 'bar';
2377     /// \endcode
2378     JSQS_Leave,
2379     /// Always use single quotes.
2380     /// \code{.js}
2381     ///    string1 = 'foo';
2382     ///    string2 = 'bar';
2383     /// \endcode
2384     JSQS_Single,
2385     /// Always use double quotes.
2386     /// \code{.js}
2387     ///    string1 = "foo";
2388     ///    string2 = "bar";
2389     /// \endcode
2390     JSQS_Double
2391   };
2392 
2393   /// The JavaScriptQuoteStyle to use for JavaScript strings.
2394   JavaScriptQuoteStyle JavaScriptQuotes;
2395 
2396   // clang-format off
2397   /// Whether to wrap JavaScript import/export statements.
2398   /// \code{.js}
2399   ///    true:
2400   ///    import {
2401   ///        VeryLongImportsAreAnnoying,
2402   ///        VeryLongImportsAreAnnoying,
2403   ///        VeryLongImportsAreAnnoying,
2404   ///    } from 'some/module.js'
2405   ///
2406   ///    false:
2407   ///    import {VeryLongImportsAreAnnoying, VeryLongImportsAreAnnoying, VeryLongImportsAreAnnoying,} from "some/module.js"
2408   /// \endcode
2409   bool JavaScriptWrapImports;
2410   // clang-format on
2411 
2412   /// If true, the empty line at the start of blocks is kept.
2413   /// \code
2414   ///    true:                                  false:
2415   ///    if (foo) {                     vs.     if (foo) {
2416   ///                                             bar();
2417   ///      bar();                               }
2418   ///    }
2419   /// \endcode
2420   bool KeepEmptyLinesAtTheStartOfBlocks;
2421 
2422   /// Supported languages.
2423   ///
2424   /// When stored in a configuration file, specifies the language, that the
2425   /// configuration targets. When passed to the ``reformat()`` function, enables
2426   /// syntax features specific to the language.
2427   enum LanguageKind : unsigned char {
2428     /// Do not use.
2429     LK_None,
2430     /// Should be used for C, C++.
2431     LK_Cpp,
2432     /// Should be used for C#.
2433     LK_CSharp,
2434     /// Should be used for Java.
2435     LK_Java,
2436     /// Should be used for JavaScript.
2437     LK_JavaScript,
2438     /// Should be used for Objective-C, Objective-C++.
2439     LK_ObjC,
2440     /// Should be used for Protocol Buffers
2441     /// (https://developers.google.com/protocol-buffers/).
2442     LK_Proto,
2443     /// Should be used for TableGen code.
2444     LK_TableGen,
2445     /// Should be used for Protocol Buffer messages in text format
2446     /// (https://developers.google.com/protocol-buffers/).
2447     LK_TextProto
2448   };
isCppFormatStyle2449   bool isCpp() const { return Language == LK_Cpp || Language == LK_ObjC; }
isCSharpFormatStyle2450   bool isCSharp() const { return Language == LK_CSharp; }
2451 
2452   /// Language, this format style is targeted at.
2453   LanguageKind Language;
2454 
2455   /// A regular expression matching macros that start a block.
2456   /// \code
2457   ///    # With:
2458   ///    MacroBlockBegin: "^NS_MAP_BEGIN|\
2459   ///    NS_TABLE_HEAD$"
2460   ///    MacroBlockEnd: "^\
2461   ///    NS_MAP_END|\
2462   ///    NS_TABLE_.*_END$"
2463   ///
2464   ///    NS_MAP_BEGIN
2465   ///      foo();
2466   ///    NS_MAP_END
2467   ///
2468   ///    NS_TABLE_HEAD
2469   ///      bar();
2470   ///    NS_TABLE_FOO_END
2471   ///
2472   ///    # Without:
2473   ///    NS_MAP_BEGIN
2474   ///    foo();
2475   ///    NS_MAP_END
2476   ///
2477   ///    NS_TABLE_HEAD
2478   ///    bar();
2479   ///    NS_TABLE_FOO_END
2480   /// \endcode
2481   std::string MacroBlockBegin;
2482 
2483   /// A regular expression matching macros that end a block.
2484   std::string MacroBlockEnd;
2485 
2486   /// The maximum number of consecutive empty lines to keep.
2487   /// \code
2488   ///    MaxEmptyLinesToKeep: 1         vs.     MaxEmptyLinesToKeep: 0
2489   ///    int f() {                              int f() {
2490   ///      int = 1;                                 int i = 1;
2491   ///                                               i = foo();
2492   ///      i = foo();                               return i;
2493   ///                                           }
2494   ///      return i;
2495   ///    }
2496   /// \endcode
2497   unsigned MaxEmptyLinesToKeep;
2498 
2499   /// Different ways to indent namespace contents.
2500   enum NamespaceIndentationKind : unsigned char {
2501     /// Don't indent in namespaces.
2502     /// \code
2503     ///    namespace out {
2504     ///    int i;
2505     ///    namespace in {
2506     ///    int i;
2507     ///    }
2508     ///    }
2509     /// \endcode
2510     NI_None,
2511     /// Indent only in inner namespaces (nested in other namespaces).
2512     /// \code
2513     ///    namespace out {
2514     ///    int i;
2515     ///    namespace in {
2516     ///      int i;
2517     ///    }
2518     ///    }
2519     /// \endcode
2520     NI_Inner,
2521     /// Indent in all namespaces.
2522     /// \code
2523     ///    namespace out {
2524     ///      int i;
2525     ///      namespace in {
2526     ///        int i;
2527     ///      }
2528     ///    }
2529     /// \endcode
2530     NI_All
2531   };
2532 
2533   /// The indentation used for namespaces.
2534   NamespaceIndentationKind NamespaceIndentation;
2535 
2536   /// Controls bin-packing Objective-C protocol conformance list
2537   /// items into as few lines as possible when they go over ``ColumnLimit``.
2538   ///
2539   /// If ``Auto`` (the default), delegates to the value in
2540   /// ``BinPackParameters``. If that is ``true``, bin-packs Objective-C
2541   /// protocol conformance list items into as few lines as possible
2542   /// whenever they go over ``ColumnLimit``.
2543   ///
2544   /// If ``Always``, always bin-packs Objective-C protocol conformance
2545   /// list items into as few lines as possible whenever they go over
2546   /// ``ColumnLimit``.
2547   ///
2548   /// If ``Never``, lays out Objective-C protocol conformance list items
2549   /// onto individual lines whenever they go over ``ColumnLimit``.
2550   ///
2551   /// \code{.objc}
2552   ///    Always (or Auto, if BinPackParameters=true):
2553   ///    @interface ccccccccccccc () <
2554   ///        ccccccccccccc, ccccccccccccc,
2555   ///        ccccccccccccc, ccccccccccccc> {
2556   ///    }
2557   ///
2558   ///    Never (or Auto, if BinPackParameters=false):
2559   ///    @interface ddddddddddddd () <
2560   ///        ddddddddddddd,
2561   ///        ddddddddddddd,
2562   ///        ddddddddddddd,
2563   ///        ddddddddddddd> {
2564   ///    }
2565   /// \endcode
2566   BinPackStyle ObjCBinPackProtocolList;
2567 
2568   /// The number of characters to use for indentation of ObjC blocks.
2569   /// \code{.objc}
2570   ///    ObjCBlockIndentWidth: 4
2571   ///
2572   ///    [operation setCompletionBlock:^{
2573   ///        [self onOperationDone];
2574   ///    }];
2575   /// \endcode
2576   unsigned ObjCBlockIndentWidth;
2577 
2578   /// Add a space after ``@property`` in Objective-C, i.e. use
2579   /// ``@property (readonly)`` instead of ``@property(readonly)``.
2580   bool ObjCSpaceAfterProperty;
2581 
2582   /// Break parameters list into lines when there is nested block
2583   /// parameters in a function call.
2584   /// \code
2585   ///   false:
2586   ///    - (void)_aMethod
2587   ///    {
2588   ///        [self.test1 t:self w:self callback:^(typeof(self) self, NSNumber
2589   ///        *u, NSNumber *v) {
2590   ///            u = c;
2591   ///        }]
2592   ///    }
2593   ///    true:
2594   ///    - (void)_aMethod
2595   ///    {
2596   ///       [self.test1 t:self
2597   ///                    w:self
2598   ///           callback:^(typeof(self) self, NSNumber *u, NSNumber *v) {
2599   ///                u = c;
2600   ///            }]
2601   ///    }
2602   /// \endcode
2603   bool ObjCBreakBeforeNestedBlockParam;
2604 
2605   /// Add a space in front of an Objective-C protocol list, i.e. use
2606   /// ``Foo <Protocol>`` instead of ``Foo<Protocol>``.
2607   bool ObjCSpaceBeforeProtocolList;
2608 
2609   /// The penalty for breaking around an assignment operator.
2610   unsigned PenaltyBreakAssignment;
2611 
2612   /// The penalty for breaking a function call after ``call(``.
2613   unsigned PenaltyBreakBeforeFirstCallParameter;
2614 
2615   /// The penalty for each line break introduced inside a comment.
2616   unsigned PenaltyBreakComment;
2617 
2618   /// The penalty for breaking before the first ``<<``.
2619   unsigned PenaltyBreakFirstLessLess;
2620 
2621   /// The penalty for each line break introduced inside a string literal.
2622   unsigned PenaltyBreakString;
2623 
2624   /// The penalty for breaking after template declaration.
2625   unsigned PenaltyBreakTemplateDeclaration;
2626 
2627   /// The penalty for each character outside of the column limit.
2628   unsigned PenaltyExcessCharacter;
2629 
2630   /// Penalty for putting the return type of a function onto its own
2631   /// line.
2632   unsigned PenaltyReturnTypeOnItsOwnLine;
2633 
2634   /// Penalty for each character of whitespace indentation
2635   /// (counted relative to leading non-whitespace column).
2636   unsigned PenaltyIndentedWhitespace;
2637 
2638   /// The ``&`` and ``*`` alignment style.
2639   enum PointerAlignmentStyle : unsigned char {
2640     /// Align pointer to the left.
2641     /// \code
2642     ///   int* a;
2643     /// \endcode
2644     PAS_Left,
2645     /// Align pointer to the right.
2646     /// \code
2647     ///   int *a;
2648     /// \endcode
2649     PAS_Right,
2650     /// Align pointer in the middle.
2651     /// \code
2652     ///   int * a;
2653     /// \endcode
2654     PAS_Middle
2655   };
2656 
2657   /// Pointer and reference alignment style.
2658   PointerAlignmentStyle PointerAlignment;
2659 
2660   /// See documentation of ``RawStringFormats``.
2661   struct RawStringFormat {
2662     /// The language of this raw string.
2663     LanguageKind Language;
2664     /// A list of raw string delimiters that match this language.
2665     std::vector<std::string> Delimiters;
2666     /// A list of enclosing function names that match this language.
2667     std::vector<std::string> EnclosingFunctions;
2668     /// The canonical delimiter for this language.
2669     std::string CanonicalDelimiter;
2670     /// The style name on which this raw string format is based on.
2671     /// If not specified, the raw string format is based on the style that this
2672     /// format is based on.
2673     std::string BasedOnStyle;
2674     bool operator==(const RawStringFormat &Other) const {
2675       return Language == Other.Language && Delimiters == Other.Delimiters &&
2676              EnclosingFunctions == Other.EnclosingFunctions &&
2677              CanonicalDelimiter == Other.CanonicalDelimiter &&
2678              BasedOnStyle == Other.BasedOnStyle;
2679     }
2680   };
2681 
2682   /// Defines hints for detecting supported languages code blocks in raw
2683   /// strings.
2684   ///
2685   /// A raw string with a matching delimiter or a matching enclosing function
2686   /// name will be reformatted assuming the specified language based on the
2687   /// style for that language defined in the .clang-format file. If no style has
2688   /// been defined in the .clang-format file for the specific language, a
2689   /// predefined style given by 'BasedOnStyle' is used. If 'BasedOnStyle' is not
2690   /// found, the formatting is based on llvm style. A matching delimiter takes
2691   /// precedence over a matching enclosing function name for determining the
2692   /// language of the raw string contents.
2693   ///
2694   /// If a canonical delimiter is specified, occurrences of other delimiters for
2695   /// the same language will be updated to the canonical if possible.
2696   ///
2697   /// There should be at most one specification per language and each delimiter
2698   /// and enclosing function should not occur in multiple specifications.
2699   ///
2700   /// To configure this in the .clang-format file, use:
2701   /// \code{.yaml}
2702   ///   RawStringFormats:
2703   ///     - Language: TextProto
2704   ///         Delimiters:
2705   ///           - 'pb'
2706   ///           - 'proto'
2707   ///         EnclosingFunctions:
2708   ///           - 'PARSE_TEXT_PROTO'
2709   ///         BasedOnStyle: google
2710   ///     - Language: Cpp
2711   ///         Delimiters:
2712   ///           - 'cc'
2713   ///           - 'cpp'
2714   ///         BasedOnStyle: llvm
2715   ///         CanonicalDelimiter: 'cc'
2716   /// \endcode
2717   std::vector<RawStringFormat> RawStringFormats;
2718 
2719   // clang-format off
2720   /// If ``true``, clang-format will attempt to re-flow comments.
2721   /// \code
2722   ///    false:
2723   ///    // veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of information
2724   ///    /* second veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of information */
2725   ///
2726   ///    true:
2727   ///    // veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of
2728   ///    // information
2729   ///    /* second veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of
2730   ///     * information */
2731   /// \endcode
2732   bool ReflowComments;
2733   // clang-format on
2734 
2735   /// The maximal number of unwrapped lines that a short namespace spans.
2736   /// Defaults to 1.
2737   ///
2738   /// This determines the maximum length of short namespaces by counting
2739   /// unwrapped lines (i.e. containing neither opening nor closing
2740   /// namespace brace) and makes "FixNamespaceComments" omit adding
2741   /// end comments for those.
2742   /// \code
2743   ///    ShortNamespaceLines: 1     vs.     ShortNamespaceLines: 0
2744   ///    namespace a {                      namespace a {
2745   ///      int foo;                           int foo;
2746   ///    }                                  } // namespace a
2747   ///
2748   ///    ShortNamespaceLines: 1     vs.     ShortNamespaceLines: 0
2749   ///    namespace b {                      namespace b {
2750   ///      int foo;                           int foo;
2751   ///      int bar;                           int bar;
2752   ///    } // namespace b                   } // namespace b
2753   /// \endcode
2754   unsigned ShortNamespaceLines;
2755 
2756   /// Include sorting options.
2757   enum SortIncludesOptions : unsigned char {
2758     /// Includes are never sorted.
2759     /// \code
2760     ///    #include "B/A.h"
2761     ///    #include "A/B.h"
2762     ///    #include "a/b.h"
2763     ///    #include "A/b.h"
2764     ///    #include "B/a.h"
2765     /// \endcode
2766     SI_Never,
2767     /// Includes are sorted in an ASCIIbetical or case sensitive fashion.
2768     /// \code
2769     ///    #include "A/B.h"
2770     ///    #include "A/b.h"
2771     ///    #include "B/A.h"
2772     ///    #include "B/a.h"
2773     ///    #include "a/b.h"
2774     /// \endcode
2775     SI_CaseSensitive,
2776     /// Includes are sorted in an alphabetical or case insensitive fashion.
2777     /// \code
2778     ///    #include "A/B.h"
2779     ///    #include "A/b.h"
2780     ///    #include "a/b.h"
2781     ///    #include "B/A.h"
2782     ///    #include "B/a.h"
2783     /// \endcode
2784     SI_CaseInsensitive,
2785   };
2786 
2787   /// Controls if and how clang-format will sort ``#includes``.
2788   /// If ``Never``, includes are never sorted.
2789   /// If ``CaseInsensitive``, includes are sorted in an ASCIIbetical or case
2790   /// insensitive fashion.
2791   /// If ``CaseSensitive``, includes are sorted in an alphabetical or case
2792   /// sensitive fashion.
2793   SortIncludesOptions SortIncludes;
2794 
2795   /// Position for Java Static imports.
2796   enum SortJavaStaticImportOptions : unsigned char {
2797     /// Static imports are placed before non-static imports.
2798     /// \code{.java}
2799     ///   import static org.example.function1;
2800     ///
2801     ///   import org.example.ClassA;
2802     /// \endcode
2803     SJSIO_Before,
2804     /// Static imports are placed after non-static imports.
2805     /// \code{.java}
2806     ///   import org.example.ClassA;
2807     ///
2808     ///   import static org.example.function1;
2809     /// \endcode
2810     SJSIO_After,
2811   };
2812 
2813   /// When sorting Java imports, by default static imports are placed before
2814   /// non-static imports. If ``JavaStaticImportAfterImport`` is ``After``,
2815   /// static imports are placed after non-static imports.
2816   SortJavaStaticImportOptions SortJavaStaticImport;
2817 
2818   /// If ``true``, clang-format will sort using declarations.
2819   ///
2820   /// The order of using declarations is defined as follows:
2821   /// Split the strings by "::" and discard any initial empty strings. The last
2822   /// element of each list is a non-namespace name; all others are namespace
2823   /// names. Sort the lists of names lexicographically, where the sort order of
2824   /// individual names is that all non-namespace names come before all namespace
2825   /// names, and within those groups, names are in case-insensitive
2826   /// lexicographic order.
2827   /// \code
2828   ///    false:                                 true:
2829   ///    using std::cout;               vs.     using std::cin;
2830   ///    using std::cin;                        using std::cout;
2831   /// \endcode
2832   bool SortUsingDeclarations;
2833 
2834   /// If ``true``, a space is inserted after C style casts.
2835   /// \code
2836   ///    true:                                  false:
2837   ///    (int) i;                       vs.     (int)i;
2838   /// \endcode
2839   bool SpaceAfterCStyleCast;
2840 
2841   /// If ``true``, a space is inserted after the logical not operator (``!``).
2842   /// \code
2843   ///    true:                                  false:
2844   ///    ! someExpression();            vs.     !someExpression();
2845   /// \endcode
2846   bool SpaceAfterLogicalNot;
2847 
2848   /// If \c true, a space will be inserted after the 'template' keyword.
2849   /// \code
2850   ///    true:                                  false:
2851   ///    template <int> void foo();     vs.     template<int> void foo();
2852   /// \endcode
2853   bool SpaceAfterTemplateKeyword;
2854 
2855   /// Different ways to put a space before opening parentheses.
2856   enum SpaceAroundPointerQualifiersStyle : unsigned char {
2857     /// Don't ensure spaces around pointer qualifiers and use PointerAlignment
2858     /// instead.
2859     /// \code
2860     ///    PointerAlignment: Left                 PointerAlignment: Right
2861     ///    void* const* x = NULL;         vs.     void *const *x = NULL;
2862     /// \endcode
2863     SAPQ_Default,
2864     /// Ensure that there is a space before pointer qualifiers.
2865     /// \code
2866     ///    PointerAlignment: Left                 PointerAlignment: Right
2867     ///    void* const* x = NULL;         vs.     void * const *x = NULL;
2868     /// \endcode
2869     SAPQ_Before,
2870     /// Ensure that there is a space after pointer qualifiers.
2871     /// \code
2872     ///    PointerAlignment: Left                 PointerAlignment: Right
2873     ///    void* const * x = NULL;         vs.     void *const *x = NULL;
2874     /// \endcode
2875     SAPQ_After,
2876     /// Ensure that there is a space both before and after pointer qualifiers.
2877     /// \code
2878     ///    PointerAlignment: Left                 PointerAlignment: Right
2879     ///    void* const * x = NULL;         vs.     void * const *x = NULL;
2880     /// \endcode
2881     SAPQ_Both,
2882   };
2883 
2884   ///  Defines in which cases to put a space before or after pointer qualifiers
2885   SpaceAroundPointerQualifiersStyle SpaceAroundPointerQualifiers;
2886 
2887   /// If ``false``, spaces will be removed before assignment operators.
2888   /// \code
2889   ///    true:                                  false:
2890   ///    int a = 5;                     vs.     int a= 5;
2891   ///    a += 42;                               a+= 42;
2892   /// \endcode
2893   bool SpaceBeforeAssignmentOperators;
2894 
2895   /// If ``false``, spaces will be removed before case colon.
2896   /// \code
2897   ///   true:                                   false
2898   ///   switch (x) {                    vs.     switch (x) {
2899   ///     case 1 : break;                         case 1: break;
2900   ///   }                                       }
2901   /// \endcode
2902   bool SpaceBeforeCaseColon;
2903 
2904   /// If ``true``, a space will be inserted before a C++11 braced list
2905   /// used to initialize an object (after the preceding identifier or type).
2906   /// \code
2907   ///    true:                                  false:
2908   ///    Foo foo { bar };               vs.     Foo foo{ bar };
2909   ///    Foo {};                                Foo{};
2910   ///    vector<int> { 1, 2, 3 };               vector<int>{ 1, 2, 3 };
2911   ///    new int[3] { 1, 2, 3 };                new int[3]{ 1, 2, 3 };
2912   /// \endcode
2913   bool SpaceBeforeCpp11BracedList;
2914 
2915   /// If ``false``, spaces will be removed before constructor initializer
2916   /// colon.
2917   /// \code
2918   ///    true:                                  false:
2919   ///    Foo::Foo() : a(a) {}                   Foo::Foo(): a(a) {}
2920   /// \endcode
2921   bool SpaceBeforeCtorInitializerColon;
2922 
2923   /// If ``false``, spaces will be removed before inheritance colon.
2924   /// \code
2925   ///    true:                                  false:
2926   ///    class Foo : Bar {}             vs.     class Foo: Bar {}
2927   /// \endcode
2928   bool SpaceBeforeInheritanceColon;
2929 
2930   /// Different ways to put a space before opening parentheses.
2931   enum SpaceBeforeParensOptions : unsigned char {
2932     /// Never put a space before opening parentheses.
2933     /// \code
2934     ///    void f() {
2935     ///      if(true) {
2936     ///        f();
2937     ///      }
2938     ///    }
2939     /// \endcode
2940     SBPO_Never,
2941     /// Put a space before opening parentheses only after control statement
2942     /// keywords (``for/if/while...``).
2943     /// \code
2944     ///    void f() {
2945     ///      if (true) {
2946     ///        f();
2947     ///      }
2948     ///    }
2949     /// \endcode
2950     SBPO_ControlStatements,
2951     /// Same as ``SBPO_ControlStatements`` except this option doesn't apply to
2952     /// ForEach macros. This is useful in projects where ForEach macros are
2953     /// treated as function calls instead of control statements.
2954     /// \code
2955     ///    void f() {
2956     ///      Q_FOREACH(...) {
2957     ///        f();
2958     ///      }
2959     ///    }
2960     /// \endcode
2961     SBPO_ControlStatementsExceptForEachMacros,
2962     /// Put a space before opening parentheses only if the parentheses are not
2963     /// empty i.e. '()'
2964     /// \code
2965     ///   void() {
2966     ///     if (true) {
2967     ///       f();
2968     ///       g (x, y, z);
2969     ///     }
2970     ///   }
2971     /// \endcode
2972     SBPO_NonEmptyParentheses,
2973     /// Always put a space before opening parentheses, except when it's
2974     /// prohibited by the syntax rules (in function-like macro definitions) or
2975     /// when determined by other style rules (after unary operators, opening
2976     /// parentheses, etc.)
2977     /// \code
2978     ///    void f () {
2979     ///      if (true) {
2980     ///        f ();
2981     ///      }
2982     ///    }
2983     /// \endcode
2984     SBPO_Always
2985   };
2986 
2987   /// Defines in which cases to put a space before opening parentheses.
2988   SpaceBeforeParensOptions SpaceBeforeParens;
2989 
2990   /// If ``false``, spaces will be removed before range-based for loop
2991   /// colon.
2992   /// \code
2993   ///    true:                                  false:
2994   ///    for (auto v : values) {}       vs.     for(auto v: values) {}
2995   /// \endcode
2996   bool SpaceBeforeRangeBasedForLoopColon;
2997 
2998   /// If ``true``, spaces will be inserted into ``{}``.
2999   /// \code
3000   ///    true:                                false:
3001   ///    void f() { }                   vs.   void f() {}
3002   ///    while (true) { }                     while (true) {}
3003   /// \endcode
3004   bool SpaceInEmptyBlock;
3005 
3006   /// If ``true``, spaces may be inserted into ``()``.
3007   /// \code
3008   ///    true:                                false:
3009   ///    void f( ) {                    vs.   void f() {
3010   ///      int x[] = {foo( ), bar( )};          int x[] = {foo(), bar()};
3011   ///      if (true) {                          if (true) {
3012   ///        f( );                                f();
3013   ///      }                                    }
3014   ///    }                                    }
3015   /// \endcode
3016   bool SpaceInEmptyParentheses;
3017 
3018   /// The number of spaces before trailing line comments
3019   /// (``//`` - comments).
3020   ///
3021   /// This does not affect trailing block comments (``/*`` - comments) as
3022   /// those commonly have different usage patterns and a number of special
3023   /// cases.
3024   /// \code
3025   ///    SpacesBeforeTrailingComments: 3
3026   ///    void f() {
3027   ///      if (true) {   // foo1
3028   ///        f();        // bar
3029   ///      }             // foo
3030   ///    }
3031   /// \endcode
3032   unsigned SpacesBeforeTrailingComments;
3033 
3034   /// Styles for adding spacing after ``<`` and before ``>`
3035   ///  in template argument lists.
3036   enum SpacesInAnglesStyle : unsigned char {
3037     /// Remove spaces after ``<`` and before ``>``.
3038     /// \code
3039     ///    static_cast<int>(arg);
3040     ///    std::function<void(int)> fct;
3041     /// \endcode
3042     SIAS_Never,
3043     /// Add spaces after ``<`` and before ``>``.
3044     /// \code
3045     ///    static_cast< int >(arg);
3046     ///    std::function< void(int) > fct;
3047     /// \endcode
3048     SIAS_Always,
3049     /// Keep a single space after ``<`` and before ``>`` if any spaces were
3050     /// present. Option ``Standard: Cpp03`` takes precedence.
3051     SIAS_Leave
3052   };
3053   /// The SpacesInAnglesStyle to use for template argument lists.
3054   SpacesInAnglesStyle SpacesInAngles;
3055 
3056   /// If ``true``, spaces will be inserted around if/for/switch/while
3057   /// conditions.
3058   /// \code
3059   ///    true:                                  false:
3060   ///    if ( a )  { ... }              vs.     if (a) { ... }
3061   ///    while ( i < 5 )  { ... }               while (i < 5) { ... }
3062   /// \endcode
3063   bool SpacesInConditionalStatement;
3064 
3065   /// If ``true``, spaces are inserted inside container literals (e.g.
3066   /// ObjC and Javascript array and dict literals).
3067   /// \code{.js}
3068   ///    true:                                  false:
3069   ///    var arr = [ 1, 2, 3 ];         vs.     var arr = [1, 2, 3];
3070   ///    f({a : 1, b : 2, c : 3});              f({a: 1, b: 2, c: 3});
3071   /// \endcode
3072   bool SpacesInContainerLiterals;
3073 
3074   /// If ``true``, spaces may be inserted into C style casts.
3075   /// \code
3076   ///    true:                                  false:
3077   ///    x = ( int32 )y                 vs.     x = (int32)y
3078   /// \endcode
3079   bool SpacesInCStyleCastParentheses;
3080 
3081   /// Control of spaces within a single line comment
3082   struct SpacesInLineComment {
3083     /// The minimum number of spaces at the start of the comment.
3084     unsigned Minimum;
3085     /// The maximum number of spaces at the start of the comment.
3086     unsigned Maximum;
3087   };
3088 
3089   /// How many spaces are allowed at the start of a line comment. To disable the
3090   /// maximum set it to ``-1``, apart from that the maximum takes precedence
3091   /// over the minimum.
3092   /// \code Minimum = 1 Maximum = -1
3093   /// // One space is forced
3094   ///
3095   /// //  but more spaces are possible
3096   ///
3097   /// Minimum = 0
3098   /// Maximum = 0
3099   /// //Forces to start every comment directly after the slashes
3100   /// \endcode
3101   ///
3102   /// Note that in line comment sections the relative indent of the subsequent
3103   /// lines is kept, that means the following:
3104   /// \code
3105   /// before:                                   after:
3106   /// Minimum: 1
3107   /// //if (b) {                                // if (b) {
3108   /// //  return true;                          //   return true;
3109   /// //}                                       // }
3110   ///
3111   /// Maximum: 0
3112   /// /// List:                                 ///List:
3113   /// ///  - Foo                                /// - Foo
3114   /// ///    - Bar                              ///   - Bar
3115   /// \endcode
3116   SpacesInLineComment SpacesInLineCommentPrefix;
3117 
3118   /// If ``true``, spaces will be inserted after ``(`` and before ``)``.
3119   /// \code
3120   ///    true:                                  false:
3121   ///    t f( Deleted & ) & = delete;   vs.     t f(Deleted &) & = delete;
3122   /// \endcode
3123   bool SpacesInParentheses;
3124 
3125   /// If ``true``, spaces will be inserted after ``[`` and before ``]``.
3126   /// Lambdas without arguments or unspecified size array declarations will not
3127   /// be affected.
3128   /// \code
3129   ///    true:                                  false:
3130   ///    int a[ 5 ];                    vs.     int a[5];
3131   ///    std::unique_ptr<int[]> foo() {} // Won't be affected
3132   /// \endcode
3133   bool SpacesInSquareBrackets;
3134 
3135   /// If ``true``, spaces will be before  ``[``.
3136   /// Lambdas will not be affected. Only the first ``[`` will get a space added.
3137   /// \code
3138   ///    true:                                  false:
3139   ///    int a [5];                    vs.      int a[5];
3140   ///    int a [5][5];                 vs.      int a[5][5];
3141   /// \endcode
3142   bool SpaceBeforeSquareBrackets;
3143 
3144   /// Styles for adding spacing around ``:`` in bitfield definitions.
3145   enum BitFieldColonSpacingStyle : unsigned char {
3146     /// Add one space on each side of the ``:``
3147     /// \code
3148     ///   unsigned bf : 2;
3149     /// \endcode
3150     BFCS_Both,
3151     /// Add no space around the ``:`` (except when needed for
3152     /// ``AlignConsecutiveBitFields``).
3153     /// \code
3154     ///   unsigned bf:2;
3155     /// \endcode
3156     BFCS_None,
3157     /// Add space before the ``:`` only
3158     /// \code
3159     ///   unsigned bf :2;
3160     /// \endcode
3161     BFCS_Before,
3162     /// Add space after the ``:`` only (space may be added before if
3163     /// needed for ``AlignConsecutiveBitFields``).
3164     /// \code
3165     ///   unsigned bf: 2;
3166     /// \endcode
3167     BFCS_After
3168   };
3169   /// The BitFieldColonSpacingStyle to use for bitfields.
3170   BitFieldColonSpacingStyle BitFieldColonSpacing;
3171 
3172   /// Supported language standards for parsing and formatting C++ constructs.
3173   /// \code
3174   ///    Latest:                                vector<set<int>>
3175   ///    c++03                          vs.     vector<set<int> >
3176   /// \endcode
3177   ///
3178   /// The correct way to spell a specific language version is e.g. ``c++11``.
3179   /// The historical aliases ``Cpp03`` and ``Cpp11`` are deprecated.
3180   enum LanguageStandard : unsigned char {
3181     /// Parse and format as C++03.
3182     /// ``Cpp03`` is a deprecated alias for ``c++03``
3183     LS_Cpp03, // c++03
3184     /// Parse and format as C++11.
3185     LS_Cpp11, // c++11
3186     /// Parse and format as C++14.
3187     LS_Cpp14, // c++14
3188     /// Parse and format as C++17.
3189     LS_Cpp17, // c++17
3190     /// Parse and format as C++20.
3191     LS_Cpp20, // c++20
3192     /// Parse and format using the latest supported language version.
3193     /// ``Cpp11`` is a deprecated alias for ``Latest``
3194     LS_Latest,
3195     /// Automatic detection based on the input.
3196     LS_Auto,
3197   };
3198 
3199   /// Parse and format C++ constructs compatible with this standard.
3200   /// \code
3201   ///    c++03:                                 latest:
3202   ///    vector<set<int> > x;           vs.     vector<set<int>> x;
3203   /// \endcode
3204   LanguageStandard Standard;
3205 
3206   /// Macros which are ignored in front of a statement, as if they were an
3207   /// attribute. So that they are not parsed as identifier, for example for Qts
3208   /// emit.
3209   /// \code
3210   ///   AlignConsecutiveDeclarations: true
3211   ///   StatementAttributeLikeMacros: []
3212   ///   unsigned char data = 'x';
3213   ///   emit          signal(data); // This is parsed as variable declaration.
3214   ///
3215   ///   AlignConsecutiveDeclarations: true
3216   ///   StatementAttributeLikeMacros: [emit]
3217   ///   unsigned char data = 'x';
3218   ///   emit signal(data); // Now it's fine again.
3219   /// \endcode
3220   std::vector<std::string> StatementAttributeLikeMacros;
3221 
3222   /// The number of columns used for tab stops.
3223   unsigned TabWidth;
3224 
3225   /// Different ways to use tab in formatting.
3226   enum UseTabStyle : unsigned char {
3227     /// Never use tab.
3228     UT_Never,
3229     /// Use tabs only for indentation.
3230     UT_ForIndentation,
3231     /// Fill all leading whitespace with tabs, and use spaces for alignment that
3232     /// appears within a line (e.g. consecutive assignments and declarations).
3233     UT_ForContinuationAndIndentation,
3234     /// Use tabs for line continuation and indentation, and spaces for
3235     /// alignment.
3236     UT_AlignWithSpaces,
3237     /// Use tabs whenever we need to fill whitespace that spans at least from
3238     /// one tab stop to the next one.
3239     UT_Always
3240   };
3241 
3242   /// \brief Use ``\r\n`` instead of ``\n`` for line breaks.
3243   /// Also used as fallback if ``DeriveLineEnding`` is true.
3244   bool UseCRLF;
3245 
3246   /// The way to use tab characters in the resulting file.
3247   UseTabStyle UseTab;
3248 
3249   bool operator==(const FormatStyle &R) const {
3250     return AccessModifierOffset == R.AccessModifierOffset &&
3251            AlignAfterOpenBracket == R.AlignAfterOpenBracket &&
3252            AlignConsecutiveAssignments == R.AlignConsecutiveAssignments &&
3253            AlignConsecutiveBitFields == R.AlignConsecutiveBitFields &&
3254            AlignConsecutiveDeclarations == R.AlignConsecutiveDeclarations &&
3255            AlignConsecutiveMacros == R.AlignConsecutiveMacros &&
3256            AlignEscapedNewlines == R.AlignEscapedNewlines &&
3257            AlignOperands == R.AlignOperands &&
3258            AlignTrailingComments == R.AlignTrailingComments &&
3259            AllowAllArgumentsOnNextLine == R.AllowAllArgumentsOnNextLine &&
3260            AllowAllConstructorInitializersOnNextLine ==
3261                R.AllowAllConstructorInitializersOnNextLine &&
3262            AllowAllParametersOfDeclarationOnNextLine ==
3263                R.AllowAllParametersOfDeclarationOnNextLine &&
3264            AllowShortEnumsOnASingleLine == R.AllowShortEnumsOnASingleLine &&
3265            AllowShortBlocksOnASingleLine == R.AllowShortBlocksOnASingleLine &&
3266            AllowShortCaseLabelsOnASingleLine ==
3267                R.AllowShortCaseLabelsOnASingleLine &&
3268            AllowShortFunctionsOnASingleLine ==
3269                R.AllowShortFunctionsOnASingleLine &&
3270            AllowShortIfStatementsOnASingleLine ==
3271                R.AllowShortIfStatementsOnASingleLine &&
3272            AllowShortLambdasOnASingleLine == R.AllowShortLambdasOnASingleLine &&
3273            AllowShortLoopsOnASingleLine == R.AllowShortLoopsOnASingleLine &&
3274            AlwaysBreakAfterReturnType == R.AlwaysBreakAfterReturnType &&
3275            AlwaysBreakBeforeMultilineStrings ==
3276                R.AlwaysBreakBeforeMultilineStrings &&
3277            AlwaysBreakTemplateDeclarations ==
3278                R.AlwaysBreakTemplateDeclarations &&
3279            AttributeMacros == R.AttributeMacros &&
3280            BinPackArguments == R.BinPackArguments &&
3281            BinPackParameters == R.BinPackParameters &&
3282            BreakBeforeBinaryOperators == R.BreakBeforeBinaryOperators &&
3283            BreakBeforeBraces == R.BreakBeforeBraces &&
3284            BreakBeforeConceptDeclarations == R.BreakBeforeConceptDeclarations &&
3285            BreakBeforeTernaryOperators == R.BreakBeforeTernaryOperators &&
3286            BreakConstructorInitializers == R.BreakConstructorInitializers &&
3287            CompactNamespaces == R.CompactNamespaces &&
3288            BreakAfterJavaFieldAnnotations == R.BreakAfterJavaFieldAnnotations &&
3289            BreakStringLiterals == R.BreakStringLiterals &&
3290            ColumnLimit == R.ColumnLimit && CommentPragmas == R.CommentPragmas &&
3291            BreakInheritanceList == R.BreakInheritanceList &&
3292            ConstructorInitializerAllOnOneLineOrOnePerLine ==
3293                R.ConstructorInitializerAllOnOneLineOrOnePerLine &&
3294            ConstructorInitializerIndentWidth ==
3295                R.ConstructorInitializerIndentWidth &&
3296            ContinuationIndentWidth == R.ContinuationIndentWidth &&
3297            Cpp11BracedListStyle == R.Cpp11BracedListStyle &&
3298            DeriveLineEnding == R.DeriveLineEnding &&
3299            DerivePointerAlignment == R.DerivePointerAlignment &&
3300            DisableFormat == R.DisableFormat &&
3301            EmptyLineAfterAccessModifier == R.EmptyLineAfterAccessModifier &&
3302            EmptyLineBeforeAccessModifier == R.EmptyLineBeforeAccessModifier &&
3303            ExperimentalAutoDetectBinPacking ==
3304                R.ExperimentalAutoDetectBinPacking &&
3305            FixNamespaceComments == R.FixNamespaceComments &&
3306            ForEachMacros == R.ForEachMacros &&
3307            IncludeStyle.IncludeBlocks == R.IncludeStyle.IncludeBlocks &&
3308            IncludeStyle.IncludeCategories == R.IncludeStyle.IncludeCategories &&
3309            IncludeStyle.IncludeIsMainRegex ==
3310                R.IncludeStyle.IncludeIsMainRegex &&
3311            IncludeStyle.IncludeIsMainSourceRegex ==
3312                R.IncludeStyle.IncludeIsMainSourceRegex &&
3313            IndentAccessModifiers == R.IndentAccessModifiers &&
3314            IndentCaseLabels == R.IndentCaseLabels &&
3315            IndentCaseBlocks == R.IndentCaseBlocks &&
3316            IndentGotoLabels == R.IndentGotoLabels &&
3317            IndentPPDirectives == R.IndentPPDirectives &&
3318            IndentExternBlock == R.IndentExternBlock &&
3319            IndentRequires == R.IndentRequires && IndentWidth == R.IndentWidth &&
3320            Language == R.Language &&
3321            IndentWrappedFunctionNames == R.IndentWrappedFunctionNames &&
3322            JavaImportGroups == R.JavaImportGroups &&
3323            JavaScriptQuotes == R.JavaScriptQuotes &&
3324            JavaScriptWrapImports == R.JavaScriptWrapImports &&
3325            KeepEmptyLinesAtTheStartOfBlocks ==
3326                R.KeepEmptyLinesAtTheStartOfBlocks &&
3327            MacroBlockBegin == R.MacroBlockBegin &&
3328            MacroBlockEnd == R.MacroBlockEnd &&
3329            MaxEmptyLinesToKeep == R.MaxEmptyLinesToKeep &&
3330            NamespaceIndentation == R.NamespaceIndentation &&
3331            NamespaceMacros == R.NamespaceMacros &&
3332            ObjCBinPackProtocolList == R.ObjCBinPackProtocolList &&
3333            ObjCBlockIndentWidth == R.ObjCBlockIndentWidth &&
3334            ObjCBreakBeforeNestedBlockParam ==
3335                R.ObjCBreakBeforeNestedBlockParam &&
3336            ObjCSpaceAfterProperty == R.ObjCSpaceAfterProperty &&
3337            ObjCSpaceBeforeProtocolList == R.ObjCSpaceBeforeProtocolList &&
3338            PenaltyBreakAssignment == R.PenaltyBreakAssignment &&
3339            PenaltyBreakBeforeFirstCallParameter ==
3340                R.PenaltyBreakBeforeFirstCallParameter &&
3341            PenaltyBreakComment == R.PenaltyBreakComment &&
3342            PenaltyBreakFirstLessLess == R.PenaltyBreakFirstLessLess &&
3343            PenaltyBreakString == R.PenaltyBreakString &&
3344            PenaltyExcessCharacter == R.PenaltyExcessCharacter &&
3345            PenaltyReturnTypeOnItsOwnLine == R.PenaltyReturnTypeOnItsOwnLine &&
3346            PenaltyBreakTemplateDeclaration ==
3347                R.PenaltyBreakTemplateDeclaration &&
3348            PointerAlignment == R.PointerAlignment &&
3349            RawStringFormats == R.RawStringFormats &&
3350            ShortNamespaceLines == R.ShortNamespaceLines &&
3351            SortIncludes == R.SortIncludes &&
3352            SortJavaStaticImport == R.SortJavaStaticImport &&
3353            SpaceAfterCStyleCast == R.SpaceAfterCStyleCast &&
3354            SpaceAfterLogicalNot == R.SpaceAfterLogicalNot &&
3355            SpaceAfterTemplateKeyword == R.SpaceAfterTemplateKeyword &&
3356            SpaceBeforeAssignmentOperators == R.SpaceBeforeAssignmentOperators &&
3357            SpaceBeforeCaseColon == R.SpaceBeforeCaseColon &&
3358            SpaceBeforeCpp11BracedList == R.SpaceBeforeCpp11BracedList &&
3359            SpaceBeforeCtorInitializerColon ==
3360                R.SpaceBeforeCtorInitializerColon &&
3361            SpaceBeforeInheritanceColon == R.SpaceBeforeInheritanceColon &&
3362            SpaceBeforeParens == R.SpaceBeforeParens &&
3363            SpaceAroundPointerQualifiers == R.SpaceAroundPointerQualifiers &&
3364            SpaceBeforeRangeBasedForLoopColon ==
3365                R.SpaceBeforeRangeBasedForLoopColon &&
3366            SpaceInEmptyBlock == R.SpaceInEmptyBlock &&
3367            SpaceInEmptyParentheses == R.SpaceInEmptyParentheses &&
3368            SpacesBeforeTrailingComments == R.SpacesBeforeTrailingComments &&
3369            SpacesInAngles == R.SpacesInAngles &&
3370            SpacesInConditionalStatement == R.SpacesInConditionalStatement &&
3371            SpacesInContainerLiterals == R.SpacesInContainerLiterals &&
3372            SpacesInCStyleCastParentheses == R.SpacesInCStyleCastParentheses &&
3373            SpacesInLineCommentPrefix.Minimum ==
3374                R.SpacesInLineCommentPrefix.Minimum &&
3375            SpacesInLineCommentPrefix.Maximum ==
3376                R.SpacesInLineCommentPrefix.Maximum &&
3377            SpacesInParentheses == R.SpacesInParentheses &&
3378            SpacesInSquareBrackets == R.SpacesInSquareBrackets &&
3379            SpaceBeforeSquareBrackets == R.SpaceBeforeSquareBrackets &&
3380            BitFieldColonSpacing == R.BitFieldColonSpacing &&
3381            Standard == R.Standard &&
3382            StatementAttributeLikeMacros == R.StatementAttributeLikeMacros &&
3383            StatementMacros == R.StatementMacros && TabWidth == R.TabWidth &&
3384            UseTab == R.UseTab && UseCRLF == R.UseCRLF &&
3385            TypenameMacros == R.TypenameMacros;
3386   }
3387 
3388   llvm::Optional<FormatStyle> GetLanguageStyle(LanguageKind Language) const;
3389 
3390   // Stores per-language styles. A FormatStyle instance inside has an empty
3391   // StyleSet. A FormatStyle instance returned by the Get method has its
3392   // StyleSet set to a copy of the originating StyleSet, effectively keeping the
3393   // internal representation of that StyleSet alive.
3394   //
3395   // The memory management and ownership reminds of a birds nest: chicks
3396   // leaving the nest take photos of the nest with them.
3397   struct FormatStyleSet {
3398     typedef std::map<FormatStyle::LanguageKind, FormatStyle> MapType;
3399 
3400     llvm::Optional<FormatStyle> Get(FormatStyle::LanguageKind Language) const;
3401 
3402     // Adds \p Style to this FormatStyleSet. Style must not have an associated
3403     // FormatStyleSet.
3404     // Style.Language should be different than LK_None. If this FormatStyleSet
3405     // already contains an entry for Style.Language, that gets replaced with the
3406     // passed Style.
3407     void Add(FormatStyle Style);
3408 
3409     // Clears this FormatStyleSet.
3410     void Clear();
3411 
3412   private:
3413     std::shared_ptr<MapType> Styles;
3414   };
3415 
3416   static FormatStyleSet BuildStyleSetFromConfiguration(
3417       const FormatStyle &MainStyle,
3418       const std::vector<FormatStyle> &ConfigurationStyles);
3419 
3420 private:
3421   FormatStyleSet StyleSet;
3422 
3423   friend std::error_code
3424   parseConfiguration(llvm::MemoryBufferRef Config, FormatStyle *Style,
3425                      bool AllowUnknownOptions,
3426                      llvm::SourceMgr::DiagHandlerTy DiagHandler,
3427                      void *DiagHandlerCtxt);
3428 };
3429 
3430 /// Returns a format style complying with the LLVM coding standards:
3431 /// http://llvm.org/docs/CodingStandards.html.
3432 FormatStyle getLLVMStyle(
3433     FormatStyle::LanguageKind Language = FormatStyle::LanguageKind::LK_Cpp);
3434 
3435 /// Returns a format style complying with one of Google's style guides:
3436 /// http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml.
3437 /// http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml.
3438 /// https://developers.google.com/protocol-buffers/docs/style.
3439 FormatStyle getGoogleStyle(FormatStyle::LanguageKind Language);
3440 
3441 /// Returns a format style complying with Chromium's style guide:
3442 /// http://www.chromium.org/developers/coding-style.
3443 FormatStyle getChromiumStyle(FormatStyle::LanguageKind Language);
3444 
3445 /// Returns a format style complying with Mozilla's style guide:
3446 /// https://developer.mozilla.org/en-US/docs/Developer_Guide/Coding_Style.
3447 FormatStyle getMozillaStyle();
3448 
3449 /// Returns a format style complying with Webkit's style guide:
3450 /// http://www.webkit.org/coding/coding-style.html
3451 FormatStyle getWebKitStyle();
3452 
3453 /// Returns a format style complying with GNU Coding Standards:
3454 /// http://www.gnu.org/prep/standards/standards.html
3455 FormatStyle getGNUStyle();
3456 
3457 /// Returns a format style complying with Microsoft style guide:
3458 /// https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference?view=vs-2017
3459 FormatStyle getMicrosoftStyle(FormatStyle::LanguageKind Language);
3460 
3461 /// Returns style indicating formatting should be not applied at all.
3462 FormatStyle getNoStyle();
3463 
3464 /// Gets a predefined style for the specified language by name.
3465 ///
3466 /// Currently supported names: LLVM, Google, Chromium, Mozilla. Names are
3467 /// compared case-insensitively.
3468 ///
3469 /// Returns ``true`` if the Style has been set.
3470 bool getPredefinedStyle(StringRef Name, FormatStyle::LanguageKind Language,
3471                         FormatStyle *Style);
3472 
3473 /// Parse configuration from YAML-formatted text.
3474 ///
3475 /// Style->Language is used to get the base style, if the ``BasedOnStyle``
3476 /// option is present.
3477 ///
3478 /// The FormatStyleSet of Style is reset.
3479 ///
3480 /// When ``BasedOnStyle`` is not present, options not present in the YAML
3481 /// document, are retained in \p Style.
3482 ///
3483 /// If AllowUnknownOptions is true, no errors are emitted if unknown
3484 /// format options are occured.
3485 ///
3486 /// If set all diagnostics are emitted through the DiagHandler.
3487 std::error_code
3488 parseConfiguration(llvm::MemoryBufferRef Config, FormatStyle *Style,
3489                    bool AllowUnknownOptions = false,
3490                    llvm::SourceMgr::DiagHandlerTy DiagHandler = nullptr,
3491                    void *DiagHandlerCtx = nullptr);
3492 
3493 /// Like above but accepts an unnamed buffer.
3494 inline std::error_code parseConfiguration(StringRef Config, FormatStyle *Style,
3495                                           bool AllowUnknownOptions = false) {
3496   return parseConfiguration(llvm::MemoryBufferRef(Config, "YAML"), Style,
3497                             AllowUnknownOptions);
3498 }
3499 
3500 /// Gets configuration in a YAML string.
3501 std::string configurationAsText(const FormatStyle &Style);
3502 
3503 /// Returns the replacements necessary to sort all ``#include`` blocks
3504 /// that are affected by ``Ranges``.
3505 tooling::Replacements sortIncludes(const FormatStyle &Style, StringRef Code,
3506                                    ArrayRef<tooling::Range> Ranges,
3507                                    StringRef FileName,
3508                                    unsigned *Cursor = nullptr);
3509 
3510 /// Returns the replacements corresponding to applying and formatting
3511 /// \p Replaces on success; otheriwse, return an llvm::Error carrying
3512 /// llvm::StringError.
3513 llvm::Expected<tooling::Replacements>
3514 formatReplacements(StringRef Code, const tooling::Replacements &Replaces,
3515                    const FormatStyle &Style);
3516 
3517 /// Returns the replacements corresponding to applying \p Replaces and
3518 /// cleaning up the code after that on success; otherwise, return an llvm::Error
3519 /// carrying llvm::StringError.
3520 /// This also supports inserting/deleting C++ #include directives:
3521 /// - If a replacement has offset UINT_MAX, length 0, and a replacement text
3522 ///   that is an #include directive, this will insert the #include into the
3523 ///   correct block in the \p Code.
3524 /// - If a replacement has offset UINT_MAX, length 1, and a replacement text
3525 ///   that is the name of the header to be removed, the header will be removed
3526 ///   from \p Code if it exists.
3527 /// The include manipulation is done via `tooling::HeaderInclude`, see its
3528 /// documentation for more details on how include insertion points are found and
3529 /// what edits are produced.
3530 llvm::Expected<tooling::Replacements>
3531 cleanupAroundReplacements(StringRef Code, const tooling::Replacements &Replaces,
3532                           const FormatStyle &Style);
3533 
3534 /// Represents the status of a formatting attempt.
3535 struct FormattingAttemptStatus {
3536   /// A value of ``false`` means that any of the affected ranges were not
3537   /// formatted due to a non-recoverable syntax error.
3538   bool FormatComplete = true;
3539 
3540   /// If ``FormatComplete`` is false, ``Line`` records a one-based
3541   /// original line number at which a syntax error might have occurred. This is
3542   /// based on a best-effort analysis and could be imprecise.
3543   unsigned Line = 0;
3544 };
3545 
3546 /// Reformats the given \p Ranges in \p Code.
3547 ///
3548 /// Each range is extended on either end to its next bigger logic unit, i.e.
3549 /// everything that might influence its formatting or might be influenced by its
3550 /// formatting.
3551 ///
3552 /// Returns the ``Replacements`` necessary to make all \p Ranges comply with
3553 /// \p Style.
3554 ///
3555 /// If ``Status`` is non-null, its value will be populated with the status of
3556 /// this formatting attempt. See \c FormattingAttemptStatus.
3557 tooling::Replacements reformat(const FormatStyle &Style, StringRef Code,
3558                                ArrayRef<tooling::Range> Ranges,
3559                                StringRef FileName = "<stdin>",
3560                                FormattingAttemptStatus *Status = nullptr);
3561 
3562 /// Same as above, except if ``IncompleteFormat`` is non-null, its value
3563 /// will be set to true if any of the affected ranges were not formatted due to
3564 /// a non-recoverable syntax error.
3565 tooling::Replacements reformat(const FormatStyle &Style, StringRef Code,
3566                                ArrayRef<tooling::Range> Ranges,
3567                                StringRef FileName, bool *IncompleteFormat);
3568 
3569 /// Clean up any erroneous/redundant code in the given \p Ranges in \p
3570 /// Code.
3571 ///
3572 /// Returns the ``Replacements`` that clean up all \p Ranges in \p Code.
3573 tooling::Replacements cleanup(const FormatStyle &Style, StringRef Code,
3574                               ArrayRef<tooling::Range> Ranges,
3575                               StringRef FileName = "<stdin>");
3576 
3577 /// Fix namespace end comments in the given \p Ranges in \p Code.
3578 ///
3579 /// Returns the ``Replacements`` that fix the namespace comments in all
3580 /// \p Ranges in \p Code.
3581 tooling::Replacements fixNamespaceEndComments(const FormatStyle &Style,
3582                                               StringRef Code,
3583                                               ArrayRef<tooling::Range> Ranges,
3584                                               StringRef FileName = "<stdin>");
3585 
3586 /// Sort consecutive using declarations in the given \p Ranges in
3587 /// \p Code.
3588 ///
3589 /// Returns the ``Replacements`` that sort the using declarations in all
3590 /// \p Ranges in \p Code.
3591 tooling::Replacements sortUsingDeclarations(const FormatStyle &Style,
3592                                             StringRef Code,
3593                                             ArrayRef<tooling::Range> Ranges,
3594                                             StringRef FileName = "<stdin>");
3595 
3596 /// Returns the ``LangOpts`` that the formatter expects you to set.
3597 ///
3598 /// \param Style determines specific settings for lexing mode.
3599 LangOptions getFormattingLangOpts(const FormatStyle &Style = getLLVMStyle());
3600 
3601 /// Description to be used for help text for a ``llvm::cl`` option for
3602 /// specifying format style. The description is closely related to the operation
3603 /// of ``getStyle()``.
3604 extern const char *StyleOptionHelpDescription;
3605 
3606 /// The suggested format style to use by default. This allows tools using
3607 /// `getStyle` to have a consistent default style.
3608 /// Different builds can modify the value to the preferred styles.
3609 extern const char *DefaultFormatStyle;
3610 
3611 /// The suggested predefined style to use as the fallback style in `getStyle`.
3612 /// Different builds can modify the value to the preferred styles.
3613 extern const char *DefaultFallbackStyle;
3614 
3615 /// Construct a FormatStyle based on ``StyleName``.
3616 ///
3617 /// ``StyleName`` can take several forms:
3618 /// * "{<key>: <value>, ...}" - Set specic style parameters.
3619 /// * "<style name>" - One of the style names supported by
3620 /// getPredefinedStyle().
3621 /// * "file" - Load style configuration from a file called ``.clang-format``
3622 /// located in one of the parent directories of ``FileName`` or the current
3623 /// directory if ``FileName`` is empty.
3624 ///
3625 /// \param[in] StyleName Style name to interpret according to the description
3626 /// above.
3627 /// \param[in] FileName Path to start search for .clang-format if ``StyleName``
3628 /// == "file".
3629 /// \param[in] FallbackStyle The name of a predefined style used to fallback to
3630 /// in case \p StyleName is "file" and no file can be found.
3631 /// \param[in] Code The actual code to be formatted. Used to determine the
3632 /// language if the filename isn't sufficient.
3633 /// \param[in] FS The underlying file system, in which the file resides. By
3634 /// default, the file system is the real file system.
3635 /// \param[in] AllowUnknownOptions If true, unknown format options only
3636 ///             emit a warning. If false, errors are emitted on unknown format
3637 ///             options.
3638 ///
3639 /// \returns FormatStyle as specified by ``StyleName``. If ``StyleName`` is
3640 /// "file" and no file is found, returns ``FallbackStyle``. If no style could be
3641 /// determined, returns an Error.
3642 llvm::Expected<FormatStyle> getStyle(StringRef StyleName, StringRef FileName,
3643                                      StringRef FallbackStyle,
3644                                      StringRef Code = "",
3645                                      llvm::vfs::FileSystem *FS = nullptr,
3646                                      bool AllowUnknownOptions = false);
3647 
3648 // Guesses the language from the ``FileName`` and ``Code`` to be formatted.
3649 // Defaults to FormatStyle::LK_Cpp.
3650 FormatStyle::LanguageKind guessLanguage(StringRef FileName, StringRef Code);
3651 
3652 // Returns a string representation of ``Language``.
getLanguageName(FormatStyle::LanguageKind Language)3653 inline StringRef getLanguageName(FormatStyle::LanguageKind Language) {
3654   switch (Language) {
3655   case FormatStyle::LK_Cpp:
3656     return "C++";
3657   case FormatStyle::LK_CSharp:
3658     return "CSharp";
3659   case FormatStyle::LK_ObjC:
3660     return "Objective-C";
3661   case FormatStyle::LK_Java:
3662     return "Java";
3663   case FormatStyle::LK_JavaScript:
3664     return "JavaScript";
3665   case FormatStyle::LK_Proto:
3666     return "Proto";
3667   case FormatStyle::LK_TableGen:
3668     return "TableGen";
3669   case FormatStyle::LK_TextProto:
3670     return "TextProto";
3671   default:
3672     return "Unknown";
3673   }
3674 }
3675 
3676 } // end namespace format
3677 } // end namespace clang
3678 
3679 namespace std {
3680 template <>
3681 struct is_error_code_enum<clang::format::ParseError> : std::true_type {};
3682 } // namespace std
3683 
3684 #endif // LLVM_CLANG_FORMAT_FORMAT_H
3685