Mercurial > hg
annotate contrib/grey.py @ 43158:ff615b6b5b8f
crecord: drop duplicated set of firstlineofpadtoprint attribute
The attribute is already set a couple of lines above, in
curseschunkselector.__init__().
author | Denis Laxalde <denis.laxalde@logilab.fr> |
---|---|
date | Thu, 10 Oct 2019 12:20:23 +0200 |
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() |