srittau: The build failures (on Python nightly) seem unrelated to this PR.
asottile: a quick rebase should make travis green -- I've marked nightly as `allow_failures: true` for now
diff --git a/.appveyor.yml b/.appveyor.yml
index 1738253..2d907d6 100644
--- a/.appveyor.yml
+++ b/.appveyor.yml
@@ -2,12 +2,12 @@
 install:
   - python -m pip install --upgrade tox virtualenv
 
-  - ps: (New-Object Net.WebClient).DownloadFile('https://bitbucket.org/pypy/pypy/downloads/pypy2.7-v7.1.1-win32.zip', "$env:appveyor_build_folder\pypy2.7-v7.1.1-win32.zip")
+  - ps: (New-Object Net.WebClient).DownloadFile('https://downloads.python.org/pypy/pypy2.7-v7.1.1-win32.zip', "$env:appveyor_build_folder\pypy2.7-v7.1.1-win32.zip")
   - ps: 7z x pypy2.7-v7.1.1-win32.zip | Out-Null
   - move pypy2.7-v7.1.1-win32 C:\
   - 'SET PATH=C:\pypy2.7-v7.1.1-win32\;%PATH%'
 
-  - ps: (New-Object Net.WebClient).DownloadFile('https://bitbucket.org/pypy/pypy/downloads/pypy3.6-v7.1.1-win32.zip', "$env:appveyor_build_folder\pypy3.6-v7.1.1-win32.zip")
+  - ps: (New-Object Net.WebClient).DownloadFile('https://downloads.python.org/pypy/pypy3.6-v7.1.1-win32.zip', "$env:appveyor_build_folder\pypy3.6-v7.1.1-win32.zip")
   - ps: 7z x pypy3.6-v7.1.1-win32.zip | Out-Null
   - move pypy3.6-v7.1.1-win32 C:\
   - 'SET PATH=C:\pypy3.6-v7.1.1-win32\;%PATH%'
diff --git a/.travis.yml b/.travis.yml
index e51b2e0..6babe1d 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -10,6 +10,8 @@ matrix:
     - python: pypy3
     - python: 3.7
       dist: xenial
+    - python: 3.8
+      dist: xenial
     - python: nightly
       dist: xenial
 # TODO: https://bugs.python.org/issue40334
diff --git a/README.rst b/README.rst
index ca802a8..fb13fdf 100644
--- a/README.rst
+++ b/README.rst
@@ -9,7 +9,7 @@ parsing the source file, not importing it, so it is safe to use on
 modules with side effects.  It's also much faster.
 
 It is `available on PyPI <https://pypi.org/project/pyflakes/>`_
-and it supports all active versions of Python: 2.7 and 3.4 to 3.7.
+and it supports all active versions of Python: 2.7 and 3.4 to 3.8.
 
 
 
diff --git a/pyflakes/checker.py b/pyflakes/checker.py
index 5af956c..16c783f 100644
--- a/pyflakes/checker.py
+++ b/pyflakes/checker.py
@@ -79,6 +79,10 @@ else:
     LOOP_TYPES = (ast.While, ast.For)
     FUNCTION_TYPES = (ast.FunctionDef,)
 
+if PY36_PLUS:
+    ANNASSIGN_TYPES = (ast.AnnAssign,)
+else:
+    ANNASSIGN_TYPES = ()
 
 if PY38_PLUS:
     def _is_singleton(node):  # type: (ast.AST) -> bool
@@ -528,6 +532,16 @@ class Assignment(Binding):
     """
 
 
+class Annotation(Binding):
+    """
+    Represents binding a name to a type without an associated value.
+
+    As long as this name is not assigned a value in another binding, it is considered
+    undefined for most purposes. One notable exception is using the name as a type
+    annotation.
+    """
+
+
 class FunctionDefinition(Definition):
     pass
 
@@ -542,7 +556,7 @@ class ExportBinding(Binding):
     can be determined statically, they will be treated as names for export and
     additional checking applied to them.
 
-    The only recognized C{__all__} assignment via list concatenation is in the
+    The only recognized C{__all__} assignment via list/tuple concatenation is in the
     following format:
 
         __all__ = ['a'] + ['b'] + ['c']
@@ -564,10 +578,10 @@ class ExportBinding(Binding):
 
         if isinstance(source.value, (ast.List, ast.Tuple)):
             _add_to_names(source.value)
-        # If concatenating lists
+        # If concatenating lists or tuples
         elif isinstance(source.value, ast.BinOp):
             currentValue = source.value
-            while isinstance(currentValue.right, ast.List):
+            while isinstance(currentValue.right, (ast.List, ast.Tuple)):
                 left = currentValue.left
                 right = currentValue.right
                 _add_to_names(right)
@@ -575,7 +589,7 @@ class ExportBinding(Binding):
                 if isinstance(left, ast.BinOp):
                     currentValue = left
                 # If just two lists are being added
-                elif isinstance(left, ast.List):
+                elif isinstance(left, (ast.List, ast.Tuple)):
                     _add_to_names(left)
                     # All lists accounted for - done
                     break
@@ -732,6 +746,12 @@ def is_typing_overload(value, scope_stack):
     )
 
 
+class AnnotationState:
+    NONE = 0
+    STRING = 1
+    BARE = 2
+
+
 def in_annotation(func):
     @functools.wraps(func)
     def in_annotation_func(self, *args, **kwargs):
@@ -740,6 +760,14 @@ def in_annotation(func):
     return in_annotation_func
 
 
+def in_string_annotation(func):
+    @functools.wraps(func)
+    def in_annotation_func(self, *args, **kwargs):
+        with self._enter_annotation(AnnotationState.STRING):
+            return func(self, *args, **kwargs)
+    return in_annotation_func
+
+
 def make_tokens(code):
     # PY3: tokenize.tokenize requires readline of bytes
     if not isinstance(code, bytes):
@@ -826,7 +854,7 @@ class Checker(object):
     nodeDepth = 0
     offset = None
     traceTree = False
-    _in_annotation = False
+    _in_annotation = AnnotationState.NONE
     _in_typing_literal = False
     _in_deferred = False
 
@@ -1146,8 +1174,11 @@ class Checker(object):
                     # iteration
                     continue
 
-            if (name == 'print' and
-                    isinstance(scope.get(name, None), Builtin)):
+            binding = scope.get(name, None)
+            if isinstance(binding, Annotation) and not self._in_postponed_annotation:
+                continue
+
+            if name == 'print' and isinstance(binding, Builtin):
                 parent = self.getParent(node)
                 if (isinstance(parent, ast.BinOp) and
                         isinstance(parent.op, ast.RShift)):
@@ -1222,7 +1253,9 @@ class Checker(object):
                     break
 
         parent_stmt = self.getParent(node)
-        if isinstance(parent_stmt, (FOR_TYPES, ast.comprehension)) or (
+        if isinstance(parent_stmt, ANNASSIGN_TYPES) and parent_stmt.value is None:
+            binding = Annotation(name, node)
+        elif isinstance(parent_stmt, (FOR_TYPES, ast.comprehension)) or (
                 parent_stmt != node._pyflakes_parent and
                 not self.isLiteralTupleUnpacking(parent_stmt)):
             binding = Binding(name, node)
@@ -1265,13 +1298,20 @@ class Checker(object):
                 self.report(messages.UndefinedName, node, name)
 
     @contextlib.contextmanager
-    def _enter_annotation(self):
-        orig, self._in_annotation = self._in_annotation, True
+    def _enter_annotation(self, ann_type=AnnotationState.BARE):
+        orig, self._in_annotation = self._in_annotation, ann_type
         try:
             yield
         finally:
             self._in_annotation = orig
 
+    @property
+    def _in_postponed_annotation(self):
+        return (
+            self._in_annotation == AnnotationState.STRING or
+            self.annotationsFutureEnabled
+        )
+
     def _handle_type_comments(self, node):
         for (lineno, col_offset), comment in self._type_comments.get(node, ()):
             comment = comment.split(':', 1)[1].strip()
@@ -1399,7 +1439,7 @@ class Checker(object):
         self.popScope()
         self.scopeStack = saved_stack
 
-    @in_annotation
+    @in_string_annotation
     def handleStringAnnotation(self, s, node, ref_lineno, ref_col_offset, err):
         try:
             tree = ast.parse(s)
@@ -1611,7 +1651,7 @@ class Checker(object):
             len(node.args) >= 1 and
             isinstance(node.args[0], ast.Str)
         ):
-            with self._enter_annotation():
+            with self._enter_annotation(AnnotationState.STRING):
                 self.handleNode(node.args[0], node)
 
         self.handleChildren(node)
@@ -2224,11 +2264,7 @@ class Checker(object):
             self.scope[node.name] = prev_definition
 
     def ANNASSIGN(self, node):
-        if node.value:
-            # Only bind the *targets* if the assignment has a value.
-            # Otherwise it's not really ast.Store and shouldn't silence
-            # UndefinedLocal warnings.
-            self.handleNode(node.target, node)
+        self.handleNode(node.target, node)
         self.handleAnnotation(node.annotation, node)
         if node.value:
             # If the assignment has value, handle the *value* now.
diff --git a/setup.py b/setup.py
index 5e2088e..e4d709d 100755
--- a/setup.py
+++ b/setup.py
@@ -58,6 +58,7 @@ setup(
         "Programming Language :: Python :: 3.5",
         "Programming Language :: Python :: 3.6",
         "Programming Language :: Python :: 3.7",
+        "Programming Language :: Python :: 3.8",
         "Programming Language :: Python :: Implementation :: CPython",
         "Programming Language :: Python :: Implementation :: PyPy",
         "Topic :: Software Development",
diff --git a/tox.ini b/tox.ini
index f2256c8..7365833 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,7 +1,7 @@
 [tox]
 skip_missing_interpreters = True
 envlist =
-    py27,py34,py35,py36,py37,pypy,pypy3
+    py27,py34,py35,py36,py37,py38,pypy,pypy3
 
 [testenv]
 deps = flake8==3.6.0

Undefined name when using variable annotations
Please consider the following file:

```python
Type: object
def foo(x: Type) -> None: ...
```

When checking it with '2.1.1 Python 3.8.0 on Linux' (or Python 3.7.3) I get the following error:

```
foo.py:2: undefined name 'Type'
```

This is problematic when checking python stub files.
diff --git a/pyflakes/test/test_imports.py b/pyflakes/test/test_imports.py
index 13e7bef..d5be269 100644
--- a/pyflakes/test/test_imports.py
+++ b/pyflakes/test/test_imports.py
@@ -1084,7 +1084,7 @@ class TestSpecialAll(TestCase):
             __all__ += ['c', 'd']
         ''', m.UndefinedExport, m.UndefinedExport)
 
-    def test_concatenationAssignment(self):
+    def test_list_concatenation_assignment(self):
         """
         The C{__all__} variable is defined through list concatenation.
         """
@@ -1093,6 +1093,15 @@ class TestSpecialAll(TestCase):
         __all__ = ['a'] + ['b'] + ['c']
         ''', m.UndefinedExport, m.UndefinedExport, m.UndefinedExport, m.UnusedImport)
 
+    def test_tuple_concatenation_assignment(self):
+        """
+        The C{__all__} variable is defined through tuple concatenation.
+        """
+        self.flakes('''
+        import sys
+        __all__ = ('a',) + ('b',) + ('c',)
+        ''', m.UndefinedExport, m.UndefinedExport, m.UndefinedExport, m.UnusedImport)
+
     def test_all_with_attributes(self):
         self.flakes('''
         from foo import bar
diff --git a/pyflakes/test/test_type_annotations.py b/pyflakes/test/test_type_annotations.py
index ed28127..eff222b 100644
--- a/pyflakes/test/test_type_annotations.py
+++ b/pyflakes/test/test_type_annotations.py
@@ -263,6 +263,14 @@ class TestTypeAnnotations(TestCase):
         class A: pass
         ''')
         self.flakes('''
+        T: object
+        def f(t: T): pass
+        ''', m.UndefinedName)
+        self.flakes('''
+        T: object
+        def g(t: 'T'): pass
+        ''')
+        self.flakes('''
         a: 'A B'
         ''', m.ForwardAnnotationSyntaxError)
         self.flakes('''
@@ -275,6 +283,26 @@ class TestTypeAnnotations(TestCase):
         a: 'a: "A"'
         ''', m.ForwardAnnotationSyntaxError)
 
+    @skipIf(version_info < (3, 6), 'new in Python 3.6')
+    def test_unused_annotation(self):
+        # Unused annotations are fine in module and class scope
+        self.flakes('''
+        x: int
+        class Cls:
+            y: int
+        ''')
+        # TODO: this should print a UnusedVariable message
+        self.flakes('''
+        def f():
+            x: int
+        ''')
+        # This should only print one UnusedVariable message
+        self.flakes('''
+        def f():
+            x: int
+            x = 3
+        ''', m.UnusedVariable)
+
     @skipIf(version_info < (3, 5), 'new in Python 3.5')
     def test_annotated_async_def(self):
         self.flakes('''
@@ -300,6 +328,13 @@ class TestTypeAnnotations(TestCase):
         class B: pass
         ''', m.UndefinedName)
 
+        self.flakes('''
+        from __future__ import annotations
+        T: object
+        def f(t: T): pass
+        def g(t: 'T'): pass
+        ''')
+
     def test_typeCommentsMarkImportsAsUsed(self):
         self.flakes("""
         from mod import A, B, C, D, E, F, G
@@ -552,3 +587,47 @@ class TestTypeAnnotations(TestCase):
             def f() -> Optional['Queue[str]']:
                 return None
         """)
+
+    def test_idomiatic_typing_guards(self):
+        # typing.TYPE_CHECKING: python3.5.3+
+        self.flakes("""
+            from typing import TYPE_CHECKING
+
+            if TYPE_CHECKING:
+                from t import T
+
+            def f():  # type: () -> T
+                pass
+        """)
+        # False: the old, more-compatible approach
+        self.flakes("""
+            if False:
+                from t import T
+
+            def f():  # type: () -> T
+                pass
+        """)
+        # some choose to assign a constant and do it that way
+        self.flakes("""
+            MYPY = False
+
+            if MYPY:
+                from t import T
+
+            def f():  # type: () -> T
+                pass
+        """)
+
+    def test_typing_guard_for_protocol(self):
+        self.flakes("""
+            from typing import TYPE_CHECKING
+
+            if TYPE_CHECKING:
+                from typing import Protocol
+            else:
+                Protocol = object
+
+            class C(Protocol):
+                def f():  # type: () -> int
+                    pass
+        """)

pip install -e .
parse_log_pytest
pytest
flake8==3.6.0 pytest
3.7
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs @ file:///croot/attrs_1668696182826/work
certifi @ file:///croot/certifi_1671487769961/work/certifi
flake8==3.6.0
flit_core @ file:///opt/conda/conda-bld/flit-core_1644941570762/work/source/flit_core
importlib-metadata @ file:///tmp/build/80754af9/importlib-metadata_1648562407465/work
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
mccabe==0.6.1
packaging @ file:///croot/packaging_1671697413597/work
pluggy @ file:///tmp/build/80754af9/pluggy_1648042572264/work
py @ file:///opt/conda/conda-bld/py_1644396412707/work
pycodestyle==2.4.0
-e git+https://github.com/PyCQA/pyflakes.git@e83d920aafa92df9bda7dad606d401dda1ba722d#egg=pyflakes
pytest==7.1.2
tomli @ file:///opt/conda/conda-bld/tomli_1657175507142/work
typing_extensions @ file:///croot/typing_extensions_1669924550328/work
zipp @ file:///croot/zipp_1672387121353/work

name: pyflakes
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - attrs=22.1.0=py37h06a4308_0
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2022.12.7=py37h06a4308_0
  - flit-core=3.6.0=pyhd3eb1b0_0
  - importlib-metadata=4.11.3=py37h06a4308_0
  - importlib_metadata=4.11.3=hd3eb1b0_0
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - packaging=22.0=py37h06a4308_0
  - pip=22.3.1=py37h06a4308_0
  - pluggy=1.0.0=py37h06a4308_1
  - py=1.11.0=pyhd3eb1b0_0
  - pytest=7.1.2=py37h06a4308_0
  - python=3.7.16=h7a1cb2a_0
  - readline=8.2=h5eee18b_0
  - setuptools=65.6.3=py37h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tomli=2.0.1=py37h06a4308_0
  - typing_extensions=4.4.0=py37h06a4308_0
  - wheel=0.38.4=py37h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zipp=3.11.0=py37h06a4308_0
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - flake8==3.6.0
      - mccabe==0.6.1
      - pycodestyle==2.4.0
prefix: /opt/conda/envs/pyflakes

pyflakes/test/test_imports.py::TestSpecialAll::test_tuple_concatenation_assignment pyflakes/test/test_type_annotations.py::TestTypeAnnotations::test_postponed_annotations pyflakes/test/test_type_annotations.py::TestTypeAnnotations::test_variable_annotations
pyflakes/test/test_imports.py::TestImportationObject::test_import_as pyflakes/test/test_imports.py::TestImportationObject::test_import_basic pyflakes/test/test_imports.py::TestImportationObject::test_import_submodule pyflakes/test/test_imports.py::TestImportationObject::test_import_submodule_as pyflakes/test/test_imports.py::TestImportationObject::test_import_submodule_as_source_name pyflakes/test/test_imports.py::TestImportationObject::test_importfrom_future pyflakes/test/test_imports.py::TestImportationObject::test_importfrom_member pyflakes/test/test_imports.py::TestImportationObject::test_importfrom_member_as pyflakes/test/test_imports.py::TestImportationObject::test_importfrom_relative pyflakes/test/test_imports.py::TestImportationObject::test_importfrom_relative_parent pyflakes/test/test_imports.py::TestImportationObject::test_importfrom_relative_with_module pyflakes/test/test_imports.py::TestImportationObject::test_importfrom_relative_with_module_as pyflakes/test/test_imports.py::TestImportationObject::test_importfrom_star pyflakes/test/test_imports.py::TestImportationObject::test_importfrom_star_relative pyflakes/test/test_imports.py::TestImportationObject::test_importfrom_submodule_member pyflakes/test/test_imports.py::TestImportationObject::test_importfrom_submodule_member_as pyflakes/test/test_imports.py::TestImportationObject::test_unusedImport_underscore pyflakes/test/test_imports.py::Test::test_aliasedImport pyflakes/test/test_imports.py::Test::test_aliasedImportShadowModule pyflakes/test/test_imports.py::Test::test_assignRHSFirst pyflakes/test/test_imports.py::Test::test_assignedToGlobal pyflakes/test/test_imports.py::Test::test_differentSubmoduleImport pyflakes/test/test_imports.py::Test::test_duplicateSubmoduleImport pyflakes/test/test_imports.py::Test::test_functionNamesAreBoundNow pyflakes/test/test_imports.py::Test::test_functionsRunLater pyflakes/test/test_imports.py::Test::test_futureImport pyflakes/test/test_imports.py::Test::test_futureImportFirst pyflakes/test/test_imports.py::Test::test_futureImportStar pyflakes/test/test_imports.py::Test::test_futureImportUndefined pyflakes/test/test_imports.py::Test::test_futureImportUsed pyflakes/test/test_imports.py::Test::test_ignoreNonImportRedefinitions pyflakes/test/test_imports.py::Test::test_importInClass pyflakes/test/test_imports.py::Test::test_importStar pyflakes/test/test_imports.py::Test::test_importStar_relative pyflakes/test/test_imports.py::Test::test_importUsedInMethodDefinition pyflakes/test/test_imports.py::Test::test_importedInClass pyflakes/test/test_imports.py::Test::test_localImportStar pyflakes/test/test_imports.py::Test::test_methodsDontUseClassScope pyflakes/test/test_imports.py::Test::test_nestedClassAndFunctionScope pyflakes/test/test_imports.py::Test::test_nestedFunctionsNestScope pyflakes/test/test_imports.py::Test::test_newAssignment pyflakes/test/test_imports.py::Test::test_nonGlobalDoesNotRedefine pyflakes/test/test_imports.py::Test::test_notUsedInNestedScope pyflakes/test/test_imports.py::Test::test_packageImport pyflakes/test/test_imports.py::Test::test_redefinedButUsedLater pyflakes/test/test_imports.py::Test::test_redefinedByClass pyflakes/test/test_imports.py::Test::test_redefinedByExcept pyflakes/test/test_imports.py::Test::test_redefinedByFor pyflakes/test/test_imports.py::Test::test_redefinedByFunction pyflakes/test/test_imports.py::Test::test_redefinedBySubclass pyflakes/test/test_imports.py::Test::test_redefinedIf pyflakes/test/test_imports.py::Test::test_redefinedIfElse pyflakes/test/test_imports.py::Test::test_redefinedInClass pyflakes/test/test_imports.py::Test::test_redefinedInNestedFunction pyflakes/test/test_imports.py::Test::test_redefinedInNestedFunctionTwice pyflakes/test/test_imports.py::Test::test_redefinedTry pyflakes/test/test_imports.py::Test::test_redefinedTryElse pyflakes/test/test_imports.py::Test::test_redefinedTryExcept pyflakes/test/test_imports.py::Test::test_redefinedTryExceptElse pyflakes/test/test_imports.py::Test::test_redefinedTryExceptElseFinally pyflakes/test/test_imports.py::Test::test_redefinedTryExceptFinally pyflakes/test/test_imports.py::Test::test_redefinedTryExceptMulti pyflakes/test/test_imports.py::Test::test_redefinedTryNested pyflakes/test/test_imports.py::Test::test_redefinedWhileUnused pyflakes/test/test_imports.py::Test::test_shadowedByFor pyflakes/test/test_imports.py::Test::test_shadowedByForDeep pyflakes/test/test_imports.py::Test::test_shadowedByLambda pyflakes/test/test_imports.py::Test::test_shadowedByParameter pyflakes/test/test_imports.py::Test::test_tryingMultipleImports pyflakes/test/test_imports.py::Test::test_unusedImport pyflakes/test/test_imports.py::Test::test_unusedImport_relative pyflakes/test/test_imports.py::Test::test_unusedInNestedScope pyflakes/test/test_imports.py::Test::test_unusedPackageImport pyflakes/test/test_imports.py::Test::test_unused_package_with_submodule_import pyflakes/test/test_imports.py::Test::test_usedAndGlobal pyflakes/test/test_imports.py::Test::test_usedImport pyflakes/test/test_imports.py::Test::test_usedImport_relative pyflakes/test/test_imports.py::Test::test_usedInAssert pyflakes/test/test_imports.py::Test::test_usedInAssignment pyflakes/test/test_imports.py::Test::test_usedInAttributeAssign pyflakes/test/test_imports.py::Test::test_usedInCall pyflakes/test/test_imports.py::Test::test_usedInClass pyflakes/test/test_imports.py::Test::test_usedInClassBase pyflakes/test/test_imports.py::Test::test_usedInDict pyflakes/test/test_imports.py::Test::test_usedInElifConditional pyflakes/test/test_imports.py::Test::test_usedInElse pyflakes/test/test_imports.py::Test::test_usedInExcept pyflakes/test/test_imports.py::Test::test_usedInExec pyflakes/test/test_imports.py::Test::test_usedInFor pyflakes/test/test_imports.py::Test::test_usedInForElse pyflakes/test/test_imports.py::Test::test_usedInFunction pyflakes/test/test_imports.py::Test::test_usedInGetattr pyflakes/test/test_imports.py::Test::test_usedInGlobal pyflakes/test/test_imports.py::Test::test_usedInIfBody pyflakes/test/test_imports.py::Test::test_usedInIfConditional pyflakes/test/test_imports.py::Test::test_usedInKeywordArg pyflakes/test/test_imports.py::Test::test_usedInLambda pyflakes/test/test_imports.py::Test::test_usedInList pyflakes/test/test_imports.py::Test::test_usedInListComp pyflakes/test/test_imports.py::Test::test_usedInLogic pyflakes/test/test_imports.py::Test::test_usedInOperators pyflakes/test/test_imports.py::Test::test_usedInParameterDefault pyflakes/test/test_imports.py::Test::test_usedInRaise pyflakes/test/test_imports.py::Test::test_usedInReturn pyflakes/test/test_imports.py::Test::test_usedInSlice pyflakes/test/test_imports.py::Test::test_usedInSliceObj pyflakes/test/test_imports.py::Test::test_usedInSubscript pyflakes/test/test_imports.py::Test::test_usedInTry pyflakes/test/test_imports.py::Test::test_usedInTryFinally pyflakes/test/test_imports.py::Test::test_usedInTuple pyflakes/test/test_imports.py::Test::test_usedInWhile pyflakes/test/test_imports.py::Test::test_usedInYield pyflakes/test/test_imports.py::Test::test_used_package_with_submodule_import pyflakes/test/test_imports.py::Test::test_used_package_with_submodule_import_of_alias pyflakes/test/test_imports.py::TestSpecialAll::test_all_mixed_attributes_and_strings pyflakes/test/test_imports.py::TestSpecialAll::test_all_with_attributes pyflakes/test/test_imports.py::TestSpecialAll::test_all_with_attributes_added pyflakes/test/test_imports.py::TestSpecialAll::test_all_with_names pyflakes/test/test_imports.py::TestSpecialAll::test_augmentedAssignment pyflakes/test/test_imports.py::TestSpecialAll::test_ignoredInClass pyflakes/test/test_imports.py::TestSpecialAll::test_ignoredInFunction pyflakes/test/test_imports.py::TestSpecialAll::test_importStarExported pyflakes/test/test_imports.py::TestSpecialAll::test_importStarNotExported pyflakes/test/test_imports.py::TestSpecialAll::test_list_concatenation_assignment pyflakes/test/test_imports.py::TestSpecialAll::test_redefinedByGenExp pyflakes/test/test_imports.py::TestSpecialAll::test_unboundExported pyflakes/test/test_imports.py::TestSpecialAll::test_usedAsClassDecorator pyflakes/test/test_imports.py::TestSpecialAll::test_usedAsDecorator pyflakes/test/test_imports.py::TestSpecialAll::test_usedInGenExp pyflakes/test/test_imports.py::TestSpecialAll::test_warningSuppressed pyflakes/test/test_type_annotations.py::TestTypeAnnotations::test_annotated_async_def pyflakes/test/test_type_annotations.py::TestTypeAnnotations::test_deferred_twice_annotation pyflakes/test/test_type_annotations.py::TestTypeAnnotations::test_idomiatic_typing_guards pyflakes/test/test_type_annotations.py::TestTypeAnnotations::test_literal_type_some_other_module pyflakes/test/test_type_annotations.py::TestTypeAnnotations::test_literal_type_typing pyflakes/test/test_type_annotations.py::TestTypeAnnotations::test_literal_type_typing_extensions pyflakes/test/test_type_annotations.py::TestTypeAnnotations::test_literal_union_type_typing pyflakes/test/test_type_annotations.py::TestTypeAnnotations::test_nested_partially_quoted_type_assignment pyflakes/test/test_type_annotations.py::TestTypeAnnotations::test_not_a_typing_overload pyflakes/test/test_type_annotations.py::TestTypeAnnotations::test_overload_in_class pyflakes/test/test_type_annotations.py::TestTypeAnnotations::test_overload_with_multiple_decorators pyflakes/test/test_type_annotations.py::TestTypeAnnotations::test_partial_string_annotations_with_future_annotations pyflakes/test/test_type_annotations.py::TestTypeAnnotations::test_partially_quoted_type_annotation pyflakes/test/test_type_annotations.py::TestTypeAnnotations::test_partially_quoted_type_assignment pyflakes/test/test_type_annotations.py::TestTypeAnnotations::test_quoted_type_cast pyflakes/test/test_type_annotations.py::TestTypeAnnotations::test_quoted_type_cast_renamed_import pyflakes/test/test_type_annotations.py::TestTypeAnnotations::test_return_annotation_is_class_scope_variable pyflakes/test/test_type_annotations.py::TestTypeAnnotations::test_return_annotation_is_function_body_variable pyflakes/test/test_type_annotations.py::TestTypeAnnotations::test_typeCommentsAdditionalComment pyflakes/test/test_type_annotations.py::TestTypeAnnotations::test_typeCommentsAssignedToPreviousNode pyflakes/test/test_type_annotations.py::TestTypeAnnotations::test_typeCommentsFullSignature pyflakes/test/test_type_annotations.py::TestTypeAnnotations::test_typeCommentsFullSignatureWithDocstring pyflakes/test/test_type_annotations.py::TestTypeAnnotations::test_typeCommentsInvalidDoesNotMarkAsUsed pyflakes/test/test_type_annotations.py::TestTypeAnnotations::test_typeCommentsMarkImportsAsUsed pyflakes/test/test_type_annotations.py::TestTypeAnnotations::test_typeCommentsNoWhitespaceAnnotation pyflakes/test/test_type_annotations.py::TestTypeAnnotations::test_typeCommentsStarArgs pyflakes/test/test_type_annotations.py::TestTypeAnnotations::test_typeCommentsSyntaxError pyflakes/test/test_type_annotations.py::TestTypeAnnotations::test_typeCommentsSyntaxErrorCorrectLine pyflakes/test/test_type_annotations.py::TestTypeAnnotations::test_typeIgnore pyflakes/test/test_type_annotations.py::TestTypeAnnotations::test_typeIgnoreBogus pyflakes/test/test_type_annotations.py::TestTypeAnnotations::test_typeIgnoreBogusUnicode pyflakes/test/test_type_annotations.py::TestTypeAnnotations::test_type_cast_literal_str_to_str pyflakes/test/test_type_annotations.py::TestTypeAnnotations::test_typingExtensionsOverload pyflakes/test/test_type_annotations.py::TestTypeAnnotations::test_typingOverload pyflakes/test/test_type_annotations.py::TestTypeAnnotations::test_typingOverloadAsync pyflakes/test/test_type_annotations.py::TestTypeAnnotations::test_typing_guard_for_protocol pyflakes/test/test_type_annotations.py::TestTypeAnnotations::test_unused_annotation
README.rst setup.py .travis.yml tox.ini pyflakes/checker.py .appveyor.yml
README.rst setup.py .travis.yml tox.ini pyflakes/checker.py .appveyor.yml