• Home
  • History
  • Annotate
Name Date Size #Lines LOC

..--

plugins/23-Nov-2023-279186

yapf/23-Nov-2023-6,9484,891

yapftests/23-Nov-2023-10,4788,672

.coveragercD23-Nov-202385 65

.editorconfigD23-Nov-2023265 1511

.flake8D23-Nov-2023175 97

.gitignoreD23-Nov-20231.2 KiB3531

.style.yapfD23-Nov-202365 43

.travis.ymlD23-Nov-2023578 2923

.vimrcD23-Nov-2023167 54

AUTHORSD23-Nov-2023307 107

CHANGELOGD23-Nov-202324.2 KiB566502

CONTRIBUTING.rstD23-Nov-20231.9 KiB4534

CONTRIBUTORSD23-Nov-2023563 1614

HACKING.rstD23-Nov-2023888 3318

LICENSED23-Nov-202311.1 KiB203169

MANIFEST.inD23-Nov-2023259 54

METADATAD23-Nov-202339 43

OWNERSD23-Nov-202363 43

README.rstD23-Nov-202322.7 KiB711500

pylintrcD23-Nov-202312.8 KiB445323

setup.cfgD23-Nov-202328 32

setup.pyD23-Nov-20232.2 KiB7449

tox.iniD23-Nov-202380 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://travis-ci.org/google/yapf.svg?branch=master
10    :target: https://travis-ci.org/google/yapf
11    :alt: Build status
12
13.. 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
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', 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
29didn't violate the style guide. The idea is also similar to the 'gofmt' tool for
30the Go programming language: end all holy wars about formatting - if the whole
31codebase of a project is simply piped through YAPF whenever modifications are
32made, the style remains consistent throughout the project and there's no point
33arguing about style in every code review.
34
35The ultimate goal is that the code YAPF produces is as good as the code that a
36programmer would write if they were following the style guide. It takes away
37some of the drudgery of maintaining your code.
38
39Try out YAPF with this `online demo <https://yapf.now.sh>`_.
40
41.. footer::
42
43    YAPF is not an official Google product (experimental or otherwise), it is
44    just code that happens to be owned by Google.
45
46.. contents::
47
48
49Installation
50============
51
52To install YAPF from PyPI:
53
54.. code-block:: shell
55
56    $ pip install yapf
57
58(optional) If you are using Python 2.7 and want to enable multiprocessing:
59
60.. code-block:: shell
61
62    $ pip install futures
63
64YAPF 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
71possible to run:
72
73.. code-block:: shell
74
75    $ PYTHONPATH=DIR python DIR/yapf [options] ...
76
77
78Python versions
79===============
80
81YAPF 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.)
83
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
88
89Usage
90=====
91
92Options::
93
94    usage: yapf [-h] [-v] [-d | -i] [-r | -l START-END] [-e PATTERN]
95                [--style STYLE] [--style-help] [--no-local-style] [-p]
96                [-vv]
97                [files [files ...]]
98
99    Formatter for Python code.
100
101    positional arguments:
102      files
103
104    optional arguments:
105      -h, --help            show this help message and exit
106      -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
114      --style STYLE         specify formatting style: either a style name (for
115                            example "pep8" or "google"), or the name of a file
116                            with style settings. The default is pep8 unless a
117                            .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).
121      --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
124      -p, --parallel        Run yapf in parallel when formatting multiple files.
125                            Requires concurrent.futures in Python 2.X
126      -vv, --verbose        Print out file names while processing
127
128
129------------
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
140Formatting style
141================
142
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
147To 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
152with a ``[style]`` heading. For example:
153
154.. code-block:: ini
155
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).
163
164It's also possible to do the same on the command line with a dictionary. For
165example:
166
167.. code-block:: shell
168
169    --style='{based_on_style: chromium, indent_width: 4}'
170
171This will take the ``chromium`` base style and modify it to have four space
172indentations.
173
174YAPF will search for the formatting style in the following manner:
175
1761. Specified on the command line
1772. In the `[style]` section of a `.style.yapf` file in either the current
178   directory or one of its parent directories.
1793. In the `[yapf]` section of a `setup.cfg` file in either the current
180   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
185
186Example
187=======
188
189An example of the type of formatting that YAPF can do, it will take this ugly
190code:
191
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
209and reformat it into:
210
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):
221        def f(self):
222            return 37 * -+2
223
224        def g(self, x, y=42):
225            return y
226
227
228    def f(a):
229        return 37 + -+a[42 - x:y**3]
230
231
232Example as a module
233===================
234
235The two main APIs for calling yapf are ``FormatCode`` and ``FormatFile``, these
236share several arguments which are described below:
237
238.. code-block:: python
239
240    >>> from yapf.yapflib.yapf_api import FormatCode  # reformat a string of code
241
242    >>> FormatCode("f ( a = 1, b = 2 )")
243    'f(a=1, b=2)\n'
244
245A ``style_config`` argument: Either a style name or a path to a file that contains
246formatting 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
254A ``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))
270    --- foo.py (original)
271    +++ foo.py (reformatted)
272    @@ -1 +1 @@
273    -a==b
274    +a == b
275
276Note: the ``filename`` argument for ``FormatCode`` is what is inserted into
277the diff, the default is ``<unknown>``.
278
279``FormatFile`` returns reformatted code from the passed file along with its encoding:
280
281.. code-block:: python
282
283    >>> from yapf.yapflib.yapf_api import FormatFile  # reformat a file
284
285    >>> print(open("foo.py").read())  # contents of file
286    a==b
287
288    >>> FormatFile("foo.py")
289    ('a == b\n', 'utf-8')
290
291The ``in-place`` argument saves the reformatted code back to the file:
292
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
301
302Knobs
303=====
304
305``ALIGN_CLOSING_BRACKET_WITH_VISUAL_INDENT``
306    Align closing bracket with visual indentation.
307
308``ALLOW_MULTILINE_LAMBDAS``
309    Allow lambdas to be formatted on more than one line.
310
311``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
322``ALLOW_SPLIT_BEFORE_DICT_VALUE``
323    Allow splits before the dictionary value.
324
325``BLANK_LINE_BEFORE_NESTED_CLASS_OR_DEF``
326    Insert a blank line before a ``def`` or ``class`` immediately nested within
327    another ``def`` or ``class``. For example:
328
329    .. code-block:: python
330
331        class Foo:
332                           # <------ this blank line
333            def method():
334                pass
335
336``BLANK_LINE_BEFORE_MODULE_DOCSTRING``
337    Insert a blank line before a module docstring.
338
339``BLANK_LINE_BEFORE_CLASS_DOCSTRING``
340    Insert a blank line before a class-level docstring.
341
342``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
355``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
378``COLUMN_LIMIT``
379    The column limit (or max line-length)
380
381``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
395``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,
401    including function definitions and calls. For example:
402
403    .. code-block:: python
404
405        config = {
406            'key1': 'value1',
407            'key2': 'value2',
408        }  # <--- this bracket is dedented and on a separate line
409
410        time_series = self.remote_client.query_entity_counters(
411            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
417
418``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
422``EACH_DICT_ENTRY_ON_SEPARATE_LINE``
423    Place each dictionary entry onto its own line.
424
425``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``
431    The internationalization function call names. The presence of this function
432    stops reformatting on that line, because the string it has cannot be moved
433    away from the i18n comment.
434
435``INDENT_DICTIONARY_VALUE``
436    Indent the dictionary value if it cannot fit on the same line as the
437    dictionary key. For example:
438
439    .. code-block:: python
440
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
454``SPACES_AROUND_POWER_OPERATOR``
455    Set to ``True`` to prefer using spaces around ``**``.
456
457``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
464    will be formatted as follows when configured with ``*,/``:
465
466    .. code-block:: python
467
468        1 + 2*3 - 4/5
469
470``SPACES_AROUND_DEFAULT_OR_NAMED_ASSIGN``
471    Set to ``True`` to prefer spaces around the assignment operator for default
472    or keyword arguments.
473
474``SPACES_BEFORE_COMMENT``
475    The number of spaces required before a trailing comment.
476
477``SPACE_BETWEEN_ENDING_COMMA_AND_CLOSING_BRACKET``
478    Insert a space between the ending comma and closing bracket of a list, etc.
479
480``SPLIT_ARGUMENTS_WHEN_COMMA_TERMINATED``
481    Split before arguments if the argument list is terminated by a comma.
482
483``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
487``SPLIT_BEFORE_BITWISE_OPERATOR``
488    Set to ``True`` to prefer splitting before ``&``, ``|`` or ``^`` rather
489    than after.
490
491``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
495``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
506``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
510``SPLIT_BEFORE_FIRST_ARGUMENT``
511    If an argument / parameter list is going to be split, then split before the
512    first argument.
513
514``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
521``SPLIT_COMPLEX_COMPREHENSION``
522    For list comprehensions and generator expressions with multiple clauses
523    (e.g multiple "for" calls, "if" filter expressions) and which need to be
524    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
542``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
548``SPLIT_PENALTY_BEFORE_IF_EXPR``
549    The penalty for splitting right before an ``if`` expression.
550
551``SPLIT_PENALTY_BITWISE_OPERATOR``
552    The penalty of splitting the line around the ``&``, ``|``, and ``^``
553    operators.
554
555``SPLIT_PENALTY_COMPREHENSION``
556    The penalty for splitting a list comprehension or generator expression.
557
558``SPLIT_PENALTY_EXCESS_CHARACTER``
559    The penalty for characters over the column limit.
560
561``SPLIT_PENALTY_FOR_ADDED_LINE_SPLIT``
562    The penalty incurred by adding a line split to the unwrapped line. The more
563    line splits added the higher the penalty.
564
565``SPLIT_PENALTY_IMPORT_NAMES``
566    The penalty of splitting a list of ``import as`` names. For example:
567
568    .. code-block:: python
569
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
576    .. code-block:: python
577
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
584``USE_TABS``
585    Use the Tab character for indentation.
586
587(Potentially) Frequently Asked Questions
588========================================
589
590--------------------------------------------
591Why 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
598The reasons for this are manyfold. In short, YAPF is simply a tool to help
599with 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 = {
622        (1, 2, 3, 4),
623        (5, 6, 7, 8),
624        (9, 10, 11, 12),
625    }  # yapf: disable
626
627To 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
632-------------------------------
633Why Not Improve Existing Tools?
634-------------------------------
635
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
641-----------------------------
642Can I Use YAPF In My Program?
643-----------------------------
644
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
648
649Gory Details
650============
651
652----------------
653Algorithm Design
654----------------
655
656The 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
659statement will force the line to be formatted on more than one line. The
660formatter works on one ``UnwrappedLine`` object at a time.
661
662An ``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
665short body can be placed on a single line:
666
667.. code-block:: python
668
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
682.. code-block:: python
683
684    def xxxxxxxxxxx(aaaaaaaaaaaa, bbbbbbbbb, cccccccc, dddddddd, eeeeee):  # 1
685        pass                                                               # 2
686
687For line (1), the algorithm will build a tree where each node (a
688``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.
692
693Heuristics 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
696requirements. 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
702first 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"
705decision (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!
711