Skip to content

Commit

Permalink
use is_name_token to resolve type:ignore
Browse files Browse the repository at this point in the history
  • Loading branch information
MarcoGorelli committed Dec 21, 2021
1 parent e025308 commit f13f3e8
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 14 deletions.
6 changes: 3 additions & 3 deletions src/black/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@


# lib2to3 fork
from blib2to3.pytree import Node, Leaf
from blib2to3.pytree import Node, Leaf, is_string_token
from blib2to3.pgen2 import token

from _black_version import version as __version__
Expand Down Expand Up @@ -1141,8 +1141,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
14 changes: 7 additions & 7 deletions src/black/linegen.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
from black.mode import Mode
from black.mode import Feature

from blib2to3.pytree import Node, Leaf
from blib2to3.pytree import Node, Leaf, is_name_token, is_lpar_token, is_rpar_token
from blib2to3.pgen2 import token


Expand Down Expand Up @@ -137,7 +137,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 +805,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 +853,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
8 changes: 4 additions & 4 deletions src/black/nodes.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
from mypy_extensions import mypyc_attr

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

Expand Down Expand Up @@ -256,8 +256,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 +683,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
24 changes: 24 additions & 0 deletions src/blib2to3/pytree.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@

# mypy: allow-untyped-defs

import sys

from typing import (
Any,
Dict,
Expand All @@ -25,7 +27,13 @@
Set,
Iterable,
)

if sys.version_info >= (3, 10):
from typing import TypeGuard
else:
from typing_extensions import TypeGuard
from blib2to3.pgen2.grammar import Grammar
from blib2to3.pgen2 import token

__author__ = "Guido van Rossum <[email protected]>"

Expand Down Expand Up @@ -978,3 +986,19 @@ def generate_matches(
r.update(r0)
r.update(r1)
yield c0 + c1, r


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

0 comments on commit f13f3e8

Please sign in to comment.