|  | ========= | 
|  | LibFormat | 
|  | ========= | 
|  |  | 
|  | LibFormat is a library that implements automatic source code formatting based | 
|  | on Clang. This documents describes the LibFormat interface and design as well | 
|  | as some basic style discussions. | 
|  |  | 
|  | If you just want to use `clang-format` as a tool or integrated into an editor, | 
|  | checkout :doc:`ClangFormat`. | 
|  |  | 
|  | Design | 
|  | ------ | 
|  |  | 
|  | FIXME: Write up design. | 
|  |  | 
|  |  | 
|  | Interface | 
|  | --------- | 
|  |  | 
|  | The core routine of LibFormat is ``reformat()``: | 
|  |  | 
|  | .. code-block:: c++ | 
|  |  | 
|  | tooling::Replacements reformat(const FormatStyle &Style, Lexer &Lex, | 
|  | SourceManager &SourceMgr, | 
|  | std::vector<CharSourceRange> Ranges); | 
|  |  | 
|  | This reads a token stream out of the lexer ``Lex`` and reformats all the code | 
|  | ranges in ``Ranges``. The ``FormatStyle`` controls basic decisions made during | 
|  | formatting. A list of options can be found under :ref:`style-options`. | 
|  |  | 
|  | The style options are described in :doc:`ClangFormatStyleOptions`. | 
|  |  | 
|  |  | 
|  | .. _style-options: | 
|  |  | 
|  | Style Options | 
|  | ------------- | 
|  |  | 
|  | The style options describe specific formatting options that can be used in | 
|  | order to make `ClangFormat` comply with different style guides. Currently, | 
|  | two style guides are hard-coded: | 
|  |  | 
|  | .. code-block:: c++ | 
|  |  | 
|  | /// \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(); | 
|  |  | 
|  | These options are also exposed in the :doc:`standalone tools <ClangFormat>` | 
|  | through the `-style` option. | 
|  |  | 
|  | In the future, we plan on making this configurable. |