===========
ClangFormat
===========

`ClangFormat` describes a set of tools that are built on top of
:doc:`LibFormat`. It can support your workflow in a variety of ways including a
standalone tool and editor integrations.


Standalone Tool
===============

:program:`clang-format` is located in `clang/tools/clang-format` and can be used
to format C/C++/Java/JavaScript/JSON/Objective-C/Protobuf/C# code.

.. code-block:: console

  $ clang-format -help
  OVERVIEW: A tool to format C/C++/Java/JavaScript/JSON/Objective-C/Protobuf/C# code.

  If no arguments are specified, it formats the code from standard input
  and writes the result to the standard output.
  If <file>s are given, it reformats the files. If -i is specified
  together with <file>s, the files are edited in-place. Otherwise, the
  result is written to the standard output.

  USAGE: clang-format [options] [<file> ...]

  OPTIONS:

  Clang-format options:

    --Werror                   - If set, changes formatting warnings to errors
    --Wno-error=<value>        - If set don't error out on the specified warning type.
      =unknown                 -   If set, unknown format options are only warned about.
                                   This can be used to enable formatting, even if the
                                   configuration contains unknown (newer) options.
                                   Use with caution, as this might lead to dramatically
                                   differing format depending on an option being
                                   supported or not.
    --assume-filename=<string> - Override filename used to determine the language.
                                 When reading from stdin, clang-format assumes this
                                 filename to determine the language.
    --cursor=<uint>            - The position of the cursor when invoking
                                 clang-format from an editor integration
    --dry-run                  - If set, do not actually make the formatting changes
    --dump-config              - Dump configuration options to stdout and exit.
                                 Can be used with -style option.
    --fallback-style=<string>  - The name of the predefined style used as a
                                 fallback in case clang-format is invoked with
                                 -style=file, but can not find the .clang-format
                                 file to use.
                                 Use -fallback-style=none to skip formatting.
    --ferror-limit=<uint>      - Set the maximum number of clang-format errors to
                                 emit before stopping (0 = no limit). Used only
                                 with --dry-run or -n
    -i                         - Inplace edit <file>s, if specified.
    --length=<uint>            - Format a range of this length (in bytes).
                                 Multiple ranges can be formatted by specifying
                                 several -offset and -length pairs.
                                 When only a single -offset is specified without
                                 -length, clang-format will format up to the end
                                 of the file.
                                 Can only be used with one input file.
    --lines=<string>           - <start line>:<end line> - format a range of
                                 lines (both 1-based).
                                 Multiple ranges can be formatted by specifying
                                 several -lines arguments.
                                 Can't be used with -offset and -length.
                                 Can only be used with one input file.
    -n                         - Alias for --dry-run
    --offset=<uint>            - Format a range starting at this byte offset.
                                 Multiple ranges can be formatted by specifying
                                 several -offset and -length pairs.
                                 Can only be used with one input file.
    --output-replacements-xml  - Output replacements as XML.
    --sort-includes            - If set, overrides the include sorting behavior
                                 determined by the SortIncludes style flag
    --style=<string>           - Coding style, currently supports:
                                   LLVM, Google, Chromium, Mozilla, WebKit.
                                 Use -style=file to load style configuration from
                                 .clang-format file located in one of the parent
                                 directories of the source file (or current
                                 directory for stdin).
                                 Use -style=file:<format_file_path> to load style
                                 configuration from a format file located at
                                 <format_file_path>. This path can be absolute or
                                 relative to the working directory.
                                 Use -style="{key: value, ...}" to set specific
                                 parameters, e.g.:
                                   -style="{BasedOnStyle: llvm, IndentWidth: 8}"
    --verbose                  - If set, shows the list of processed files

  Generic Options:

    --help                     - Display available options (--help-hidden for more)
    --help-list                - Display list of available options (--help-list-hidden for more)
    --version                  - Display the version of this program


When the desired code formatting style is different from the available options,
the style can be customized using the ``-style="{key: value, ...}"`` option or
by putting your style configuration in the ``.clang-format`` or ``_clang-format``
file in your project's directory and using ``clang-format -style=file``.

An easy way to create the ``.clang-format`` file is:

.. code-block:: console

  clang-format -style=llvm -dump-config > .clang-format

Available style options are described in :doc:`ClangFormatStyleOptions`.


Vim Integration
===============

There is an integration for :program:`vim` which lets you run the
:program:`clang-format` standalone tool on your current buffer, optionally
selecting regions to reformat. The integration has the form of a `python`-file
which can be found under `clang/tools/clang-format/clang-format.py`.

This can be integrated by adding the following to your `.vimrc`:

.. code-block:: vim

  map <C-K> :pyf <path-to-this-file>/clang-format.py<cr>
  imap <C-K> <c-o>:pyf <path-to-this-file>/clang-format.py<cr>

The first line enables :program:`clang-format` for NORMAL and VISUAL mode, the
second line adds support for INSERT mode. Change "C-K" to another binding if
you need :program:`clang-format` on a different key (C-K stands for Ctrl+k).

With this integration you can press the bound key and clang-format will
format the current line in NORMAL and INSERT mode or the selected region in
VISUAL mode. The line or region is extended to the next bigger syntactic
entity.

It operates on the current, potentially unsaved buffer and does not create
or save any files. To revert a formatting, just undo.

An alternative option is to format changes when saving a file and thus to
have a zero-effort integration into the coding workflow. To do this, add this to
your `.vimrc`:

.. code-block:: vim

  function! Formatonsave()
    let l:formatdiff = 1
    pyf ~/llvm/tools/clang/tools/clang-format/clang-format.py
  endfunction
  autocmd BufWritePre *.h,*.cc,*.cpp call Formatonsave()


Emacs Integration
=================

Similar to the integration for :program:`vim`, there is an integration for
:program:`emacs`. It can be found at `clang/tools/clang-format/clang-format.el`
and used by adding this to your `.emacs`:

.. code-block:: common-lisp

  (load "<path-to-clang>/tools/clang-format/clang-format.el")
  (global-set-key [C-M-tab] 'clang-format-region)

This binds the function `clang-format-region` to C-M-tab, which then formats the
current line or selected region.


BBEdit Integration
==================

:program:`clang-format` cannot be used as a text filter with BBEdit, but works
well via a script. The AppleScript to do this integration can be found at
`clang/tools/clang-format/clang-format-bbedit.applescript`; place a copy in
`~/Library/Application Support/BBEdit/Scripts`, and edit the path within it to
point to your local copy of :program:`clang-format`.

With this integration you can select the script from the Script menu and
:program:`clang-format` will format the selection. Note that you can rename the
menu item by renaming the script, and can assign the menu item a keyboard
shortcut in the BBEdit preferences, under Menus & Shortcuts.


CLion Integration
=================

:program:`clang-format` is integrated into `CLion <https://www.jetbrains
.com/clion/>`_ as an alternative code formatter. CLion turns it on
automatically when there is a ``.clang-format`` file under the project root.
Code style rules are applied as you type, including indentation,
auto-completion, code generation, and refactorings.

:program:`clang-format` can also be enabled without a ``.clang-format`` file.
In this case, CLion prompts you to create one based on the current IDE settings
or the default LLVM style.


Visual Studio Integration
=========================

Download the latest Visual Studio extension from the `alpha build site
<https://llvm.org/builds/>`_. The default key-binding is Ctrl-R,Ctrl-F.


Visual Studio Code Integration
==============================

Get the latest Visual Studio Code extension from the `Visual Studio Marketplace <https://marketplace.visualstudio.com/items?itemName=xaver.clang-format>`_. The default key-binding is Alt-Shift-F.


Script for patch reformatting
=============================

The python script `clang/tools/clang-format/clang-format-diff.py` parses the
output of a unified diff and reformats all contained lines with
:program:`clang-format`.

.. code-block:: console

  usage: clang-format-diff.py [-h] [-i] [-p NUM] [-regex PATTERN] [-style STYLE]

  Reformat changed lines in diff. Without -i option just output the diff that
  would be introduced.

  optional arguments:
    -h, --help      show this help message and exit
    -i              apply edits to files instead of displaying a diff
    -p NUM          strip the smallest prefix containing P slashes
    -regex PATTERN  custom pattern selecting file paths to reformat
    -style STYLE    formatting style to apply (LLVM, Google, Chromium, Mozilla,
                    WebKit)

So to reformat all the lines in the latest :program:`git` commit, just do:

.. code-block:: console

  git diff -U0 --no-color HEAD^ | clang-format-diff.py -i -p1

With Mercurial/:program:`hg`:

.. code-block:: console

  hg diff -U0 --color=never | clang-format-diff.py -i -p1

In an SVN client, you can do:

.. code-block:: console

  svn diff --diff-cmd=diff -x -U0 | clang-format-diff.py -i

The option `-U0` will create a diff without context lines (the script would format
those as well).

These commands use the file paths shown in the diff output
so they will only work from the root of the repository.

Current State of Clang Format for LLVM
======================================

The following table :doc:`ClangFormattedStatus` shows the current status of clang-formatting for the entire LLVM source tree.
