blob: 2acffb67fcbeac3c76412687dad812211717fac9 [file] [log] [blame] [view]
andybons6eaa0c0d2015-08-26 20:12:521# Using clang-format on Chromium C++ Code
andybons3322f762015-08-24 21:37:092
andybons6eaa0c0d2015-08-26 20:12:523## Easiest usage, from the command line
andybons3322f762015-08-24 21:37:094
andybons6eaa0c0d2015-08-26 20:12:525To automatically format a pending patch according to
xiaoyin.l1003c0b2016-12-06 02:51:176[Chromium style](https://www.chromium.org/developers/coding-style), from
andybons6eaa0c0d2015-08-26 20:12:527the command line, simply run: ``` git cl format ``` This should work on all
8platforms _(yes, even Windows)_ without any set up or configuration: the tool
9comes with your checkout. Like other `git-cl` commands, this operates on a diff
10relative to the upstream branch. Only the lines that you've already touched in
11your patch will be reformatted. You can commit your changes to your git branch
12and then run `git cl format`, after which `git diff` will show you what
13clang-format changed. Alternatively, you can run `git cl format` with your
14changes uncommitted, and then commit your now-formatted code.
andybons3322f762015-08-24 21:37:0915
andybons6eaa0c0d2015-08-26 20:12:5216## Editor integrations
andybons3322f762015-08-24 21:37:0917
andybons6eaa0c0d2015-08-26 20:12:5218Many developers find it useful to integrate the clang-format tool with their
19editor of choice. As a convenience, the scripts for this are also available in
20your checkout of Chrome under
21[src/buildtools/clang_format/script/](https://code.google.com/p/chromium/codesearch#chromium/src/buildtools/clang_format/script/).
andybons3322f762015-08-24 21:37:0922
andybons6eaa0c0d2015-08-26 20:12:5223If you use an editor integration, you should try to make sure that you're using
24the version of clang-format that comes with your checkout. That way, you'll
25automatically get updates and be running a tool that formats consistently with
26other developers. The binary lives under `src/buildtools`, but it's also in your
27path indirectly via a `depot_tools` launcher script:
28[clang-format](https://code.google.com/p/chromium/codesearch#chromium/tools/depot_tools/clang-format)
29([clang-format.bat](https://code.google.com/p/chromium/codesearch#chromium/tools/depot_tools/clang-format.bat) on Windows). Assuming that `depot_tools` is in your editor's `PATH`
30and the editor command runs from a working directory inside the Chromium
31checkout, the editor scripts (which anticipate clang-format on the path) should
32work.
andybons3322f762015-08-24 21:37:0933
34For further guidance on editor integration, see these specific pages:
andybons3322f762015-08-24 21:37:0935
xiaoyin.l1003c0b2016-12-06 02:51:1736* [Sublime Text](https://www.chromium.org/developers/sublime-text#TOC-Format-selection-or-area-around-cursor-using-clang-format)
andybons6eaa0c0d2015-08-26 20:12:5237* [llvm's guidelines for vim, emacs, and bbedit](http://clang.llvm.org/docs/ClangFormat.html)
38* For vim, `:so tools/vim/clang-format.vim` and then hit cmd-shift-i (mac)
39 ctrl-shift-i (elsewhere) to indent the current line or current selection.
andybons3322f762015-08-24 21:37:0940
andybons6eaa0c0d2015-08-26 20:12:5241## Are robots taking over my freedom to choose where newlines go?
andybons3322f762015-08-24 21:37:0942
andybons6eaa0c0d2015-08-26 20:12:5243No. For the project as a whole, using clang-format is just one optional way to
44format your code. While it will produce style-guide conformant code, other
45formattings would also satisfy the style guide, and all are okay.
andybons3322f762015-08-24 21:37:0946
andybons6eaa0c0d2015-08-26 20:12:5247Having said that, many clang-format converts have found that relying on a tool
48saves both them and their reviewers time. The saved time can then be used to
49discover functional defects in their patch, to address style/readability
50concerns whose resolution can't be automated, or to do something else that
51matters.
andybons3322f762015-08-24 21:37:0952
andybons6eaa0c0d2015-08-26 20:12:5253In directories where most contributors have already adopted clang-format, and
54code is already consistent with what clang-format would produce, some teams
55intend to experiment with standardizing on clang-format. When these local
56standards apply, it will be enforced by a PRESUBMIT.py check.
andybons3322f762015-08-24 21:37:0957
andybons6eaa0c0d2015-08-26 20:12:5258## Reporting problems
59
60If clang-format is broken, or produces badly formatted code, please file a
61[bug]. Assign it to thakis@chromium.org or nick@chromium.org who will route it
62upstream.
63
64[bug]:
65https://code.google.com/p/chromium/issues/entry?comment=clang-format%20produced%20code%20that%20(choose%20all%20that%20apply):%20%0A-%20Doesn%27t%20match%20Chromium%20style%0A-%20Doesn%27t%20match%20blink%20style%0A-%20Riles%20my%20finely%20honed%20stylistic%20dander%0A-%20No%20sane%20human%20would%20ever%20choose%0A%0AHere%27s%20the%20code%20before%20formatting:%0A%0A%0AHere%27s%20the%20code%20after%20formatting:%0A%0A%0AHere%27s%20how%20it%20ought%20to%20look:%0A%0A%0ACode%20review%20link%20for%20full%20files/context:&summary=clang-format%20quality%20problem&[email protected],%[email protected]&labels=Type-Bug,Build-Tools,OS-?