Mercurial > hg
annotate contrib/grey.py @ 43117:8ff1ecfadcd1
cleanup: join string literals that are already on one line
Thanks to Kyle for noticing this and for providing the regular
expression to run on the codebase.
This patch has been reviewed by the test suite and they approved of
it.
# skip-blame: fallout from mass reformatting
Differential Revision: https://phab.mercurial-scm.org/D7028
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Tue, 08 Oct 2019 15:06:18 -0700 |
parents | 7054fd370430 |
children |
rev | line source |
---|---|
43083
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1 # no-check-code because 3rd party |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2 import ast |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3 import asyncio |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4 from concurrent.futures import Executor, ProcessPoolExecutor |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
5 from contextlib import contextmanager |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
6 from datetime import datetime |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
7 from enum import Enum |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
8 from functools import lru_cache, partial, wraps |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
9 import io |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
10 import itertools |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
11 import logging |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
12 from multiprocessing import Manager, freeze_support |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
13 import os |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
14 from pathlib import Path |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
15 import pickle |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
16 import re |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
17 import signal |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
18 import sys |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
19 import tempfile |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
20 import tokenize |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
21 import traceback |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
22 from typing import ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
23 Any, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
24 Callable, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
25 Collection, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
26 Dict, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
27 Generator, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
28 Generic, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
29 Iterable, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
30 Iterator, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
31 List, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
32 Optional, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
33 Pattern, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
34 Sequence, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
35 Set, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
36 Tuple, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
37 TypeVar, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
38 Union, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
39 cast, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
40 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
41 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
42 from appdirs import user_cache_dir |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
43 from attr import dataclass, evolve, Factory |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
44 import click |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
45 import toml |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
46 from typed_ast import ast3, ast27 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
47 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
48 # lib2to3 fork |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
49 from blib2to3.pytree import Node, Leaf, type_repr |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
50 from blib2to3 import pygram, pytree |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
51 from blib2to3.pgen2 import driver, token |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
52 from blib2to3.pgen2.grammar import Grammar |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
53 from blib2to3.pgen2.parse import ParseError |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
54 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
55 __version__ = '19.3b1.dev95+gdc1add6.d20191005' |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
56 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
57 DEFAULT_LINE_LENGTH = 88 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
58 DEFAULT_EXCLUDES = ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
59 r"/(\.eggs|\.git|\.hg|\.mypy_cache|\.nox|\.tox|\.venv|_build|buck-out|build|dist)/" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
60 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
61 DEFAULT_INCLUDES = r"\.pyi?$" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
62 CACHE_DIR = Path(user_cache_dir("black", version=__version__)) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
63 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
64 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
65 # types |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
66 FileContent = str |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
67 Encoding = str |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
68 NewLine = str |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
69 Depth = int |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
70 NodeType = int |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
71 LeafID = int |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
72 Priority = int |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
73 Index = int |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
74 LN = Union[Leaf, Node] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
75 SplitFunc = Callable[["Line", Collection["Feature"]], Iterator["Line"]] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
76 Timestamp = float |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
77 FileSize = int |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
78 CacheInfo = Tuple[Timestamp, FileSize] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
79 Cache = Dict[Path, CacheInfo] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
80 out = partial(click.secho, bold=True, err=True) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
81 err = partial(click.secho, fg="red", err=True) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
82 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
83 pygram.initialize(CACHE_DIR) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
84 syms = pygram.python_symbols |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
85 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
86 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
87 class NothingChanged(UserWarning): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
88 """Raised when reformatted code is the same as source.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
89 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
90 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
91 class CannotSplit(Exception): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
92 """A readable split that fits the allotted line length is impossible.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
93 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
94 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
95 class InvalidInput(ValueError): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
96 """Raised when input source code fails all parse attempts.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
97 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
98 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
99 class WriteBack(Enum): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
100 NO = 0 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
101 YES = 1 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
102 DIFF = 2 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
103 CHECK = 3 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
104 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
105 @classmethod |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
106 def from_configuration(cls, *, check: bool, diff: bool) -> "WriteBack": |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
107 if check and not diff: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
108 return cls.CHECK |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
109 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
110 return cls.DIFF if diff else cls.YES |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
111 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
112 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
113 class Changed(Enum): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
114 NO = 0 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
115 CACHED = 1 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
116 YES = 2 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
117 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
118 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
119 class TargetVersion(Enum): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
120 PY27 = 2 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
121 PY33 = 3 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
122 PY34 = 4 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
123 PY35 = 5 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
124 PY36 = 6 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
125 PY37 = 7 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
126 PY38 = 8 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
127 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
128 def is_python2(self) -> bool: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
129 return self is TargetVersion.PY27 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
130 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
131 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
132 PY36_VERSIONS = {TargetVersion.PY36, TargetVersion.PY37, TargetVersion.PY38} |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
133 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
134 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
135 class Feature(Enum): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
136 # All string literals are unicode |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
137 UNICODE_LITERALS = 1 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
138 F_STRINGS = 2 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
139 NUMERIC_UNDERSCORES = 3 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
140 TRAILING_COMMA_IN_CALL = 4 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
141 TRAILING_COMMA_IN_DEF = 5 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
142 # The following two feature-flags are mutually exclusive, and exactly one should be |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
143 # set for every version of python. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
144 ASYNC_IDENTIFIERS = 6 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
145 ASYNC_KEYWORDS = 7 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
146 ASSIGNMENT_EXPRESSIONS = 8 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
147 POS_ONLY_ARGUMENTS = 9 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
148 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
149 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
150 VERSION_TO_FEATURES: Dict[TargetVersion, Set[Feature]] = { |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
151 TargetVersion.PY27: {Feature.ASYNC_IDENTIFIERS}, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
152 TargetVersion.PY33: {Feature.UNICODE_LITERALS, Feature.ASYNC_IDENTIFIERS}, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
153 TargetVersion.PY34: {Feature.UNICODE_LITERALS, Feature.ASYNC_IDENTIFIERS}, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
154 TargetVersion.PY35: { |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
155 Feature.UNICODE_LITERALS, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
156 Feature.TRAILING_COMMA_IN_CALL, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
157 Feature.ASYNC_IDENTIFIERS, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
158 }, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
159 TargetVersion.PY36: { |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
160 Feature.UNICODE_LITERALS, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
161 Feature.F_STRINGS, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
162 Feature.NUMERIC_UNDERSCORES, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
163 Feature.TRAILING_COMMA_IN_CALL, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
164 Feature.TRAILING_COMMA_IN_DEF, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
165 Feature.ASYNC_IDENTIFIERS, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
166 }, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
167 TargetVersion.PY37: { |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
168 Feature.UNICODE_LITERALS, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
169 Feature.F_STRINGS, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
170 Feature.NUMERIC_UNDERSCORES, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
171 Feature.TRAILING_COMMA_IN_CALL, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
172 Feature.TRAILING_COMMA_IN_DEF, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
173 Feature.ASYNC_KEYWORDS, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
174 }, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
175 TargetVersion.PY38: { |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
176 Feature.UNICODE_LITERALS, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
177 Feature.F_STRINGS, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
178 Feature.NUMERIC_UNDERSCORES, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
179 Feature.TRAILING_COMMA_IN_CALL, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
180 Feature.TRAILING_COMMA_IN_DEF, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
181 Feature.ASYNC_KEYWORDS, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
182 Feature.ASSIGNMENT_EXPRESSIONS, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
183 Feature.POS_ONLY_ARGUMENTS, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
184 }, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
185 } |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
186 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
187 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
188 @dataclass |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
189 class FileMode: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
190 target_versions: Set[TargetVersion] = Factory(set) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
191 line_length: int = DEFAULT_LINE_LENGTH |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
192 string_normalization: bool = True |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
193 is_pyi: bool = False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
194 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
195 def get_cache_key(self) -> str: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
196 if self.target_versions: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
197 version_str = ",".join( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
198 str(version.value) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
199 for version in sorted(self.target_versions, key=lambda v: v.value) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
200 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
201 else: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
202 version_str = "-" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
203 parts = [ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
204 version_str, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
205 str(self.line_length), |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
206 str(int(self.string_normalization)), |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
207 str(int(self.is_pyi)), |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
208 ] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
209 return ".".join(parts) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
210 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
211 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
212 def supports_feature(target_versions: Set[TargetVersion], feature: Feature) -> bool: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
213 return all(feature in VERSION_TO_FEATURES[version] for version in target_versions) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
214 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
215 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
216 def read_pyproject_toml( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
217 ctx: click.Context, param: click.Parameter, value: Union[str, int, bool, None] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
218 ) -> Optional[str]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
219 """Inject Black configuration from "pyproject.toml" into defaults in `ctx`. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
220 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
221 Returns the path to a successfully found and read configuration file, None |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
222 otherwise. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
223 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
224 assert not isinstance(value, (int, bool)), "Invalid parameter type passed" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
225 if not value: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
226 root = find_project_root(ctx.params.get("src", ())) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
227 path = root / "pyproject.toml" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
228 if path.is_file(): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
229 value = str(path) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
230 else: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
231 return None |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
232 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
233 try: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
234 pyproject_toml = toml.load(value) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
235 config = pyproject_toml.get("tool", {}).get("black", {}) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
236 except (toml.TomlDecodeError, OSError) as e: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
237 raise click.FileError( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
238 filename=value, hint=f"Error reading configuration file: {e}" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
239 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
240 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
241 if not config: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
242 return None |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
243 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
244 if ctx.default_map is None: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
245 ctx.default_map = {} |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
246 ctx.default_map.update( # type: ignore # bad types in .pyi |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
247 {k.replace("--", "").replace("-", "_"): v for k, v in config.items()} |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
248 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
249 return value |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
250 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
251 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
252 @click.command(context_settings=dict(help_option_names=["-h", "--help"])) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
253 @click.option("-c", "--code", type=str, help="Format the code passed in as a string.") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
254 @click.option( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
255 "-l", |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
256 "--line-length", |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
257 type=int, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
258 default=DEFAULT_LINE_LENGTH, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
259 help="How many characters per line to allow.", |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
260 show_default=True, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
261 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
262 @click.option( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
263 "-t", |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
264 "--target-version", |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
265 type=click.Choice([v.name.lower() for v in TargetVersion]), |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
266 callback=lambda c, p, v: [TargetVersion[val.upper()] for val in v], |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
267 multiple=True, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
268 help=( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
269 "Python versions that should be supported by Black's output. [default: " |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
270 "per-file auto-detection]" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
271 ), |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
272 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
273 @click.option( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
274 "--py36", |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
275 is_flag=True, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
276 help=( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
277 "Allow using Python 3.6-only syntax on all input files. This will put " |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
278 "trailing commas in function signatures and calls also after *args and " |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
279 "**kwargs. Deprecated; use --target-version instead. " |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
280 "[default: per-file auto-detection]" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
281 ), |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
282 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
283 @click.option( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
284 "--pyi", |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
285 is_flag=True, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
286 help=( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
287 "Format all input files like typing stubs regardless of file extension " |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
288 "(useful when piping source on standard input)." |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
289 ), |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
290 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
291 @click.option( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
292 "-S", |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
293 "--skip-string-normalization", |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
294 is_flag=True, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
295 help="Don't normalize string quotes or prefixes.", |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
296 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
297 @click.option( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
298 "--check", |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
299 is_flag=True, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
300 help=( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
301 "Don't write the files back, just return the status. Return code 0 " |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
302 "means nothing would change. Return code 1 means some files would be " |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
303 "reformatted. Return code 123 means there was an internal error." |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
304 ), |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
305 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
306 @click.option( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
307 "--diff", |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
308 is_flag=True, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
309 help="Don't write the files back, just output a diff for each file on stdout.", |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
310 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
311 @click.option( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
312 "--fast/--safe", |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
313 is_flag=True, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
314 help="If --fast given, skip temporary sanity checks. [default: --safe]", |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
315 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
316 @click.option( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
317 "--include", |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
318 type=str, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
319 default=DEFAULT_INCLUDES, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
320 help=( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
321 "A regular expression that matches files and directories that should be " |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
322 "included on recursive searches. An empty value means all files are " |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
323 "included regardless of the name. Use forward slashes for directories on " |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
324 "all platforms (Windows, too). Exclusions are calculated first, inclusions " |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
325 "later." |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
326 ), |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
327 show_default=True, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
328 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
329 @click.option( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
330 "--exclude", |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
331 type=str, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
332 default=DEFAULT_EXCLUDES, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
333 help=( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
334 "A regular expression that matches files and directories that should be " |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
335 "excluded on recursive searches. An empty value means no paths are excluded. " |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
336 "Use forward slashes for directories on all platforms (Windows, too). " |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
337 "Exclusions are calculated first, inclusions later." |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
338 ), |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
339 show_default=True, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
340 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
341 @click.option( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
342 "-q", |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
343 "--quiet", |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
344 is_flag=True, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
345 help=( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
346 "Don't emit non-error messages to stderr. Errors are still emitted; " |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
347 "silence those with 2>/dev/null." |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
348 ), |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
349 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
350 @click.option( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
351 "-v", |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
352 "--verbose", |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
353 is_flag=True, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
354 help=( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
355 "Also emit messages to stderr about files that were not changed or were " |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
356 "ignored due to --exclude=." |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
357 ), |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
358 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
359 @click.version_option(version=__version__) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
360 @click.argument( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
361 "src", |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
362 nargs=-1, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
363 type=click.Path( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
364 exists=True, file_okay=True, dir_okay=True, readable=True, allow_dash=True |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
365 ), |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
366 is_eager=True, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
367 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
368 @click.option( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
369 "--config", |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
370 type=click.Path( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
371 exists=False, file_okay=True, dir_okay=False, readable=True, allow_dash=False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
372 ), |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
373 is_eager=True, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
374 callback=read_pyproject_toml, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
375 help="Read configuration from PATH.", |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
376 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
377 @click.pass_context |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
378 def main( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
379 ctx: click.Context, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
380 code: Optional[str], |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
381 line_length: int, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
382 target_version: List[TargetVersion], |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
383 check: bool, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
384 diff: bool, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
385 fast: bool, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
386 pyi: bool, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
387 py36: bool, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
388 skip_string_normalization: bool, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
389 quiet: bool, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
390 verbose: bool, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
391 include: str, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
392 exclude: str, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
393 src: Tuple[str], |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
394 config: Optional[str], |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
395 ) -> None: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
396 """The uncompromising code formatter.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
397 write_back = WriteBack.from_configuration(check=check, diff=diff) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
398 if target_version: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
399 if py36: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
400 err(f"Cannot use both --target-version and --py36") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
401 ctx.exit(2) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
402 else: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
403 versions = set(target_version) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
404 elif py36: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
405 err( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
406 "--py36 is deprecated and will be removed in a future version. " |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
407 "Use --target-version py36 instead." |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
408 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
409 versions = PY36_VERSIONS |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
410 else: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
411 # We'll autodetect later. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
412 versions = set() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
413 mode = FileMode( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
414 target_versions=versions, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
415 line_length=line_length, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
416 is_pyi=pyi, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
417 string_normalization=not skip_string_normalization, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
418 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
419 if config and verbose: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
420 out(f"Using configuration from {config}.", bold=False, fg="blue") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
421 if code is not None: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
422 print(format_str(code, mode=mode)) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
423 ctx.exit(0) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
424 try: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
425 include_regex = re_compile_maybe_verbose(include) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
426 except re.error: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
427 err(f"Invalid regular expression for include given: {include!r}") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
428 ctx.exit(2) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
429 try: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
430 exclude_regex = re_compile_maybe_verbose(exclude) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
431 except re.error: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
432 err(f"Invalid regular expression for exclude given: {exclude!r}") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
433 ctx.exit(2) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
434 report = Report(check=check, quiet=quiet, verbose=verbose) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
435 root = find_project_root(src) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
436 sources: Set[Path] = set() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
437 path_empty(src, quiet, verbose, ctx) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
438 for s in src: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
439 p = Path(s) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
440 if p.is_dir(): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
441 sources.update( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
442 gen_python_files_in_dir(p, root, include_regex, exclude_regex, report) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
443 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
444 elif p.is_file() or s == "-": |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
445 # if a file was explicitly given, we don't care about its extension |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
446 sources.add(p) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
447 else: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
448 err(f"invalid path: {s}") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
449 if len(sources) == 0: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
450 if verbose or not quiet: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
451 out("No Python files are present to be formatted. Nothing to do 😴") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
452 ctx.exit(0) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
453 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
454 if len(sources) == 1: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
455 reformat_one( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
456 src=sources.pop(), |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
457 fast=fast, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
458 write_back=write_back, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
459 mode=mode, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
460 report=report, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
461 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
462 else: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
463 reformat_many( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
464 sources=sources, fast=fast, write_back=write_back, mode=mode, report=report |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
465 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
466 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
467 if verbose or not quiet: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
468 out("Oh no! 💥 💔 💥" if report.return_code else "All done! ✨ 🍰 ✨") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
469 click.secho(str(report), err=True) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
470 ctx.exit(report.return_code) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
471 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
472 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
473 def path_empty(src: Tuple[str], quiet: bool, verbose: bool, ctx: click.Context) -> None: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
474 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
475 Exit if there is no `src` provided for formatting |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
476 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
477 if not src: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
478 if verbose or not quiet: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
479 out("No Path provided. Nothing to do 😴") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
480 ctx.exit(0) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
481 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
482 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
483 def reformat_one( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
484 src: Path, fast: bool, write_back: WriteBack, mode: FileMode, report: "Report" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
485 ) -> None: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
486 """Reformat a single file under `src` without spawning child processes. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
487 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
488 `fast`, `write_back`, and `mode` options are passed to |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
489 :func:`format_file_in_place` or :func:`format_stdin_to_stdout`. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
490 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
491 try: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
492 changed = Changed.NO |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
493 if not src.is_file() and str(src) == "-": |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
494 if format_stdin_to_stdout(fast=fast, write_back=write_back, mode=mode): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
495 changed = Changed.YES |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
496 else: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
497 cache: Cache = {} |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
498 if write_back != WriteBack.DIFF: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
499 cache = read_cache(mode) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
500 res_src = src.resolve() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
501 if res_src in cache and cache[res_src] == get_cache_info(res_src): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
502 changed = Changed.CACHED |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
503 if changed is not Changed.CACHED and format_file_in_place( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
504 src, fast=fast, write_back=write_back, mode=mode |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
505 ): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
506 changed = Changed.YES |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
507 if (write_back is WriteBack.YES and changed is not Changed.CACHED) or ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
508 write_back is WriteBack.CHECK and changed is Changed.NO |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
509 ): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
510 write_cache(cache, [src], mode) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
511 report.done(src, changed) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
512 except Exception as exc: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
513 report.failed(src, str(exc)) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
514 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
515 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
516 def reformat_many( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
517 sources: Set[Path], |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
518 fast: bool, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
519 write_back: WriteBack, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
520 mode: FileMode, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
521 report: "Report", |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
522 ) -> None: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
523 """Reformat multiple files using a ProcessPoolExecutor.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
524 loop = asyncio.get_event_loop() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
525 worker_count = os.cpu_count() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
526 if sys.platform == "win32": |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
527 # Work around https://bugs.python.org/issue26903 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
528 worker_count = min(worker_count, 61) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
529 executor = ProcessPoolExecutor(max_workers=worker_count) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
530 try: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
531 loop.run_until_complete( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
532 schedule_formatting( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
533 sources=sources, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
534 fast=fast, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
535 write_back=write_back, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
536 mode=mode, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
537 report=report, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
538 loop=loop, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
539 executor=executor, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
540 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
541 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
542 finally: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
543 shutdown(loop) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
544 executor.shutdown() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
545 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
546 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
547 async def schedule_formatting( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
548 sources: Set[Path], |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
549 fast: bool, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
550 write_back: WriteBack, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
551 mode: FileMode, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
552 report: "Report", |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
553 loop: asyncio.AbstractEventLoop, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
554 executor: Executor, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
555 ) -> None: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
556 """Run formatting of `sources` in parallel using the provided `executor`. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
557 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
558 (Use ProcessPoolExecutors for actual parallelism.) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
559 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
560 `write_back`, `fast`, and `mode` options are passed to |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
561 :func:`format_file_in_place`. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
562 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
563 cache: Cache = {} |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
564 if write_back != WriteBack.DIFF: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
565 cache = read_cache(mode) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
566 sources, cached = filter_cached(cache, sources) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
567 for src in sorted(cached): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
568 report.done(src, Changed.CACHED) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
569 if not sources: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
570 return |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
571 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
572 cancelled = [] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
573 sources_to_cache = [] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
574 lock = None |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
575 if write_back == WriteBack.DIFF: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
576 # For diff output, we need locks to ensure we don't interleave output |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
577 # from different processes. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
578 manager = Manager() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
579 lock = manager.Lock() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
580 tasks = { |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
581 asyncio.ensure_future( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
582 loop.run_in_executor( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
583 executor, format_file_in_place, src, fast, mode, write_back, lock |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
584 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
585 ): src |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
586 for src in sorted(sources) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
587 } |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
588 pending: Iterable[asyncio.Future] = tasks.keys() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
589 try: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
590 loop.add_signal_handler(signal.SIGINT, cancel, pending) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
591 loop.add_signal_handler(signal.SIGTERM, cancel, pending) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
592 except NotImplementedError: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
593 # There are no good alternatives for these on Windows. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
594 pass |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
595 while pending: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
596 done, _ = await asyncio.wait(pending, return_when=asyncio.FIRST_COMPLETED) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
597 for task in done: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
598 src = tasks.pop(task) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
599 if task.cancelled(): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
600 cancelled.append(task) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
601 elif task.exception(): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
602 report.failed(src, str(task.exception())) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
603 else: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
604 changed = Changed.YES if task.result() else Changed.NO |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
605 # If the file was written back or was successfully checked as |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
606 # well-formatted, store this information in the cache. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
607 if write_back is WriteBack.YES or ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
608 write_back is WriteBack.CHECK and changed is Changed.NO |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
609 ): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
610 sources_to_cache.append(src) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
611 report.done(src, changed) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
612 if cancelled: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
613 await asyncio.gather(*cancelled, loop=loop, return_exceptions=True) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
614 if sources_to_cache: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
615 write_cache(cache, sources_to_cache, mode) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
616 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
617 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
618 def format_file_in_place( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
619 src: Path, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
620 fast: bool, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
621 mode: FileMode, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
622 write_back: WriteBack = WriteBack.NO, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
623 lock: Any = None, # multiprocessing.Manager().Lock() is some crazy proxy |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
624 ) -> bool: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
625 """Format file under `src` path. Return True if changed. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
626 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
627 If `write_back` is DIFF, write a diff to stdout. If it is YES, write reformatted |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
628 code to the file. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
629 `mode` and `fast` options are passed to :func:`format_file_contents`. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
630 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
631 if src.suffix == ".pyi": |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
632 mode = evolve(mode, is_pyi=True) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
633 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
634 then = datetime.utcfromtimestamp(src.stat().st_mtime) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
635 with open(src, "rb") as buf: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
636 src_contents, encoding, newline = decode_bytes(buf.read()) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
637 try: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
638 dst_contents = format_file_contents(src_contents, fast=fast, mode=mode) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
639 except NothingChanged: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
640 return False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
641 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
642 if write_back == write_back.YES: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
643 with open(src, "w", encoding=encoding, newline=newline) as f: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
644 f.write(dst_contents) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
645 elif write_back == write_back.DIFF: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
646 now = datetime.utcnow() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
647 src_name = f"{src}\t{then} +0000" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
648 dst_name = f"{src}\t{now} +0000" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
649 diff_contents = diff(src_contents, dst_contents, src_name, dst_name) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
650 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
651 with lock or nullcontext(): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
652 f = io.TextIOWrapper( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
653 sys.stdout.buffer, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
654 encoding=encoding, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
655 newline=newline, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
656 write_through=True, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
657 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
658 f.write(diff_contents) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
659 f.detach() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
660 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
661 return True |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
662 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
663 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
664 def format_stdin_to_stdout( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
665 fast: bool, *, write_back: WriteBack = WriteBack.NO, mode: FileMode |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
666 ) -> bool: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
667 """Format file on stdin. Return True if changed. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
668 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
669 If `write_back` is YES, write reformatted code back to stdout. If it is DIFF, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
670 write a diff to stdout. The `mode` argument is passed to |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
671 :func:`format_file_contents`. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
672 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
673 then = datetime.utcnow() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
674 src, encoding, newline = decode_bytes(sys.stdin.buffer.read()) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
675 dst = src |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
676 try: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
677 dst = format_file_contents(src, fast=fast, mode=mode) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
678 return True |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
679 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
680 except NothingChanged: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
681 return False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
682 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
683 finally: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
684 f = io.TextIOWrapper( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
685 sys.stdout.buffer, encoding=encoding, newline=newline, write_through=True |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
686 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
687 if write_back == WriteBack.YES: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
688 f.write(dst) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
689 elif write_back == WriteBack.DIFF: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
690 now = datetime.utcnow() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
691 src_name = f"STDIN\t{then} +0000" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
692 dst_name = f"STDOUT\t{now} +0000" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
693 f.write(diff(src, dst, src_name, dst_name)) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
694 f.detach() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
695 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
696 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
697 def format_file_contents( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
698 src_contents: str, *, fast: bool, mode: FileMode |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
699 ) -> FileContent: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
700 """Reformat contents a file and return new contents. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
701 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
702 If `fast` is False, additionally confirm that the reformatted code is |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
703 valid by calling :func:`assert_equivalent` and :func:`assert_stable` on it. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
704 `mode` is passed to :func:`format_str`. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
705 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
706 if src_contents.strip() == "": |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
707 raise NothingChanged |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
708 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
709 dst_contents = format_str(src_contents, mode=mode) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
710 if src_contents == dst_contents: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
711 raise NothingChanged |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
712 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
713 if not fast: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
714 assert_equivalent(src_contents, dst_contents) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
715 assert_stable(src_contents, dst_contents, mode=mode) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
716 return dst_contents |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
717 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
718 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
719 def format_str(src_contents: str, *, mode: FileMode) -> FileContent: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
720 """Reformat a string and return new contents. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
721 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
722 `mode` determines formatting options, such as how many characters per line are |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
723 allowed. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
724 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
725 src_node = lib2to3_parse(src_contents.lstrip(), mode.target_versions) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
726 dst_contents = [] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
727 future_imports = get_future_imports(src_node) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
728 if mode.target_versions: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
729 versions = mode.target_versions |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
730 else: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
731 versions = detect_target_versions(src_node) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
732 normalize_fmt_off(src_node) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
733 lines = LineGenerator( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
734 remove_u_prefix="unicode_literals" in future_imports |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
735 or supports_feature(versions, Feature.UNICODE_LITERALS), |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
736 is_pyi=mode.is_pyi, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
737 normalize_strings=mode.string_normalization, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
738 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
739 elt = EmptyLineTracker(is_pyi=mode.is_pyi) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
740 empty_line = Line() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
741 after = 0 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
742 split_line_features = { |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
743 feature |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
744 for feature in {Feature.TRAILING_COMMA_IN_CALL, Feature.TRAILING_COMMA_IN_DEF} |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
745 if supports_feature(versions, feature) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
746 } |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
747 for current_line in lines.visit(src_node): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
748 for _ in range(after): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
749 dst_contents.append(str(empty_line)) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
750 before, after = elt.maybe_empty_lines(current_line) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
751 for _ in range(before): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
752 dst_contents.append(str(empty_line)) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
753 for line in split_line( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
754 current_line, line_length=mode.line_length, features=split_line_features |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
755 ): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
756 dst_contents.append(str(line)) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
757 return "".join(dst_contents) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
758 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
759 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
760 def decode_bytes(src: bytes) -> Tuple[FileContent, Encoding, NewLine]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
761 """Return a tuple of (decoded_contents, encoding, newline). |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
762 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
763 `newline` is either CRLF or LF but `decoded_contents` is decoded with |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
764 universal newlines (i.e. only contains LF). |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
765 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
766 srcbuf = io.BytesIO(src) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
767 encoding, lines = tokenize.detect_encoding(srcbuf.readline) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
768 if not lines: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
769 return "", encoding, "\n" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
770 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
771 newline = "\r\n" if b"\r\n" == lines[0][-2:] else "\n" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
772 srcbuf.seek(0) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
773 with io.TextIOWrapper(srcbuf, encoding) as tiow: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
774 return tiow.read(), encoding, newline |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
775 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
776 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
777 def get_grammars(target_versions: Set[TargetVersion]) -> List[Grammar]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
778 if not target_versions: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
779 # No target_version specified, so try all grammars. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
780 return [ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
781 # Python 3.7+ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
782 pygram.python_grammar_no_print_statement_no_exec_statement_async_keywords, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
783 # Python 3.0-3.6 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
784 pygram.python_grammar_no_print_statement_no_exec_statement, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
785 # Python 2.7 with future print_function import |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
786 pygram.python_grammar_no_print_statement, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
787 # Python 2.7 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
788 pygram.python_grammar, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
789 ] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
790 elif all(version.is_python2() for version in target_versions): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
791 # Python 2-only code, so try Python 2 grammars. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
792 return [ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
793 # Python 2.7 with future print_function import |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
794 pygram.python_grammar_no_print_statement, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
795 # Python 2.7 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
796 pygram.python_grammar, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
797 ] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
798 else: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
799 # Python 3-compatible code, so only try Python 3 grammar. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
800 grammars = [] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
801 # If we have to parse both, try to parse async as a keyword first |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
802 if not supports_feature(target_versions, Feature.ASYNC_IDENTIFIERS): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
803 # Python 3.7+ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
804 grammars.append( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
805 pygram.python_grammar_no_print_statement_no_exec_statement_async_keywords # noqa: B950 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
806 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
807 if not supports_feature(target_versions, Feature.ASYNC_KEYWORDS): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
808 # Python 3.0-3.6 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
809 grammars.append(pygram.python_grammar_no_print_statement_no_exec_statement) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
810 # At least one of the above branches must have been taken, because every Python |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
811 # version has exactly one of the two 'ASYNC_*' flags |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
812 return grammars |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
813 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
814 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
815 def lib2to3_parse(src_txt: str, target_versions: Iterable[TargetVersion] = ()) -> Node: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
816 """Given a string with source, return the lib2to3 Node.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
817 if src_txt[-1:] != "\n": |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
818 src_txt += "\n" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
819 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
820 for grammar in get_grammars(set(target_versions)): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
821 drv = driver.Driver(grammar, pytree.convert) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
822 try: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
823 result = drv.parse_string(src_txt, True) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
824 break |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
825 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
826 except ParseError as pe: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
827 lineno, column = pe.context[1] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
828 lines = src_txt.splitlines() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
829 try: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
830 faulty_line = lines[lineno - 1] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
831 except IndexError: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
832 faulty_line = "<line number missing in source>" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
833 exc = InvalidInput(f"Cannot parse: {lineno}:{column}: {faulty_line}") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
834 else: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
835 raise exc from None |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
836 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
837 if isinstance(result, Leaf): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
838 result = Node(syms.file_input, [result]) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
839 return result |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
840 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
841 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
842 def lib2to3_unparse(node: Node) -> str: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
843 """Given a lib2to3 node, return its string representation.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
844 code = str(node) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
845 return code |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
846 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
847 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
848 T = TypeVar("T") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
849 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
850 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
851 class Visitor(Generic[T]): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
852 """Basic lib2to3 visitor that yields things of type `T` on `visit()`.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
853 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
854 def visit(self, node: LN) -> Iterator[T]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
855 """Main method to visit `node` and its children. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
856 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
857 It tries to find a `visit_*()` method for the given `node.type`, like |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
858 `visit_simple_stmt` for Node objects or `visit_INDENT` for Leaf objects. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
859 If no dedicated `visit_*()` method is found, chooses `visit_default()` |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
860 instead. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
861 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
862 Then yields objects of type `T` from the selected visitor. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
863 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
864 if node.type < 256: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
865 name = token.tok_name[node.type] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
866 else: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
867 name = type_repr(node.type) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
868 yield from getattr(self, f"visit_{name}", self.visit_default)(node) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
869 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
870 def visit_default(self, node: LN) -> Iterator[T]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
871 """Default `visit_*()` implementation. Recurses to children of `node`.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
872 if isinstance(node, Node): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
873 for child in node.children: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
874 yield from self.visit(child) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
875 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
876 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
877 @dataclass |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
878 class DebugVisitor(Visitor[T]): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
879 tree_depth: int = 0 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
880 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
881 def visit_default(self, node: LN) -> Iterator[T]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
882 indent = " " * (2 * self.tree_depth) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
883 if isinstance(node, Node): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
884 _type = type_repr(node.type) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
885 out(f"{indent}{_type}", fg="yellow") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
886 self.tree_depth += 1 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
887 for child in node.children: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
888 yield from self.visit(child) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
889 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
890 self.tree_depth -= 1 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
891 out(f"{indent}/{_type}", fg="yellow", bold=False) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
892 else: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
893 _type = token.tok_name.get(node.type, str(node.type)) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
894 out(f"{indent}{_type}", fg="blue", nl=False) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
895 if node.prefix: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
896 # We don't have to handle prefixes for `Node` objects since |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
897 # that delegates to the first child anyway. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
898 out(f" {node.prefix!r}", fg="green", bold=False, nl=False) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
899 out(f" {node.value!r}", fg="blue", bold=False) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
900 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
901 @classmethod |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
902 def show(cls, code: Union[str, Leaf, Node]) -> None: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
903 """Pretty-print the lib2to3 AST of a given string of `code`. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
904 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
905 Convenience method for debugging. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
906 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
907 v: DebugVisitor[None] = DebugVisitor() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
908 if isinstance(code, str): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
909 code = lib2to3_parse(code) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
910 list(v.visit(code)) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
911 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
912 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
913 WHITESPACE = {token.DEDENT, token.INDENT, token.NEWLINE} |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
914 STATEMENT = { |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
915 syms.if_stmt, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
916 syms.while_stmt, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
917 syms.for_stmt, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
918 syms.try_stmt, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
919 syms.except_clause, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
920 syms.with_stmt, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
921 syms.funcdef, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
922 syms.classdef, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
923 } |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
924 STANDALONE_COMMENT = 153 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
925 token.tok_name[STANDALONE_COMMENT] = "STANDALONE_COMMENT" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
926 LOGIC_OPERATORS = {"and", "or"} |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
927 COMPARATORS = { |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
928 token.LESS, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
929 token.GREATER, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
930 token.EQEQUAL, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
931 token.NOTEQUAL, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
932 token.LESSEQUAL, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
933 token.GREATEREQUAL, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
934 } |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
935 MATH_OPERATORS = { |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
936 token.VBAR, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
937 token.CIRCUMFLEX, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
938 token.AMPER, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
939 token.LEFTSHIFT, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
940 token.RIGHTSHIFT, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
941 token.PLUS, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
942 token.MINUS, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
943 token.STAR, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
944 token.SLASH, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
945 token.DOUBLESLASH, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
946 token.PERCENT, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
947 token.AT, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
948 token.TILDE, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
949 token.DOUBLESTAR, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
950 } |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
951 STARS = {token.STAR, token.DOUBLESTAR} |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
952 VARARGS_SPECIALS = STARS | {token.SLASH} |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
953 VARARGS_PARENTS = { |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
954 syms.arglist, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
955 syms.argument, # double star in arglist |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
956 syms.trailer, # single argument to call |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
957 syms.typedargslist, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
958 syms.varargslist, # lambdas |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
959 } |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
960 UNPACKING_PARENTS = { |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
961 syms.atom, # single element of a list or set literal |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
962 syms.dictsetmaker, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
963 syms.listmaker, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
964 syms.testlist_gexp, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
965 syms.testlist_star_expr, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
966 } |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
967 TEST_DESCENDANTS = { |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
968 syms.test, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
969 syms.lambdef, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
970 syms.or_test, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
971 syms.and_test, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
972 syms.not_test, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
973 syms.comparison, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
974 syms.star_expr, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
975 syms.expr, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
976 syms.xor_expr, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
977 syms.and_expr, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
978 syms.shift_expr, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
979 syms.arith_expr, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
980 syms.trailer, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
981 syms.term, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
982 syms.power, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
983 } |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
984 ASSIGNMENTS = { |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
985 "=", |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
986 "+=", |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
987 "-=", |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
988 "*=", |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
989 "@=", |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
990 "/=", |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
991 "%=", |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
992 "&=", |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
993 "|=", |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
994 "^=", |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
995 "<<=", |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
996 ">>=", |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
997 "**=", |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
998 "//=", |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
999 } |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1000 COMPREHENSION_PRIORITY = 20 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1001 COMMA_PRIORITY = 18 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1002 TERNARY_PRIORITY = 16 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1003 LOGIC_PRIORITY = 14 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1004 STRING_PRIORITY = 12 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1005 COMPARATOR_PRIORITY = 10 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1006 MATH_PRIORITIES = { |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1007 token.VBAR: 9, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1008 token.CIRCUMFLEX: 8, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1009 token.AMPER: 7, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1010 token.LEFTSHIFT: 6, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1011 token.RIGHTSHIFT: 6, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1012 token.PLUS: 5, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1013 token.MINUS: 5, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1014 token.STAR: 4, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1015 token.SLASH: 4, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1016 token.DOUBLESLASH: 4, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1017 token.PERCENT: 4, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1018 token.AT: 4, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1019 token.TILDE: 3, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1020 token.DOUBLESTAR: 2, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1021 } |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1022 DOT_PRIORITY = 1 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1023 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1024 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1025 @dataclass |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1026 class BracketTracker: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1027 """Keeps track of brackets on a line.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1028 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1029 depth: int = 0 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1030 bracket_match: Dict[Tuple[Depth, NodeType], Leaf] = Factory(dict) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1031 delimiters: Dict[LeafID, Priority] = Factory(dict) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1032 previous: Optional[Leaf] = None |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1033 _for_loop_depths: List[int] = Factory(list) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1034 _lambda_argument_depths: List[int] = Factory(list) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1035 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1036 def mark(self, leaf: Leaf) -> None: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1037 """Mark `leaf` with bracket-related metadata. Keep track of delimiters. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1038 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1039 All leaves receive an int `bracket_depth` field that stores how deep |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1040 within brackets a given leaf is. 0 means there are no enclosing brackets |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1041 that started on this line. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1042 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1043 If a leaf is itself a closing bracket, it receives an `opening_bracket` |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1044 field that it forms a pair with. This is a one-directional link to |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1045 avoid reference cycles. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1046 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1047 If a leaf is a delimiter (a token on which Black can split the line if |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1048 needed) and it's on depth 0, its `id()` is stored in the tracker's |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1049 `delimiters` field. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1050 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1051 if leaf.type == token.COMMENT: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1052 return |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1053 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1054 self.maybe_decrement_after_for_loop_variable(leaf) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1055 self.maybe_decrement_after_lambda_arguments(leaf) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1056 if leaf.type in CLOSING_BRACKETS: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1057 self.depth -= 1 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1058 opening_bracket = self.bracket_match.pop((self.depth, leaf.type)) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1059 leaf.opening_bracket = opening_bracket |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1060 leaf.bracket_depth = self.depth |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1061 if self.depth == 0: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1062 delim = is_split_before_delimiter(leaf, self.previous) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1063 if delim and self.previous is not None: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1064 self.delimiters[id(self.previous)] = delim |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1065 else: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1066 delim = is_split_after_delimiter(leaf, self.previous) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1067 if delim: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1068 self.delimiters[id(leaf)] = delim |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1069 if leaf.type in OPENING_BRACKETS: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1070 self.bracket_match[self.depth, BRACKET[leaf.type]] = leaf |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1071 self.depth += 1 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1072 self.previous = leaf |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1073 self.maybe_increment_lambda_arguments(leaf) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1074 self.maybe_increment_for_loop_variable(leaf) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1075 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1076 def any_open_brackets(self) -> bool: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1077 """Return True if there is an yet unmatched open bracket on the line.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1078 return bool(self.bracket_match) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1079 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1080 def max_delimiter_priority(self, exclude: Iterable[LeafID] = ()) -> Priority: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1081 """Return the highest priority of a delimiter found on the line. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1082 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1083 Values are consistent with what `is_split_*_delimiter()` return. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1084 Raises ValueError on no delimiters. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1085 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1086 return max(v for k, v in self.delimiters.items() if k not in exclude) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1087 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1088 def delimiter_count_with_priority(self, priority: Priority = 0) -> int: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1089 """Return the number of delimiters with the given `priority`. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1090 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1091 If no `priority` is passed, defaults to max priority on the line. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1092 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1093 if not self.delimiters: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1094 return 0 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1095 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1096 priority = priority or self.max_delimiter_priority() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1097 return sum(1 for p in self.delimiters.values() if p == priority) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1098 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1099 def maybe_increment_for_loop_variable(self, leaf: Leaf) -> bool: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1100 """In a for loop, or comprehension, the variables are often unpacks. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1101 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1102 To avoid splitting on the comma in this situation, increase the depth of |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1103 tokens between `for` and `in`. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1104 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1105 if leaf.type == token.NAME and leaf.value == "for": |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1106 self.depth += 1 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1107 self._for_loop_depths.append(self.depth) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1108 return True |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1109 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1110 return False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1111 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1112 def maybe_decrement_after_for_loop_variable(self, leaf: Leaf) -> bool: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1113 """See `maybe_increment_for_loop_variable` above for explanation.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1114 if ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1115 self._for_loop_depths |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1116 and self._for_loop_depths[-1] == self.depth |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1117 and leaf.type == token.NAME |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1118 and leaf.value == "in" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1119 ): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1120 self.depth -= 1 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1121 self._for_loop_depths.pop() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1122 return True |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1123 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1124 return False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1125 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1126 def maybe_increment_lambda_arguments(self, leaf: Leaf) -> bool: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1127 """In a lambda expression, there might be more than one argument. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1128 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1129 To avoid splitting on the comma in this situation, increase the depth of |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1130 tokens between `lambda` and `:`. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1131 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1132 if leaf.type == token.NAME and leaf.value == "lambda": |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1133 self.depth += 1 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1134 self._lambda_argument_depths.append(self.depth) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1135 return True |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1136 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1137 return False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1138 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1139 def maybe_decrement_after_lambda_arguments(self, leaf: Leaf) -> bool: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1140 """See `maybe_increment_lambda_arguments` above for explanation.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1141 if ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1142 self._lambda_argument_depths |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1143 and self._lambda_argument_depths[-1] == self.depth |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1144 and leaf.type == token.COLON |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1145 ): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1146 self.depth -= 1 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1147 self._lambda_argument_depths.pop() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1148 return True |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1149 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1150 return False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1151 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1152 def get_open_lsqb(self) -> Optional[Leaf]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1153 """Return the most recent opening square bracket (if any).""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1154 return self.bracket_match.get((self.depth - 1, token.RSQB)) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1155 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1156 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1157 @dataclass |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1158 class Line: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1159 """Holds leaves and comments. Can be printed with `str(line)`.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1160 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1161 depth: int = 0 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1162 leaves: List[Leaf] = Factory(list) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1163 comments: Dict[LeafID, List[Leaf]] = Factory(dict) # keys ordered like `leaves` |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1164 bracket_tracker: BracketTracker = Factory(BracketTracker) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1165 inside_brackets: bool = False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1166 should_explode: bool = False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1167 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1168 def append(self, leaf: Leaf, preformatted: bool = False) -> None: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1169 """Add a new `leaf` to the end of the line. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1170 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1171 Unless `preformatted` is True, the `leaf` will receive a new consistent |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1172 whitespace prefix and metadata applied by :class:`BracketTracker`. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1173 Trailing commas are maybe removed, unpacked for loop variables are |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1174 demoted from being delimiters. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1175 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1176 Inline comments are put aside. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1177 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1178 has_value = leaf.type in BRACKETS or bool(leaf.value.strip()) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1179 if not has_value: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1180 return |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1181 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1182 if token.COLON == leaf.type and self.is_class_paren_empty: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1183 del self.leaves[-2:] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1184 if self.leaves and not preformatted: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1185 # Note: at this point leaf.prefix should be empty except for |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1186 # imports, for which we only preserve newlines. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1187 leaf.prefix += whitespace( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1188 leaf, complex_subscript=self.is_complex_subscript(leaf) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1189 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1190 if self.inside_brackets or not preformatted: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1191 self.bracket_tracker.mark(leaf) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1192 self.maybe_remove_trailing_comma(leaf) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1193 if not self.append_comment(leaf): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1194 self.leaves.append(leaf) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1195 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1196 def append_safe(self, leaf: Leaf, preformatted: bool = False) -> None: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1197 """Like :func:`append()` but disallow invalid standalone comment structure. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1198 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1199 Raises ValueError when any `leaf` is appended after a standalone comment |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1200 or when a standalone comment is not the first leaf on the line. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1201 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1202 if self.bracket_tracker.depth == 0: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1203 if self.is_comment: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1204 raise ValueError("cannot append to standalone comments") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1205 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1206 if self.leaves and leaf.type == STANDALONE_COMMENT: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1207 raise ValueError( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1208 "cannot append standalone comments to a populated line" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1209 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1210 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1211 self.append(leaf, preformatted=preformatted) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1212 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1213 @property |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1214 def is_comment(self) -> bool: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1215 """Is this line a standalone comment?""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1216 return len(self.leaves) == 1 and self.leaves[0].type == STANDALONE_COMMENT |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1217 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1218 @property |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1219 def is_decorator(self) -> bool: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1220 """Is this line a decorator?""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1221 return bool(self) and self.leaves[0].type == token.AT |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1222 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1223 @property |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1224 def is_import(self) -> bool: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1225 """Is this an import line?""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1226 return bool(self) and is_import(self.leaves[0]) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1227 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1228 @property |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1229 def is_class(self) -> bool: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1230 """Is this line a class definition?""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1231 return ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1232 bool(self) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1233 and self.leaves[0].type == token.NAME |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1234 and self.leaves[0].value == "class" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1235 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1236 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1237 @property |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1238 def is_stub_class(self) -> bool: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1239 """Is this line a class definition with a body consisting only of "..."?""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1240 return self.is_class and self.leaves[-3:] == [ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1241 Leaf(token.DOT, ".") for _ in range(3) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1242 ] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1243 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1244 @property |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1245 def is_collection_with_optional_trailing_comma(self) -> bool: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1246 """Is this line a collection literal with a trailing comma that's optional? |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1247 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1248 Note that the trailing comma in a 1-tuple is not optional. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1249 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1250 if not self.leaves or len(self.leaves) < 4: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1251 return False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1252 # Look for and address a trailing colon. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1253 if self.leaves[-1].type == token.COLON: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1254 closer = self.leaves[-2] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1255 close_index = -2 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1256 else: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1257 closer = self.leaves[-1] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1258 close_index = -1 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1259 if closer.type not in CLOSING_BRACKETS or self.inside_brackets: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1260 return False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1261 if closer.type == token.RPAR: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1262 # Tuples require an extra check, because if there's only |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1263 # one element in the tuple removing the comma unmakes the |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1264 # tuple. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1265 # |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1266 # We also check for parens before looking for the trailing |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1267 # comma because in some cases (eg assigning a dict |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1268 # literal) the literal gets wrapped in temporary parens |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1269 # during parsing. This case is covered by the |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1270 # collections.py test data. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1271 opener = closer.opening_bracket |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1272 for _open_index, leaf in enumerate(self.leaves): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1273 if leaf is opener: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1274 break |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1275 else: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1276 # Couldn't find the matching opening paren, play it safe. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1277 return False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1278 commas = 0 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1279 comma_depth = self.leaves[close_index - 1].bracket_depth |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1280 for leaf in self.leaves[_open_index + 1 : close_index]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1281 if leaf.bracket_depth == comma_depth and leaf.type == token.COMMA: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1282 commas += 1 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1283 if commas > 1: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1284 # We haven't looked yet for the trailing comma because |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1285 # we might also have caught noop parens. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1286 return self.leaves[close_index - 1].type == token.COMMA |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1287 elif commas == 1: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1288 return False # it's either a one-tuple or didn't have a trailing comma |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1289 if self.leaves[close_index - 1].type in CLOSING_BRACKETS: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1290 close_index -= 1 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1291 closer = self.leaves[close_index] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1292 if closer.type == token.RPAR: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1293 # TODO: this is a gut feeling. Will we ever see this? |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1294 return False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1295 if self.leaves[close_index - 1].type != token.COMMA: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1296 return False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1297 return True |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1298 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1299 @property |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1300 def is_def(self) -> bool: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1301 """Is this a function definition? (Also returns True for async defs.)""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1302 try: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1303 first_leaf = self.leaves[0] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1304 except IndexError: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1305 return False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1306 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1307 try: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1308 second_leaf: Optional[Leaf] = self.leaves[1] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1309 except IndexError: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1310 second_leaf = None |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1311 return (first_leaf.type == token.NAME and first_leaf.value == "def") or ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1312 first_leaf.type == token.ASYNC |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1313 and second_leaf is not None |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1314 and second_leaf.type == token.NAME |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1315 and second_leaf.value == "def" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1316 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1317 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1318 @property |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1319 def is_class_paren_empty(self) -> bool: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1320 """Is this a class with no base classes but using parentheses? |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1321 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1322 Those are unnecessary and should be removed. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1323 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1324 return ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1325 bool(self) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1326 and len(self.leaves) == 4 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1327 and self.is_class |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1328 and self.leaves[2].type == token.LPAR |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1329 and self.leaves[2].value == "(" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1330 and self.leaves[3].type == token.RPAR |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1331 and self.leaves[3].value == ")" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1332 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1333 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1334 @property |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1335 def is_triple_quoted_string(self) -> bool: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1336 """Is the line a triple quoted string?""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1337 return ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1338 bool(self) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1339 and self.leaves[0].type == token.STRING |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1340 and self.leaves[0].value.startswith(('"""', "'''")) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1341 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1342 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1343 def contains_standalone_comments(self, depth_limit: int = sys.maxsize) -> bool: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1344 """If so, needs to be split before emitting.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1345 for leaf in self.leaves: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1346 if leaf.type == STANDALONE_COMMENT: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1347 if leaf.bracket_depth <= depth_limit: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1348 return True |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1349 return False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1350 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1351 def contains_uncollapsable_type_comments(self) -> bool: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1352 ignored_ids = set() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1353 try: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1354 last_leaf = self.leaves[-1] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1355 ignored_ids.add(id(last_leaf)) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1356 if last_leaf.type == token.COMMA or ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1357 last_leaf.type == token.RPAR and not last_leaf.value |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1358 ): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1359 # When trailing commas or optional parens are inserted by Black for |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1360 # consistency, comments after the previous last element are not moved |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1361 # (they don't have to, rendering will still be correct). So we ignore |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1362 # trailing commas and invisible. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1363 last_leaf = self.leaves[-2] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1364 ignored_ids.add(id(last_leaf)) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1365 except IndexError: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1366 return False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1367 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1368 # A type comment is uncollapsable if it is attached to a leaf |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1369 # that isn't at the end of the line (since that could cause it |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1370 # to get associated to a different argument) or if there are |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1371 # comments before it (since that could cause it to get hidden |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1372 # behind a comment. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1373 comment_seen = False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1374 for leaf_id, comments in self.comments.items(): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1375 for comment in comments: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1376 if is_type_comment(comment): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1377 if leaf_id not in ignored_ids or comment_seen: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1378 return True |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1379 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1380 comment_seen = True |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1381 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1382 return False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1383 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1384 def contains_unsplittable_type_ignore(self) -> bool: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1385 if not self.leaves: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1386 return False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1387 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1388 # If a 'type: ignore' is attached to the end of a line, we |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1389 # can't split the line, because we can't know which of the |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1390 # subexpressions the ignore was meant to apply to. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1391 # |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1392 # We only want this to apply to actual physical lines from the |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1393 # original source, though: we don't want the presence of a |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1394 # 'type: ignore' at the end of a multiline expression to |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1395 # justify pushing it all onto one line. Thus we |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1396 # (unfortunately) need to check the actual source lines and |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1397 # only report an unsplittable 'type: ignore' if this line was |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1398 # one line in the original code. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1399 if self.leaves[0].lineno == self.leaves[-1].lineno: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1400 for comment in self.comments.get(id(self.leaves[-1]), []): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1401 if is_type_comment(comment, " ignore"): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1402 return True |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1403 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1404 return False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1405 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1406 def contains_multiline_strings(self) -> bool: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1407 for leaf in self.leaves: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1408 if is_multiline_string(leaf): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1409 return True |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1410 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1411 return False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1412 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1413 def maybe_remove_trailing_comma(self, closing: Leaf) -> bool: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1414 """Remove trailing comma if there is one and it's safe.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1415 if not (self.leaves and self.leaves[-1].type == token.COMMA): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1416 return False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1417 # We remove trailing commas only in the case of importing a |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1418 # single name from a module. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1419 if not ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1420 self.leaves |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1421 and self.is_import |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1422 and len(self.leaves) > 4 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1423 and self.leaves[-1].type == token.COMMA |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1424 and closing.type in CLOSING_BRACKETS |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1425 and self.leaves[-4].type == token.NAME |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1426 and ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1427 # regular `from foo import bar,` |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1428 self.leaves[-4].value == "import" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1429 # `from foo import (bar as baz,) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1430 or ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1431 len(self.leaves) > 6 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1432 and self.leaves[-6].value == "import" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1433 and self.leaves[-3].value == "as" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1434 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1435 # `from foo import bar as baz,` |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1436 or ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1437 len(self.leaves) > 5 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1438 and self.leaves[-5].value == "import" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1439 and self.leaves[-3].value == "as" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1440 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1441 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1442 and closing.type == token.RPAR |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1443 ): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1444 return False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1445 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1446 self.remove_trailing_comma() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1447 return True |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1448 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1449 def append_comment(self, comment: Leaf) -> bool: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1450 """Add an inline or standalone comment to the line.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1451 if ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1452 comment.type == STANDALONE_COMMENT |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1453 and self.bracket_tracker.any_open_brackets() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1454 ): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1455 comment.prefix = "" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1456 return False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1457 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1458 if comment.type != token.COMMENT: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1459 return False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1460 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1461 if not self.leaves: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1462 comment.type = STANDALONE_COMMENT |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1463 comment.prefix = "" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1464 return False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1465 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1466 last_leaf = self.leaves[-1] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1467 if ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1468 last_leaf.type == token.RPAR |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1469 and not last_leaf.value |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1470 and last_leaf.parent |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1471 and len(list(last_leaf.parent.leaves())) <= 3 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1472 and not is_type_comment(comment) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1473 ): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1474 # Comments on an optional parens wrapping a single leaf should belong to |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1475 # the wrapped node except if it's a type comment. Pinning the comment like |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1476 # this avoids unstable formatting caused by comment migration. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1477 if len(self.leaves) < 2: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1478 comment.type = STANDALONE_COMMENT |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1479 comment.prefix = "" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1480 return False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1481 last_leaf = self.leaves[-2] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1482 self.comments.setdefault(id(last_leaf), []).append(comment) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1483 return True |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1484 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1485 def comments_after(self, leaf: Leaf) -> List[Leaf]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1486 """Generate comments that should appear directly after `leaf`.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1487 return self.comments.get(id(leaf), []) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1488 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1489 def remove_trailing_comma(self) -> None: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1490 """Remove the trailing comma and moves the comments attached to it.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1491 trailing_comma = self.leaves.pop() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1492 trailing_comma_comments = self.comments.pop(id(trailing_comma), []) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1493 self.comments.setdefault(id(self.leaves[-1]), []).extend( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1494 trailing_comma_comments |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1495 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1496 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1497 def is_complex_subscript(self, leaf: Leaf) -> bool: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1498 """Return True iff `leaf` is part of a slice with non-trivial exprs.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1499 open_lsqb = self.bracket_tracker.get_open_lsqb() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1500 if open_lsqb is None: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1501 return False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1502 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1503 subscript_start = open_lsqb.next_sibling |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1504 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1505 if isinstance(subscript_start, Node): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1506 if subscript_start.type == syms.listmaker: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1507 return False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1508 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1509 if subscript_start.type == syms.subscriptlist: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1510 subscript_start = child_towards(subscript_start, leaf) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1511 return subscript_start is not None and any( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1512 n.type in TEST_DESCENDANTS for n in subscript_start.pre_order() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1513 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1514 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1515 def __str__(self) -> str: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1516 """Render the line.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1517 if not self: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1518 return "\n" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1519 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1520 indent = " " * self.depth |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1521 leaves = iter(self.leaves) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1522 first = next(leaves) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1523 res = f"{first.prefix}{indent}{first.value}" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1524 for leaf in leaves: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1525 res += str(leaf) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1526 for comment in itertools.chain.from_iterable(self.comments.values()): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1527 res += str(comment) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1528 return res + "\n" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1529 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1530 def __bool__(self) -> bool: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1531 """Return True if the line has leaves or comments.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1532 return bool(self.leaves or self.comments) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1533 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1534 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1535 @dataclass |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1536 class EmptyLineTracker: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1537 """Provides a stateful method that returns the number of potential extra |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1538 empty lines needed before and after the currently processed line. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1539 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1540 Note: this tracker works on lines that haven't been split yet. It assumes |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1541 the prefix of the first leaf consists of optional newlines. Those newlines |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1542 are consumed by `maybe_empty_lines()` and included in the computation. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1543 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1544 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1545 is_pyi: bool = False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1546 previous_line: Optional[Line] = None |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1547 previous_after: int = 0 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1548 previous_defs: List[int] = Factory(list) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1549 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1550 def maybe_empty_lines(self, current_line: Line) -> Tuple[int, int]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1551 """Return the number of extra empty lines before and after the `current_line`. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1552 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1553 This is for separating `def`, `async def` and `class` with extra empty |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1554 lines (two on module-level). |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1555 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1556 before, after = self._maybe_empty_lines(current_line) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1557 before = ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1558 # Black should not insert empty lines at the beginning |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1559 # of the file |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1560 0 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1561 if self.previous_line is None |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1562 else before - self.previous_after |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1563 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1564 self.previous_after = after |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1565 self.previous_line = current_line |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1566 return before, after |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1567 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1568 def _maybe_empty_lines(self, current_line: Line) -> Tuple[int, int]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1569 max_allowed = 1 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1570 if current_line.depth == 0: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1571 max_allowed = 1 if self.is_pyi else 2 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1572 if current_line.leaves: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1573 # Consume the first leaf's extra newlines. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1574 first_leaf = current_line.leaves[0] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1575 before = first_leaf.prefix.count("\n") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1576 before = min(before, max_allowed) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1577 first_leaf.prefix = "" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1578 else: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1579 before = 0 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1580 depth = current_line.depth |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1581 while self.previous_defs and self.previous_defs[-1] >= depth: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1582 self.previous_defs.pop() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1583 if self.is_pyi: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1584 before = 0 if depth else 1 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1585 else: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1586 before = 1 if depth else 2 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1587 if current_line.is_decorator or current_line.is_def or current_line.is_class: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1588 return self._maybe_empty_lines_for_class_or_def(current_line, before) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1589 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1590 if ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1591 self.previous_line |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1592 and self.previous_line.is_import |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1593 and not current_line.is_import |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1594 and depth == self.previous_line.depth |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1595 ): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1596 return (before or 1), 0 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1597 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1598 if ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1599 self.previous_line |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1600 and self.previous_line.is_class |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1601 and current_line.is_triple_quoted_string |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1602 ): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1603 return before, 1 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1604 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1605 return before, 0 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1606 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1607 def _maybe_empty_lines_for_class_or_def( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1608 self, current_line: Line, before: int |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1609 ) -> Tuple[int, int]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1610 if not current_line.is_decorator: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1611 self.previous_defs.append(current_line.depth) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1612 if self.previous_line is None: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1613 # Don't insert empty lines before the first line in the file. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1614 return 0, 0 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1615 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1616 if self.previous_line.is_decorator: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1617 return 0, 0 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1618 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1619 if self.previous_line.depth < current_line.depth and ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1620 self.previous_line.is_class or self.previous_line.is_def |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1621 ): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1622 return 0, 0 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1623 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1624 if ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1625 self.previous_line.is_comment |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1626 and self.previous_line.depth == current_line.depth |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1627 and before == 0 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1628 ): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1629 return 0, 0 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1630 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1631 if self.is_pyi: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1632 if self.previous_line.depth > current_line.depth: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1633 newlines = 1 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1634 elif current_line.is_class or self.previous_line.is_class: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1635 if current_line.is_stub_class and self.previous_line.is_stub_class: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1636 # No blank line between classes with an empty body |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1637 newlines = 0 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1638 else: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1639 newlines = 1 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1640 elif current_line.is_def and not self.previous_line.is_def: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1641 # Blank line between a block of functions and a block of non-functions |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1642 newlines = 1 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1643 else: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1644 newlines = 0 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1645 else: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1646 newlines = 2 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1647 if current_line.depth and newlines: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1648 newlines -= 1 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1649 return newlines, 0 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1650 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1651 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1652 @dataclass |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1653 class LineGenerator(Visitor[Line]): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1654 """Generates reformatted Line objects. Empty lines are not emitted. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1655 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1656 Note: destroys the tree it's visiting by mutating prefixes of its leaves |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1657 in ways that will no longer stringify to valid Python code on the tree. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1658 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1659 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1660 is_pyi: bool = False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1661 normalize_strings: bool = True |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1662 current_line: Line = Factory(Line) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1663 remove_u_prefix: bool = False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1664 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1665 def line(self, indent: int = 0) -> Iterator[Line]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1666 """Generate a line. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1667 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1668 If the line is empty, only emit if it makes sense. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1669 If the line is too long, split it first and then generate. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1670 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1671 If any lines were generated, set up a new current_line. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1672 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1673 if not self.current_line: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1674 self.current_line.depth += indent |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1675 return # Line is empty, don't emit. Creating a new one unnecessary. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1676 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1677 complete_line = self.current_line |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1678 self.current_line = Line(depth=complete_line.depth + indent) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1679 yield complete_line |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1680 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1681 def visit_default(self, node: LN) -> Iterator[Line]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1682 """Default `visit_*()` implementation. Recurses to children of `node`.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1683 if isinstance(node, Leaf): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1684 any_open_brackets = self.current_line.bracket_tracker.any_open_brackets() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1685 for comment in generate_comments(node): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1686 if any_open_brackets: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1687 # any comment within brackets is subject to splitting |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1688 self.current_line.append(comment) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1689 elif comment.type == token.COMMENT: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1690 # regular trailing comment |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1691 self.current_line.append(comment) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1692 yield from self.line() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1693 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1694 else: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1695 # regular standalone comment |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1696 yield from self.line() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1697 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1698 self.current_line.append(comment) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1699 yield from self.line() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1700 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1701 normalize_prefix(node, inside_brackets=any_open_brackets) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1702 if self.normalize_strings and node.type == token.STRING: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1703 normalize_string_prefix(node, remove_u_prefix=self.remove_u_prefix) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1704 normalize_string_quotes(node) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1705 if node.type == token.NUMBER: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1706 normalize_numeric_literal(node) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1707 if node.type not in WHITESPACE: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1708 self.current_line.append(node) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1709 yield from super().visit_default(node) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1710 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1711 def visit_atom(self, node: Node) -> Iterator[Line]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1712 # Always make parentheses invisible around a single node, because it should |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1713 # not be needed (except in the case of yield, where removing the parentheses |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1714 # produces a SyntaxError). |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1715 if ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1716 len(node.children) == 3 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1717 and isinstance(node.children[0], Leaf) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1718 and node.children[0].type == token.LPAR |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1719 and isinstance(node.children[2], Leaf) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1720 and node.children[2].type == token.RPAR |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1721 and isinstance(node.children[1], Leaf) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1722 and not ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1723 node.children[1].type == token.NAME |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1724 and node.children[1].value == "yield" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1725 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1726 ): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1727 node.children[0].value = "" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1728 node.children[2].value = "" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1729 yield from super().visit_default(node) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1730 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1731 def visit_factor(self, node: Node) -> Iterator[Line]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1732 """Force parentheses between a unary op and a binary power: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1733 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1734 -2 ** 8 -> -(2 ** 8) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1735 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1736 child = node.children[1] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1737 if child.type == syms.power and len(child.children) == 3: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1738 lpar = Leaf(token.LPAR, "(") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1739 rpar = Leaf(token.RPAR, ")") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1740 index = child.remove() or 0 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1741 node.insert_child(index, Node(syms.atom, [lpar, child, rpar])) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1742 yield from self.visit_default(node) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1743 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1744 def visit_INDENT(self, node: Node) -> Iterator[Line]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1745 """Increase indentation level, maybe yield a line.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1746 # In blib2to3 INDENT never holds comments. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1747 yield from self.line(+1) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1748 yield from self.visit_default(node) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1749 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1750 def visit_DEDENT(self, node: Node) -> Iterator[Line]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1751 """Decrease indentation level, maybe yield a line.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1752 # The current line might still wait for trailing comments. At DEDENT time |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1753 # there won't be any (they would be prefixes on the preceding NEWLINE). |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1754 # Emit the line then. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1755 yield from self.line() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1756 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1757 # While DEDENT has no value, its prefix may contain standalone comments |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1758 # that belong to the current indentation level. Get 'em. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1759 yield from self.visit_default(node) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1760 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1761 # Finally, emit the dedent. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1762 yield from self.line(-1) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1763 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1764 def visit_stmt( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1765 self, node: Node, keywords: Set[str], parens: Set[str] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1766 ) -> Iterator[Line]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1767 """Visit a statement. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1768 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1769 This implementation is shared for `if`, `while`, `for`, `try`, `except`, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1770 `def`, `with`, `class`, `assert` and assignments. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1771 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1772 The relevant Python language `keywords` for a given statement will be |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1773 NAME leaves within it. This methods puts those on a separate line. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1774 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1775 `parens` holds a set of string leaf values immediately after which |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1776 invisible parens should be put. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1777 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1778 normalize_invisible_parens(node, parens_after=parens) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1779 for child in node.children: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1780 if child.type == token.NAME and child.value in keywords: # type: ignore |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1781 yield from self.line() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1782 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1783 yield from self.visit(child) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1784 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1785 def visit_suite(self, node: Node) -> Iterator[Line]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1786 """Visit a suite.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1787 if self.is_pyi and is_stub_suite(node): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1788 yield from self.visit(node.children[2]) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1789 else: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1790 yield from self.visit_default(node) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1791 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1792 def visit_simple_stmt(self, node: Node) -> Iterator[Line]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1793 """Visit a statement without nested statements.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1794 is_suite_like = node.parent and node.parent.type in STATEMENT |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1795 if is_suite_like: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1796 if self.is_pyi and is_stub_body(node): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1797 yield from self.visit_default(node) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1798 else: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1799 yield from self.line(+1) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1800 yield from self.visit_default(node) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1801 yield from self.line(-1) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1802 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1803 else: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1804 if not self.is_pyi or not node.parent or not is_stub_suite(node.parent): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1805 yield from self.line() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1806 yield from self.visit_default(node) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1807 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1808 def visit_async_stmt(self, node: Node) -> Iterator[Line]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1809 """Visit `async def`, `async for`, `async with`.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1810 yield from self.line() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1811 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1812 children = iter(node.children) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1813 for child in children: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1814 yield from self.visit(child) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1815 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1816 if child.type == token.ASYNC: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1817 break |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1818 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1819 internal_stmt = next(children) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1820 for child in internal_stmt.children: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1821 yield from self.visit(child) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1822 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1823 def visit_decorators(self, node: Node) -> Iterator[Line]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1824 """Visit decorators.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1825 for child in node.children: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1826 yield from self.line() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1827 yield from self.visit(child) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1828 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1829 def visit_SEMI(self, leaf: Leaf) -> Iterator[Line]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1830 """Remove a semicolon and put the other statement on a separate line.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1831 yield from self.line() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1832 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1833 def visit_ENDMARKER(self, leaf: Leaf) -> Iterator[Line]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1834 """End of file. Process outstanding comments and end with a newline.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1835 yield from self.visit_default(leaf) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1836 yield from self.line() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1837 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1838 def visit_STANDALONE_COMMENT(self, leaf: Leaf) -> Iterator[Line]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1839 if not self.current_line.bracket_tracker.any_open_brackets(): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1840 yield from self.line() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1841 yield from self.visit_default(leaf) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1842 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1843 def __attrs_post_init__(self) -> None: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1844 """You are in a twisty little maze of passages.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1845 v = self.visit_stmt |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1846 Ø: Set[str] = set() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1847 self.visit_assert_stmt = partial(v, keywords={"assert"}, parens={"assert", ","}) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1848 self.visit_if_stmt = partial( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1849 v, keywords={"if", "else", "elif"}, parens={"if", "elif"} |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1850 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1851 self.visit_while_stmt = partial(v, keywords={"while", "else"}, parens={"while"}) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1852 self.visit_for_stmt = partial(v, keywords={"for", "else"}, parens={"for", "in"}) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1853 self.visit_try_stmt = partial( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1854 v, keywords={"try", "except", "else", "finally"}, parens=Ø |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1855 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1856 self.visit_except_clause = partial(v, keywords={"except"}, parens=Ø) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1857 self.visit_with_stmt = partial(v, keywords={"with"}, parens=Ø) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1858 self.visit_funcdef = partial(v, keywords={"def"}, parens=Ø) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1859 self.visit_classdef = partial(v, keywords={"class"}, parens=Ø) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1860 self.visit_expr_stmt = partial(v, keywords=Ø, parens=ASSIGNMENTS) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1861 self.visit_return_stmt = partial(v, keywords={"return"}, parens={"return"}) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1862 self.visit_import_from = partial(v, keywords=Ø, parens={"import"}) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1863 self.visit_del_stmt = partial(v, keywords=Ø, parens={"del"}) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1864 self.visit_async_funcdef = self.visit_async_stmt |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1865 self.visit_decorated = self.visit_decorators |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1866 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1867 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1868 IMPLICIT_TUPLE = {syms.testlist, syms.testlist_star_expr, syms.exprlist} |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1869 BRACKET = {token.LPAR: token.RPAR, token.LSQB: token.RSQB, token.LBRACE: token.RBRACE} |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1870 OPENING_BRACKETS = set(BRACKET.keys()) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1871 CLOSING_BRACKETS = set(BRACKET.values()) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1872 BRACKETS = OPENING_BRACKETS | CLOSING_BRACKETS |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1873 ALWAYS_NO_SPACE = CLOSING_BRACKETS | {token.COMMA, STANDALONE_COMMENT} |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1874 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1875 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1876 def whitespace(leaf: Leaf, *, complex_subscript: bool) -> str: # noqa: C901 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1877 """Return whitespace prefix if needed for the given `leaf`. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1878 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1879 `complex_subscript` signals whether the given leaf is part of a subscription |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1880 which has non-trivial arguments, like arithmetic expressions or function calls. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1881 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1882 NO = "" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1883 SPACE = " " |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1884 DOUBLESPACE = " " |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1885 t = leaf.type |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1886 p = leaf.parent |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1887 v = leaf.value |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1888 if t in ALWAYS_NO_SPACE: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1889 return NO |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1890 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1891 if t == token.COMMENT: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1892 return DOUBLESPACE |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1893 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1894 assert p is not None, f"INTERNAL ERROR: hand-made leaf without parent: {leaf!r}" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1895 if t == token.COLON and p.type not in { |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1896 syms.subscript, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1897 syms.subscriptlist, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1898 syms.sliceop, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1899 }: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1900 return NO |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1901 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1902 prev = leaf.prev_sibling |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1903 if not prev: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1904 prevp = preceding_leaf(p) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1905 if not prevp or prevp.type in OPENING_BRACKETS: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1906 return NO |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1907 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1908 if t == token.COLON: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1909 if prevp.type == token.COLON: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1910 return NO |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1911 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1912 elif prevp.type != token.COMMA and not complex_subscript: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1913 return NO |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1914 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1915 return SPACE |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1916 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1917 if prevp.type == token.EQUAL: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1918 if prevp.parent: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1919 if prevp.parent.type in { |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1920 syms.arglist, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1921 syms.argument, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1922 syms.parameters, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1923 syms.varargslist, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1924 }: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1925 return NO |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1926 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1927 elif prevp.parent.type == syms.typedargslist: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1928 # A bit hacky: if the equal sign has whitespace, it means we |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1929 # previously found it's a typed argument. So, we're using |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1930 # that, too. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1931 return prevp.prefix |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1932 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1933 elif prevp.type in VARARGS_SPECIALS: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1934 if is_vararg(prevp, within=VARARGS_PARENTS | UNPACKING_PARENTS): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1935 return NO |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1936 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1937 elif prevp.type == token.COLON: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1938 if prevp.parent and prevp.parent.type in {syms.subscript, syms.sliceop}: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1939 return SPACE if complex_subscript else NO |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1940 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1941 elif ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1942 prevp.parent |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1943 and prevp.parent.type == syms.factor |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1944 and prevp.type in MATH_OPERATORS |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1945 ): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1946 return NO |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1947 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1948 elif ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1949 prevp.type == token.RIGHTSHIFT |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1950 and prevp.parent |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1951 and prevp.parent.type == syms.shift_expr |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1952 and prevp.prev_sibling |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1953 and prevp.prev_sibling.type == token.NAME |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1954 and prevp.prev_sibling.value == "print" # type: ignore |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1955 ): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1956 # Python 2 print chevron |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1957 return NO |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1958 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1959 elif prev.type in OPENING_BRACKETS: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1960 return NO |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1961 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1962 if p.type in {syms.parameters, syms.arglist}: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1963 # untyped function signatures or calls |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1964 if not prev or prev.type != token.COMMA: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1965 return NO |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1966 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1967 elif p.type == syms.varargslist: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1968 # lambdas |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1969 if prev and prev.type != token.COMMA: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1970 return NO |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1971 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1972 elif p.type == syms.typedargslist: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1973 # typed function signatures |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1974 if not prev: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1975 return NO |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1976 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1977 if t == token.EQUAL: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1978 if prev.type != syms.tname: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1979 return NO |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1980 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1981 elif prev.type == token.EQUAL: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1982 # A bit hacky: if the equal sign has whitespace, it means we |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1983 # previously found it's a typed argument. So, we're using that, too. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1984 return prev.prefix |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1985 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1986 elif prev.type != token.COMMA: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1987 return NO |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1988 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1989 elif p.type == syms.tname: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1990 # type names |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1991 if not prev: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1992 prevp = preceding_leaf(p) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1993 if not prevp or prevp.type != token.COMMA: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1994 return NO |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1995 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1996 elif p.type == syms.trailer: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1997 # attributes and calls |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1998 if t == token.LPAR or t == token.RPAR: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1999 return NO |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2000 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2001 if not prev: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2002 if t == token.DOT: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2003 prevp = preceding_leaf(p) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2004 if not prevp or prevp.type != token.NUMBER: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2005 return NO |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2006 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2007 elif t == token.LSQB: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2008 return NO |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2009 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2010 elif prev.type != token.COMMA: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2011 return NO |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2012 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2013 elif p.type == syms.argument: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2014 # single argument |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2015 if t == token.EQUAL: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2016 return NO |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2017 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2018 if not prev: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2019 prevp = preceding_leaf(p) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2020 if not prevp or prevp.type == token.LPAR: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2021 return NO |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2022 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2023 elif prev.type in {token.EQUAL} | VARARGS_SPECIALS: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2024 return NO |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2025 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2026 elif p.type == syms.decorator: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2027 # decorators |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2028 return NO |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2029 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2030 elif p.type == syms.dotted_name: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2031 if prev: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2032 return NO |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2033 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2034 prevp = preceding_leaf(p) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2035 if not prevp or prevp.type == token.AT or prevp.type == token.DOT: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2036 return NO |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2037 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2038 elif p.type == syms.classdef: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2039 if t == token.LPAR: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2040 return NO |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2041 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2042 if prev and prev.type == token.LPAR: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2043 return NO |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2044 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2045 elif p.type in {syms.subscript, syms.sliceop}: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2046 # indexing |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2047 if not prev: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2048 assert p.parent is not None, "subscripts are always parented" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2049 if p.parent.type == syms.subscriptlist: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2050 return SPACE |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2051 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2052 return NO |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2053 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2054 elif not complex_subscript: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2055 return NO |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2056 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2057 elif p.type == syms.atom: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2058 if prev and t == token.DOT: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2059 # dots, but not the first one. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2060 return NO |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2061 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2062 elif p.type == syms.dictsetmaker: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2063 # dict unpacking |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2064 if prev and prev.type == token.DOUBLESTAR: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2065 return NO |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2066 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2067 elif p.type in {syms.factor, syms.star_expr}: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2068 # unary ops |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2069 if not prev: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2070 prevp = preceding_leaf(p) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2071 if not prevp or prevp.type in OPENING_BRACKETS: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2072 return NO |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2073 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2074 prevp_parent = prevp.parent |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2075 assert prevp_parent is not None |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2076 if prevp.type == token.COLON and prevp_parent.type in { |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2077 syms.subscript, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2078 syms.sliceop, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2079 }: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2080 return NO |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2081 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2082 elif prevp.type == token.EQUAL and prevp_parent.type == syms.argument: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2083 return NO |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2084 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2085 elif t in {token.NAME, token.NUMBER, token.STRING}: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2086 return NO |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2087 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2088 elif p.type == syms.import_from: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2089 if t == token.DOT: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2090 if prev and prev.type == token.DOT: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2091 return NO |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2092 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2093 elif t == token.NAME: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2094 if v == "import": |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2095 return SPACE |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2096 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2097 if prev and prev.type == token.DOT: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2098 return NO |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2099 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2100 elif p.type == syms.sliceop: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2101 return NO |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2102 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2103 return SPACE |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2104 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2105 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2106 def preceding_leaf(node: Optional[LN]) -> Optional[Leaf]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2107 """Return the first leaf that precedes `node`, if any.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2108 while node: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2109 res = node.prev_sibling |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2110 if res: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2111 if isinstance(res, Leaf): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2112 return res |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2113 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2114 try: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2115 return list(res.leaves())[-1] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2116 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2117 except IndexError: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2118 return None |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2119 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2120 node = node.parent |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2121 return None |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2122 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2123 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2124 def child_towards(ancestor: Node, descendant: LN) -> Optional[LN]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2125 """Return the child of `ancestor` that contains `descendant`.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2126 node: Optional[LN] = descendant |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2127 while node and node.parent != ancestor: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2128 node = node.parent |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2129 return node |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2130 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2131 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2132 def container_of(leaf: Leaf) -> LN: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2133 """Return `leaf` or one of its ancestors that is the topmost container of it. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2134 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2135 By "container" we mean a node where `leaf` is the very first child. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2136 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2137 same_prefix = leaf.prefix |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2138 container: LN = leaf |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2139 while container: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2140 parent = container.parent |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2141 if parent is None: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2142 break |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2143 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2144 if parent.children[0].prefix != same_prefix: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2145 break |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2146 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2147 if parent.type == syms.file_input: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2148 break |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2149 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2150 if parent.prev_sibling is not None and parent.prev_sibling.type in BRACKETS: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2151 break |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2152 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2153 container = parent |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2154 return container |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2155 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2156 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2157 def is_split_after_delimiter(leaf: Leaf, previous: Optional[Leaf] = None) -> Priority: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2158 """Return the priority of the `leaf` delimiter, given a line break after it. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2159 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2160 The delimiter priorities returned here are from those delimiters that would |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2161 cause a line break after themselves. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2162 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2163 Higher numbers are higher priority. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2164 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2165 if leaf.type == token.COMMA: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2166 return COMMA_PRIORITY |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2167 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2168 return 0 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2169 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2170 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2171 def is_split_before_delimiter(leaf: Leaf, previous: Optional[Leaf] = None) -> Priority: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2172 """Return the priority of the `leaf` delimiter, given a line break before it. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2173 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2174 The delimiter priorities returned here are from those delimiters that would |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2175 cause a line break before themselves. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2176 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2177 Higher numbers are higher priority. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2178 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2179 if is_vararg(leaf, within=VARARGS_PARENTS | UNPACKING_PARENTS): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2180 # * and ** might also be MATH_OPERATORS but in this case they are not. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2181 # Don't treat them as a delimiter. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2182 return 0 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2183 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2184 if ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2185 leaf.type == token.DOT |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2186 and leaf.parent |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2187 and leaf.parent.type not in {syms.import_from, syms.dotted_name} |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2188 and (previous is None or previous.type in CLOSING_BRACKETS) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2189 ): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2190 return DOT_PRIORITY |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2191 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2192 if ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2193 leaf.type in MATH_OPERATORS |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2194 and leaf.parent |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2195 and leaf.parent.type not in {syms.factor, syms.star_expr} |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2196 ): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2197 return MATH_PRIORITIES[leaf.type] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2198 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2199 if leaf.type in COMPARATORS: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2200 return COMPARATOR_PRIORITY |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2201 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2202 if ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2203 leaf.type == token.STRING |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2204 and previous is not None |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2205 and previous.type == token.STRING |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2206 ): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2207 return STRING_PRIORITY |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2208 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2209 if leaf.type not in {token.NAME, token.ASYNC}: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2210 return 0 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2211 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2212 if ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2213 leaf.value == "for" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2214 and leaf.parent |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2215 and leaf.parent.type in {syms.comp_for, syms.old_comp_for} |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2216 or leaf.type == token.ASYNC |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2217 ): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2218 if ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2219 not isinstance(leaf.prev_sibling, Leaf) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2220 or leaf.prev_sibling.value != "async" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2221 ): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2222 return COMPREHENSION_PRIORITY |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2223 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2224 if ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2225 leaf.value == "if" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2226 and leaf.parent |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2227 and leaf.parent.type in {syms.comp_if, syms.old_comp_if} |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2228 ): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2229 return COMPREHENSION_PRIORITY |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2230 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2231 if leaf.value in {"if", "else"} and leaf.parent and leaf.parent.type == syms.test: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2232 return TERNARY_PRIORITY |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2233 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2234 if leaf.value == "is": |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2235 return COMPARATOR_PRIORITY |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2236 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2237 if ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2238 leaf.value == "in" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2239 and leaf.parent |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2240 and leaf.parent.type in {syms.comp_op, syms.comparison} |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2241 and not ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2242 previous is not None |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2243 and previous.type == token.NAME |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2244 and previous.value == "not" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2245 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2246 ): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2247 return COMPARATOR_PRIORITY |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2248 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2249 if ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2250 leaf.value == "not" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2251 and leaf.parent |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2252 and leaf.parent.type == syms.comp_op |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2253 and not ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2254 previous is not None |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2255 and previous.type == token.NAME |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2256 and previous.value == "is" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2257 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2258 ): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2259 return COMPARATOR_PRIORITY |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2260 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2261 if leaf.value in LOGIC_OPERATORS and leaf.parent: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2262 return LOGIC_PRIORITY |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2263 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2264 return 0 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2265 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2266 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2267 FMT_OFF = {"# fmt: off", "# fmt:off", "# yapf: disable"} |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2268 FMT_ON = {"# fmt: on", "# fmt:on", "# yapf: enable"} |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2269 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2270 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2271 def generate_comments(leaf: LN) -> Iterator[Leaf]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2272 """Clean the prefix of the `leaf` and generate comments from it, if any. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2273 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2274 Comments in lib2to3 are shoved into the whitespace prefix. This happens |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2275 in `pgen2/driver.py:Driver.parse_tokens()`. This was a brilliant implementation |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2276 move because it does away with modifying the grammar to include all the |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2277 possible places in which comments can be placed. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2278 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2279 The sad consequence for us though is that comments don't "belong" anywhere. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2280 This is why this function generates simple parentless Leaf objects for |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2281 comments. We simply don't know what the correct parent should be. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2282 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2283 No matter though, we can live without this. We really only need to |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2284 differentiate between inline and standalone comments. The latter don't |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2285 share the line with any code. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2286 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2287 Inline comments are emitted as regular token.COMMENT leaves. Standalone |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2288 are emitted with a fake STANDALONE_COMMENT token identifier. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2289 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2290 for pc in list_comments(leaf.prefix, is_endmarker=leaf.type == token.ENDMARKER): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2291 yield Leaf(pc.type, pc.value, prefix="\n" * pc.newlines) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2292 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2293 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2294 @dataclass |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2295 class ProtoComment: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2296 """Describes a piece of syntax that is a comment. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2297 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2298 It's not a :class:`blib2to3.pytree.Leaf` so that: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2299 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2300 * it can be cached (`Leaf` objects should not be reused more than once as |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2301 they store their lineno, column, prefix, and parent information); |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2302 * `newlines` and `consumed` fields are kept separate from the `value`. This |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2303 simplifies handling of special marker comments like ``# fmt: off/on``. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2304 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2305 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2306 type: int # token.COMMENT or STANDALONE_COMMENT |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2307 value: str # content of the comment |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2308 newlines: int # how many newlines before the comment |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2309 consumed: int # how many characters of the original leaf's prefix did we consume |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2310 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2311 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2312 @lru_cache(maxsize=4096) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2313 def list_comments(prefix: str, *, is_endmarker: bool) -> List[ProtoComment]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2314 """Return a list of :class:`ProtoComment` objects parsed from the given `prefix`.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2315 result: List[ProtoComment] = [] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2316 if not prefix or "#" not in prefix: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2317 return result |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2318 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2319 consumed = 0 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2320 nlines = 0 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2321 ignored_lines = 0 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2322 for index, line in enumerate(prefix.split("\n")): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2323 consumed += len(line) + 1 # adding the length of the split '\n' |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2324 line = line.lstrip() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2325 if not line: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2326 nlines += 1 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2327 if not line.startswith("#"): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2328 # Escaped newlines outside of a comment are not really newlines at |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2329 # all. We treat a single-line comment following an escaped newline |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2330 # as a simple trailing comment. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2331 if line.endswith("\\"): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2332 ignored_lines += 1 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2333 continue |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2334 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2335 if index == ignored_lines and not is_endmarker: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2336 comment_type = token.COMMENT # simple trailing comment |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2337 else: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2338 comment_type = STANDALONE_COMMENT |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2339 comment = make_comment(line) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2340 result.append( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2341 ProtoComment( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2342 type=comment_type, value=comment, newlines=nlines, consumed=consumed |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2343 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2344 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2345 nlines = 0 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2346 return result |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2347 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2348 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2349 def make_comment(content: str) -> str: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2350 """Return a consistently formatted comment from the given `content` string. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2351 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2352 All comments (except for "##", "#!", "#:", '#'", "#%%") should have a single |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2353 space between the hash sign and the content. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2354 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2355 If `content` didn't start with a hash sign, one is provided. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2356 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2357 content = content.rstrip() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2358 if not content: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2359 return "#" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2360 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2361 if content[0] == "#": |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2362 content = content[1:] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2363 if content and content[0] not in " !:#'%": |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2364 content = " " + content |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2365 return "#" + content |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2366 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2367 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2368 def split_line( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2369 line: Line, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2370 line_length: int, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2371 inner: bool = False, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2372 features: Collection[Feature] = (), |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2373 ) -> Iterator[Line]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2374 """Split a `line` into potentially many lines. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2375 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2376 They should fit in the allotted `line_length` but might not be able to. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2377 `inner` signifies that there were a pair of brackets somewhere around the |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2378 current `line`, possibly transitively. This means we can fallback to splitting |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2379 by delimiters if the LHS/RHS don't yield any results. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2380 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2381 `features` are syntactical features that may be used in the output. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2382 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2383 if line.is_comment: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2384 yield line |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2385 return |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2386 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2387 line_str = str(line).strip("\n") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2388 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2389 if ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2390 not line.contains_uncollapsable_type_comments() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2391 and not line.should_explode |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2392 and not line.is_collection_with_optional_trailing_comma |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2393 and ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2394 is_line_short_enough(line, line_length=line_length, line_str=line_str) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2395 or line.contains_unsplittable_type_ignore() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2396 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2397 ): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2398 yield line |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2399 return |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2400 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2401 split_funcs: List[SplitFunc] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2402 if line.is_def: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2403 split_funcs = [left_hand_split] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2404 else: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2405 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2406 def rhs(line: Line, features: Collection[Feature]) -> Iterator[Line]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2407 for omit in generate_trailers_to_omit(line, line_length): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2408 lines = list(right_hand_split(line, line_length, features, omit=omit)) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2409 if is_line_short_enough(lines[0], line_length=line_length): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2410 yield from lines |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2411 return |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2412 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2413 # All splits failed, best effort split with no omits. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2414 # This mostly happens to multiline strings that are by definition |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2415 # reported as not fitting a single line. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2416 yield from right_hand_split(line, line_length, features=features) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2417 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2418 if line.inside_brackets: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2419 split_funcs = [delimiter_split, standalone_comment_split, rhs] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2420 else: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2421 split_funcs = [rhs] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2422 for split_func in split_funcs: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2423 # We are accumulating lines in `result` because we might want to abort |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2424 # mission and return the original line in the end, or attempt a different |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2425 # split altogether. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2426 result: List[Line] = [] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2427 try: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2428 for l in split_func(line, features): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2429 if str(l).strip("\n") == line_str: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2430 raise CannotSplit("Split function returned an unchanged result") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2431 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2432 result.extend( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2433 split_line( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2434 l, line_length=line_length, inner=True, features=features |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2435 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2436 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2437 except CannotSplit: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2438 continue |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2439 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2440 else: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2441 yield from result |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2442 break |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2443 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2444 else: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2445 yield line |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2446 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2447 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2448 def left_hand_split(line: Line, features: Collection[Feature] = ()) -> Iterator[Line]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2449 """Split line into many lines, starting with the first matching bracket pair. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2450 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2451 Note: this usually looks weird, only use this for function definitions. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2452 Prefer RHS otherwise. This is why this function is not symmetrical with |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2453 :func:`right_hand_split` which also handles optional parentheses. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2454 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2455 tail_leaves: List[Leaf] = [] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2456 body_leaves: List[Leaf] = [] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2457 head_leaves: List[Leaf] = [] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2458 current_leaves = head_leaves |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2459 matching_bracket = None |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2460 for leaf in line.leaves: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2461 if ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2462 current_leaves is body_leaves |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2463 and leaf.type in CLOSING_BRACKETS |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2464 and leaf.opening_bracket is matching_bracket |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2465 ): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2466 current_leaves = tail_leaves if body_leaves else head_leaves |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2467 current_leaves.append(leaf) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2468 if current_leaves is head_leaves: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2469 if leaf.type in OPENING_BRACKETS: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2470 matching_bracket = leaf |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2471 current_leaves = body_leaves |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2472 if not matching_bracket: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2473 raise CannotSplit("No brackets found") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2474 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2475 head = bracket_split_build_line(head_leaves, line, matching_bracket) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2476 body = bracket_split_build_line(body_leaves, line, matching_bracket, is_body=True) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2477 tail = bracket_split_build_line(tail_leaves, line, matching_bracket) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2478 bracket_split_succeeded_or_raise(head, body, tail) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2479 for result in (head, body, tail): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2480 if result: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2481 yield result |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2482 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2483 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2484 def right_hand_split( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2485 line: Line, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2486 line_length: int, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2487 features: Collection[Feature] = (), |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2488 omit: Collection[LeafID] = (), |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2489 ) -> Iterator[Line]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2490 """Split line into many lines, starting with the last matching bracket pair. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2491 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2492 If the split was by optional parentheses, attempt splitting without them, too. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2493 `omit` is a collection of closing bracket IDs that shouldn't be considered for |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2494 this split. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2495 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2496 Note: running this function modifies `bracket_depth` on the leaves of `line`. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2497 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2498 tail_leaves: List[Leaf] = [] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2499 body_leaves: List[Leaf] = [] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2500 head_leaves: List[Leaf] = [] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2501 current_leaves = tail_leaves |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2502 opening_bracket = None |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2503 closing_bracket = None |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2504 for leaf in reversed(line.leaves): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2505 if current_leaves is body_leaves: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2506 if leaf is opening_bracket: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2507 current_leaves = head_leaves if body_leaves else tail_leaves |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2508 current_leaves.append(leaf) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2509 if current_leaves is tail_leaves: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2510 if leaf.type in CLOSING_BRACKETS and id(leaf) not in omit: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2511 opening_bracket = leaf.opening_bracket |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2512 closing_bracket = leaf |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2513 current_leaves = body_leaves |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2514 if not (opening_bracket and closing_bracket and head_leaves): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2515 # If there is no opening or closing_bracket that means the split failed and |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2516 # all content is in the tail. Otherwise, if `head_leaves` are empty, it means |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2517 # the matching `opening_bracket` wasn't available on `line` anymore. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2518 raise CannotSplit("No brackets found") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2519 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2520 tail_leaves.reverse() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2521 body_leaves.reverse() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2522 head_leaves.reverse() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2523 head = bracket_split_build_line(head_leaves, line, opening_bracket) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2524 body = bracket_split_build_line(body_leaves, line, opening_bracket, is_body=True) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2525 tail = bracket_split_build_line(tail_leaves, line, opening_bracket) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2526 bracket_split_succeeded_or_raise(head, body, tail) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2527 if ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2528 # the body shouldn't be exploded |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2529 not body.should_explode |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2530 # the opening bracket is an optional paren |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2531 and opening_bracket.type == token.LPAR |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2532 and not opening_bracket.value |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2533 # the closing bracket is an optional paren |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2534 and closing_bracket.type == token.RPAR |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2535 and not closing_bracket.value |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2536 # it's not an import (optional parens are the only thing we can split on |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2537 # in this case; attempting a split without them is a waste of time) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2538 and not line.is_import |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2539 # there are no standalone comments in the body |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2540 and not body.contains_standalone_comments(0) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2541 # and we can actually remove the parens |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2542 and can_omit_invisible_parens(body, line_length) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2543 ): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2544 omit = {id(closing_bracket), *omit} |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2545 try: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2546 yield from right_hand_split(line, line_length, features=features, omit=omit) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2547 return |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2548 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2549 except CannotSplit: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2550 if not ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2551 can_be_split(body) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2552 or is_line_short_enough(body, line_length=line_length) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2553 ): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2554 raise CannotSplit( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2555 "Splitting failed, body is still too long and can't be split." |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2556 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2557 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2558 elif head.contains_multiline_strings() or tail.contains_multiline_strings(): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2559 raise CannotSplit( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2560 "The current optional pair of parentheses is bound to fail to " |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2561 "satisfy the splitting algorithm because the head or the tail " |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2562 "contains multiline strings which by definition never fit one " |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2563 "line." |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2564 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2565 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2566 ensure_visible(opening_bracket) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2567 ensure_visible(closing_bracket) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2568 for result in (head, body, tail): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2569 if result: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2570 yield result |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2571 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2572 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2573 def bracket_split_succeeded_or_raise(head: Line, body: Line, tail: Line) -> None: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2574 """Raise :exc:`CannotSplit` if the last left- or right-hand split failed. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2575 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2576 Do nothing otherwise. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2577 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2578 A left- or right-hand split is based on a pair of brackets. Content before |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2579 (and including) the opening bracket is left on one line, content inside the |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2580 brackets is put on a separate line, and finally content starting with and |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2581 following the closing bracket is put on a separate line. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2582 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2583 Those are called `head`, `body`, and `tail`, respectively. If the split |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2584 produced the same line (all content in `head`) or ended up with an empty `body` |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2585 and the `tail` is just the closing bracket, then it's considered failed. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2586 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2587 tail_len = len(str(tail).strip()) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2588 if not body: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2589 if tail_len == 0: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2590 raise CannotSplit("Splitting brackets produced the same line") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2591 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2592 elif tail_len < 3: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2593 raise CannotSplit( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2594 f"Splitting brackets on an empty body to save " |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2595 f"{tail_len} characters is not worth it" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2596 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2597 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2598 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2599 def bracket_split_build_line( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2600 leaves: List[Leaf], original: Line, opening_bracket: Leaf, *, is_body: bool = False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2601 ) -> Line: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2602 """Return a new line with given `leaves` and respective comments from `original`. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2603 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2604 If `is_body` is True, the result line is one-indented inside brackets and as such |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2605 has its first leaf's prefix normalized and a trailing comma added when expected. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2606 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2607 result = Line(depth=original.depth) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2608 if is_body: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2609 result.inside_brackets = True |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2610 result.depth += 1 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2611 if leaves: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2612 # Since body is a new indent level, remove spurious leading whitespace. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2613 normalize_prefix(leaves[0], inside_brackets=True) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2614 # Ensure a trailing comma for imports and standalone function arguments, but |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2615 # be careful not to add one after any comments. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2616 no_commas = original.is_def and not any( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2617 l.type == token.COMMA for l in leaves |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2618 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2619 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2620 if original.is_import or no_commas: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2621 for i in range(len(leaves) - 1, -1, -1): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2622 if leaves[i].type == STANDALONE_COMMENT: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2623 continue |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2624 elif leaves[i].type == token.COMMA: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2625 break |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2626 else: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2627 leaves.insert(i + 1, Leaf(token.COMMA, ",")) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2628 break |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2629 # Populate the line |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2630 for leaf in leaves: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2631 result.append(leaf, preformatted=True) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2632 for comment_after in original.comments_after(leaf): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2633 result.append(comment_after, preformatted=True) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2634 if is_body: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2635 result.should_explode = should_explode(result, opening_bracket) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2636 return result |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2637 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2638 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2639 def dont_increase_indentation(split_func: SplitFunc) -> SplitFunc: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2640 """Normalize prefix of the first leaf in every line returned by `split_func`. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2641 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2642 This is a decorator over relevant split functions. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2643 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2644 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2645 @wraps(split_func) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2646 def split_wrapper(line: Line, features: Collection[Feature] = ()) -> Iterator[Line]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2647 for l in split_func(line, features): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2648 normalize_prefix(l.leaves[0], inside_brackets=True) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2649 yield l |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2650 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2651 return split_wrapper |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2652 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2653 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2654 @dont_increase_indentation |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2655 def delimiter_split(line: Line, features: Collection[Feature] = ()) -> Iterator[Line]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2656 """Split according to delimiters of the highest priority. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2657 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2658 If the appropriate Features are given, the split will add trailing commas |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2659 also in function signatures and calls that contain `*` and `**`. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2660 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2661 try: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2662 last_leaf = line.leaves[-1] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2663 except IndexError: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2664 raise CannotSplit("Line empty") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2665 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2666 bt = line.bracket_tracker |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2667 try: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2668 delimiter_priority = bt.max_delimiter_priority(exclude={id(last_leaf)}) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2669 except ValueError: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2670 raise CannotSplit("No delimiters found") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2671 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2672 if delimiter_priority == DOT_PRIORITY: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2673 if bt.delimiter_count_with_priority(delimiter_priority) == 1: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2674 raise CannotSplit("Splitting a single attribute from its owner looks wrong") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2675 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2676 current_line = Line(depth=line.depth, inside_brackets=line.inside_brackets) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2677 lowest_depth = sys.maxsize |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2678 trailing_comma_safe = True |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2679 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2680 def append_to_line(leaf: Leaf) -> Iterator[Line]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2681 """Append `leaf` to current line or to new line if appending impossible.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2682 nonlocal current_line |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2683 try: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2684 current_line.append_safe(leaf, preformatted=True) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2685 except ValueError: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2686 yield current_line |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2687 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2688 current_line = Line(depth=line.depth, inside_brackets=line.inside_brackets) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2689 current_line.append(leaf) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2690 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2691 for leaf in line.leaves: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2692 yield from append_to_line(leaf) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2693 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2694 for comment_after in line.comments_after(leaf): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2695 yield from append_to_line(comment_after) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2696 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2697 lowest_depth = min(lowest_depth, leaf.bracket_depth) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2698 if leaf.bracket_depth == lowest_depth: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2699 if is_vararg(leaf, within={syms.typedargslist}): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2700 trailing_comma_safe = ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2701 trailing_comma_safe and Feature.TRAILING_COMMA_IN_DEF in features |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2702 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2703 elif is_vararg(leaf, within={syms.arglist, syms.argument}): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2704 trailing_comma_safe = ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2705 trailing_comma_safe and Feature.TRAILING_COMMA_IN_CALL in features |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2706 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2707 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2708 leaf_priority = bt.delimiters.get(id(leaf)) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2709 if leaf_priority == delimiter_priority: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2710 yield current_line |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2711 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2712 current_line = Line(depth=line.depth, inside_brackets=line.inside_brackets) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2713 if current_line: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2714 if ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2715 trailing_comma_safe |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2716 and delimiter_priority == COMMA_PRIORITY |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2717 and current_line.leaves[-1].type != token.COMMA |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2718 and current_line.leaves[-1].type != STANDALONE_COMMENT |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2719 ): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2720 current_line.append(Leaf(token.COMMA, ",")) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2721 yield current_line |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2722 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2723 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2724 @dont_increase_indentation |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2725 def standalone_comment_split( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2726 line: Line, features: Collection[Feature] = () |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2727 ) -> Iterator[Line]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2728 """Split standalone comments from the rest of the line.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2729 if not line.contains_standalone_comments(0): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2730 raise CannotSplit("Line does not have any standalone comments") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2731 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2732 current_line = Line(depth=line.depth, inside_brackets=line.inside_brackets) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2733 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2734 def append_to_line(leaf: Leaf) -> Iterator[Line]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2735 """Append `leaf` to current line or to new line if appending impossible.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2736 nonlocal current_line |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2737 try: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2738 current_line.append_safe(leaf, preformatted=True) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2739 except ValueError: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2740 yield current_line |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2741 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2742 current_line = Line(depth=line.depth, inside_brackets=line.inside_brackets) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2743 current_line.append(leaf) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2744 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2745 for leaf in line.leaves: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2746 yield from append_to_line(leaf) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2747 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2748 for comment_after in line.comments_after(leaf): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2749 yield from append_to_line(comment_after) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2750 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2751 if current_line: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2752 yield current_line |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2753 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2754 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2755 def is_import(leaf: Leaf) -> bool: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2756 """Return True if the given leaf starts an import statement.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2757 p = leaf.parent |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2758 t = leaf.type |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2759 v = leaf.value |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2760 return bool( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2761 t == token.NAME |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2762 and ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2763 (v == "import" and p and p.type == syms.import_name) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2764 or (v == "from" and p and p.type == syms.import_from) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2765 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2766 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2767 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2768 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2769 def is_type_comment(leaf: Leaf, suffix: str = "") -> bool: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2770 """Return True if the given leaf is a special comment. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2771 Only returns true for type comments for now.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2772 t = leaf.type |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2773 v = leaf.value |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2774 return t in {token.COMMENT, t == STANDALONE_COMMENT} and v.startswith( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2775 "# type:" + suffix |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2776 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2777 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2778 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2779 def normalize_prefix(leaf: Leaf, *, inside_brackets: bool) -> None: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2780 """Leave existing extra newlines if not `inside_brackets`. Remove everything |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2781 else. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2782 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2783 Note: don't use backslashes for formatting or you'll lose your voting rights. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2784 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2785 if not inside_brackets: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2786 spl = leaf.prefix.split("#") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2787 if "\\" not in spl[0]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2788 nl_count = spl[-1].count("\n") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2789 if len(spl) > 1: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2790 nl_count -= 1 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2791 leaf.prefix = "\n" * nl_count |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2792 return |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2793 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2794 leaf.prefix = "" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2795 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2796 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2797 def normalize_string_prefix(leaf: Leaf, remove_u_prefix: bool = False) -> None: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2798 """Make all string prefixes lowercase. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2799 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2800 If remove_u_prefix is given, also removes any u prefix from the string. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2801 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2802 Note: Mutates its argument. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2803 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2804 match = re.match(r"^([furbFURB]*)(.*)$", leaf.value, re.DOTALL) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2805 assert match is not None, f"failed to match string {leaf.value!r}" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2806 orig_prefix = match.group(1) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2807 new_prefix = orig_prefix.lower() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2808 if remove_u_prefix: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2809 new_prefix = new_prefix.replace("u", "") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2810 leaf.value = f"{new_prefix}{match.group(2)}" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2811 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2812 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2813 def normalize_string_quotes(leaf: Leaf) -> None: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2814 """Prefer double quotes but only if it doesn't cause more escaping. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2815 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2816 Adds or removes backslashes as appropriate. Doesn't parse and fix |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2817 strings nested in f-strings (yet). |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2818 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2819 Note: Mutates its argument. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2820 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2821 value = leaf.value.lstrip("furbFURB") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2822 if value[:3] == '"""': |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2823 return |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2824 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2825 elif value[:3] == "'''": |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2826 orig_quote = "'''" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2827 new_quote = '"""' |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2828 elif value[0] == '"': |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2829 orig_quote = '"' |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2830 new_quote = "'" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2831 else: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2832 orig_quote = "'" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2833 new_quote = '"' |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2834 first_quote_pos = leaf.value.find(orig_quote) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2835 if first_quote_pos == -1: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2836 return # There's an internal error |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2837 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2838 prefix = leaf.value[:first_quote_pos] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2839 unescaped_new_quote = re.compile(rf"(([^\\]|^)(\\\\)*){new_quote}") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2840 escaped_new_quote = re.compile(rf"([^\\]|^)\\((?:\\\\)*){new_quote}") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2841 escaped_orig_quote = re.compile(rf"([^\\]|^)\\((?:\\\\)*){orig_quote}") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2842 body = leaf.value[first_quote_pos + len(orig_quote) : -len(orig_quote)] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2843 if "r" in prefix.casefold(): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2844 if unescaped_new_quote.search(body): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2845 # There's at least one unescaped new_quote in this raw string |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2846 # so converting is impossible |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2847 return |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2848 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2849 # Do not introduce or remove backslashes in raw strings |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2850 new_body = body |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2851 else: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2852 # remove unnecessary escapes |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2853 new_body = sub_twice(escaped_new_quote, rf"\1\2{new_quote}", body) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2854 if body != new_body: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2855 # Consider the string without unnecessary escapes as the original |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2856 body = new_body |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2857 leaf.value = f"{prefix}{orig_quote}{body}{orig_quote}" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2858 new_body = sub_twice(escaped_orig_quote, rf"\1\2{orig_quote}", new_body) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2859 new_body = sub_twice(unescaped_new_quote, rf"\1\\{new_quote}", new_body) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2860 if "f" in prefix.casefold(): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2861 matches = re.findall( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2862 r""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2863 (?:[^{]|^)\{ # start of the string or a non-{ followed by a single { |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2864 ([^{].*?) # contents of the brackets except if begins with {{ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2865 \}(?:[^}]|$) # A } followed by end of the string or a non-} |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2866 """, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2867 new_body, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2868 re.VERBOSE, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2869 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2870 for m in matches: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2871 if "\\" in str(m): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2872 # Do not introduce backslashes in interpolated expressions |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2873 return |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2874 if new_quote == '"""' and new_body[-1:] == '"': |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2875 # edge case: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2876 new_body = new_body[:-1] + '\\"' |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2877 orig_escape_count = body.count("\\") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2878 new_escape_count = new_body.count("\\") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2879 if new_escape_count > orig_escape_count: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2880 return # Do not introduce more escaping |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2881 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2882 if new_escape_count == orig_escape_count and orig_quote == '"': |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2883 return # Prefer double quotes |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2884 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2885 leaf.value = f"{prefix}{new_quote}{new_body}{new_quote}" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2886 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2887 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2888 def normalize_numeric_literal(leaf: Leaf) -> None: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2889 """Normalizes numeric (float, int, and complex) literals. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2890 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2891 All letters used in the representation are normalized to lowercase (except |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2892 in Python 2 long literals). |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2893 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2894 text = leaf.value.lower() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2895 if text.startswith(("0o", "0b")): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2896 # Leave octal and binary literals alone. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2897 pass |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2898 elif text.startswith("0x"): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2899 # Change hex literals to upper case. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2900 before, after = text[:2], text[2:] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2901 text = f"{before}{after.upper()}" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2902 elif "e" in text: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2903 before, after = text.split("e") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2904 sign = "" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2905 if after.startswith("-"): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2906 after = after[1:] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2907 sign = "-" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2908 elif after.startswith("+"): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2909 after = after[1:] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2910 before = format_float_or_int_string(before) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2911 text = f"{before}e{sign}{after}" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2912 elif text.endswith(("j", "l")): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2913 number = text[:-1] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2914 suffix = text[-1] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2915 # Capitalize in "2L" because "l" looks too similar to "1". |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2916 if suffix == "l": |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2917 suffix = "L" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2918 text = f"{format_float_or_int_string(number)}{suffix}" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2919 else: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2920 text = format_float_or_int_string(text) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2921 leaf.value = text |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2922 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2923 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2924 def format_float_or_int_string(text: str) -> str: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2925 """Formats a float string like "1.0".""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2926 if "." not in text: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2927 return text |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2928 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2929 before, after = text.split(".") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2930 return f"{before or 0}.{after or 0}" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2931 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2932 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2933 def normalize_invisible_parens(node: Node, parens_after: Set[str]) -> None: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2934 """Make existing optional parentheses invisible or create new ones. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2935 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2936 `parens_after` is a set of string leaf values immediately after which parens |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2937 should be put. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2938 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2939 Standardizes on visible parentheses for single-element tuples, and keeps |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2940 existing visible parentheses for other tuples and generator expressions. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2941 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2942 for pc in list_comments(node.prefix, is_endmarker=False): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2943 if pc.value in FMT_OFF: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2944 # This `node` has a prefix with `# fmt: off`, don't mess with parens. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2945 return |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2946 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2947 check_lpar = False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2948 for index, child in enumerate(list(node.children)): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2949 # Add parentheses around long tuple unpacking in assignments. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2950 if ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2951 index == 0 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2952 and isinstance(child, Node) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2953 and child.type == syms.testlist_star_expr |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2954 ): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2955 check_lpar = True |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2956 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2957 if check_lpar: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2958 if is_walrus_assignment(child): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2959 continue |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2960 if child.type == syms.atom: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2961 # Determines if the underlying atom should be surrounded with |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2962 # invisible params - also makes parens invisible recursively |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2963 # within the atom and removes repeated invisible parens within |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2964 # the atom |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2965 should_surround_with_parens = maybe_make_parens_invisible_in_atom( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2966 child, parent=node |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2967 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2968 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2969 if should_surround_with_parens: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2970 lpar = Leaf(token.LPAR, "") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2971 rpar = Leaf(token.RPAR, "") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2972 index = child.remove() or 0 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2973 node.insert_child(index, Node(syms.atom, [lpar, child, rpar])) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2974 elif is_one_tuple(child): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2975 # wrap child in visible parentheses |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2976 lpar = Leaf(token.LPAR, "(") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2977 rpar = Leaf(token.RPAR, ")") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2978 child.remove() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2979 node.insert_child(index, Node(syms.atom, [lpar, child, rpar])) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2980 elif node.type == syms.import_from: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2981 # "import from" nodes store parentheses directly as part of |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2982 # the statement |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2983 if child.type == token.LPAR: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2984 # make parentheses invisible |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2985 child.value = "" # type: ignore |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2986 node.children[-1].value = "" # type: ignore |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2987 elif child.type != token.STAR: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2988 # insert invisible parentheses |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2989 node.insert_child(index, Leaf(token.LPAR, "")) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2990 node.append_child(Leaf(token.RPAR, "")) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2991 break |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2992 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2993 elif not (isinstance(child, Leaf) and is_multiline_string(child)): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2994 # wrap child in invisible parentheses |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2995 lpar = Leaf(token.LPAR, "") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2996 rpar = Leaf(token.RPAR, "") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2997 index = child.remove() or 0 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2998 prefix = child.prefix |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2999 child.prefix = "" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3000 new_child = Node(syms.atom, [lpar, child, rpar]) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3001 new_child.prefix = prefix |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3002 node.insert_child(index, new_child) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3003 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3004 check_lpar = isinstance(child, Leaf) and child.value in parens_after |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3005 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3006 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3007 def normalize_fmt_off(node: Node) -> None: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3008 """Convert content between `# fmt: off`/`# fmt: on` into standalone comments.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3009 try_again = True |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3010 while try_again: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3011 try_again = convert_one_fmt_off_pair(node) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3012 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3013 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3014 def convert_one_fmt_off_pair(node: Node) -> bool: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3015 """Convert content of a single `# fmt: off`/`# fmt: on` into a standalone comment. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3016 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3017 Returns True if a pair was converted. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3018 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3019 for leaf in node.leaves(): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3020 previous_consumed = 0 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3021 for comment in list_comments(leaf.prefix, is_endmarker=False): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3022 if comment.value in FMT_OFF: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3023 # We only want standalone comments. If there's no previous leaf or |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3024 # the previous leaf is indentation, it's a standalone comment in |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3025 # disguise. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3026 if comment.type != STANDALONE_COMMENT: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3027 prev = preceding_leaf(leaf) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3028 if prev and prev.type not in WHITESPACE: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3029 continue |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3030 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3031 ignored_nodes = list(generate_ignored_nodes(leaf)) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3032 if not ignored_nodes: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3033 continue |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3034 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3035 first = ignored_nodes[0] # Can be a container node with the `leaf`. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3036 parent = first.parent |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3037 prefix = first.prefix |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3038 first.prefix = prefix[comment.consumed :] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3039 hidden_value = ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3040 comment.value + "\n" + "".join(str(n) for n in ignored_nodes) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3041 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3042 if hidden_value.endswith("\n"): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3043 # That happens when one of the `ignored_nodes` ended with a NEWLINE |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3044 # leaf (possibly followed by a DEDENT). |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3045 hidden_value = hidden_value[:-1] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3046 first_idx = None |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3047 for ignored in ignored_nodes: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3048 index = ignored.remove() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3049 if first_idx is None: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3050 first_idx = index |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3051 assert parent is not None, "INTERNAL ERROR: fmt: on/off handling (1)" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3052 assert first_idx is not None, "INTERNAL ERROR: fmt: on/off handling (2)" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3053 parent.insert_child( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3054 first_idx, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3055 Leaf( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3056 STANDALONE_COMMENT, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3057 hidden_value, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3058 prefix=prefix[:previous_consumed] + "\n" * comment.newlines, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3059 ), |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3060 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3061 return True |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3062 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3063 previous_consumed = comment.consumed |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3064 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3065 return False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3066 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3067 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3068 def generate_ignored_nodes(leaf: Leaf) -> Iterator[LN]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3069 """Starting from the container of `leaf`, generate all leaves until `# fmt: on`. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3070 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3071 Stops at the end of the block. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3072 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3073 container: Optional[LN] = container_of(leaf) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3074 while container is not None and container.type != token.ENDMARKER: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3075 for comment in list_comments(container.prefix, is_endmarker=False): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3076 if comment.value in FMT_ON: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3077 return |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3078 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3079 yield container |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3080 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3081 container = container.next_sibling |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3082 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3083 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3084 def maybe_make_parens_invisible_in_atom(node: LN, parent: LN) -> bool: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3085 """If it's safe, make the parens in the atom `node` invisible, recursively. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3086 Additionally, remove repeated, adjacent invisible parens from the atom `node` |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3087 as they are redundant. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3088 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3089 Returns whether the node should itself be wrapped in invisible parentheses. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3090 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3091 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3092 if ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3093 node.type != syms.atom |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3094 or is_empty_tuple(node) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3095 or is_one_tuple(node) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3096 or (is_yield(node) and parent.type != syms.expr_stmt) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3097 or max_delimiter_priority_in_atom(node) >= COMMA_PRIORITY |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3098 ): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3099 return False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3100 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3101 first = node.children[0] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3102 last = node.children[-1] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3103 if first.type == token.LPAR and last.type == token.RPAR: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3104 middle = node.children[1] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3105 # make parentheses invisible |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3106 first.value = "" # type: ignore |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3107 last.value = "" # type: ignore |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3108 maybe_make_parens_invisible_in_atom(middle, parent=parent) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3109 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3110 if is_atom_with_invisible_parens(middle): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3111 # Strip the invisible parens from `middle` by replacing |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3112 # it with the child in-between the invisible parens |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3113 middle.replace(middle.children[1]) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3114 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3115 return False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3116 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3117 return True |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3118 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3119 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3120 def is_atom_with_invisible_parens(node: LN) -> bool: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3121 """Given a `LN`, determines whether it's an atom `node` with invisible |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3122 parens. Useful in dedupe-ing and normalizing parens. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3123 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3124 if isinstance(node, Leaf) or node.type != syms.atom: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3125 return False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3126 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3127 first, last = node.children[0], node.children[-1] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3128 return ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3129 isinstance(first, Leaf) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3130 and first.type == token.LPAR |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3131 and first.value == "" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3132 and isinstance(last, Leaf) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3133 and last.type == token.RPAR |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3134 and last.value == "" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3135 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3136 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3137 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3138 def is_empty_tuple(node: LN) -> bool: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3139 """Return True if `node` holds an empty tuple.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3140 return ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3141 node.type == syms.atom |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3142 and len(node.children) == 2 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3143 and node.children[0].type == token.LPAR |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3144 and node.children[1].type == token.RPAR |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3145 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3146 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3147 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3148 def unwrap_singleton_parenthesis(node: LN) -> Optional[LN]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3149 """Returns `wrapped` if `node` is of the shape ( wrapped ). |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3150 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3151 Parenthesis can be optional. Returns None otherwise""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3152 if len(node.children) != 3: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3153 return None |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3154 lpar, wrapped, rpar = node.children |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3155 if not (lpar.type == token.LPAR and rpar.type == token.RPAR): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3156 return None |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3157 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3158 return wrapped |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3159 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3160 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3161 def is_one_tuple(node: LN) -> bool: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3162 """Return True if `node` holds a tuple with one element, with or without parens.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3163 if node.type == syms.atom: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3164 gexp = unwrap_singleton_parenthesis(node) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3165 if gexp is None or gexp.type != syms.testlist_gexp: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3166 return False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3167 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3168 return len(gexp.children) == 2 and gexp.children[1].type == token.COMMA |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3169 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3170 return ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3171 node.type in IMPLICIT_TUPLE |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3172 and len(node.children) == 2 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3173 and node.children[1].type == token.COMMA |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3174 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3175 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3176 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3177 def is_walrus_assignment(node: LN) -> bool: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3178 """Return True iff `node` is of the shape ( test := test )""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3179 inner = unwrap_singleton_parenthesis(node) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3180 return inner is not None and inner.type == syms.namedexpr_test |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3181 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3182 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3183 def is_yield(node: LN) -> bool: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3184 """Return True if `node` holds a `yield` or `yield from` expression.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3185 if node.type == syms.yield_expr: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3186 return True |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3187 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3188 if node.type == token.NAME and node.value == "yield": # type: ignore |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3189 return True |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3190 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3191 if node.type != syms.atom: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3192 return False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3193 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3194 if len(node.children) != 3: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3195 return False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3196 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3197 lpar, expr, rpar = node.children |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3198 if lpar.type == token.LPAR and rpar.type == token.RPAR: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3199 return is_yield(expr) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3200 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3201 return False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3202 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3203 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3204 def is_vararg(leaf: Leaf, within: Set[NodeType]) -> bool: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3205 """Return True if `leaf` is a star or double star in a vararg or kwarg. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3206 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3207 If `within` includes VARARGS_PARENTS, this applies to function signatures. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3208 If `within` includes UNPACKING_PARENTS, it applies to right hand-side |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3209 extended iterable unpacking (PEP 3132) and additional unpacking |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3210 generalizations (PEP 448). |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3211 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3212 if leaf.type not in VARARGS_SPECIALS or not leaf.parent: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3213 return False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3214 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3215 p = leaf.parent |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3216 if p.type == syms.star_expr: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3217 # Star expressions are also used as assignment targets in extended |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3218 # iterable unpacking (PEP 3132). See what its parent is instead. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3219 if not p.parent: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3220 return False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3221 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3222 p = p.parent |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3223 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3224 return p.type in within |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3225 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3226 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3227 def is_multiline_string(leaf: Leaf) -> bool: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3228 """Return True if `leaf` is a multiline string that actually spans many lines.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3229 value = leaf.value.lstrip("furbFURB") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3230 return value[:3] in {'"""', "'''"} and "\n" in value |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3231 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3232 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3233 def is_stub_suite(node: Node) -> bool: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3234 """Return True if `node` is a suite with a stub body.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3235 if ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3236 len(node.children) != 4 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3237 or node.children[0].type != token.NEWLINE |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3238 or node.children[1].type != token.INDENT |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3239 or node.children[3].type != token.DEDENT |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3240 ): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3241 return False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3242 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3243 return is_stub_body(node.children[2]) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3244 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3245 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3246 def is_stub_body(node: LN) -> bool: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3247 """Return True if `node` is a simple statement containing an ellipsis.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3248 if not isinstance(node, Node) or node.type != syms.simple_stmt: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3249 return False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3250 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3251 if len(node.children) != 2: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3252 return False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3253 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3254 child = node.children[0] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3255 return ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3256 child.type == syms.atom |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3257 and len(child.children) == 3 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3258 and all(leaf == Leaf(token.DOT, ".") for leaf in child.children) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3259 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3260 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3261 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3262 def max_delimiter_priority_in_atom(node: LN) -> Priority: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3263 """Return maximum delimiter priority inside `node`. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3264 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3265 This is specific to atoms with contents contained in a pair of parentheses. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3266 If `node` isn't an atom or there are no enclosing parentheses, returns 0. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3267 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3268 if node.type != syms.atom: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3269 return 0 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3270 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3271 first = node.children[0] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3272 last = node.children[-1] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3273 if not (first.type == token.LPAR and last.type == token.RPAR): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3274 return 0 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3275 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3276 bt = BracketTracker() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3277 for c in node.children[1:-1]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3278 if isinstance(c, Leaf): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3279 bt.mark(c) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3280 else: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3281 for leaf in c.leaves(): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3282 bt.mark(leaf) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3283 try: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3284 return bt.max_delimiter_priority() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3285 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3286 except ValueError: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3287 return 0 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3288 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3289 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3290 def ensure_visible(leaf: Leaf) -> None: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3291 """Make sure parentheses are visible. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3292 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3293 They could be invisible as part of some statements (see |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3294 :func:`normalize_invisible_parens` and :func:`visit_import_from`). |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3295 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3296 if leaf.type == token.LPAR: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3297 leaf.value = "(" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3298 elif leaf.type == token.RPAR: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3299 leaf.value = ")" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3300 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3301 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3302 def should_explode(line: Line, opening_bracket: Leaf) -> bool: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3303 """Should `line` immediately be split with `delimiter_split()` after RHS?""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3304 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3305 if not ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3306 opening_bracket.parent |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3307 and opening_bracket.parent.type in {syms.atom, syms.import_from} |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3308 and opening_bracket.value in "[{(" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3309 ): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3310 return False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3311 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3312 try: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3313 last_leaf = line.leaves[-1] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3314 exclude = {id(last_leaf)} if last_leaf.type == token.COMMA else set() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3315 max_priority = line.bracket_tracker.max_delimiter_priority(exclude=exclude) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3316 except (IndexError, ValueError): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3317 return False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3318 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3319 return max_priority == COMMA_PRIORITY |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3320 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3321 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3322 def get_features_used(node: Node) -> Set[Feature]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3323 """Return a set of (relatively) new Python features used in this file. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3324 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3325 Currently looking for: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3326 - f-strings; |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3327 - underscores in numeric literals; |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3328 - trailing commas after * or ** in function signatures and calls; |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3329 - positional only arguments in function signatures and lambdas; |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3330 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3331 features: Set[Feature] = set() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3332 for n in node.pre_order(): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3333 if n.type == token.STRING: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3334 value_head = n.value[:2] # type: ignore |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3335 if value_head in {'f"', 'F"', "f'", "F'", "rf", "fr", "RF", "FR"}: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3336 features.add(Feature.F_STRINGS) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3337 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3338 elif n.type == token.NUMBER: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3339 if "_" in n.value: # type: ignore |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3340 features.add(Feature.NUMERIC_UNDERSCORES) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3341 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3342 elif n.type == token.SLASH: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3343 if n.parent and n.parent.type in {syms.typedargslist, syms.arglist}: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3344 features.add(Feature.POS_ONLY_ARGUMENTS) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3345 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3346 elif n.type == token.COLONEQUAL: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3347 features.add(Feature.ASSIGNMENT_EXPRESSIONS) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3348 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3349 elif ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3350 n.type in {syms.typedargslist, syms.arglist} |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3351 and n.children |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3352 and n.children[-1].type == token.COMMA |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3353 ): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3354 if n.type == syms.typedargslist: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3355 feature = Feature.TRAILING_COMMA_IN_DEF |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3356 else: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3357 feature = Feature.TRAILING_COMMA_IN_CALL |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3358 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3359 for ch in n.children: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3360 if ch.type in STARS: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3361 features.add(feature) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3362 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3363 if ch.type == syms.argument: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3364 for argch in ch.children: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3365 if argch.type in STARS: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3366 features.add(feature) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3367 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3368 return features |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3369 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3370 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3371 def detect_target_versions(node: Node) -> Set[TargetVersion]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3372 """Detect the version to target based on the nodes used.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3373 features = get_features_used(node) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3374 return { |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3375 version for version in TargetVersion if features <= VERSION_TO_FEATURES[version] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3376 } |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3377 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3378 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3379 def generate_trailers_to_omit(line: Line, line_length: int) -> Iterator[Set[LeafID]]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3380 """Generate sets of closing bracket IDs that should be omitted in a RHS. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3381 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3382 Brackets can be omitted if the entire trailer up to and including |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3383 a preceding closing bracket fits in one line. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3384 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3385 Yielded sets are cumulative (contain results of previous yields, too). First |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3386 set is empty. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3387 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3388 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3389 omit: Set[LeafID] = set() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3390 yield omit |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3391 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3392 length = 4 * line.depth |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3393 opening_bracket = None |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3394 closing_bracket = None |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3395 inner_brackets: Set[LeafID] = set() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3396 for index, leaf, leaf_length in enumerate_with_length(line, reversed=True): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3397 length += leaf_length |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3398 if length > line_length: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3399 break |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3400 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3401 has_inline_comment = leaf_length > len(leaf.value) + len(leaf.prefix) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3402 if leaf.type == STANDALONE_COMMENT or has_inline_comment: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3403 break |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3404 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3405 if opening_bracket: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3406 if leaf is opening_bracket: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3407 opening_bracket = None |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3408 elif leaf.type in CLOSING_BRACKETS: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3409 inner_brackets.add(id(leaf)) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3410 elif leaf.type in CLOSING_BRACKETS: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3411 if index > 0 and line.leaves[index - 1].type in OPENING_BRACKETS: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3412 # Empty brackets would fail a split so treat them as "inner" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3413 # brackets (e.g. only add them to the `omit` set if another |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3414 # pair of brackets was good enough. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3415 inner_brackets.add(id(leaf)) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3416 continue |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3417 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3418 if closing_bracket: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3419 omit.add(id(closing_bracket)) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3420 omit.update(inner_brackets) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3421 inner_brackets.clear() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3422 yield omit |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3423 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3424 if leaf.value: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3425 opening_bracket = leaf.opening_bracket |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3426 closing_bracket = leaf |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3427 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3428 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3429 def get_future_imports(node: Node) -> Set[str]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3430 """Return a set of __future__ imports in the file.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3431 imports: Set[str] = set() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3432 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3433 def get_imports_from_children(children: List[LN]) -> Generator[str, None, None]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3434 for child in children: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3435 if isinstance(child, Leaf): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3436 if child.type == token.NAME: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3437 yield child.value |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3438 elif child.type == syms.import_as_name: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3439 orig_name = child.children[0] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3440 assert isinstance(orig_name, Leaf), "Invalid syntax parsing imports" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3441 assert orig_name.type == token.NAME, "Invalid syntax parsing imports" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3442 yield orig_name.value |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3443 elif child.type == syms.import_as_names: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3444 yield from get_imports_from_children(child.children) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3445 else: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3446 raise AssertionError("Invalid syntax parsing imports") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3447 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3448 for child in node.children: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3449 if child.type != syms.simple_stmt: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3450 break |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3451 first_child = child.children[0] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3452 if isinstance(first_child, Leaf): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3453 # Continue looking if we see a docstring; otherwise stop. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3454 if ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3455 len(child.children) == 2 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3456 and first_child.type == token.STRING |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3457 and child.children[1].type == token.NEWLINE |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3458 ): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3459 continue |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3460 else: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3461 break |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3462 elif first_child.type == syms.import_from: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3463 module_name = first_child.children[1] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3464 if not isinstance(module_name, Leaf) or module_name.value != "__future__": |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3465 break |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3466 imports |= set(get_imports_from_children(first_child.children[3:])) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3467 else: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3468 break |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3469 return imports |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3470 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3471 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3472 def gen_python_files_in_dir( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3473 path: Path, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3474 root: Path, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3475 include: Pattern[str], |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3476 exclude: Pattern[str], |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3477 report: "Report", |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3478 ) -> Iterator[Path]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3479 """Generate all files under `path` whose paths are not excluded by the |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3480 `exclude` regex, but are included by the `include` regex. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3481 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3482 Symbolic links pointing outside of the `root` directory are ignored. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3483 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3484 `report` is where output about exclusions goes. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3485 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3486 assert root.is_absolute(), f"INTERNAL ERROR: `root` must be absolute but is {root}" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3487 for child in path.iterdir(): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3488 try: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3489 normalized_path = "/" + child.resolve().relative_to(root).as_posix() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3490 except ValueError: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3491 if child.is_symlink(): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3492 report.path_ignored( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3493 child, f"is a symbolic link that points outside {root}" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3494 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3495 continue |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3496 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3497 raise |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3498 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3499 if child.is_dir(): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3500 normalized_path += "/" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3501 exclude_match = exclude.search(normalized_path) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3502 if exclude_match and exclude_match.group(0): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3503 report.path_ignored(child, f"matches the --exclude regular expression") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3504 continue |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3505 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3506 if child.is_dir(): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3507 yield from gen_python_files_in_dir(child, root, include, exclude, report) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3508 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3509 elif child.is_file(): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3510 include_match = include.search(normalized_path) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3511 if include_match: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3512 yield child |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3513 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3514 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3515 @lru_cache() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3516 def find_project_root(srcs: Iterable[str]) -> Path: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3517 """Return a directory containing .git, .hg, or pyproject.toml. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3518 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3519 That directory can be one of the directories passed in `srcs` or their |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3520 common parent. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3521 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3522 If no directory in the tree contains a marker that would specify it's the |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3523 project root, the root of the file system is returned. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3524 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3525 if not srcs: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3526 return Path("/").resolve() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3527 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3528 common_base = min(Path(src).resolve() for src in srcs) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3529 if common_base.is_dir(): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3530 # Append a fake file so `parents` below returns `common_base_dir`, too. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3531 common_base /= "fake-file" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3532 for directory in common_base.parents: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3533 if (directory / ".git").is_dir(): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3534 return directory |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3535 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3536 if (directory / ".hg").is_dir(): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3537 return directory |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3538 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3539 if (directory / "pyproject.toml").is_file(): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3540 return directory |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3541 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3542 return directory |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3543 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3544 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3545 @dataclass |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3546 class Report: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3547 """Provides a reformatting counter. Can be rendered with `str(report)`.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3548 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3549 check: bool = False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3550 quiet: bool = False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3551 verbose: bool = False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3552 change_count: int = 0 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3553 same_count: int = 0 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3554 failure_count: int = 0 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3555 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3556 def done(self, src: Path, changed: Changed) -> None: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3557 """Increment the counter for successful reformatting. Write out a message.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3558 if changed is Changed.YES: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3559 reformatted = "would reformat" if self.check else "reformatted" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3560 if self.verbose or not self.quiet: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3561 out(f"{reformatted} {src}") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3562 self.change_count += 1 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3563 else: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3564 if self.verbose: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3565 if changed is Changed.NO: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3566 msg = f"{src} already well formatted, good job." |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3567 else: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3568 msg = f"{src} wasn't modified on disk since last run." |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3569 out(msg, bold=False) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3570 self.same_count += 1 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3571 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3572 def failed(self, src: Path, message: str) -> None: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3573 """Increment the counter for failed reformatting. Write out a message.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3574 err(f"error: cannot format {src}: {message}") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3575 self.failure_count += 1 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3576 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3577 def path_ignored(self, path: Path, message: str) -> None: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3578 if self.verbose: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3579 out(f"{path} ignored: {message}", bold=False) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3580 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3581 @property |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3582 def return_code(self) -> int: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3583 """Return the exit code that the app should use. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3584 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3585 This considers the current state of changed files and failures: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3586 - if there were any failures, return 123; |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3587 - if any files were changed and --check is being used, return 1; |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3588 - otherwise return 0. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3589 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3590 # According to http://tldp.org/LDP/abs/html/exitcodes.html starting with |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3591 # 126 we have special return codes reserved by the shell. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3592 if self.failure_count: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3593 return 123 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3594 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3595 elif self.change_count and self.check: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3596 return 1 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3597 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3598 return 0 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3599 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3600 def __str__(self) -> str: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3601 """Render a color report of the current state. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3602 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3603 Use `click.unstyle` to remove colors. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3604 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3605 if self.check: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3606 reformatted = "would be reformatted" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3607 unchanged = "would be left unchanged" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3608 failed = "would fail to reformat" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3609 else: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3610 reformatted = "reformatted" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3611 unchanged = "left unchanged" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3612 failed = "failed to reformat" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3613 report = [] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3614 if self.change_count: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3615 s = "s" if self.change_count > 1 else "" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3616 report.append( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3617 click.style(f"{self.change_count} file{s} {reformatted}", bold=True) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3618 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3619 if self.same_count: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3620 s = "s" if self.same_count > 1 else "" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3621 report.append(f"{self.same_count} file{s} {unchanged}") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3622 if self.failure_count: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3623 s = "s" if self.failure_count > 1 else "" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3624 report.append( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3625 click.style(f"{self.failure_count} file{s} {failed}", fg="red") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3626 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3627 return ", ".join(report) + "." |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3628 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3629 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3630 def parse_ast(src: str) -> Union[ast.AST, ast3.AST, ast27.AST]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3631 filename = "<unknown>" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3632 if sys.version_info >= (3, 8): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3633 # TODO: support Python 4+ ;) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3634 for minor_version in range(sys.version_info[1], 4, -1): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3635 try: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3636 return ast.parse(src, filename, feature_version=(3, minor_version)) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3637 except SyntaxError: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3638 continue |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3639 else: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3640 for feature_version in (7, 6): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3641 try: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3642 return ast3.parse(src, filename, feature_version=feature_version) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3643 except SyntaxError: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3644 continue |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3645 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3646 return ast27.parse(src) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3647 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3648 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3649 def _fixup_ast_constants( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3650 node: Union[ast.AST, ast3.AST, ast27.AST] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3651 ) -> Union[ast.AST, ast3.AST, ast27.AST]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3652 """Map ast nodes deprecated in 3.8 to Constant.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3653 # casts are required until this is released: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3654 # https://github.com/python/typeshed/pull/3142 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3655 if isinstance(node, (ast.Str, ast3.Str, ast27.Str, ast.Bytes, ast3.Bytes)): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3656 return cast(ast.AST, ast.Constant(value=node.s)) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3657 elif isinstance(node, (ast.Num, ast3.Num, ast27.Num)): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3658 return cast(ast.AST, ast.Constant(value=node.n)) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3659 elif isinstance(node, (ast.NameConstant, ast3.NameConstant)): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3660 return cast(ast.AST, ast.Constant(value=node.value)) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3661 return node |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3662 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3663 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3664 def assert_equivalent(src: str, dst: str) -> None: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3665 """Raise AssertionError if `src` and `dst` aren't equivalent.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3666 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3667 def _v(node: Union[ast.AST, ast3.AST, ast27.AST], depth: int = 0) -> Iterator[str]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3668 """Simple visitor generating strings to compare ASTs by content.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3669 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3670 node = _fixup_ast_constants(node) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3671 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3672 yield f"{' ' * depth}{node.__class__.__name__}(" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3673 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3674 for field in sorted(node._fields): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3675 # TypeIgnore has only one field 'lineno' which breaks this comparison |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3676 type_ignore_classes = (ast3.TypeIgnore, ast27.TypeIgnore) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3677 if sys.version_info >= (3, 8): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3678 type_ignore_classes += (ast.TypeIgnore,) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3679 if isinstance(node, type_ignore_classes): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3680 break |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3681 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3682 try: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3683 value = getattr(node, field) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3684 except AttributeError: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3685 continue |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3686 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3687 yield f"{' ' * (depth+1)}{field}=" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3688 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3689 if isinstance(value, list): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3690 for item in value: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3691 # Ignore nested tuples within del statements, because we may insert |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3692 # parentheses and they change the AST. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3693 if ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3694 field == "targets" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3695 and isinstance(node, (ast.Delete, ast3.Delete, ast27.Delete)) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3696 and isinstance(item, (ast.Tuple, ast3.Tuple, ast27.Tuple)) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3697 ): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3698 for item in item.elts: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3699 yield from _v(item, depth + 2) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3700 elif isinstance(item, (ast.AST, ast3.AST, ast27.AST)): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3701 yield from _v(item, depth + 2) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3702 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3703 elif isinstance(value, (ast.AST, ast3.AST, ast27.AST)): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3704 yield from _v(value, depth + 2) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3705 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3706 else: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3707 yield f"{' ' * (depth+2)}{value!r}, # {value.__class__.__name__}" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3708 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3709 yield f"{' ' * depth}) # /{node.__class__.__name__}" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3710 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3711 try: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3712 src_ast = parse_ast(src) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3713 except Exception as exc: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3714 raise AssertionError( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3715 f"cannot use --safe with this file; failed to parse source file. " |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3716 f"AST error message: {exc}" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3717 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3718 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3719 try: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3720 dst_ast = parse_ast(dst) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3721 except Exception as exc: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3722 log = dump_to_file("".join(traceback.format_tb(exc.__traceback__)), dst) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3723 raise AssertionError( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3724 f"INTERNAL ERROR: Black produced invalid code: {exc}. " |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3725 f"Please report a bug on https://github.com/psf/black/issues. " |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3726 f"This invalid output might be helpful: {log}" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3727 ) from None |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3728 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3729 src_ast_str = "\n".join(_v(src_ast)) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3730 dst_ast_str = "\n".join(_v(dst_ast)) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3731 if src_ast_str != dst_ast_str: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3732 log = dump_to_file(diff(src_ast_str, dst_ast_str, "src", "dst")) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3733 raise AssertionError( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3734 f"INTERNAL ERROR: Black produced code that is not equivalent to " |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3735 f"the source. " |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3736 f"Please report a bug on https://github.com/psf/black/issues. " |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3737 f"This diff might be helpful: {log}" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3738 ) from None |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3739 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3740 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3741 def assert_stable(src: str, dst: str, mode: FileMode) -> None: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3742 """Raise AssertionError if `dst` reformats differently the second time.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3743 newdst = format_str(dst, mode=mode) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3744 if dst != newdst: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3745 log = dump_to_file( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3746 diff(src, dst, "source", "first pass"), |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3747 diff(dst, newdst, "first pass", "second pass"), |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3748 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3749 raise AssertionError( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3750 f"INTERNAL ERROR: Black produced different code on the second pass " |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3751 f"of the formatter. " |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3752 f"Please report a bug on https://github.com/psf/black/issues. " |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3753 f"This diff might be helpful: {log}" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3754 ) from None |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3755 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3756 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3757 def dump_to_file(*output: str) -> str: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3758 """Dump `output` to a temporary file. Return path to the file.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3759 with tempfile.NamedTemporaryFile( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3760 mode="w", prefix="blk_", suffix=".log", delete=False, encoding="utf8" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3761 ) as f: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3762 for lines in output: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3763 f.write(lines) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3764 if lines and lines[-1] != "\n": |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3765 f.write("\n") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3766 return f.name |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3767 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3768 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3769 @contextmanager |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3770 def nullcontext() -> Iterator[None]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3771 """Return context manager that does nothing. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3772 Similar to `nullcontext` from python 3.7""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3773 yield |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3774 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3775 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3776 def diff(a: str, b: str, a_name: str, b_name: str) -> str: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3777 """Return a unified diff string between strings `a` and `b`.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3778 import difflib |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3779 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3780 a_lines = [line + "\n" for line in a.split("\n")] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3781 b_lines = [line + "\n" for line in b.split("\n")] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3782 return "".join( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3783 difflib.unified_diff(a_lines, b_lines, fromfile=a_name, tofile=b_name, n=5) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3784 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3785 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3786 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3787 def cancel(tasks: Iterable[asyncio.Task]) -> None: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3788 """asyncio signal handler that cancels all `tasks` and reports to stderr.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3789 err("Aborted!") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3790 for task in tasks: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3791 task.cancel() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3792 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3793 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3794 def shutdown(loop: asyncio.AbstractEventLoop) -> None: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3795 """Cancel all pending tasks on `loop`, wait for them, and close the loop.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3796 try: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3797 if sys.version_info[:2] >= (3, 7): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3798 all_tasks = asyncio.all_tasks |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3799 else: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3800 all_tasks = asyncio.Task.all_tasks |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3801 # This part is borrowed from asyncio/runners.py in Python 3.7b2. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3802 to_cancel = [task for task in all_tasks(loop) if not task.done()] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3803 if not to_cancel: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3804 return |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3805 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3806 for task in to_cancel: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3807 task.cancel() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3808 loop.run_until_complete( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3809 asyncio.gather(*to_cancel, loop=loop, return_exceptions=True) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3810 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3811 finally: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3812 # `concurrent.futures.Future` objects cannot be cancelled once they |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3813 # are already running. There might be some when the `shutdown()` happened. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3814 # Silence their logger's spew about the event loop being closed. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3815 cf_logger = logging.getLogger("concurrent.futures") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3816 cf_logger.setLevel(logging.CRITICAL) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3817 loop.close() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3818 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3819 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3820 def sub_twice(regex: Pattern[str], replacement: str, original: str) -> str: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3821 """Replace `regex` with `replacement` twice on `original`. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3822 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3823 This is used by string normalization to perform replaces on |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3824 overlapping matches. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3825 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3826 return regex.sub(replacement, regex.sub(replacement, original)) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3827 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3828 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3829 def re_compile_maybe_verbose(regex: str) -> Pattern[str]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3830 """Compile a regular expression string in `regex`. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3831 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3832 If it contains newlines, use verbose mode. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3833 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3834 if "\n" in regex: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3835 regex = "(?x)" + regex |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3836 return re.compile(regex) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3837 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3838 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3839 def enumerate_reversed(sequence: Sequence[T]) -> Iterator[Tuple[Index, T]]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3840 """Like `reversed(enumerate(sequence))` if that were possible.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3841 index = len(sequence) - 1 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3842 for element in reversed(sequence): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3843 yield (index, element) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3844 index -= 1 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3845 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3846 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3847 def enumerate_with_length( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3848 line: Line, reversed: bool = False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3849 ) -> Iterator[Tuple[Index, Leaf, int]]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3850 """Return an enumeration of leaves with their length. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3851 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3852 Stops prematurely on multiline strings and standalone comments. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3853 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3854 op = cast( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3855 Callable[[Sequence[Leaf]], Iterator[Tuple[Index, Leaf]]], |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3856 enumerate_reversed if reversed else enumerate, |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3857 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3858 for index, leaf in op(line.leaves): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3859 length = len(leaf.prefix) + len(leaf.value) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3860 if "\n" in leaf.value: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3861 return # Multiline strings, we can't continue. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3862 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3863 for comment in line.comments_after(leaf): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3864 length += len(comment.value) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3865 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3866 yield index, leaf, length |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3867 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3868 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3869 def is_line_short_enough(line: Line, *, line_length: int, line_str: str = "") -> bool: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3870 """Return True if `line` is no longer than `line_length`. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3871 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3872 Uses the provided `line_str` rendering, if any, otherwise computes a new one. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3873 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3874 if not line_str: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3875 line_str = str(line).strip("\n") |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3876 return ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3877 len(line_str) <= line_length |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3878 and "\n" not in line_str # multiline strings |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3879 and not line.contains_standalone_comments() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3880 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3881 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3882 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3883 def can_be_split(line: Line) -> bool: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3884 """Return False if the line cannot be split *for sure*. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3885 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3886 This is not an exhaustive search but a cheap heuristic that we can use to |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3887 avoid some unfortunate formattings (mostly around wrapping unsplittable code |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3888 in unnecessary parentheses). |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3889 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3890 leaves = line.leaves |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3891 if len(leaves) < 2: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3892 return False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3893 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3894 if leaves[0].type == token.STRING and leaves[1].type == token.DOT: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3895 call_count = 0 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3896 dot_count = 0 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3897 next = leaves[-1] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3898 for leaf in leaves[-2::-1]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3899 if leaf.type in OPENING_BRACKETS: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3900 if next.type not in CLOSING_BRACKETS: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3901 return False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3902 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3903 call_count += 1 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3904 elif leaf.type == token.DOT: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3905 dot_count += 1 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3906 elif leaf.type == token.NAME: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3907 if not (next.type == token.DOT or next.type in OPENING_BRACKETS): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3908 return False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3909 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3910 elif leaf.type not in CLOSING_BRACKETS: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3911 return False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3912 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3913 if dot_count > 1 and call_count > 1: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3914 return False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3915 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3916 return True |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3917 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3918 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3919 def can_omit_invisible_parens(line: Line, line_length: int) -> bool: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3920 """Does `line` have a shape safe to reformat without optional parens around it? |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3921 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3922 Returns True for only a subset of potentially nice looking formattings but |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3923 the point is to not return false positives that end up producing lines that |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3924 are too long. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3925 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3926 bt = line.bracket_tracker |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3927 if not bt.delimiters: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3928 # Without delimiters the optional parentheses are useless. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3929 return True |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3930 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3931 max_priority = bt.max_delimiter_priority() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3932 if bt.delimiter_count_with_priority(max_priority) > 1: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3933 # With more than one delimiter of a kind the optional parentheses read better. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3934 return False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3935 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3936 if max_priority == DOT_PRIORITY: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3937 # A single stranded method call doesn't require optional parentheses. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3938 return True |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3939 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3940 assert len(line.leaves) >= 2, "Stranded delimiter" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3941 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3942 first = line.leaves[0] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3943 second = line.leaves[1] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3944 penultimate = line.leaves[-2] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3945 last = line.leaves[-1] |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3946 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3947 # With a single delimiter, omit if the expression starts or ends with |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3948 # a bracket. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3949 if first.type in OPENING_BRACKETS and second.type not in CLOSING_BRACKETS: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3950 remainder = False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3951 length = 4 * line.depth |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3952 for _index, leaf, leaf_length in enumerate_with_length(line): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3953 if leaf.type in CLOSING_BRACKETS and leaf.opening_bracket is first: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3954 remainder = True |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3955 if remainder: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3956 length += leaf_length |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3957 if length > line_length: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3958 break |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3959 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3960 if leaf.type in OPENING_BRACKETS: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3961 # There are brackets we can further split on. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3962 remainder = False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3963 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3964 else: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3965 # checked the entire string and line length wasn't exceeded |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3966 if len(line.leaves) == _index + 1: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3967 return True |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3968 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3969 # Note: we are not returning False here because a line might have *both* |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3970 # a leading opening bracket and a trailing closing bracket. If the |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3971 # opening bracket doesn't match our rule, maybe the closing will. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3972 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3973 if ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3974 last.type == token.RPAR |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3975 or last.type == token.RBRACE |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3976 or ( |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3977 # don't use indexing for omitting optional parentheses; |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3978 # it looks weird |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3979 last.type == token.RSQB |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3980 and last.parent |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3981 and last.parent.type != syms.trailer |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3982 ) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3983 ): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3984 if penultimate.type in OPENING_BRACKETS: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3985 # Empty brackets don't help. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3986 return False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3987 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3988 if is_multiline_string(first): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3989 # Additional wrapping of a multiline string in this situation is |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3990 # unnecessary. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3991 return True |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3992 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3993 length = 4 * line.depth |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3994 seen_other_brackets = False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3995 for _index, leaf, leaf_length in enumerate_with_length(line): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3996 length += leaf_length |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3997 if leaf is last.opening_bracket: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3998 if seen_other_brackets or length <= line_length: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3999 return True |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4000 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4001 elif leaf.type in OPENING_BRACKETS: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4002 # There are brackets we can further split on. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4003 seen_other_brackets = True |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4004 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4005 return False |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4006 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4007 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4008 def get_cache_file(mode: FileMode) -> Path: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4009 return CACHE_DIR / f"cache.{mode.get_cache_key()}.pickle" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4010 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4011 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4012 def read_cache(mode: FileMode) -> Cache: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4013 """Read the cache if it exists and is well formed. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4014 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4015 If it is not well formed, the call to write_cache later should resolve the issue. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4016 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4017 cache_file = get_cache_file(mode) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4018 if not cache_file.exists(): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4019 return {} |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4020 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4021 with cache_file.open("rb") as fobj: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4022 try: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4023 cache: Cache = pickle.load(fobj) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4024 except pickle.UnpicklingError: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4025 return {} |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4026 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4027 return cache |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4028 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4029 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4030 def get_cache_info(path: Path) -> CacheInfo: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4031 """Return the information used to check if a file is already formatted or not.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4032 stat = path.stat() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4033 return stat.st_mtime, stat.st_size |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4034 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4035 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4036 def filter_cached(cache: Cache, sources: Iterable[Path]) -> Tuple[Set[Path], Set[Path]]: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4037 """Split an iterable of paths in `sources` into two sets. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4038 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4039 The first contains paths of files that modified on disk or are not in the |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4040 cache. The other contains paths to non-modified files. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4041 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4042 todo, done = set(), set() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4043 for src in sources: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4044 src = src.resolve() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4045 if cache.get(src) != get_cache_info(src): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4046 todo.add(src) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4047 else: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4048 done.add(src) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4049 return todo, done |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4050 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4051 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4052 def write_cache(cache: Cache, sources: Iterable[Path], mode: FileMode) -> None: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4053 """Update the cache file.""" |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4054 cache_file = get_cache_file(mode) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4055 try: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4056 CACHE_DIR.mkdir(parents=True, exist_ok=True) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4057 new_cache = {**cache, **{src.resolve(): get_cache_info(src) for src in sources}} |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4058 with tempfile.NamedTemporaryFile(dir=str(cache_file.parent), delete=False) as f: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4059 pickle.dump(new_cache, f, protocol=pickle.HIGHEST_PROTOCOL) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4060 os.replace(f.name, cache_file) |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4061 except OSError: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4062 pass |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4063 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4064 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4065 def patch_click() -> None: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4066 """Make Click not crash. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4067 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4068 On certain misconfigured environments, Python 3 selects the ASCII encoding as the |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4069 default which restricts paths that it can access during the lifetime of the |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4070 application. Click refuses to work in this scenario by raising a RuntimeError. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4071 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4072 In case of Black the likelihood that non-ASCII characters are going to be used in |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4073 file paths is minimal since it's Python source code. Moreover, this crash was |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4074 spurious on Python 3.7 thanks to PEP 538 and PEP 540. |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4075 """ |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4076 try: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4077 from click import core |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4078 from click import _unicodefun # type: ignore |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4079 except ModuleNotFoundError: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4080 return |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4081 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4082 for module in (core, _unicodefun): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4083 if hasattr(module, "_verify_python3_env"): |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4084 module._verify_python3_env = lambda: None |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4085 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4086 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4087 def patched_main() -> None: |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4088 freeze_support() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4089 patch_click() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4090 main() |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4091 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4092 |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4093 if __name__ == "__main__": |
7054fd370430
contrib: add a fork of black (as "grey") that includes my changes
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4094 patched_main() |