blob: 19ef0c21afb32d60378699abcaee8c3e387eec1e [file] [log] [blame]
Bill Wendling7d623452015-03-18 13:36:07 -07001====
2YAPF
3====
4
Bill Wendling19c44d02015-04-07 23:48:05 -07005.. image:: https://badge.fury.io/py/yapf.svg
Ronald Eddy Jr808d7d22017-12-25 22:38:41 -08006 :target: https://badge.fury.io/py/yapf
Bill Wendling19c44d02015-04-07 23:48:05 -07007 :alt: PyPI version
8
Bill Wendlingfb8ab382015-03-18 20:24:14 -07009.. image:: https://travis-ci.org/google/yapf.svg?branch=master
10 :target: https://travis-ci.org/google/yapf
11 :alt: Build status
12
Bill Wendling14ac8812015-04-05 02:47:32 -070013.. image:: https://coveralls.io/repos/google/yapf/badge.svg?branch=master
14 :target: https://coveralls.io/r/google/yapf?branch=master
15 :alt: Coverage status
16
Bill Wendlingf09121c2015-10-20 22:59:33 -070017
Bill Wendling7d623452015-03-18 13:36:07 -070018Introduction
19============
20
Bill Wendling5632e672015-03-29 17:06:07 -070021Most of the current formatters for Python --- e.g., autopep8, and pep8ify ---
22are made to remove lint errors from code. This has some obvious limitations.
23For instance, code that conforms to the PEP 8 guidelines may not be
24reformatted. But it doesn't mean that the code looks good.
Bill Wendling7d623452015-03-18 13:36:07 -070025
26YAPF takes a different approach. It's based off of 'clang-format', developed by
27Daniel Jasper. In essence, the algorithm takes the code and reformats it to the
28best formatting that conforms to the style guide, even if the original code
Peter Bengtsson1c60ad72015-03-24 20:05:39 -070029didn't violate the style guide. The idea is also similar to the 'gofmt' tool for
Eli Bendersky07072f82015-03-23 06:41:14 -070030the Go programming language: end all holy wars about formatting - if the whole
Samuel Dion-Girardeau5ae63492016-09-08 21:01:20 -040031codebase of a project is simply piped through YAPF whenever modifications are
Eli Bendersky07072f82015-03-23 06:41:14 -070032made, the style remains consistent throughout the project and there's no point
33arguing about style in every code review.
Bill Wendling7d623452015-03-18 13:36:07 -070034
35The ultimate goal is that the code YAPF produces is as good as the code that a
Bill Wendling8fb9c482015-03-29 17:32:07 -070036programmer would write if they were following the style guide. It takes away
37some of the drudgery of maintaining your code.
Bill Wendling7d623452015-03-18 13:36:07 -070038
José Padilla45aea8e2018-01-16 12:26:33 -050039Try out YAPF with this `online demo <https://yapf.now.sh>`_.
José Padilla2774c1b2017-12-19 16:59:52 -050040
Bill Wendlingf5e50b62015-03-28 23:38:12 -070041.. footer::
Bill Wendling52e04112015-03-18 20:42:26 -070042
43 YAPF is not an official Google product (experimental or otherwise), it is
44 just code that happens to be owned by Google.
45
Bill Wendling7d623452015-03-18 13:36:07 -070046.. contents::
47
Bill Wendlingf09121c2015-10-20 22:59:33 -070048
Bill Wendling7d623452015-03-18 13:36:07 -070049Installation
50============
51
Bill Wendling6e8ca7b2015-10-25 01:16:43 -070052To install YAPF from PyPI:
53
Bill Wendlinga907b4f2018-05-21 23:50:24 -070054.. code-block:: shell
Eli Bendersky8a365362015-03-25 18:42:22 -070055
Eli Benderskye0e83c12015-04-06 20:23:30 -070056 $ pip install yapf
57
Diogo de Campos2f246c02016-10-06 14:04:38 +020058(optional) If you are using Python 2.7 and want to enable multiprocessing:
59
Bill Wendlinga907b4f2018-05-21 23:50:24 -070060.. code-block:: shell
Diogo de Campos2f246c02016-10-06 14:04:38 +020061
62 $ pip install futures
63
Eli Benderskye0e83c12015-04-06 20:23:30 -070064YAPF is still considered in "alpha" stage, and the released version may change
65often; therefore, the best way to keep up-to-date with the latest development
66is to clone this repository.
67
68Note that if you intend to use YAPF as a command-line tool rather than as a
69library, installation is not necessary. YAPF supports being run as a directory
70by the Python interpreter. If you cloned/unzipped YAPF into ``DIR``, it's
Bill Wendling6e8ca7b2015-10-25 01:16:43 -070071possible to run:
72
Bill Wendlinga907b4f2018-05-21 23:50:24 -070073.. code-block:: shell
Eli Bendersky07072f82015-03-23 06:41:14 -070074
Eli Benderskyb3678b32015-03-25 14:16:11 -070075 $ PYTHONPATH=DIR python DIR/yapf [options] ...
Eli Bendersky07072f82015-03-23 06:41:14 -070076
Bill Wendlingf09121c2015-10-20 22:59:33 -070077
Eli Bendersky5eb88232015-03-27 06:27:11 -070078Python versions
79===============
80
Bill Wendlingfe6460f2018-01-26 15:08:07 -080081YAPF supports Python 2.7 and 3.6.4+. (Note that some Python 3 features may fail
82to parse with Python versions before 3.6.4.)
Eli Bendersky5eb88232015-03-27 06:27:11 -070083
84YAPF requires the code it formats to be valid Python for the version YAPF itself
85runs under. Therefore, if you format Python 3 code with YAPF, run YAPF itself
86under Python 3 (and similarly for Python 2).
87
Bill Wendlingf09121c2015-10-20 22:59:33 -070088
Bill Wendling7d623452015-03-18 13:36:07 -070089Usage
90=====
91
Bill Wendlingfa22c892015-03-18 13:42:25 -070092Options::
Bill Wendling7d623452015-03-18 13:36:07 -070093
Bill Wendlingf09121c2015-10-20 22:59:33 -070094 usage: yapf [-h] [-v] [-d | -i] [-r | -l START-END] [-e PATTERN]
Diogo de Campos2f246c02016-10-06 14:04:38 +020095 [--style STYLE] [--style-help] [--no-local-style] [-p]
Bill Wendling7bfc0a92017-10-16 03:22:19 -070096 [-vv]
Bill Wendlingf09121c2015-10-20 22:59:33 -070097 [files [files ...]]
Bill Wendling7d623452015-03-18 13:36:07 -070098
Bill Wendlingfa22c892015-03-18 13:42:25 -070099 Formatter for Python code.
Bill Wendling7d623452015-03-18 13:36:07 -0700100
Bill Wendlingfa22c892015-03-18 13:42:25 -0700101 positional arguments:
102 files
103
104 optional arguments:
105 -h, --help show this help message and exit
Bill Wendlingf09121c2015-10-20 22:59:33 -0700106 -v, --version show version number and exit
107 -d, --diff print the diff for the fixed source
108 -i, --in-place make changes to files in place
109 -r, --recursive run recursively over directories
110 -l START-END, --lines START-END
111 range of lines to reformat, one-based
112 -e PATTERN, --exclude PATTERN
113 patterns for files to exclude from formatting
Eli Bendersky83d2bd02015-03-23 06:33:48 -0700114 --style STYLE specify formatting style: either a style name (for
115 example "pep8" or "google"), or the name of a file
Sam Clegg5170c3a2015-04-16 12:18:58 -0700116 with style settings. The default is pep8 unless a
Peter Ludemann827260c2017-12-20 19:54:27 -0800117 .style.yapf or setup.cfg file located in the same
118 directory as the source or one of its parent
119 directories (for stdin, the current directory is
120 used).
Bill Wendling7bfc0a92017-10-16 03:22:19 -0700121 --style-help show style settings and exit; this output can be saved
122 to .style.yapf to make your settings permanent
123 --no-local-style don't search for local style definition
Diogo de Campos2f246c02016-10-06 14:04:38 +0200124 -p, --parallel Run yapf in parallel when formatting multiple files.
125 Requires concurrent.futures in Python 2.X
Bill Wendling7bfc0a92017-10-16 03:22:19 -0700126 -vv, --verbose Print out file names while processing
Bill Wendlingf09121c2015-10-20 22:59:33 -0700127
Bill Wendling7d623452015-03-18 13:36:07 -0700128
Mike Stipicevice1766282018-04-16 17:09:38 +0200129------------
130Return Codes
131------------
132
133Normally YAPF returns zero on successful program termination and non-zero otherwise.
134
135If ``--diff`` is supplied, YAPF returns zero when no changes were necessary, non-zero
136otherwise (including program error). You can use this in a CI workflow to test that code
137has been YAPF-formatted.
138
139
Eli Bendersky83d2bd02015-03-23 06:33:48 -0700140Formatting style
Bill Wendlingf5e50b62015-03-28 23:38:12 -0700141================
Eli Bendersky83d2bd02015-03-23 06:33:48 -0700142
143The formatting style used by YAPF is configurable and there are many "knobs"
144that can be used to tune how YAPF does formatting. See the ``style.py`` module
145for the full list.
146
Bill Wendlingc0167792015-04-02 01:58:39 -0700147To control the style, run YAPF with the ``--style`` argument. It accepts one of
148the predefined styles (e.g., ``pep8`` or ``google``), a path to a configuration
149file that specifies the desired style, or a dictionary of key/value pairs.
150
151The config file is a simple listing of (case-insensitive) ``key = value`` pairs
Bill Wendling6e8ca7b2015-10-25 01:16:43 -0700152with a ``[style]`` heading. For example:
153
Bill Wendlinga907b4f2018-05-21 23:50:24 -0700154.. code-block:: ini
Eli Bendersky83d2bd02015-03-23 06:33:48 -0700155
156 [style]
157 based_on_style = pep8
158 spaces_before_comment = 4
159 split_before_logical_operator = true
160
161The ``based_on_style`` setting determines which of the predefined styles this
162custom style is based on (think of it like subclassing).
Bill Wendling7d623452015-03-18 13:36:07 -0700163
Bill Wendlingc0167792015-04-02 01:58:39 -0700164It's also possible to do the same on the command line with a dictionary. For
Bill Wendling6e8ca7b2015-10-25 01:16:43 -0700165example:
166
Bill Wendlinga907b4f2018-05-21 23:50:24 -0700167.. code-block:: shell
Bill Wendlingc0167792015-04-02 01:58:39 -0700168
Bill Wendlingf09121c2015-10-20 22:59:33 -0700169 --style='{based_on_style: chromium, indent_width: 4}'
Bill Wendlingc0167792015-04-02 01:58:39 -0700170
Bill Wendlingf09121c2015-10-20 22:59:33 -0700171This will take the ``chromium`` base style and modify it to have four space
Bill Wendlingc0167792015-04-02 01:58:39 -0700172indentations.
173
Bill Wendling169790e2015-10-25 03:13:13 -0700174YAPF will search for the formatting style in the following manner:
175
1761. Specified on the command line
Joshua Moravecd8d15af2015-11-05 13:16:46 -06001772. In the `[style]` section of a `.style.yapf` file in either the current
Bill Wendling169790e2015-10-25 03:13:13 -0700178 directory or one of its parent directories.
Bill Wendling821a36f2016-07-13 23:02:16 -07001793. In the `[yapf]` section of a `setup.cfg` file in either the current
Bill Wendling169790e2015-10-25 03:13:13 -0700180 directory or one of its parent directories.
1814. In the `~/.config/yapf/style` file in your home directory.
182
183If none of those files are found, the default style is used (PEP8).
184
Bill Wendlingf09121c2015-10-20 22:59:33 -0700185
Bill Wendlingf5e50b62015-03-28 23:38:12 -0700186Example
187=======
188
Sam Clegg4357fa32015-04-08 12:21:46 -0700189An example of the type of formatting that YAPF can do, it will take this ugly
190code:
Bill Wendlingf5e50b62015-03-28 23:38:12 -0700191
192.. code-block:: python
193
194 x = { 'a':37,'b':42,
195
196 'c':927}
197
198 y = 'hello ''world'
199 z = 'hello '+'world'
200 a = 'hello {}'.format('world')
201 class foo ( object ):
202 def f (self ):
203 return 37*-+2
204 def g(self, x,y=42):
205 return y
206 def f ( a ) :
207 return 37+-+a[42-x : y**3]
208
Bill Wendling8fb9c482015-03-29 17:32:07 -0700209and reformat it into:
Bill Wendlingf5e50b62015-03-28 23:38:12 -0700210
211.. code-block:: python
212
213 x = {'a': 37, 'b': 42, 'c': 927}
214
215 y = 'hello ' 'world'
216 z = 'hello ' + 'world'
217 a = 'hello {}'.format('world')
218
219
220 class foo(object):
Bill Wendling5632e672015-03-29 17:06:07 -0700221 def f(self):
222 return 37 * -+2
Bill Wendlingf5e50b62015-03-28 23:38:12 -0700223
Bill Wendling5632e672015-03-29 17:06:07 -0700224 def g(self, x, y=42):
225 return y
Bill Wendlingf5e50b62015-03-28 23:38:12 -0700226
227
228 def f(a):
Bill Wendling8d8f5122015-10-16 11:46:23 -0700229 return 37 + -+a[42 - x:y**3]
Bill Wendlingf5e50b62015-03-28 23:38:12 -0700230
Bill Wendlingf09121c2015-10-20 22:59:33 -0700231
Andy Haydena00a6bf2015-06-15 18:47:41 -0700232Example as a module
233===================
234
Andy Hayden4af71682015-06-17 15:42:43 -0700235The two main APIs for calling yapf are ``FormatCode`` and ``FormatFile``, these
236share several arguments which are described below:
Andy Haydena00a6bf2015-06-15 18:47:41 -0700237
238.. code-block:: python
239
srinivasanramarajucfa7ead2017-02-14 00:06:58 -0800240 >>> from yapf.yapflib.yapf_api import FormatCode # reformat a string of code
Łukasz Langa94089872015-09-22 16:02:26 -0700241
Andy Haydena00a6bf2015-06-15 18:47:41 -0700242 >>> FormatCode("f ( a = 1, b = 2 )")
243 'f(a=1, b=2)\n'
244
Andy Hayden4af71682015-06-17 15:42:43 -0700245A ``style_config`` argument: Either a style name or a path to a file that contains
Andy Haydena00a6bf2015-06-15 18:47:41 -0700246formatting style settings. If None is specified, use the default style
247as set in ``style.DEFAULT_STYLE_FACTORY``.
248
249.. code-block:: python
250
251 >>> FormatCode("def g():\n return True", style_config='pep8')
252 'def g():\n return True\n'
253
Andy Haydena00a6bf2015-06-15 18:47:41 -0700254A ``lines`` argument: A list of tuples of lines (ints), [start, end],
255that we want to format. The lines are 1-based indexed. It can be used by
256third-party code (e.g., IDEs) when reformatting a snippet of code rather
257than a whole file.
258
259.. code-block:: python
260
261 >>> FormatCode("def g( ):\n a=1\n b = 2\n return a==b", lines=[(1, 1), (2, 3)])
262 'def g():\n a = 1\n b = 2\n return a==b\n'
263
264A ``print_diff`` (bool): Instead of returning the reformatted source, return a
265diff that turns the formatted source into reformatter source.
266
267.. code-block:: python
268
269 >>> print(FormatCode("a==b", filename="foo.py", print_diff=True))
Bill Wendlingb8645ea2015-06-30 22:27:56 -0700270 --- foo.py (original)
271 +++ foo.py (reformatted)
Andy Haydena00a6bf2015-06-15 18:47:41 -0700272 @@ -1 +1 @@
273 -a==b
274 +a == b
275
Andy Hayden4af71682015-06-17 15:42:43 -0700276Note: the ``filename`` argument for ``FormatCode`` is what is inserted into
277the diff, the default is ``<unknown>``.
Andy Haydena00a6bf2015-06-15 18:47:41 -0700278
279``FormatFile`` returns reformatted code from the passed file along with its encoding:
280
281.. code-block:: python
282
srinivasanramarajucfa7ead2017-02-14 00:06:58 -0800283 >>> from yapf.yapflib.yapf_api import FormatFile # reformat a file
Andy Hayden4af71682015-06-17 15:42:43 -0700284
Andy Haydena00a6bf2015-06-15 18:47:41 -0700285 >>> print(open("foo.py").read()) # contents of file
286 a==b
287
288 >>> FormatFile("foo.py")
Andy Hayden4af71682015-06-17 15:42:43 -0700289 ('a == b\n', 'utf-8')
290
Bill Wendlingcfbb1242015-09-20 12:08:18 -0700291The ``in-place`` argument saves the reformatted code back to the file:
Andy Hayden4af71682015-06-17 15:42:43 -0700292
293.. code-block:: python
294
295 >>> FormatFile("foo.py", in_place=True)
296 (None, 'utf-8')
297
298 >>> print(open("foo.py").read()) # contents of file (now fixed)
299 a == b
300
Andy Haydena00a6bf2015-06-15 18:47:41 -0700301
Bill Wendlingf09121c2015-10-20 22:59:33 -0700302Knobs
303=====
304
305``ALIGN_CLOSING_BRACKET_WITH_VISUAL_INDENT``
306 Align closing bracket with visual indentation.
307
Bill Wendling996c3ee2016-05-25 23:52:24 -0700308``ALLOW_MULTILINE_LAMBDAS``
309 Allow lambdas to be formatted on more than one line.
310
Bill Wendling8d321362017-02-05 18:29:26 -0800311``ALLOW_MULTILINE_DICTIONARY_KEYS``
312 Allow dictionary keys to exist on multiple lines. For example:
313
314 .. code-block:: python
315
316 x = {
317 ('this is the first element of a tuple',
318 'this is the second element of a tuple'):
319 value,
320 }
321
Bill Wendling8a3b71f2017-08-26 02:34:03 -0700322``ALLOW_SPLIT_BEFORE_DICT_VALUE``
323 Allow splits before the dictionary value.
324
Bill Wendlingf09121c2015-10-20 22:59:33 -0700325``BLANK_LINE_BEFORE_NESTED_CLASS_OR_DEF``
Bill Wendlingc2a9e0d2016-05-24 20:51:04 -0700326 Insert a blank line before a ``def`` or ``class`` immediately nested within
Bill Wendling996c3ee2016-05-25 23:52:24 -0700327 another ``def`` or ``class``. For example:
Bill Wendlingf09121c2015-10-20 22:59:33 -0700328
Bill Wendlingc2a9e0d2016-05-24 20:51:04 -0700329 .. code-block:: python
Bill Wendlingf09121c2015-10-20 22:59:33 -0700330
331 class Foo:
332 # <------ this blank line
333 def method():
334 pass
335
Dan Porter61d88092018-03-22 12:52:16 +0000336``BLANK_LINE_BEFORE_MODULE_DOCSTRING``
337 Insert a blank line before a module docstring.
338
Bill Wendling9f497522017-02-04 04:39:47 -0800339``BLANK_LINE_BEFORE_CLASS_DOCSTRING``
340 Insert a blank line before a class-level docstring.
341
Markus Gerstelc0d32682018-02-14 17:07:35 +0000342``BLANK_LINES_AROUND_TOP_LEVEL_DEFINITION``
343 Sets the number of desired blank lines surrounding top-level function and
344 class definitions. For example:
345
346 .. code-block:: python
347
348 class Foo:
349 pass
350 # <------ having two blank lines here
351 # <------ is the default setting
352 class Bar:
353 pass
354
Ben Plotnick7e088292016-06-09 18:29:56 -0700355``COALESCE_BRACKETS``
356 Do not split consecutive brackets. Only relevant when
357 ``DEDENT_CLOSING_BRACKETS`` is set. For example:
358
359 .. code-block:: python
360
361 call_func_that_takes_a_dict(
362 {
363 'key1': 'value1',
364 'key2': 'value2',
365 }
366 )
367
368 would reformat to:
369
370 .. code-block:: python
371
372 call_func_that_takes_a_dict({
373 'key1': 'value1',
374 'key2': 'value2',
375 })
376
377
Bill Wendlingf09121c2015-10-20 22:59:33 -0700378``COLUMN_LIMIT``
James Broadheadf4dd8042016-01-07 14:40:19 +0000379 The column limit (or max line-length)
Bill Wendlingf09121c2015-10-20 22:59:33 -0700380
Yinyin La56072f2018-03-05 02:04:34 +0800381``CONTINUATION_ALIGN_STYLE``
382 The style for continuation alignment. Possible values are:
383
384 - SPACE: Use spaces for continuation alignment. This is default behavior.
385 - FIXED: Use fixed number (CONTINUATION_INDENT_WIDTH) of columns
386 (ie: CONTINUATION_INDENT_WIDTH/INDENT_WIDTH tabs) for continuation
387 alignment.
388 - VALIGN-RIGHT: Vertically align continuation lines with indent characters.
389 Slightly right (one more indent character) if cannot vertically align
390 continuation lines with indent characters.
391
392 For options ``FIXED``, and ``VALIGN-RIGHT`` are only available when
393 ``USE_TABS`` is enabled.
394
Bill Wendlingf09121c2015-10-20 22:59:33 -0700395``CONTINUATION_INDENT_WIDTH``
396 Indent width used for line continuations.
397
398``DEDENT_CLOSING_BRACKETS``
399 Put closing brackets on a separate line, dedented, if the bracketed
400 expression can't fit in a single line. Applies to all kinds of brackets,
Bill Wendlingc2a9e0d2016-05-24 20:51:04 -0700401 including function definitions and calls. For example:
Bill Wendlingf09121c2015-10-20 22:59:33 -0700402
Bill Wendlingc2a9e0d2016-05-24 20:51:04 -0700403 .. code-block:: python
Bill Wendlingf09121c2015-10-20 22:59:33 -0700404
405 config = {
406 'key1': 'value1',
407 'key2': 'value2',
Bill Wendlingc2a9e0d2016-05-24 20:51:04 -0700408 } # <--- this bracket is dedented and on a separate line
Bill Wendlingf09121c2015-10-20 22:59:33 -0700409
410 time_series = self.remote_client.query_entity_counters(
Bill Wendlingc2a9e0d2016-05-24 20:51:04 -0700411 entity='dev3246.region1',
412 key='dns.query_latency_tcp',
413 transform=Transformation.AVERAGE(window=timedelta(seconds=60)),
414 start_ts=now()-timedelta(days=3),
415 end_ts=now(),
416 ) # <--- this bracket is dedented and on a separate line
Bill Wendlingf09121c2015-10-20 22:59:33 -0700417
Bill Wendling49225492018-07-01 23:02:35 -0700418``DISABLE_ENDING_COMMA_HEURISTIC``
419 Disable the heuristic which places each list element on a separate line if
420 the list is comma-terminated.
421
Bill Wendling0e9b3212017-01-31 14:41:00 -0800422``EACH_DICT_ENTRY_ON_SEPARATE_LINE``
423 Place each dictionary entry onto its own line.
424
Bill Wendlingf09121c2015-10-20 22:59:33 -0700425``I18N_COMMENT``
426 The regex for an internationalization comment. The presence of this comment
427 stops reformatting of that line, because the comments are required to be
428 next to the string they translate.
429
430``I18N_FUNCTION_CALL``
Bill Wendlingc2a9e0d2016-05-24 20:51:04 -0700431 The internationalization function call names. The presence of this function
Samuel Dion-Girardeau5ae63492016-09-08 21:01:20 -0400432 stops reformatting on that line, because the string it has cannot be moved
Bill Wendlingc2a9e0d2016-05-24 20:51:04 -0700433 away from the i18n comment.
Bill Wendlingf09121c2015-10-20 22:59:33 -0700434
435``INDENT_DICTIONARY_VALUE``
436 Indent the dictionary value if it cannot fit on the same line as the
Bill Wendlingc2a9e0d2016-05-24 20:51:04 -0700437 dictionary key. For example:
Bill Wendlingf09121c2015-10-20 22:59:33 -0700438
Bill Wendlingc2a9e0d2016-05-24 20:51:04 -0700439 .. code-block:: python
Bill Wendlingf09121c2015-10-20 22:59:33 -0700440
441 config = {
442 'key1':
443 'value1',
444 'key2': value1 +
445 value2,
446 }
447
448``INDENT_WIDTH``
449 The number of columns to use for indentation.
450
451``JOIN_MULTIPLE_LINES``
452 Join short lines into one line. E.g., single line ``if`` statements.
453
Bill Wendling9dc79082016-05-10 00:23:53 -0700454``SPACES_AROUND_POWER_OPERATOR``
455 Set to ``True`` to prefer using spaces around ``**``.
456
Jiri Kuncarf14bd172017-07-21 09:45:31 +0200457``NO_SPACES_AROUND_SELECTED_BINARY_OPERATORS``
458 Do not include spaces around selected binary operators. For example:
459
460 .. code-block:: python
461
462 1 + 2 * 3 - 4 / 5
463
Bill Wendling9518bab2018-07-01 22:17:25 -0700464 will be formatted as follows when configured with ``*,/``:
Jiri Kuncarf14bd172017-07-21 09:45:31 +0200465
466 .. code-block:: python
467
468 1 + 2*3 - 4/5
469
Alexander Lenz5fda36a2016-08-26 17:27:57 +0200470``SPACES_AROUND_DEFAULT_OR_NAMED_ASSIGN``
471 Set to ``True`` to prefer spaces around the assignment operator for default
472 or keyword arguments.
473
Bill Wendlingf09121c2015-10-20 22:59:33 -0700474``SPACES_BEFORE_COMMENT``
475 The number of spaces required before a trailing comment.
476
Bill Wendling996c3ee2016-05-25 23:52:24 -0700477``SPACE_BETWEEN_ENDING_COMMA_AND_CLOSING_BRACKET``
478 Insert a space between the ending comma and closing bracket of a list, etc.
479
Bill Wendling982c5b32016-05-24 00:47:44 -0700480``SPLIT_ARGUMENTS_WHEN_COMMA_TERMINATED``
481 Split before arguments if the argument list is terminated by a comma.
482
cardenb99c9bb12018-05-15 11:40:28 -0700483``SPLIT_ALL_COMMA_SEPARATED_VALUES``
484 If a comma separated list (dict, list, tuple, or function def) is on a
485 line that is too long, split such that all elements are on a single line.
486
Bill Wendlingf09121c2015-10-20 22:59:33 -0700487``SPLIT_BEFORE_BITWISE_OPERATOR``
488 Set to ``True`` to prefer splitting before ``&``, ``|`` or ``^`` rather
489 than after.
490
Patryk Zawadzki6d79f132018-02-13 16:31:25 +0100491``SPLIT_BEFORE_CLOSING_BRACKET``
492 Split before the closing bracket if a list or dict literal doesn't fit on
493 a single line.
494
Bill Wendling0e9b3212017-01-31 14:41:00 -0800495``SPLIT_BEFORE_DICT_SET_GENERATOR``
496 Split before a dictionary or set generator (comp_for). For example, note
497 the split before the ``for``:
498
499 .. code-block:: python
500
501 foo = {
502 variable: 'Hello world, have a nice day!'
503 for variable in bar if variable != 42
504 }
505
Bill Wendling6113e7e2017-10-09 01:11:38 -0700506``SPLIT_BEFORE_EXPRESSION_AFTER_OPENING_PAREN``
507 Split after the opening paren which surrounds an expression if it doesn't
508 fit on a single line.
509
Bill Wendling996c3ee2016-05-25 23:52:24 -0700510``SPLIT_BEFORE_FIRST_ARGUMENT``
511 If an argument / parameter list is going to be split, then split before the
512 first argument.
513
Bill Wendlingf09121c2015-10-20 22:59:33 -0700514``SPLIT_BEFORE_LOGICAL_OPERATOR``
515 Set to ``True`` to prefer splitting before ``and`` or ``or`` rather than
516 after.
517
518``SPLIT_BEFORE_NAMED_ASSIGNS``
519 Split named assignments onto individual lines.
520
Matthew Suozzo4a3b6332017-11-01 17:38:37 -0400521``SPLIT_COMPLEX_COMPREHENSION``
522 For list comprehensions and generator expressions with multiple clauses
delirious-lettuceb795f6d2018-01-16 20:38:46 -0700523 (e.g multiple "for" calls, "if" filter expressions) and which need to be
Matthew Suozzo4a3b6332017-11-01 17:38:37 -0400524 reflowed, split each clause onto its own line. For example:
525
526 .. code-block:: python
527
528 result = [
529 a_var + b_var for a_var in xrange(1000) for b_var in xrange(1000)
530 if a_var % b_var]
531
532 would reformat to something like:
533
534 .. code-block:: python
535
536 result = [
537 a_var + b_var
538 for a_var in xrange(1000)
539 for b_var in xrange(1000)
540 if a_var % b_var]
541
Bill Wendlingf09121c2015-10-20 22:59:33 -0700542``SPLIT_PENALTY_AFTER_OPENING_BRACKET``
543 The penalty for splitting right after the opening bracket.
544
545``SPLIT_PENALTY_AFTER_UNARY_OPERATOR``
546 The penalty for splitting the line after a unary operator.
547
Bill Wendling996c3ee2016-05-25 23:52:24 -0700548``SPLIT_PENALTY_BEFORE_IF_EXPR``
549 The penalty for splitting right before an ``if`` expression.
550
Bill Wendlingf09121c2015-10-20 22:59:33 -0700551``SPLIT_PENALTY_BITWISE_OPERATOR``
552 The penalty of splitting the line around the ``&``, ``|``, and ``^``
553 operators.
554
Matthew Suozzo3a0f6e72017-11-01 17:40:57 -0400555``SPLIT_PENALTY_COMPREHENSION``
556 The penalty for splitting a list comprehension or generator expression.
557
Bill Wendlingf09121c2015-10-20 22:59:33 -0700558``SPLIT_PENALTY_EXCESS_CHARACTER``
559 The penalty for characters over the column limit.
560
561``SPLIT_PENALTY_FOR_ADDED_LINE_SPLIT``
Bill Wendlingc2a9e0d2016-05-24 20:51:04 -0700562 The penalty incurred by adding a line split to the unwrapped line. The more
563 line splits added the higher the penalty.
Bill Wendlingf09121c2015-10-20 22:59:33 -0700564
565``SPLIT_PENALTY_IMPORT_NAMES``
Bill Wendlingc2a9e0d2016-05-24 20:51:04 -0700566 The penalty of splitting a list of ``import as`` names. For example:
Bill Wendlingf09121c2015-10-20 22:59:33 -0700567
Bill Wendlingc2a9e0d2016-05-24 20:51:04 -0700568 .. code-block:: python
Bill Wendlingf09121c2015-10-20 22:59:33 -0700569
570 from a_very_long_or_indented_module_name_yada_yad import (long_argument_1,
571 long_argument_2,
572 long_argument_3)
573
574 would reformat to something like:
575
Bill Wendlingc2a9e0d2016-05-24 20:51:04 -0700576 .. code-block:: python
Bill Wendlingf09121c2015-10-20 22:59:33 -0700577
578 from a_very_long_or_indented_module_name_yada_yad import (
579 long_argument_1, long_argument_2, long_argument_3)
580
581``SPLIT_PENALTY_LOGICAL_OPERATOR``
582 The penalty of splitting the line around the ``and`` and ``or`` operators.
583
Draconye582d632016-06-05 11:48:26 +0200584``USE_TABS``
585 Use the Tab character for indentation.
586
Bill Wendling8fb9c482015-03-29 17:32:07 -0700587(Potentially) Frequently Asked Questions
588========================================
589
Bill Wendlinga907b4f2018-05-21 23:50:24 -0700590--------------------------------------------
Bill Wendling8fb9c482015-03-29 17:32:07 -0700591Why does YAPF destroy my awesome formatting?
592--------------------------------------------
593
594YAPF tries very hard to get the formatting correct. But for some code, it won't
595be as good as hand-formatting. In particular, large data literals may become
596horribly disfigured under YAPF.
597
mlimber8af5baf2017-11-09 13:53:22 -0500598The reasons for this are manyfold. In short, YAPF is simply a tool to help
Bill Wendling8fb9c482015-03-29 17:32:07 -0700599with development. It will format things to coincide with the style guide, but
600that may not equate with readability.
601
602What can be done to alleviate this situation is to indicate regions YAPF should
603ignore when reformatting something:
604
605.. code-block:: python
606
607 # yapf: disable
608 FOO = {
609 # ... some very large, complex data literal.
610 }
611
612 BAR = [
613 # ... another large data literal.
614 ]
615 # yapf: enable
616
617You can also disable formatting for a single literal like this:
618
619.. code-block:: python
620
621 BAZ = {
Scott Sandersoneda4e262015-07-05 21:10:06 -0400622 (1, 2, 3, 4),
623 (5, 6, 7, 8),
624 (9, 10, 11, 12),
Bill Wendling8fb9c482015-03-29 17:32:07 -0700625 } # yapf: disable
626
Łukasz Langa94089872015-09-22 16:02:26 -0700627To preserve the nice dedented closing brackets, use the
628``dedent_closing_brackets`` in your style. Note that in this case all
629brackets, including function definitions and calls, are going to use
630that style. This provides consistency across the formatted codebase.
631
Bill Wendlinga907b4f2018-05-21 23:50:24 -0700632-------------------------------
Bill Wendling7d623452015-03-18 13:36:07 -0700633Why Not Improve Existing Tools?
Bill Wendling8fb9c482015-03-29 17:32:07 -0700634-------------------------------
Bill Wendling7d623452015-03-18 13:36:07 -0700635
636We wanted to use clang-format's reformatting algorithm. It's very powerful and
637designed to come up with the best formatting possible. Existing tools were
638created with different goals in mind, and would require extensive modifications
639to convert to using clang-format's algorithm.
640
Bill Wendlinga907b4f2018-05-21 23:50:24 -0700641-----------------------------
Bill Wendling7d623452015-03-18 13:36:07 -0700642Can I Use YAPF In My Program?
Bill Wendling8fb9c482015-03-29 17:32:07 -0700643-----------------------------
Bill Wendling7d623452015-03-18 13:36:07 -0700644
645Please do! YAPF was designed to be used as a library as well as a command line
646tool. This means that a tool or IDE plugin is free to use YAPF.
647
Bill Wendlingf09121c2015-10-20 22:59:33 -0700648
Bill Wendling7d623452015-03-18 13:36:07 -0700649Gory Details
650============
651
Bill Wendlinga907b4f2018-05-21 23:50:24 -0700652----------------
Bill Wendling7d623452015-03-18 13:36:07 -0700653Algorithm Design
654----------------
655
Eli Benderskyd08130d2015-03-19 05:20:46 -0700656The main data structure in YAPF is the ``UnwrappedLine`` object. It holds a list
657of ``FormatToken``\s, that we would want to place on a single line if there were
658no column limit. An exception being a comment in the middle of an expression
Bill Wendling7d623452015-03-18 13:36:07 -0700659statement will force the line to be formatted on more than one line. The
Eli Benderskyd08130d2015-03-19 05:20:46 -0700660formatter works on one ``UnwrappedLine`` object at a time.
Bill Wendling7d623452015-03-18 13:36:07 -0700661
Eli Benderskyd08130d2015-03-19 05:20:46 -0700662An ``UnwrappedLine`` typically won't affect the formatting of lines before or
663after it. There is a part of the algorithm that may join two or more
664``UnwrappedLine``\s into one line. For instance, an if-then statement with a
Bill Wendlingf5e50b62015-03-28 23:38:12 -0700665short body can be placed on a single line:
666
667.. code-block:: python
Bill Wendling7d623452015-03-18 13:36:07 -0700668
669 if a == 42: continue
670
671YAPF's formatting algorithm creates a weighted tree that acts as the solution
672space for the algorithm. Each node in the tree represents the result of a
673formatting decision --- i.e., whether to split or not to split before a token.
674Each formatting decision has a cost associated with it. Therefore, the cost is
675realized on the edge between two nodes. (In reality, the weighted tree doesn't
676have separate edge objects, so the cost resides on the nodes themselves.)
677
678For example, take the following Python code snippet. For the sake of this
679example, assume that line (1) violates the column limit restriction and needs to
680be reformatted.
681
Bill Wendlingfa22c892015-03-18 13:42:25 -0700682.. code-block:: python
Bill Wendling7d623452015-03-18 13:36:07 -0700683
Bill Wendlingfa22c892015-03-18 13:42:25 -0700684 def xxxxxxxxxxx(aaaaaaaaaaaa, bbbbbbbbb, cccccccc, dddddddd, eeeeee): # 1
685 pass # 2
Bill Wendling7d623452015-03-18 13:36:07 -0700686
687For line (1), the algorithm will build a tree where each node (a
Eli Benderskyd08130d2015-03-19 05:20:46 -0700688``FormattingDecisionState`` object) is the state of the line at that token given
689the decision to split before the token or not. Note: the ``FormatDecisionState``
690objects are copied by value so each node in the graph is unique and a change in
691one doesn't affect other nodes.
Bill Wendling7d623452015-03-18 13:36:07 -0700692
Bill Wendlingfa22c892015-03-18 13:42:25 -0700693Heuristics are used to determine the costs of splitting or not splitting.
694Because a node holds the state of the tree up to a token's insertion, it can
695easily determine if a splitting decision will violate one of the style
Bill Wendling7d623452015-03-18 13:36:07 -0700696requirements. For instance, the heuristic is able to apply an extra penalty to
697the edge when not splitting between the previous token and the one being added.
698
699There are some instances where we will never want to split the line, because
700doing so will always be detrimental (i.e., it will require a backslash-newline,
701which is very rarely desirable). For line (1), we will never want to split the
Eli Benderskyd08130d2015-03-19 05:20:46 -0700702first three tokens: ``def``, ``xxxxxxxxxxx``, and ``(``. Nor will we want to
703split between the ``)`` and the ``:`` at the end. These regions are said to be
704"unbreakable." This is reflected in the tree by there not being a "split"
Bill Wendling7d623452015-03-18 13:36:07 -0700705decision (left hand branch) within the unbreakable region.
706
707Now that we have the tree, we determine what the "best" formatting is by finding
708the path through the tree with the lowest cost.
709
710And that's it!