14502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek//===--- Format.h - Format C++ code -----------------------------*- C++ -*-===//
24502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek//
34502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek//                     The LLVM Compiler Infrastructure
44502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek//
54502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek// This file is distributed under the University of Illinois Open Source
64502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek// License. See LICENSE.TXT for details.
74502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek//
84502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek//===----------------------------------------------------------------------===//
94502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek///
101eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump/// \file
114502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek/// Various functions to configurably format source code.
124502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek///
134502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek//===----------------------------------------------------------------------===//
144502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek
154502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek#ifndef LLVM_CLANG_FORMAT_FORMAT_H
169b663716449b618ba0390b1dbebc54fa8e971124Ted Kremenek#define LLVM_CLANG_FORMAT_FORMAT_H
179b663716449b618ba0390b1dbebc54fa8e971124Ted Kremenek
189b663716449b618ba0390b1dbebc54fa8e971124Ted Kremenek#include "clang/Basic/LangOptions.h"
199b663716449b618ba0390b1dbebc54fa8e971124Ted Kremenek#include "clang/Tooling/Core/Replacement.h"
204502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek#include "llvm/ADT/ArrayRef.h"
214502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek#include <system_error>
224502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek
234502195fecf399fdbbb9ee2393ad08148c394179Ted Kremeneknamespace clang {
244502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek
254502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenekclass Lexer;
269ef6537a894c33003359b1f9b9676e9178e028b7Ted Kremenekclass SourceManager;
274502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenekclass DiagnosticConsumer;
28ba5fb5a955c896815c439289fc51c03cf0635129Kovarththanan Rajaratnam
299beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremeneknamespace format {
304502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek
319beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenekenum class ParseError { Success = 0, Error, Unsuitable };
329beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenekclass ParseErrorCategory final : public std::error_category {
339beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenekpublic:
34b103f01e5e2072c04ea5619c587a2b7ff2e63022Ted Kremenek  const char *name() const LLVM_NOEXCEPT override;
35ba5fb5a955c896815c439289fc51c03cf0635129Kovarththanan Rajaratnam  std::string message(int EV) const override;
36b103f01e5e2072c04ea5619c587a2b7ff2e63022Ted Kremenek};
374502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenekconst std::error_category &getParseCategory();
384502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenekstd::error_code make_error_code(ParseError e);
399beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek
404502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek/// \brief The \c FormatStyle is used to configure the formatting to follow
414502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek/// specific guidelines.
424502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenekstruct FormatStyle {
439beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek  /// \brief Supported languages. When stored in a configuration file, specifies
444502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  /// the language, that the configuration targets. When passed to the
454502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  /// reformat() function, enables syntax features specific to the language.
469beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek  enum LanguageKind {
474502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek    /// Do not use.
484502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek    LK_None,
499beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek    /// Should be used for C, C++, ObjectiveC, ObjectiveC++.
504502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek    LK_Cpp,
519beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek    /// Should be used for Java.
529beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek    LK_Java,
534502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek    /// Should be used for JavaScript.
544502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek    LK_JavaScript,
554502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek    /// Should be used for Protocol Buffers
569beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek    /// (https://developers.google.com/protocol-buffers/).
579beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek    LK_Proto
584502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  };
594502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek
604502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  /// \brief Language, this format style is targeted at.
61b103f01e5e2072c04ea5619c587a2b7ff2e63022Ted Kremenek  LanguageKind Language;
62ba5fb5a955c896815c439289fc51c03cf0635129Kovarththanan Rajaratnam
63b103f01e5e2072c04ea5619c587a2b7ff2e63022Ted Kremenek  /// \brief The column limit.
64b103f01e5e2072c04ea5619c587a2b7ff2e63022Ted Kremenek  ///
65e53f8206ebb36a17e95e64270704e2608d1796f4Ted Kremenek  /// A column limit of \c 0 means that there is no column limit. In this case,
66e53f8206ebb36a17e95e64270704e2608d1796f4Ted Kremenek  /// clang-format will respect the input's line breaking decisions within
67e53f8206ebb36a17e95e64270704e2608d1796f4Ted Kremenek  /// statements unless they contradict other rules.
68b103f01e5e2072c04ea5619c587a2b7ff2e63022Ted Kremenek  unsigned ColumnLimit;
691eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
70b103f01e5e2072c04ea5619c587a2b7ff2e63022Ted Kremenek  /// \brief The maximum number of consecutive empty lines to keep.
71b103f01e5e2072c04ea5619c587a2b7ff2e63022Ted Kremenek  unsigned MaxEmptyLinesToKeep;
72b103f01e5e2072c04ea5619c587a2b7ff2e63022Ted Kremenek
73b103f01e5e2072c04ea5619c587a2b7ff2e63022Ted Kremenek  /// \brief If true, empty lines at the start of blocks are kept.
749beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek  bool KeepEmptyLinesAtTheStartOfBlocks;
759beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek
769beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek  /// \brief The penalty for each line break introduced inside a comment.
77ba5fb5a955c896815c439289fc51c03cf0635129Kovarththanan Rajaratnam  unsigned PenaltyBreakComment;
78b103f01e5e2072c04ea5619c587a2b7ff2e63022Ted Kremenek
794502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  /// \brief The penalty for each line break introduced inside a string literal.
804502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  unsigned PenaltyBreakString;
811eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
824502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  /// \brief The penalty for each character outside of the column limit.
839beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek  unsigned PenaltyExcessCharacter;
849beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek
854502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  /// \brief The penalty for breaking before the first \c <<.
869beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek  unsigned PenaltyBreakFirstLessLess;
874502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek
889beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek  /// \brief The penalty for breaking a function call after "call(".
899beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek  unsigned PenaltyBreakBeforeFirstCallParameter;
901eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
919beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek  /// \brief The & and * alignment style.
921eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  enum PointerAlignmentStyle {
939beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek    /// Align pointer to the left.
949beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek    PAS_Left,
953baf672378f105602d2b12f03f00277ae1936fe9Ted Kremenek    /// Align pointer to the right.
961eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    PAS_Right,
979beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek    /// Align pointer in the middle.
989beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek    PAS_Middle
999beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek  };
1004502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek
1019beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek  /// Pointer and reference alignment style.
1029beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek  PointerAlignmentStyle PointerAlignment;
1039beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek
1049beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek  /// \brief If \c true, analyze the formatted file for the most common
1059beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek  /// alignment of & and *. \c PointerAlignment is then used only as fallback.
1064502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  bool DerivePointerAlignment;
1074502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek
108ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// \brief The extra indent or outdent of access modifiers, e.g. \c public:.
109ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  int AccessModifierOffset;
110ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose
111ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// \brief Supported language standards.
112ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  enum LanguageStandard {
113ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose    /// Use C++03-compatible syntax.
114ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose    LS_Cpp03,
115ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose    /// Use features of C++11 (e.g. \c A<A<int>> instead of
116ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose    /// <tt>A<A<int> ></tt>).
117ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose    LS_Cpp11,
118ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose    /// Automatic detection based on the input.
119ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose    LS_Auto
120ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  };
121ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose
122ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// \brief Format compatible with this standard, e.g. use
123ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// <tt>A<A<int> ></tt> instead of \c A<A<int>> for LS_Cpp03.
124ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  LanguageStandard Standard;
125ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose
126ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// \brief Indent case labels one level from the switch statement.
127ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  ///
1289beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek  /// When \c false, use the same indentation level as for the switch statement.
1294502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  /// Switch statement body is always indented one level more than case labels.
1304502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  bool IndentCaseLabels;
131ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose
132ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// \brief Indent if a function definition or declaration is wrapped after the
1333baf672378f105602d2b12f03f00277ae1936fe9Ted Kremenek  /// type.
134ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  bool IndentWrappedFunctionNames;
135ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose
136ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// \brief Different ways to indent namespace contents.
1373baf672378f105602d2b12f03f00277ae1936fe9Ted Kremenek  enum NamespaceIndentationKind {
138ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose    /// Don't indent in namespaces.
139ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose    NI_None,
1403baf672378f105602d2b12f03f00277ae1936fe9Ted Kremenek    /// Indent only in inner namespaces (nested in other namespaces).
141ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose    NI_Inner,
142ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose    /// Indent in all namespaces.
1433baf672378f105602d2b12f03f00277ae1936fe9Ted Kremenek    NI_All
144ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  };
1454502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek
1464502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  /// \brief The indentation used for namespaces.
1474502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  NamespaceIndentationKind NamespaceIndentation;
148ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose
149ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// \brief The number of spaces before trailing line comments
150ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// (\c // - comments).
151ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  ///
152ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// This does not affect trailing block comments (\c /**/ - comments) as those
153ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// commonly have different usage patterns and a number of special cases.
154ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  unsigned SpacesBeforeTrailingComments;
155ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose
156ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// \brief If \c false, a function declaration's or function definition's
157ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// parameters will either all be on the same line or will have one line each.
158ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  bool BinPackParameters;
1593baf672378f105602d2b12f03f00277ae1936fe9Ted Kremenek
1604502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  /// \brief If \c false, a function call's arguments will either be all on the
161ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// same line or will have one line each.
162ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  bool BinPackArguments;
163ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose
164ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// \brief If \c true, clang-format detects whether function calls and
165ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// definitions are formatted with one parameter per line.
166ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  ///
167ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// Each call can be bin-packed, one-per-line or inconclusive. If it is
168ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// inconclusive, e.g. completely on one line, but a decision needs to be
169ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// made, clang-format analyzes whether there are other bin-packed cases in
1704502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  /// the input file and act accordingly.
1719beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek  ///
1724502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  /// NOTE: This is an experimental flag, that might go away or be renamed. Do
1734502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  /// not use this in config files, etc. Use at your own risk.
17453ba0b636194dbeaa65a6f85316c9397a0c5298bTed Kremenek  bool ExperimentalAutoDetectBinPacking;
1759beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek
1764502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  /// \brief Allow putting all parameters of a function declaration onto
1779beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek  /// the next line even if \c BinPackParameters is \c false.
1789beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek  bool AllowAllParametersOfDeclarationOnNextLine;
1799beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek
1809beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek  /// \brief Penalty for putting the return type of a function onto its own
1814502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  /// line.
1821eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  unsigned PenaltyReturnTypeOnItsOwnLine;
1834502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek
1844502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  /// \brief If the constructor initializers don't fit on a line, put each
1854502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  /// initializer on its own line.
1861eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  bool ConstructorInitializerAllOnOneLineOrOnePerLine;
1879beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek
1881eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  /// \brief Always break constructor initializers before commas and align
1894502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  /// the commas with the colon.
1904502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  bool BreakConstructorInitializersBeforeComma;
1914502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek
1924502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  /// \brief Allows contracting simple braced statements to a single line.
193b103f01e5e2072c04ea5619c587a2b7ff2e63022Ted Kremenek  ///
1944502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  /// E.g., this allows <tt>if (a) { return; }</tt> to be put on a single line.
1959beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek  bool AllowShortBlocksOnASingleLine;
1964502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek
1974502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  /// \brief If \c true, <tt>if (a) return;</tt> can be put on a single
1989ef6537a894c33003359b1f9b9676e9178e028b7Ted Kremenek  /// line.
1994502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  bool AllowShortIfStatementsOnASingleLine;
2009beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek
2019beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek  /// \brief If \c true, <tt>while (true) continue;</tt> can be put on a
2021eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  /// single line.
2034502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  bool AllowShortLoopsOnASingleLine;
2041eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
2055a4f98ff943e6a501b0fe47ade007c9bbf96cb88Argyrios Kyrtzidis  /// \brief If \c true, short case labels will be contracted to a single line.
2061eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  bool AllowShortCaseLabelsOnASingleLine;
2074502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek
208ba5fb5a955c896815c439289fc51c03cf0635129Kovarththanan Rajaratnam  /// \brief Different styles for merging short functions containing at most one
2091eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  /// statement.
2104502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  enum ShortFunctionStyle {
211d2592a34a059e7cbb2b11dc53649ac4912422909Argyrios Kyrtzidis    /// \brief Never merge functions into a single line.
21232a58084a4c53e6938dd81bfce224db25a5976d1Ted Kremenek    SFS_None,
2134502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek    /// \brief Only merge functions defined inside a class.
21428f47b92e760ccf641ac91cb0fe1c12d9ca89795Ted Kremenek    SFS_Inline,
215ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose    /// \brief Only merge empty functions.
216ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose    SFS_Empty,
2174502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek    /// \brief Merge all functions fitting on a single line.
21828f47b92e760ccf641ac91cb0fe1c12d9ca89795Ted Kremenek    SFS_All,
219ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  };
220ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose
2214502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  /// \brief Dependent on the value, <tt>int f() { return 0; }</tt> can be put
22228f47b92e760ccf641ac91cb0fe1c12d9ca89795Ted Kremenek  /// on a single line.
223ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  ShortFunctionStyle AllowShortFunctionsOnASingleLine;
224ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose
2254502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  /// \brief Add a space after \c @property in Objective-C, i.e. use
22628f47b92e760ccf641ac91cb0fe1c12d9ca89795Ted Kremenek  /// <tt>\@property (readonly)</tt> instead of <tt>\@property(readonly)</tt>.
227ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  bool ObjCSpaceAfterProperty;
228ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose
2294502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  /// \brief Add a space in front of an Objective-C protocol list, i.e. use
23028f47b92e760ccf641ac91cb0fe1c12d9ca89795Ted Kremenek  /// <tt>Foo <Protocol></tt> instead of \c Foo<Protocol>.
231ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  bool ObjCSpaceBeforeProtocolList;
232ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose
2334502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  /// \brief If \c true, horizontally aligns arguments after an open bracket.
23428f47b92e760ccf641ac91cb0fe1c12d9ca89795Ted Kremenek  ///
235ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// This applies to round brackets (parentheses), angle brackets and square
236ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// brackets. This will result in formattings like
2374502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  /// \code
2384502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  /// someLongFunction(argument1,
2391eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  ///                  argument2);
2409beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek  /// \endcode
2419beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek  bool AlignAfterOpenBracket;
2429beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek
2439beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek  /// \brief If \c true, horizontally align operands of binary and ternary
2449beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek  /// expressions.
2454502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  bool AlignOperands;
246db0594bfc013131f88429add4eb653c285fa94fbTed Kremenek
2474502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  /// \brief If \c true, aligns trailing comments.
2481eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  bool AlignTrailingComments;
2494502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek
2504502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  /// \brief If \c true, aligns escaped newlines as far left as possible.
2514502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  /// Otherwise puts them into the right-most column.
2529beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek  bool AlignEscapedNewlinesLeft;
2534502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek
2544502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  /// \brief The number of columns to use for indentation.
2554502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  unsigned IndentWidth;
2564502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek
2579ef6537a894c33003359b1f9b9676e9178e028b7Ted Kremenek  /// \brief The number of columns used for tab stops.
258d2592a34a059e7cbb2b11dc53649ac4912422909Argyrios Kyrtzidis  unsigned TabWidth;
25932a58084a4c53e6938dd81bfce224db25a5976d1Ted Kremenek
2604502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  /// \brief The number of characters to use for indentation of constructor
2614502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  /// initializer lists.
2624502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  unsigned ConstructorInitializerIndentWidth;
2634502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek
2649beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek  /// \brief The number of characters to use for indentation of ObjC blocks.
2659beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek  unsigned ObjCBlockIndentWidth;
2664502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek
2674502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  /// \brief If \c true, always break after function definition return types.
2684502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  ///
2694502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  /// More truthfully called 'break before the identifier following the type
2704502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  /// in a function definition'. PenaltyReturnTypeOnItsOwnLine becomes
271db0594bfc013131f88429add4eb653c285fa94fbTed Kremenek  /// irrelevant.
2724502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  bool AlwaysBreakAfterDefinitionReturnType;
2734502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek
274c87813824896a7124d2dd1c08e4661bbe119abf5Ted Kremenek  /// \brief If \c true, always break after the <tt>template<...></tt> of a
275c87813824896a7124d2dd1c08e4661bbe119abf5Ted Kremenek  /// template declaration.
2764502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  bool AlwaysBreakTemplateDeclarations;
2779beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek
2781eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  /// \brief If \c true, always break before multiline string literals.
2794502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  bool AlwaysBreakBeforeMultilineStrings;
2803baf672378f105602d2b12f03f00277ae1936fe9Ted Kremenek
2814502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  /// \brief Different ways to use tab in formatting.
2821eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  enum UseTabStyle {
283c87813824896a7124d2dd1c08e4661bbe119abf5Ted Kremenek    /// Never use tab.
2849beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek    UT_Never,
2859beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek    /// Use tabs only for indentation.
2869beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek    UT_ForIndentation,
287c87813824896a7124d2dd1c08e4661bbe119abf5Ted Kremenek    /// Use tabs whenever we need to fill whitespace that spans at least from
288c87813824896a7124d2dd1c08e4661bbe119abf5Ted Kremenek    /// one tab stop to the next one.
2899beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek    UT_Always
2901eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  };
2919beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek
2929beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek  /// \brief The way to use tab characters in the resulting file.
293c87813824896a7124d2dd1c08e4661bbe119abf5Ted Kremenek  UseTabStyle UseTab;
2941eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
2959beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek  /// \brief The style of breaking before or after binary operators.
2964502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek  enum BinaryOperatorStyle {
2974502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek    /// Break after operators.
2989beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek    BOS_None,
29928f47b92e760ccf641ac91cb0fe1c12d9ca89795Ted Kremenek    /// Break before operators that aren't assignments.
3009beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek    BOS_NonAssignment,
3019beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek    /// Break before operators.
302ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose    BOS_All,
303ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  };
304ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose
305ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// \brief The way to wrap binary operators.
306ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  BinaryOperatorStyle BreakBeforeBinaryOperators;
307ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose
308ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// \brief If \c true, ternary operators will be placed after line breaks.
309ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  bool BreakBeforeTernaryOperators;
310ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose
31128f47b92e760ccf641ac91cb0fe1c12d9ca89795Ted Kremenek  /// \brief Different ways to attach braces to their surrounding context.
312ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  enum BraceBreakingStyle {
313ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose    /// Always attach braces to surrounding context.
314ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose    BS_Attach,
315ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose    /// Like \c Attach, but break before braces on function, namespace and
316ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose    /// class definitions.
317ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose    BS_Linux,
318ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose    /// Like \c Attach, but break before function definitions, and 'else'.
319ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose    BS_Stroustrup,
320ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose    /// Always break before braces.
321ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose    BS_Allman,
322ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose    /// Always break before braces and add an extra level of indentation to
323ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose    /// braces of control statements, not to those of class, function
324ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose    /// or other definitions.
3259beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek    BS_GNU
3269beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek  };
327ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose
32828f47b92e760ccf641ac91cb0fe1c12d9ca89795Ted Kremenek  /// \brief The brace breaking style to use.
329ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  BraceBreakingStyle BreakBeforeBraces;
330ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose
331ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// \brief If \c true, format braced lists as best suited for C++11 braced
332ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// lists.
333ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  ///
334ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// Important differences:
335ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// - No spaces inside the braced list.
336ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// - No line break before the closing brace.
337ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// - Indentation with the continuation indent, not with the block indent.
338ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  ///
33928f47b92e760ccf641ac91cb0fe1c12d9ca89795Ted Kremenek  /// Fundamentally, C++11 braced lists are formatted exactly like function
340ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// calls would be formatted in their place. If the braced list follows a name
341ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// (e.g. a type or variable name), clang-format formats as if the \c {} were
342ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// the parentheses of a function call with that name. If there is no name,
343ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// a zero-length name is assumed.
344ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  bool Cpp11BracedListStyle;
345ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose
346ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// \brief If \c true, spaces will be inserted after '(' and before ')'.
347ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  bool SpacesInParentheses;
348ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose
349ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// \brief If \c true, spaces will be inserted after '<' and before '>' in
350ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// template argument lists
351ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  bool SpacesInAngles;
352ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose
353ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// \brief If \c true, spaces will be inserted after '[' and before ']'.
354ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  bool SpacesInSquareBrackets;
355ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose
356ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// \brief If \c true, spaces may be inserted into '()'.
357ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  bool SpaceInEmptyParentheses;
358ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose
359ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// \brief If \c true, spaces are inserted inside container literals (e.g.
36028f47b92e760ccf641ac91cb0fe1c12d9ca89795Ted Kremenek  /// ObjC and Javascript array and dict literals).
361ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  bool SpacesInContainerLiterals;
362ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose
363ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// \brief If \c true, spaces may be inserted into C style casts.
364ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  bool SpacesInCStyleCastParentheses;
365ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose
366ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// \brief If \c true, a space may be inserted after C style casts.
367ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  bool SpaceAfterCStyleCast;
368ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose
369ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// \brief Different ways to put a space before opening parentheses.
370ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  enum SpaceBeforeParensOptions {
371ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose    /// Never put a space before opening parentheses.
372ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose    SBPO_Never,
373ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose    /// Put a space before opening parentheses only after control statement
374ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose    /// keywords (<tt>for/if/while...</tt>).
375ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose    SBPO_ControlStatements,
376ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose    /// Always put a space before opening parentheses, except when it's
377ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose    /// prohibited by the syntax rules (in function-like macro definitions) or
378ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose    /// when determined by other style rules (after unary operators, opening
379ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose    /// parentheses, etc.)
380ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose    SBPO_Always
38128f47b92e760ccf641ac91cb0fe1c12d9ca89795Ted Kremenek  };
382ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose
383ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// \brief Defines in which cases to put a space before opening parentheses.
384ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  SpaceBeforeParensOptions SpaceBeforeParens;
385ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose
386ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// \brief If \c false, spaces will be removed before assignment operators.
387ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  bool SpaceBeforeAssignmentOperators;
388ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose
389ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// \brief Indent width for line continuations.
390ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  unsigned ContinuationIndentWidth;
391ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose
392ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// \brief A regular expression that describes comments with special meaning,
393ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// which should not be split into lines or otherwise changed.
394ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  std::string CommentPragmas;
395ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose
396ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// \brief Disables formatting at all.
397ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  bool DisableFormat;
398ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose
399ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// \brief A vector of macros that should be interpreted as foreach loops
400ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// instead of as function calls.
401ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  ///
402ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// These are expected to be macros of the form:
40328f47b92e760ccf641ac91cb0fe1c12d9ca89795Ted Kremenek  /// \code
404ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// FOREACH(<variable-declaration>, ...)
405ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  ///   <loop-body>
406ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// \endcode
407ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  ///
408ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  /// For example: BOOST_FOREACH.
409ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  std::vector<std::string> ForEachMacros;
410ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose
411ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose  bool operator==(const FormatStyle &R) const {
412ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose    return AccessModifierOffset == R.AccessModifierOffset &&
413ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose           AlignAfterOpenBracket == R.AlignAfterOpenBracket &&
414ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose           AlignOperands == R.AlignOperands &&
415ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose           AlignEscapedNewlinesLeft == R.AlignEscapedNewlinesLeft &&
416ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose           AlignTrailingComments == R.AlignTrailingComments &&
417ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose           AllowAllParametersOfDeclarationOnNextLine ==
418ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose               R.AllowAllParametersOfDeclarationOnNextLine &&
419ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose           AllowShortFunctionsOnASingleLine ==
420ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose               R.AllowShortFunctionsOnASingleLine &&
421ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose           AllowShortBlocksOnASingleLine == R.AllowShortBlocksOnASingleLine &&
422ba0f61cf5363f80e3241dc754235dfb246afe320Jordy Rose           AllowShortIfStatementsOnASingleLine ==
4239beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek               R.AllowShortIfStatementsOnASingleLine &&
4249beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek           AllowShortLoopsOnASingleLine == R.AllowShortLoopsOnASingleLine &&
4259beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek           AlwaysBreakAfterDefinitionReturnType ==
4269beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek               R.AlwaysBreakAfterDefinitionReturnType &&
4279beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek           AlwaysBreakTemplateDeclarations ==
4281eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump               R.AlwaysBreakTemplateDeclarations &&
4294502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek           AlwaysBreakBeforeMultilineStrings ==
4301eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump               R.AlwaysBreakBeforeMultilineStrings &&
4319beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek           BinPackParameters == R.BinPackParameters &&
4321eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump           BinPackArguments == R.BinPackArguments &&
433dd28d00a2f5cc10b0ccf3705adcf4d8a62ecc8aaTed Kremenek           BreakBeforeBinaryOperators == R.BreakBeforeBinaryOperators &&
434dd28d00a2f5cc10b0ccf3705adcf4d8a62ecc8aaTed Kremenek           BreakBeforeTernaryOperators == R.BreakBeforeTernaryOperators &&
4351eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump           BreakBeforeBraces == R.BreakBeforeBraces &&
436dd28d00a2f5cc10b0ccf3705adcf4d8a62ecc8aaTed Kremenek           BreakConstructorInitializersBeforeComma ==
4371eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump               R.BreakConstructorInitializersBeforeComma &&
4389beefec2a9f5d34ab70fef06515c7987cb041f07Ted Kremenek           ColumnLimit == R.ColumnLimit &&
439ec751c48bc904ec42bc3ce93a198b14a46dc8e01Ted Kremenek           ConstructorInitializerAllOnOneLineOrOnePerLine ==
44053ba0b636194dbeaa65a6f85316c9397a0c5298bTed Kremenek               R.ConstructorInitializerAllOnOneLineOrOnePerLine &&
4414502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek           ConstructorInitializerIndentWidth ==
4424502195fecf399fdbbb9ee2393ad08148c394179Ted Kremenek               R.ConstructorInitializerIndentWidth &&
443           DerivePointerAlignment == R.DerivePointerAlignment &&
444           ExperimentalAutoDetectBinPacking ==
445               R.ExperimentalAutoDetectBinPacking &&
446           IndentCaseLabels == R.IndentCaseLabels &&
447           IndentWrappedFunctionNames == R.IndentWrappedFunctionNames &&
448           IndentWidth == R.IndentWidth && Language == R.Language &&
449           MaxEmptyLinesToKeep == R.MaxEmptyLinesToKeep &&
450           KeepEmptyLinesAtTheStartOfBlocks ==
451               R.KeepEmptyLinesAtTheStartOfBlocks &&
452           NamespaceIndentation == R.NamespaceIndentation &&
453           ObjCBlockIndentWidth == R.ObjCBlockIndentWidth &&
454           ObjCSpaceAfterProperty == R.ObjCSpaceAfterProperty &&
455           ObjCSpaceBeforeProtocolList == R.ObjCSpaceBeforeProtocolList &&
456           PenaltyBreakComment == R.PenaltyBreakComment &&
457           PenaltyBreakFirstLessLess == R.PenaltyBreakFirstLessLess &&
458           PenaltyBreakString == R.PenaltyBreakString &&
459           PenaltyExcessCharacter == R.PenaltyExcessCharacter &&
460           PenaltyReturnTypeOnItsOwnLine == R.PenaltyReturnTypeOnItsOwnLine &&
461           PointerAlignment == R.PointerAlignment &&
462           SpacesBeforeTrailingComments == R.SpacesBeforeTrailingComments &&
463           Cpp11BracedListStyle == R.Cpp11BracedListStyle &&
464           Standard == R.Standard && TabWidth == R.TabWidth &&
465           UseTab == R.UseTab && SpacesInParentheses == R.SpacesInParentheses &&
466           SpacesInSquareBrackets == R.SpacesInSquareBrackets &&
467           SpacesInAngles == R.SpacesInAngles &&
468           SpaceInEmptyParentheses == R.SpaceInEmptyParentheses &&
469           SpacesInContainerLiterals == R.SpacesInContainerLiterals &&
470           SpacesInCStyleCastParentheses == R.SpacesInCStyleCastParentheses &&
471           SpaceAfterCStyleCast == R.SpaceAfterCStyleCast &&
472           SpaceBeforeParens == R.SpaceBeforeParens &&
473           SpaceBeforeAssignmentOperators == R.SpaceBeforeAssignmentOperators &&
474           ContinuationIndentWidth == R.ContinuationIndentWidth &&
475           CommentPragmas == R.CommentPragmas &&
476           ForEachMacros == R.ForEachMacros;
477  }
478};
479
480/// \brief Returns a format style complying with the LLVM coding standards:
481/// http://llvm.org/docs/CodingStandards.html.
482FormatStyle getLLVMStyle();
483
484/// \brief Returns a format style complying with one of Google's style guides:
485/// http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml.
486/// http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml.
487/// https://developers.google.com/protocol-buffers/docs/style.
488FormatStyle getGoogleStyle(FormatStyle::LanguageKind Language);
489
490/// \brief Returns a format style complying with Chromium's style guide:
491/// http://www.chromium.org/developers/coding-style.
492FormatStyle getChromiumStyle(FormatStyle::LanguageKind Language);
493
494/// \brief Returns a format style complying with Mozilla's style guide:
495/// https://developer.mozilla.org/en-US/docs/Developer_Guide/Coding_Style.
496FormatStyle getMozillaStyle();
497
498/// \brief Returns a format style complying with Webkit's style guide:
499/// http://www.webkit.org/coding/coding-style.html
500FormatStyle getWebKitStyle();
501
502/// \brief Returns a format style complying with GNU Coding Standards:
503/// http://www.gnu.org/prep/standards/standards.html
504FormatStyle getGNUStyle();
505
506/// \brief Returns style indicating formatting should be not applied at all.
507FormatStyle getNoStyle();
508
509/// \brief Gets a predefined style for the specified language by name.
510///
511/// Currently supported names: LLVM, Google, Chromium, Mozilla. Names are
512/// compared case-insensitively.
513///
514/// Returns \c true if the Style has been set.
515bool getPredefinedStyle(StringRef Name, FormatStyle::LanguageKind Language,
516                        FormatStyle *Style);
517
518/// \brief Parse configuration from YAML-formatted text.
519///
520/// Style->Language is used to get the base style, if the \c BasedOnStyle
521/// option is present.
522///
523/// When \c BasedOnStyle is not present, options not present in the YAML
524/// document, are retained in \p Style.
525std::error_code parseConfiguration(StringRef Text, FormatStyle *Style);
526
527/// \brief Gets configuration in a YAML string.
528std::string configurationAsText(const FormatStyle &Style);
529
530/// \brief Reformats the given \p Ranges in the token stream coming out of
531/// \c Lex.
532///
533/// DEPRECATED: Do not use.
534tooling::Replacements reformat(const FormatStyle &Style, Lexer &Lex,
535                               SourceManager &SourceMgr,
536                               ArrayRef<CharSourceRange> Ranges);
537
538/// \brief Reformats the given \p Ranges in the file \p ID.
539///
540/// Each range is extended on either end to its next bigger logic unit, i.e.
541/// everything that might influence its formatting or might be influenced by its
542/// formatting.
543///
544/// Returns the \c Replacements necessary to make all \p Ranges comply with
545/// \p Style.
546tooling::Replacements reformat(const FormatStyle &Style,
547                               SourceManager &SourceMgr, FileID ID,
548                               ArrayRef<CharSourceRange> Ranges);
549
550/// \brief Reformats the given \p Ranges in \p Code.
551///
552/// Otherwise identical to the reformat() function consuming a \c Lexer.
553tooling::Replacements reformat(const FormatStyle &Style, StringRef Code,
554                               ArrayRef<tooling::Range> Ranges,
555                               StringRef FileName = "<stdin>");
556
557/// \brief Returns the \c LangOpts that the formatter expects you to set.
558///
559/// \param Style determines specific settings for lexing mode.
560LangOptions getFormattingLangOpts(const FormatStyle &Style = getLLVMStyle());
561
562/// \brief Description to be used for help text for a llvm::cl option for
563/// specifying format style. The description is closely related to the operation
564/// of getStyle().
565extern const char *StyleOptionHelpDescription;
566
567/// \brief Construct a FormatStyle based on \c StyleName.
568///
569/// \c StyleName can take several forms:
570/// \li "{<key>: <value>, ...}" - Set specic style parameters.
571/// \li "<style name>" - One of the style names supported by
572/// getPredefinedStyle().
573/// \li "file" - Load style configuration from a file called '.clang-format'
574/// located in one of the parent directories of \c FileName or the current
575/// directory if \c FileName is empty.
576///
577/// \param[in] StyleName Style name to interpret according to the description
578/// above.
579/// \param[in] FileName Path to start search for .clang-format if \c StyleName
580/// == "file".
581/// \param[in] FallbackStyle The name of a predefined style used to fallback to
582/// in case the style can't be determined from \p StyleName.
583///
584/// \returns FormatStyle as specified by \c StyleName. If no style could be
585/// determined, the default is LLVM Style (see getLLVMStyle()).
586FormatStyle getStyle(StringRef StyleName, StringRef FileName,
587                     StringRef FallbackStyle);
588
589} // end namespace format
590} // end namespace clang
591
592namespace std {
593template <>
594struct is_error_code_enum<clang::format::ParseError> : std::true_type {};
595}
596
597#endif // LLVM_CLANG_FORMAT_FORMAT_H
598