diff options
author | dim <dim@FreeBSD.org> | 2013-04-08 18:45:10 +0000 |
---|---|---|
committer | dim <dim@FreeBSD.org> | 2013-04-08 18:45:10 +0000 |
commit | c72c57c9e9b69944e3e009cd5e209634839581d3 (patch) | |
tree | 4fc2f184c499d106f29a386c452b49e5197bf63d /include/clang/Format/Format.h | |
parent | 5b20025c30d23d521e12c1f33ec8fa6b821952cd (diff) | |
download | FreeBSD-src-c72c57c9e9b69944e3e009cd5e209634839581d3.zip FreeBSD-src-c72c57c9e9b69944e3e009cd5e209634839581d3.tar.gz |
Vendor import of clang trunk r178860:
http://llvm.org/svn/llvm-project/cfe/trunk@178860
Diffstat (limited to 'include/clang/Format/Format.h')
-rw-r--r-- | include/clang/Format/Format.h | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/include/clang/Format/Format.h b/include/clang/Format/Format.h new file mode 100644 index 0000000..d6cc114e --- /dev/null +++ b/include/clang/Format/Format.h @@ -0,0 +1,131 @@ +//===--- Format.h - Format C++ code -----------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +/// +/// \file +/// Various functions to configurably format source code. +/// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_CLANG_FORMAT_FORMAT_H +#define LLVM_CLANG_FORMAT_FORMAT_H + +#include "clang/Frontend/FrontendAction.h" +#include "clang/Tooling/Refactoring.h" + +namespace clang { + +class Lexer; +class SourceManager; +class DiagnosticConsumer; + +namespace format { + +/// \brief The \c FormatStyle is used to configure the formatting to follow +/// specific guidelines. +struct FormatStyle { + /// \brief The column limit. + unsigned ColumnLimit; + + /// \brief The penalty for each character outside of the column limit. + unsigned PenaltyExcessCharacter; + + /// \brief The maximum number of consecutive empty lines to keep. + unsigned MaxEmptyLinesToKeep; + + /// \brief Set whether & and * bind to the type as opposed to the variable. + bool PointerBindsToType; + + /// \brief If \c true, analyze the formatted file for the most common binding. + bool DerivePointerBinding; + + /// \brief The extra indent or outdent of access modifiers (e.g.: public:). + int AccessModifierOffset; + + enum LanguageStandard { + LS_Cpp03, + LS_Cpp11, + LS_Auto + }; + + /// \brief Format compatible with this standard, e.g. use \c A<A<int> > + /// instead of \c A<A<int>> for LS_Cpp03. + LanguageStandard Standard; + + /// \brief If \c true, analyze the formatted file for C++03 compatibility. + bool DeriveBackwardsCompatibility; + + /// \brief Indent case labels one level from the switch statement. + /// + /// When false, use the same indentation level as for the switch statement. + /// Switch statement body is always indented one level more than case labels. + bool IndentCaseLabels; + + /// \brief The number of spaces to before trailing line comments. + unsigned SpacesBeforeTrailingComments; + + /// \brief If false, a function call's or function definition's parameters + /// will either all be on the same line or will have one line each. + bool BinPackParameters; + + /// \brief Allow putting all parameters of a function declaration onto + /// the next line even if \c BinPackParameters is \c false. + bool AllowAllParametersOfDeclarationOnNextLine; + + /// \brief Penalty for putting the return type of a function onto its own + /// line. + unsigned PenaltyReturnTypeOnItsOwnLine; + + /// \brief If the constructor initializers don't fit on a line, put each + /// initializer on its own line. + bool ConstructorInitializerAllOnOneLineOrOnePerLine; + + /// \brief If true, "if (a) return;" can be put on a single line. + bool AllowShortIfStatementsOnASingleLine; + + /// \brief Add a space in front of an Objective-C protocol list, i.e. use + /// Foo <Protocol> instead of Foo<Protocol>. + bool ObjCSpaceBeforeProtocolList; +}; + +/// \brief Returns a format style complying with the LLVM coding standards: +/// http://llvm.org/docs/CodingStandards.html. +FormatStyle getLLVMStyle(); + +/// \brief Returns a format style complying with Google's C++ style guide: +/// http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml. +FormatStyle getGoogleStyle(); + +/// \brief Returns a format style complying with Chromium's style guide: +/// http://www.chromium.org/developers/coding-style. +FormatStyle getChromiumStyle(); + +/// \brief Reformats the given \p Ranges in the token stream coming out of +/// \c Lex. +/// +/// Each range is extended on either end to its next bigger logic unit, i.e. +/// everything that might influence its formatting or might be influenced by its +/// formatting. +/// +/// \param DiagClient A custom DiagnosticConsumer. Can be 0, in this case +/// diagnostic is output to llvm::errs(). +/// +/// Returns the \c Replacements necessary to make all \p Ranges comply with +/// \p Style. +tooling::Replacements reformat(const FormatStyle &Style, Lexer &Lex, + SourceManager &SourceMgr, + std::vector<CharSourceRange> Ranges, + DiagnosticConsumer *DiagClient = 0); + +/// \brief Returns the \c LangOpts that the formatter expects you to set. +LangOptions getFormattingLangOpts(); + +} // end namespace format +} // end namespace clang + +#endif // LLVM_CLANG_FORMAT_FORMAT_H |