Name Date Size #Lines LOC

..--

.github/workflows/H25-Apr-2025-3527

plugins/H25-Apr-2025-276183

yapf/H25-Apr-2025-8,6726,157

yapftests/H25-Apr-2025-13,37011,117

.coveragercH A D25-Apr-202585 65

.editorconfigH A D25-Apr-2025265 1511

.flake8H A D25-Apr-2025422 1917

.gitignoreH A D25-Apr-20251.2 KiB3832

.pre-commit-config.yamlH A D25-Apr-2025803 3127

.pre-commit-config.ymlH A D25-Apr-2025803 3127

.pre-commit-hooks.yamlH A D25-Apr-2025239 107

.pre-commit-hooks.ymlH A D25-Apr-2025239 107

.style.yapfH A D25-Apr-202530 32

.vimrcH A D25-Apr-2025167 54

AUTHORSH A D25-Apr-2025307 107

CHANGELOGH A D25-Apr-202534.2 KiB774701

CONTRIBUTING.rstH A D25-Apr-20251.8 KiB4433

CONTRIBUTORSH A D25-Apr-2025641 1816

HACKING.rstH A D25-Apr-2025888 3318

LICENSEH A D25-Apr-202511.1 KiB203169

MANIFEST.inH A D25-Apr-2025259 54

METADATAH A D25-Apr-2025248 1412

OWNERSH A D25-Apr-202563 43

README.rstH A D25-Apr-202532.9 KiB1,020718

pylintrcH A D25-Apr-202512.8 KiB445323

setup.cfgH A D25-Apr-202528 32

setup.pyH A D25-Apr-20252.3 KiB7752

tox.iniH A D25-Apr-202590 75

README.rst

1====
2YAPF
3====
4
5.. image:: https://badge.fury.io/py/yapf.svg
6    :target: https://badge.fury.io/py/yapf
7    :alt: PyPI version
8
9.. image:: https://github.com/google/yapf/actions/workflows/ci.yml/badge.svg
10    :target: https://github.com/google/yapf/actions
11    :alt: Build status
12
13.. image:: https://coveralls.io/repos/google/yapf/badge.svg?branch=main
14    :target: https://coveralls.io/r/google/yapf?branch=main
15    :alt: Coverage status
16
17
18Introduction
19============
20
21Most 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.
25
26YAPF takes a different approach. It's based off of `'clang-format' <https://cl
27ang.llvm.org/docs/ClangFormat.html>`_, developed by Daniel Jasper. In essence,
28the algorithm takes the code and reformats it to the best formatting that
29conforms to the style guide, even if the original code didn't violate the
30style guide. The idea is also similar to the `'gofmt' <https://golang.org/cmd/
31gofmt/>`_ tool for the Go programming language: end all holy wars about
32formatting - if the whole codebase of a project is simply piped through YAPF
33whenever modifications are made, the style remains consistent throughout the
34project and there's no point arguing about style in every code review.
35
36The ultimate goal is that the code YAPF produces is as good as the code that a
37programmer would write if they were following the style guide. It takes away
38some of the drudgery of maintaining your code.
39
40.. footer::
41
42    YAPF is not an official Google product (experimental or otherwise), it is
43    just code that happens to be owned by Google.
44
45.. contents::
46
47
48Installation
49============
50
51To install YAPF from PyPI:
52
53.. code-block:: shell
54
55    $ pip install yapf
56
57(optional) If you are using Python 2.7 and want to enable multiprocessing:
58
59.. code-block:: shell
60
61    $ pip install futures
62
63YAPF is still considered in "alpha" stage, and the released version may change
64often; therefore, the best way to keep up-to-date with the latest development
65is to clone this repository.
66
67Note that if you intend to use YAPF as a command-line tool rather than as a
68library, installation is not necessary. YAPF supports being run as a directory
69by the Python interpreter. If you cloned/unzipped YAPF into ``DIR``, it's
70possible to run:
71
72.. code-block:: shell
73
74    $ PYTHONPATH=DIR python DIR/yapf [options] ...
75
76
77Python versions
78===============
79
80YAPF supports Python 2.7 and 3.6.4+. (Note that some Python 3 features may fail
81to parse with Python versions before 3.6.4.)
82
83YAPF requires the code it formats to be valid Python for the version YAPF itself
84runs under. Therefore, if you format Python 3 code with YAPF, run YAPF itself
85under Python 3 (and similarly for Python 2).
86
87
88Usage
89=====
90
91Options::
92
93    usage: yapf [-h] [-v] [-d | -i] [-r | -l START-END] [-e PATTERN]
94                [--style STYLE] [--style-help] [--no-local-style] [-p]
95                [-vv]
96                [files [files ...]]
97
98    Formatter for Python code.
99
100    positional arguments:
101      files
102
103    optional arguments:
104      -h, --help            show this help message and exit
105      -v, --version         show version number and exit
106      -d, --diff            print the diff for the fixed source
107      -i, --in-place        make changes to files in place
108      -r, --recursive       run recursively over directories
109      -l START-END, --lines START-END
110                            range of lines to reformat, one-based
111      -e PATTERN, --exclude PATTERN
112                            patterns for files to exclude from formatting
113      --style STYLE         specify formatting style: either a style name (for
114                            example "pep8" or "google"), or the name of a file
115                            with style settings. The default is pep8 unless a
116                            .style.yapf or setup.cfg or pyproject.toml file
117                            located in the same directory as the source or one of
118                            its parent directories (for stdin, the current
119                            directory is used).
120      --style-help          show style settings and exit; this output can be saved
121                            to .style.yapf to make your settings permanent
122      --no-local-style      don't search for local style definition
123      -p, --parallel        Run yapf in parallel when formatting multiple files.
124                            Requires concurrent.futures in Python 2.X
125      -vv, --verbose        Print out file names while processing
126
127
128------------
129Return Codes
130------------
131
132Normally YAPF returns zero on successful program termination and non-zero otherwise.
133
134If ``--diff`` is supplied, YAPF returns zero when no changes were necessary, non-zero
135otherwise (including program error). You can use this in a CI workflow to test that code
136has been YAPF-formatted.
137
138---------------------------------------------
139Excluding files from formatting (.yapfignore or pyproject.toml)
140---------------------------------------------
141
142In addition to exclude patterns provided on commandline, YAPF looks for additional
143patterns specified in a file named ``.yapfignore`` or ``pyproject.toml`` located in the
144working directory from which YAPF is invoked.
145
146``.yapfignore``'s syntax is similar to UNIX's filename pattern matching::
147
148    *       matches everything
149    ?       matches any single character
150    [seq]   matches any character in seq
151    [!seq]  matches any character not in seq
152
153Note that no entry should begin with `./`.
154
155If you use ``pyproject.toml``, exclude patterns are specified by ``ignore_pattens`` key
156in ``[tool.yapfignore]`` section. For example:
157
158.. code-block:: ini
159
160   [tool.yapfignore]
161   ignore_patterns = [
162     "temp/**/*.py",
163     "temp2/*.py"
164   ]
165
166Formatting style
167================
168
169The formatting style used by YAPF is configurable and there are many "knobs"
170that can be used to tune how YAPF does formatting. See the ``style.py`` module
171for the full list.
172
173To control the style, run YAPF with the ``--style`` argument. It accepts one of
174the predefined styles (e.g., ``pep8`` or ``google``), a path to a configuration
175file that specifies the desired style, or a dictionary of key/value pairs.
176
177The config file is a simple listing of (case-insensitive) ``key = value`` pairs
178with a ``[style]`` heading. For example:
179
180.. code-block:: ini
181
182    [style]
183    based_on_style = pep8
184    spaces_before_comment = 4
185    split_before_logical_operator = true
186
187The ``based_on_style`` setting determines which of the predefined styles this
188custom style is based on (think of it like subclassing). Four
189styles are predefined:
190
191- ``pep8`` (default)
192- ``google`` (based off of the `Google Python Style Guide`_)
193- ``yapf`` (for use with Google open source projects)
194- ``facebook``
195
196.. _`Google Python Style Guide`: https://github.com/google/styleguide/blob/gh-pages/pyguide.md
197
198See ``_STYLE_NAME_TO_FACTORY`` in style.py_ for details.
199
200.. _style.py: https://github.com/google/yapf/blob/main/yapf/yapflib/style.py
201
202It's also possible to do the same on the command line with a dictionary. For
203example:
204
205.. code-block:: shell
206
207    --style='{based_on_style: pep8, indent_width: 2}'
208
209This will take the ``pep8`` base style and modify it to have two space
210indentations.
211
212YAPF will search for the formatting style in the following manner:
213
2141. Specified on the command line
2152. In the ``[style]`` section of a ``.style.yapf`` file in either the current
216   directory or one of its parent directories.
2173. In the ``[yapf]`` section of a ``setup.cfg`` file in either the current
218   directory or one of its parent directories.
2194. In the ``[tool.yapf]`` section of a ``pyproject.toml`` file in either the current
220   directory or one of its parent directories.
2215. In the ``[style]`` section of a ``~/.config/yapf/style`` file in your home
222   directory.
223
224If none of those files are found, the default style is used (PEP8).
225
226
227Example
228=======
229
230An example of the type of formatting that YAPF can do, it will take this ugly
231code:
232
233.. code-block:: python
234
235    x = {  'a':37,'b':42,
236
237    'c':927}
238
239    y = 'hello ''world'
240    z = 'hello '+'world'
241    a = 'hello {}'.format('world')
242    class foo  (     object  ):
243      def f    (self   ):
244        return       37*-+2
245      def g(self, x,y=42):
246          return y
247    def f  (   a ) :
248      return      37+-+a[42-x :  y**3]
249
250and reformat it into:
251
252.. code-block:: python
253
254    x = {'a': 37, 'b': 42, 'c': 927}
255
256    y = 'hello ' 'world'
257    z = 'hello ' + 'world'
258    a = 'hello {}'.format('world')
259
260
261    class foo(object):
262        def f(self):
263            return 37 * -+2
264
265        def g(self, x, y=42):
266            return y
267
268
269    def f(a):
270        return 37 + -+a[42 - x:y**3]
271
272
273Example as a module
274===================
275
276The two main APIs for calling yapf are ``FormatCode`` and ``FormatFile``, these
277share several arguments which are described below:
278
279.. code-block:: python
280
281    >>> from yapf.yapflib.yapf_api import FormatCode  # reformat a string of code
282
283    >>> formatted_code, changed = FormatCode("f ( a = 1, b = 2 )")
284    >>> formatted_code
285    'f(a=1, b=2)\n'
286    >>> changed
287    True
288
289A ``style_config`` argument: Either a style name or a path to a file that contains
290formatting style settings. If None is specified, use the default style
291as set in ``style.DEFAULT_STYLE_FACTORY``.
292
293.. code-block:: python
294
295    >>> FormatCode("def g():\n  return True", style_config='pep8')[0]
296    'def g():\n    return True\n'
297
298A ``lines`` argument: A list of tuples of lines (ints), [start, end],
299that we want to format. The lines are 1-based indexed. It can be used by
300third-party code (e.g., IDEs) when reformatting a snippet of code rather
301than a whole file.
302
303.. code-block:: python
304
305    >>> FormatCode("def g( ):\n    a=1\n    b = 2\n    return a==b", lines=[(1, 1), (2, 3)])[0]
306    'def g():\n    a = 1\n    b = 2\n    return a==b\n'
307
308A ``print_diff`` (bool): Instead of returning the reformatted source, return a
309diff that turns the formatted source into reformatted source.
310
311.. code-block:: python
312
313    >>> print(FormatCode("a==b", filename="foo.py", print_diff=True)[0])
314    --- foo.py (original)
315    +++ foo.py (reformatted)
316    @@ -1 +1 @@
317    -a==b
318    +a == b
319
320Note: the ``filename`` argument for ``FormatCode`` is what is inserted into
321the diff, the default is ``<unknown>``.
322
323``FormatFile`` returns reformatted code from the passed file along with its encoding:
324
325.. code-block:: python
326
327    >>> from yapf.yapflib.yapf_api import FormatFile  # reformat a file
328
329    >>> print(open("foo.py").read())  # contents of file
330    a==b
331
332    >>> reformatted_code, encoding, changed = FormatFile("foo.py")
333    >>> formatted_code
334    'a == b\n'
335    >>> encoding
336    'utf-8'
337    >>> changed
338    True
339
340The ``in_place`` argument saves the reformatted code back to the file:
341
342.. code-block:: python
343
344    >>> FormatFile("foo.py", in_place=True)[:2]
345    (None, 'utf-8')
346
347    >>> print(open("foo.py").read())  # contents of file (now fixed)
348    a == b
349
350Formatting diffs
351================
352
353Options::
354
355    usage: yapf-diff [-h] [-i] [-p NUM] [--regex PATTERN] [--iregex PATTERN][-v]
356                     [--style STYLE] [--binary BINARY]
357
358    This script reads input from a unified diff and reformats all the changed
359    lines. This is useful to reformat all the lines touched by a specific patch.
360    Example usage for git/svn users:
361
362      git diff -U0 --no-color --relative HEAD^ | yapf-diff -i
363      svn diff --diff-cmd=diff -x-U0 | yapf-diff -p0 -i
364
365    It should be noted that the filename contained in the diff is used
366    unmodified to determine the source file to update. Users calling this script
367    directly should be careful to ensure that the path in the diff is correct
368    relative to the current working directory.
369
370    optional arguments:
371      -h, --help            show this help message and exit
372      -i, --in-place        apply edits to files instead of displaying a diff
373      -p NUM, --prefix NUM  strip the smallest prefix containing P slashes
374      --regex PATTERN       custom pattern selecting file paths to reformat
375                            (case sensitive, overrides -iregex)
376      --iregex PATTERN      custom pattern selecting file paths to reformat
377                            (case insensitive, overridden by -regex)
378      -v, --verbose         be more verbose, ineffective without -i
379      --style STYLE         specify formatting style: either a style name (for
380                            example "pep8" or "google"), or the name of a file
381                            with style settings. The default is pep8 unless a
382                            .style.yapf or setup.cfg or pyproject.toml file
383                            located in the same directory as the source or one of
384                            its parent directories (for stdin, the current
385                            directory is used).
386      --binary BINARY       location of binary to use for yapf
387
388Knobs
389=====
390
391``ALIGN_CLOSING_BRACKET_WITH_VISUAL_INDENT``
392    Align closing bracket with visual indentation.
393
394``ALLOW_MULTILINE_LAMBDAS``
395    Allow lambdas to be formatted on more than one line.
396
397``ALLOW_MULTILINE_DICTIONARY_KEYS``
398    Allow dictionary keys to exist on multiple lines. For example:
399
400    .. code-block:: python
401
402        x = {
403            ('this is the first element of a tuple',
404             'this is the second element of a tuple'):
405                 value,
406        }
407
408``ALLOW_SPLIT_BEFORE_DEFAULT_OR_NAMED_ASSIGNS``
409    Allow splitting before a default / named assignment in an argument list.
410
411``ALLOW_SPLIT_BEFORE_DICT_VALUE``
412    Allow splits before the dictionary value.
413
414``ARITHMETIC_PRECEDENCE_INDICATION``
415    Let spacing indicate operator precedence. For example:
416
417    .. code-block:: python
418
419        a = 1 * 2 + 3 / 4
420        b = 1 / 2 - 3 * 4
421        c = (1 + 2) * (3 - 4)
422        d = (1 - 2) / (3 + 4)
423        e = 1 * 2 - 3
424        f = 1 + 2 + 3 + 4
425
426    will be formatted as follows to indicate precedence:
427
428    .. code-block:: python
429
430        a = 1*2 + 3/4
431        b = 1/2 - 3*4
432        c = (1+2) * (3-4)
433        d = (1-2) / (3+4)
434        e = 1*2 - 3
435        f = 1 + 2 + 3 + 4
436
437``BLANK_LINE_BEFORE_NESTED_CLASS_OR_DEF``
438    Insert a blank line before a ``def`` or ``class`` immediately nested within
439    another ``def`` or ``class``. For example:
440
441    .. code-block:: python
442
443        class Foo:
444                           # <------ this blank line
445            def method():
446                pass
447
448``BLANK_LINE_BEFORE_MODULE_DOCSTRING``
449    Insert a blank line before a module docstring.
450
451``BLANK_LINE_BEFORE_CLASS_DOCSTRING``
452    Insert a blank line before a class-level docstring.
453
454``BLANK_LINES_AROUND_TOP_LEVEL_DEFINITION``
455    Sets the number of desired blank lines surrounding top-level function and
456    class definitions. For example:
457
458    .. code-block:: python
459
460        class Foo:
461            pass
462                           # <------ having two blank lines here
463                           # <------ is the default setting
464        class Bar:
465            pass
466
467``BLANK_LINES_BETWEEN_TOP_LEVEL_IMPORTS_AND_VARIABLES``
468    Sets the number of desired blank lines between top-level imports and
469    variable definitions. Useful for compatibility with tools like isort.
470
471``COALESCE_BRACKETS``
472    Do not split consecutive brackets. Only relevant when
473    ``DEDENT_CLOSING_BRACKETS`` or ``INDENT_CLOSING_BRACKETS``
474    is set. For example:
475
476    .. code-block:: python
477
478        call_func_that_takes_a_dict(
479            {
480                'key1': 'value1',
481                'key2': 'value2',
482            }
483        )
484
485    would reformat to:
486
487    .. code-block:: python
488
489        call_func_that_takes_a_dict({
490            'key1': 'value1',
491            'key2': 'value2',
492        })
493
494
495``COLUMN_LIMIT``
496    The column limit (or max line-length)
497
498``CONTINUATION_ALIGN_STYLE``
499    The style for continuation alignment. Possible values are:
500
501    - ``SPACE``: Use spaces for continuation alignment. This is default
502      behavior.
503    - ``FIXED``: Use fixed number (CONTINUATION_INDENT_WIDTH) of columns
504      (ie: CONTINUATION_INDENT_WIDTH/INDENT_WIDTH tabs or CONTINUATION_INDENT_WIDTH
505      spaces) for continuation alignment.
506    - ``VALIGN-RIGHT``: Vertically align continuation lines to multiple of
507      INDENT_WIDTH columns. Slightly right (one tab or a few spaces) if cannot
508      vertically align continuation lines with indent characters.
509
510``CONTINUATION_INDENT_WIDTH``
511    Indent width used for line continuations.
512
513``DEDENT_CLOSING_BRACKETS``
514    Put closing brackets on a separate line, dedented, if the bracketed
515    expression can't fit in a single line. Applies to all kinds of brackets,
516    including function definitions and calls. For example:
517
518    .. code-block:: python
519
520        config = {
521            'key1': 'value1',
522            'key2': 'value2',
523        }  # <--- this bracket is dedented and on a separate line
524
525        time_series = self.remote_client.query_entity_counters(
526            entity='dev3246.region1',
527            key='dns.query_latency_tcp',
528            transform=Transformation.AVERAGE(window=timedelta(seconds=60)),
529            start_ts=now()-timedelta(days=3),
530            end_ts=now(),
531        )  # <--- this bracket is dedented and on a separate line
532
533``DISABLE_ENDING_COMMA_HEURISTIC``
534    Disable the heuristic which places each list element on a separate line if
535    the list is comma-terminated.
536
537``EACH_DICT_ENTRY_ON_SEPARATE_LINE``
538    Place each dictionary entry onto its own line.
539
540``FORCE_MULTILINE_DICT``
541    Respect EACH_DICT_ENTRY_ON_SEPARATE_LINE even if the line is shorter than
542    COLUMN_LIMIT.
543
544``I18N_COMMENT``
545    The regex for an internationalization comment. The presence of this comment
546    stops reformatting of that line, because the comments are required to be
547    next to the string they translate.
548
549``I18N_FUNCTION_CALL``
550    The internationalization function call names. The presence of this function
551    stops reformatting on that line, because the string it has cannot be moved
552    away from the i18n comment.
553
554``INDENT_DICTIONARY_VALUE``
555    Indent the dictionary value if it cannot fit on the same line as the
556    dictionary key. For example:
557
558    .. code-block:: python
559
560        config = {
561            'key1':
562                'value1',
563            'key2': value1 +
564                    value2,
565        }
566
567``INDENT_WIDTH``
568    The number of columns to use for indentation.
569
570``INDENT_BLANK_LINES``
571    Set to ``True`` to prefer indented blank lines rather than empty
572
573``INDENT_CLOSING_BRACKETS``
574    Put closing brackets on a separate line, indented, if the bracketed
575    expression can't fit in a single line. Applies to all kinds of brackets,
576    including function definitions and calls. For example:
577
578    .. code-block:: python
579
580        config = {
581            'key1': 'value1',
582            'key2': 'value2',
583            }  # <--- this bracket is indented and on a separate line
584
585        time_series = self.remote_client.query_entity_counters(
586            entity='dev3246.region1',
587            key='dns.query_latency_tcp',
588            transform=Transformation.AVERAGE(window=timedelta(seconds=60)),
589            start_ts=now()-timedelta(days=3),
590            end_ts=now(),
591            )  # <--- this bracket is indented and on a separate line
592
593``JOIN_MULTIPLE_LINES``
594    Join short lines into one line. E.g., single line ``if`` statements.
595
596``NO_SPACES_AROUND_SELECTED_BINARY_OPERATORS``
597    Do not include spaces around selected binary operators. For example:
598
599    .. code-block:: python
600
601        1 + 2 * 3 - 4 / 5
602
603    will be formatted as follows when configured with ``*``, ``/``:
604
605    .. code-block:: python
606
607        1 + 2*3 - 4/5
608
609``SPACES_AROUND_POWER_OPERATOR``
610    Set to ``True`` to prefer using spaces around ``**``.
611
612``SPACES_AROUND_DEFAULT_OR_NAMED_ASSIGN``
613    Set to ``True`` to prefer spaces around the assignment operator for default
614    or keyword arguments.
615
616``SPACES_AROUND_DICT_DELIMITERS``
617    Adds a space after the opening '{' and before the ending '}' dict delimiters.
618
619    .. code-block:: python
620
621        {1: 2}
622
623    will be formatted as:
624
625    .. code-block:: python
626
627        { 1: 2 }
628
629``SPACES_AROUND_LIST_DELIMITERS``
630    Adds a space after the opening '[' and before the ending ']' list delimiters.
631
632    .. code-block:: python
633
634        [1, 2]
635
636    will be formatted as:
637
638    .. code-block:: python
639
640        [ 1, 2 ]
641
642``SPACES_AROUND_SUBSCRIPT_COLON``
643    Use spaces around the subscript / slice operator.  For example:
644
645    .. code-block:: python
646
647        my_list[1 : 10 : 2]
648
649``SPACES_AROUND_TUPLE_DELIMITERS``
650    Adds a space after the opening '(' and before the ending ')' tuple delimiters.
651
652    .. code-block:: python
653
654        (1, 2, 3)
655
656    will be formatted as:
657
658    .. code-block:: python
659
660        ( 1, 2, 3 )
661
662``SPACES_BEFORE_COMMENT``
663    The number of spaces required before a trailing comment.
664    This can be a single value (representing the number of spaces
665    before each trailing comment) or list of of values (representing
666    alignment column values; trailing comments within a block will
667    be aligned to the first column value that is greater than the maximum
668    line length within the block). For example:
669
670    With ``spaces_before_comment=5``:
671
672    .. code-block:: python
673
674        1 + 1 # Adding values
675
676    will be formatted as:
677
678    .. code-block:: python
679
680        1 + 1     # Adding values <-- 5 spaces between the end of the statement and comment
681
682    With ``spaces_before_comment=15, 20``:
683
684    .. code-block:: python
685
686        1 + 1 # Adding values
687        two + two # More adding
688
689        longer_statement # This is a longer statement
690        short # This is a shorter statement
691
692        a_very_long_statement_that_extends_beyond_the_final_column # Comment
693        short # This is a shorter statement
694
695    will be formatted as:
696
697    .. code-block:: python
698
699        1 + 1          # Adding values <-- end of line comments in block aligned to col 15
700        two + two      # More adding
701
702        longer_statement    # This is a longer statement <-- end of line comments in block aligned to col 20
703        short               # This is a shorter statement
704
705        a_very_long_statement_that_extends_beyond_the_final_column  # Comment <-- the end of line comments are aligned based on the line length
706        short                                                       # This is a shorter statement
707
708``SPACE_BETWEEN_ENDING_COMMA_AND_CLOSING_BRACKET``
709    Insert a space between the ending comma and closing bracket of a list, etc.
710
711``SPACE_INSIDE_BRACKETS``
712    Use spaces inside brackets, braces, and parentheses.  For example:
713
714    .. code-block:: python
715
716        method_call( 1 )
717        my_dict[ 3 ][ 1 ][ get_index( *args, **kwargs ) ]
718        my_set = { 1, 2, 3 }
719
720``SPLIT_ARGUMENTS_WHEN_COMMA_TERMINATED``
721    Split before arguments if the argument list is terminated by a comma.
722
723``SPLIT_ALL_COMMA_SEPARATED_VALUES``
724    If a comma separated list (``dict``, ``list``, ``tuple``, or function
725    ``def``) is on a line that is too long, split such that each element
726    is on a separate line.
727
728``SPLIT_ALL_TOP_LEVEL_COMMA_SEPARATED_VALUES``
729    Variation on ``SPLIT_ALL_COMMA_SEPARATED_VALUES`` in which, if a
730    subexpression with a comma fits in its starting line, then the
731    subexpression is not split. This avoids splits like the one for
732    ``b`` in this code:
733
734    .. code-block:: python
735
736      abcdef(
737          aReallyLongThing: int,
738          b: [Int,
739              Int])
740
741    With the new knob this is split as:
742
743    .. code-block:: python
744
745      abcdef(
746          aReallyLongThing: int,
747          b: [Int, Int])
748
749``SPLIT_BEFORE_BITWISE_OPERATOR``
750    Set to ``True`` to prefer splitting before ``&``, ``|`` or ``^`` rather
751    than after.
752
753``SPLIT_BEFORE_ARITHMETIC_OPERATOR``
754    Set to ``True`` to prefer splitting before ``+``, ``-``, ``*``, ``/``, ``//``,
755    or ``@`` rather than after.
756
757``SPLIT_BEFORE_CLOSING_BRACKET``
758    Split before the closing bracket if a ``list`` or ``dict`` literal doesn't
759    fit on a single line.
760
761``SPLIT_BEFORE_DICT_SET_GENERATOR``
762    Split before a dictionary or set generator (comp_for). For example, note
763    the split before the ``for``:
764
765    .. code-block:: python
766
767        foo = {
768            variable: 'Hello world, have a nice day!'
769            for variable in bar if variable != 42
770        }
771
772``SPLIT_BEFORE_DOT``
773    Split before the ``.`` if we need to split a longer expression:
774
775    .. code-block:: python
776
777      foo = ('This is a really long string: {}, {}, {}, {}'.format(a, b, c, d))
778
779    would reformat to something like:
780
781    .. code-block:: python
782
783      foo = ('This is a really long string: {}, {}, {}, {}'
784             .format(a, b, c, d))
785
786``SPLIT_BEFORE_EXPRESSION_AFTER_OPENING_PAREN``
787    Split after the opening paren which surrounds an expression if it doesn't
788    fit on a single line.
789
790``SPLIT_BEFORE_FIRST_ARGUMENT``
791    If an argument / parameter list is going to be split, then split before the
792    first argument.
793
794``SPLIT_BEFORE_LOGICAL_OPERATOR``
795    Set to ``True`` to prefer splitting before ``and`` or ``or`` rather than
796    after.
797
798``SPLIT_BEFORE_NAMED_ASSIGNS``
799    Split named assignments onto individual lines.
800
801``SPLIT_COMPLEX_COMPREHENSION``
802    For list comprehensions and generator expressions with multiple clauses
803    (e.g multiple ``for`` calls, ``if`` filter expressions) and which need to
804    be reflowed, split each clause onto its own line. For example:
805
806    .. code-block:: python
807
808      result = [
809          a_var + b_var for a_var in xrange(1000) for b_var in xrange(1000)
810          if a_var % b_var]
811
812    would reformat to something like:
813
814    .. code-block:: python
815
816      result = [
817          a_var + b_var
818          for a_var in xrange(1000)
819          for b_var in xrange(1000)
820          if a_var % b_var]
821
822``SPLIT_PENALTY_AFTER_OPENING_BRACKET``
823    The penalty for splitting right after the opening bracket.
824
825``SPLIT_PENALTY_AFTER_UNARY_OPERATOR``
826    The penalty for splitting the line after a unary operator.
827
828``SPLIT_PENALTY_ARITHMETIC_OPERATOR``
829    The penalty of splitting the line around the ``+``, ``-``, ``*``, ``/``,
830    ``//``, ``%``, and ``@`` operators.
831
832``SPLIT_PENALTY_BEFORE_IF_EXPR``
833    The penalty for splitting right before an ``if`` expression.
834
835``SPLIT_PENALTY_BITWISE_OPERATOR``
836    The penalty of splitting the line around the ``&``, ``|``, and ``^``
837    operators.
838
839``SPLIT_PENALTY_COMPREHENSION``
840    The penalty for splitting a list comprehension or generator expression.
841
842``SPLIT_PENALTY_EXCESS_CHARACTER``
843    The penalty for characters over the column limit.
844
845``SPLIT_PENALTY_FOR_ADDED_LINE_SPLIT``
846    The penalty incurred by adding a line split to the logical line. The more
847    line splits added the higher the penalty.
848
849``SPLIT_PENALTY_IMPORT_NAMES``
850    The penalty of splitting a list of ``import as`` names. For example:
851
852    .. code-block:: python
853
854      from a_very_long_or_indented_module_name_yada_yad import (long_argument_1,
855                                                                long_argument_2,
856                                                                long_argument_3)
857
858    would reformat to something like:
859
860    .. code-block:: python
861
862      from a_very_long_or_indented_module_name_yada_yad import (
863          long_argument_1, long_argument_2, long_argument_3)
864
865``SPLIT_PENALTY_LOGICAL_OPERATOR``
866    The penalty of splitting the line around the ``and`` and ``or`` operators.
867
868``USE_TABS``
869    Use the Tab character for indentation.
870
871(Potentially) Frequently Asked Questions
872========================================
873
874--------------------------------------------
875Why does YAPF destroy my awesome formatting?
876--------------------------------------------
877
878YAPF tries very hard to get the formatting correct. But for some code, it won't
879be as good as hand-formatting. In particular, large data literals may become
880horribly disfigured under YAPF.
881
882The reasons for this are manyfold. In short, YAPF is simply a tool to help
883with development. It will format things to coincide with the style guide, but
884that may not equate with readability.
885
886What can be done to alleviate this situation is to indicate regions YAPF should
887ignore when reformatting something:
888
889.. code-block:: python
890
891    # yapf: disable
892    FOO = {
893        # ... some very large, complex data literal.
894    }
895
896    BAR = [
897        # ... another large data literal.
898    ]
899    # yapf: enable
900
901You can also disable formatting for a single literal like this:
902
903.. code-block:: python
904
905    BAZ = {
906        (1, 2, 3, 4),
907        (5, 6, 7, 8),
908        (9, 10, 11, 12),
909    }  # yapf: disable
910
911To preserve the nice dedented closing brackets, use the
912``dedent_closing_brackets`` in your style. Note that in this case all
913brackets, including function definitions and calls, are going to use
914that style.  This provides consistency across the formatted codebase.
915
916-------------------------------
917Why Not Improve Existing Tools?
918-------------------------------
919
920We wanted to use clang-format's reformatting algorithm. It's very powerful and
921designed to come up with the best formatting possible. Existing tools were
922created with different goals in mind, and would require extensive modifications
923to convert to using clang-format's algorithm.
924
925-----------------------------
926Can I Use YAPF In My Program?
927-----------------------------
928
929Please do! YAPF was designed to be used as a library as well as a command line
930tool. This means that a tool or IDE plugin is free to use YAPF.
931
932-----------------------------------------
933I still get non Pep8 compliant code! Why?
934-----------------------------------------
935
936YAPF tries very hard to be fully PEP 8 compliant. However, it is paramount
937to not risk altering the semantics of your code. Thus, YAPF tries to be as
938safe as possible and does not change the token stream
939(e.g., by adding parentheses).
940All these cases however, can be easily fixed manually. For instance,
941
942.. code-block:: python
943
944    from my_package import my_function_1, my_function_2, my_function_3, my_function_4, my_function_5
945
946    FOO = my_variable_1 + my_variable_2 + my_variable_3 + my_variable_4 + my_variable_5 + my_variable_6 + my_variable_7 + my_variable_8
947
948won't be split, but you can easily get it right by just adding parentheses:
949
950.. code-block:: python
951
952    from my_package import (my_function_1, my_function_2, my_function_3,
953                            my_function_4, my_function_5)
954
955    FOO = (my_variable_1 + my_variable_2 + my_variable_3 + my_variable_4 +
956           my_variable_5 + my_variable_6 + my_variable_7 + my_variable_8)
957
958Gory Details
959============
960
961----------------
962Algorithm Design
963----------------
964
965The main data structure in YAPF is the ``LogicalLine`` object. It holds a list
966of ``FormatToken``\s, that we would want to place on a single line if there
967were no column limit. An exception being a comment in the middle of an
968expression statement will force the line to be formatted on more than one line.
969The formatter works on one ``LogicalLine`` object at a time.
970
971An ``LogicalLine`` typically won't affect the formatting of lines before or
972after it. There is a part of the algorithm that may join two or more
973``LogicalLine``\s into one line. For instance, an if-then statement with a
974short body can be placed on a single line:
975
976.. code-block:: python
977
978    if a == 42: continue
979
980YAPF's formatting algorithm creates a weighted tree that acts as the solution
981space for the algorithm. Each node in the tree represents the result of a
982formatting decision --- i.e., whether to split or not to split before a token.
983Each formatting decision has a cost associated with it. Therefore, the cost is
984realized on the edge between two nodes. (In reality, the weighted tree doesn't
985have separate edge objects, so the cost resides on the nodes themselves.)
986
987For example, take the following Python code snippet. For the sake of this
988example, assume that line (1) violates the column limit restriction and needs to
989be reformatted.
990
991.. code-block:: python
992
993    def xxxxxxxxxxx(aaaaaaaaaaaa, bbbbbbbbb, cccccccc, dddddddd, eeeeee):  # 1
994        pass                                                               # 2
995
996For line (1), the algorithm will build a tree where each node (a
997``FormattingDecisionState`` object) is the state of the line at that token given
998the decision to split before the token or not. Note: the ``FormatDecisionState``
999objects are copied by value so each node in the graph is unique and a change in
1000one doesn't affect other nodes.
1001
1002Heuristics are used to determine the costs of splitting or not splitting.
1003Because a node holds the state of the tree up to a token's insertion, it can
1004easily determine if a splitting decision will violate one of the style
1005requirements. For instance, the heuristic is able to apply an extra penalty to
1006the edge when not splitting between the previous token and the one being added.
1007
1008There are some instances where we will never want to split the line, because
1009doing so will always be detrimental (i.e., it will require a backslash-newline,
1010which is very rarely desirable). For line (1), we will never want to split the
1011first three tokens: ``def``, ``xxxxxxxxxxx``, and ``(``. Nor will we want to
1012split between the ``)`` and the ``:`` at the end. These regions are said to be
1013"unbreakable." This is reflected in the tree by there not being a "split"
1014decision (left hand branch) within the unbreakable region.
1015
1016Now that we have the tree, we determine what the "best" formatting is by finding
1017the path through the tree with the lowest cost.
1018
1019And that's it!
1020