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 1 commit
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
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 <guido@python.org>"

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