Define is_name_token (and friends) to resolve some type: ignore
s (GH-2714)
Gets rid of a few # type: ignores by using TypeGuard.
This commit is contained in:
parent
389e9c23a9
commit
7c94ed61a5
@ -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
|
||||
@ -1156,8 +1157,8 @@ def get_features_used( # noqa: C901
|
||||
}
|
||||
|
||||
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)
|
||||
|
||||
|
@ -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
|
||||
@ -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)
|
||||
@ -813,9 +814,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
|
||||
@ -861,11 +862,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):
|
||||
|
@ -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
|
||||
|
||||
@ -260,8 +264,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
|
||||
@ -687,7 +691,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:
|
||||
@ -854,3 +858,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
|
||||
|
Loading…
Reference in New Issue
Block a user