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