Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Define is name token to resolve some type: ignores #2714

Merged
merged 3 commits into from
Dec 21, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions src/black/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
from black.const import DEFAULT_LINE_LENGTH, DEFAULT_INCLUDES, DEFAULT_EXCLUDES
from black.const import STDIN_PLACEHOLDER
from black.nodes import STARS, syms, is_simple_decorator_expression
from black.nodes import is_string_token
from black.lines import Line, EmptyLineTracker
from black.linegen import transform_line, LineGenerator, LN
from black.comments import normalize_fmt_off
Expand Down Expand Up @@ -1141,8 +1142,8 @@ def get_features_used(node: Node) -> Set[Feature]: # noqa: C901
"""
features: Set[Feature] = set()
for n in node.pre_order():
if n.type == token.STRING:
value_head = n.value[:2] # type: ignore
if is_string_token(n):
value_head = n.value[:2]
if value_head in {'f"', 'F"', "f'", "F'", "rf", "fr", "RF", "FR"}:
features.add(Feature.F_STRINGS)

Expand Down
13 changes: 7 additions & 6 deletions src/black/linegen.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
from black.nodes import ASSIGNMENTS, OPENING_BRACKETS, CLOSING_BRACKETS
from black.nodes import Visitor, syms, first_child_is_arith, ensure_visible
from black.nodes import is_docstring, is_empty_tuple, is_one_tuple, is_one_tuple_between
from black.nodes import is_name_token, is_lpar_token, is_rpar_token
from black.nodes import is_walrus_assignment, is_yield, is_vararg, is_multiline_string
from black.nodes import is_stub_suite, is_stub_body, is_atom_with_invisible_parens
from black.nodes import wrap_in_parentheses
Expand Down Expand Up @@ -137,7 +138,7 @@ def visit_stmt(
"""
normalize_invisible_parens(node, parens_after=parens)
for child in node.children:
if child.type == token.NAME and child.value in keywords: # type: ignore
if is_name_token(child) and child.value in keywords:
yield from self.line()

yield from self.visit(child)
Expand Down Expand Up @@ -805,9 +806,9 @@ def normalize_invisible_parens(node: Node, parens_after: Set[str]) -> None:
elif node.type == syms.import_from:
# "import from" nodes store parentheses directly as part of
# the statement
if child.type == token.LPAR:
if is_lpar_token(child):
# make parentheses invisible
child.value = "" # type: ignore
child.value = ""
node.children[-1].value = "" # type: ignore
elif child.type != token.STAR:
# insert invisible parentheses
Expand Down Expand Up @@ -853,11 +854,11 @@ def maybe_make_parens_invisible_in_atom(node: LN, parent: LN) -> bool:

first = node.children[0]
last = node.children[-1]
if first.type == token.LPAR and last.type == token.RPAR:
if is_lpar_token(first) and is_rpar_token(last):
middle = node.children[1]
# make parentheses invisible
first.value = "" # type: ignore
last.value = "" # type: ignore
first.value = ""
last.value = ""
maybe_make_parens_invisible_in_atom(middle, parent=parent)

if is_atom_with_invisible_parens(middle):
Expand Down
28 changes: 24 additions & 4 deletions src/black/nodes.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,15 @@
from typing import Final
else:
from typing_extensions import Final
if sys.version_info >= (3, 10):
from typing import TypeGuard
else:
from typing_extensions import TypeGuard

from mypy_extensions import mypyc_attr

# lib2to3 fork
from blib2to3.pytree import Node, Leaf, type_repr
from blib2to3.pytree import Node, Leaf, type_repr, NL
from blib2to3 import pygram
from blib2to3.pgen2 import token

Expand Down Expand Up @@ -256,8 +260,8 @@ def whitespace(leaf: Leaf, *, complex_subscript: bool) -> str: # noqa: C901
and prevp.parent
and prevp.parent.type == syms.shift_expr
and prevp.prev_sibling
and prevp.prev_sibling.type == token.NAME
and prevp.prev_sibling.value == "print" # type: ignore
and is_name_token(prevp.prev_sibling)
and prevp.prev_sibling.value == "print"
):
# Python 2 print chevron
return NO
Expand Down Expand Up @@ -683,7 +687,7 @@ def is_yield(node: LN) -> bool:
if node.type == syms.yield_expr:
return True

if node.type == token.NAME and node.value == "yield": # type: ignore
if is_name_token(node) and node.value == "yield":
return True

if node.type != syms.atom:
Expand Down Expand Up @@ -850,3 +854,19 @@ def ensure_visible(leaf: Leaf) -> None:
leaf.value = "("
elif leaf.type == token.RPAR:
leaf.value = ")"


def is_name_token(nl: NL) -> TypeGuard[Leaf]:
return nl.type == token.NAME


def is_lpar_token(nl: NL) -> TypeGuard[Leaf]:
return nl.type == token.LPAR


def is_rpar_token(nl: NL) -> TypeGuard[Leaf]:
return nl.type == token.RPAR


def is_string_token(nl: NL) -> TypeGuard[Leaf]:
return nl.type == token.STRING