summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pyflakes/checker.py10
-rw-r--r--pyflakes/test/test_checker.py2
-rw-r--r--pyflakes/test/test_type_annotations.py21
3 files changed, 28 insertions, 5 deletions
diff --git a/pyflakes/checker.py b/pyflakes/checker.py
index f9ae0aa..f2e579f 100644
--- a/pyflakes/checker.py
+++ b/pyflakes/checker.py
@@ -76,11 +76,13 @@ else:
FOR_TYPES = (ast.For,)
LOOP_TYPES = (ast.While, ast.For)
-# https://github.com/python/typed_ast/blob/55420396/ast27/Parser/tokenizer.c#L102-L104
+# https://github.com/python/typed_ast/blob/1.4.0/ast27/Parser/tokenizer.c#L102-L104
TYPE_COMMENT_RE = re.compile(r'^#\s*type:\s*')
-# https://github.com/python/typed_ast/blob/55420396/ast27/Parser/tokenizer.c#L1400
-TYPE_IGNORE_RE = re.compile(TYPE_COMMENT_RE.pattern + r'ignore\s*(#|$)')
-# https://github.com/python/typed_ast/blob/55420396/ast27/Grammar/Grammar#L147
+# https://github.com/python/typed_ast/blob/1.4.0/ast27/Parser/tokenizer.c#L1408-L1413
+ASCII_NON_ALNUM = ''.join([chr(i) for i in range(128) if not chr(i).isalnum()])
+TYPE_IGNORE_RE = re.compile(
+ TYPE_COMMENT_RE.pattern + r'ignore([{}]|$)'.format(ASCII_NON_ALNUM))
+# https://github.com/python/typed_ast/blob/1.4.0/ast27/Grammar/Grammar#L147
TYPE_FUNC_RE = re.compile(r'^(\(.*?\))\s*->\s*(.*)$')
diff --git a/pyflakes/test/test_checker.py b/pyflakes/test/test_checker.py
index f47588d..b527572 100644
--- a/pyflakes/test/test_checker.py
+++ b/pyflakes/test/test_checker.py
@@ -154,7 +154,7 @@ class CollectTypeCommentsTests(TestCase):
def test_type_comment_starts_with_word_ignore(self):
ret = self._collect('x = 1 # type: ignore[T]')
- self.assertSetEqual(ret, {(ast.Assign, ('# type: ignore[T]',))})
+ self.assertSetEqual(ret, set())
def test_last_node_wins(self):
"""
diff --git a/pyflakes/test/test_type_annotations.py b/pyflakes/test/test_type_annotations.py
index 9c34dcf..bebdef7 100644
--- a/pyflakes/test/test_type_annotations.py
+++ b/pyflakes/test/test_type_annotations.py
@@ -343,6 +343,27 @@ class TestTypeAnnotations(TestCase):
# type: F
""")
+ def test_typeIgnore(self):
+ self.flakes("""
+ a = 0 # type: ignore
+ b = 0 # type: ignore[excuse]
+ c = 0 # type: ignore=excuse
+ d = 0 # type: ignore [excuse]
+ e = 0 # type: ignore whatever
+ """)
+
+ def test_typeIgnoreBogus(self):
+ self.flakes("""
+ x = 1 # type: ignored
+ """, m.UndefinedName)
+
+ def test_typeIgnoreBogusUnicode(self):
+ error = (m.CommentAnnotationSyntaxError if version_info < (3,)
+ else m.UndefinedName)
+ self.flakes("""
+ x = 2 # type: ignore\xc3
+ """, error)
+
@skipIf(version_info < (3,), 'new in Python 3')
def test_return_annotation_is_class_scope_variable(self):
self.flakes("""