]>
git.madduck.net Git - etc/vim.git/blobdiff - src/black/comments.py
madduck's git repository
Every one of the projects in this repository is available at the canonical
URL git://git.madduck.net/madduck/pub/<projectpath> — see
each project's metadata for the exact URL.
All patches and comments are welcome. Please squash your changes to logical
commits before using git-format-patch and git-send-email to
patches@ git. madduck. net .
If you'd read over the Git project's submission guidelines and adhered to them,
I'd be especially grateful.
SSH access, as well as push access can be individually
arranged .
If you use my repositories frequently, consider adding the following
snippet to ~/.gitconfig and using the third clone URL listed for each
project:
[url "git://git.madduck.net/madduck/"]
insteadOf = madduck:
import sys
from dataclasses import dataclass
from functools import lru_cache
import sys
from dataclasses import dataclass
from functools import lru_cache
from typing import Iterator, List, Optional, Union
if sys.version_info >= (3, 8):
from typing import Iterator, List, Optional, Union
if sys.version_info >= (3, 8):
else:
from typing_extensions import Final
else:
from typing_extensions import Final
-from blib2to3.pytree import Node, Leaf, type_repr
+from black.nodes import (
+ CLOSING_BRACKETS,
+ STANDALONE_COMMENT,
+ WHITESPACE,
+ container_of,
+ first_leaf_of,
+ preceding_leaf,
+ syms,
+)
from blib2to3.pgen2 import token
from blib2to3.pgen2 import token
-
-from black.nodes import first_leaf_column, preceding_leaf, container_of
-from black.nodes import CLOSING_BRACKETS, STANDALONE_COMMENT, WHITESPACE
+from blib2to3.pytree import Leaf, Node
# types
LN = Union[Leaf, Node]
# types
LN = Union[Leaf, Node]
return
# fix for fmt: on in children
return
# fix for fmt: on in children
- if contains_fmt_on_at_column(container, leaf.column , preview=preview):
+ if children_contains_fmt_on(container , preview=preview):
for child in container.children:
if isinstance(child, Leaf) and is_fmt_on(child, preview=preview):
if child.type in CLOSING_BRACKETS:
for child in container.children:
if isinstance(child, Leaf) and is_fmt_on(child, preview=preview):
if child.type in CLOSING_BRACKETS:
# The alternative is to fail the formatting.
yield child
return
# The alternative is to fail the formatting.
yield child
return
- if contains_fmt_on_at_column(child, leaf.column , preview=preview):
+ if children_contains_fmt_on(child , preview=preview):
+ if container.type == token.DEDENT and container.next_sibling is None:
+ # This can happen when there is no matching `# fmt: on` comment at the
+ # same level as `# fmt: on`. We need to keep this DEDENT.
+ return
yield container
container = container.next_sibling
yield container
container = container.next_sibling
while "\n" not in prev_sibling.prefix and prev_sibling.prev_sibling is not None:
prev_sibling = prev_sibling.prev_sibling
siblings.insert(0, prev_sibling)
while "\n" not in prev_sibling.prefix and prev_sibling.prev_sibling is not None:
prev_sibling = prev_sibling.prev_sibling
siblings.insert(0, prev_sibling)
- for sibling in siblings:
- yield sibling
- parent is not None
- and type_repr(parent.type) == "suite"
- and leaf.type == token.NEWLINE
+ parent is not None and parent.type == syms.suite and leaf.type == token.NEWLINE
):
# The `# fmt: skip` is on the colon line of the if/while/def/class/...
# statements. The ignored nodes should be previous siblings of the
):
# The `# fmt: skip` is on the colon line of the if/while/def/class/...
# statements. The ignored nodes should be previous siblings of the
leaf.prefix = ""
ignored_nodes: List[LN] = []
parent_sibling = parent.prev_sibling
leaf.prefix = ""
ignored_nodes: List[LN] = []
parent_sibling = parent.prev_sibling
- while parent_sibling is not None and type_repr(parent_sibling.type) != "suite" :
+ while parent_sibling is not None and parent_sibling.type != syms.suite :
ignored_nodes.insert(0, parent_sibling)
parent_sibling = parent_sibling.prev_sibling
# Special case for `async_stmt` where the ASYNC token is on the
ignored_nodes.insert(0, parent_sibling)
parent_sibling = parent_sibling.prev_sibling
# Special case for `async_stmt` where the ASYNC token is on the
-def contains_fmt_on_at_column(container: LN, column: int , *, preview: bool) -> bool:
- """Determine if children at a given column have formatting switched on."""
+def children_contains_fmt_on(container: LN , *, preview: bool) -> bool:
+ """Determine if children have formatting switched on."""
for child in container.children:
for child in container.children:
- if (
- isinstance(child, Node)
- and first_leaf_column(child) == column
- or isinstance(child, Leaf)
- and child.column == column
- ):
- if is_fmt_on(child, preview=preview):
- return True
+ leaf = first_leaf_of(child)
+ if leaf is not None and is_fmt_on(leaf, preview=preview):
+ return True