bitglue: Also, we should probably merge this and #303 together and release a new major version since it breaks backwards compatibility.
hugovk: Appveyor looks like it needs an updated pip to recognise the new python_requires. I had a go updating it in another branch, but there's a pypy bug preventing that. They've just fixed it, and it'll be in the next pypy release, 5.10.1. 


See https://bitbucket.org/pypy/pypy/issues/2720/ensurepip-on-pypy-c-jit-93579-a4194a67868f and https://stackoverflow.com/q/47999518/724176.

I do not know when that will be out. Options are to wait until it's sorted until merge, or comment out that pypy build until then. (Merge with the failure doesn't really help.) 
bitglue: Let's just comment that build with an explanation for now.
hugovk: Commented out!
diff --git a/.appveyor.yml b/.appveyor.yml
index 41b1dbb..8a62cf8 100644
--- a/.appveyor.yml
+++ b/.appveyor.yml
@@ -13,18 +13,21 @@ install:
   - ps: 7z x pypy2-v5.3.1-win32.zip | Out-Null
   - move pypy2-v5.3.1-win32 C:\
 
-  - ps: (New-Object Net.WebClient).DownloadFile('https://bitbucket.org/pypy/pypy/downloads/pypy3-2.4.0-win32.zip', "$env:appveyor_build_folder\pypy3-2.4.0-win32.zip")
-  - ps: 7z x pypy3-2.4.0-win32.zip | Out-Null
-  - move pypy3-2.4.0-win32 C:\
+  # Note: pypy3-v5.10.0 is commented out as it needs an updated pip to
+  # recognise the new python_requires, but there's a pypy bug preventing that.
+  # It's been fixed and will be in the next 5.10.1 release.
+  # See https://bitbucket.org/pypy/pypy/issues/2720/ensurepip-on-pypy-c-jit-93579-a4194a67868f
+  # and https://stackoverflow.com/q/47999518/724176.
 
-  # pypy3 installer provides 'pypy.exe', not pypy3.exe.
-  - copy C:\pypy3-2.4.0-win32\pypy.exe C:\pypy3-2.4.0-win32\pypy3.exe
+#  - ps: (New-Object Net.WebClient).DownloadFile('https://bitbucket.org/pypy/pypy/downloads/pypy3-v5.10.0-win32.zip', "$env:appveyor_build_folder\pypy3-v5.10.0-win32.zip")
+#  - ps: 7z x pypy3-v5.10.0-win32.zip | Out-Null
+#  - move pypy3-v5.10.0-win32 C:\
 
   # workaround https://github.com/pypa/virtualenv/issues/93
   - mkdir C:\python33\tcl\tcl8.6
   - mkdir C:\python33\tcl\tk8.6
-  - mkdir C:\pypy3-2.4.0-win32\tcl\tcl8.6
-  - mkdir C:\pypy3-2.4.0-win32\tcl\tk8.6
+#  - mkdir C:\pypy3-v5.10.0-win32\tcl\tcl8.6
+#  - mkdir C:\pypy3-v5.10.0-win32\tcl\tk8.6
 
   # Only pypy2-5.3.1 is integrated into tox, as pypy3-2.4.0 fails and
   # a Windows distribution of pypy3-5.2 isnt available yet.
@@ -33,14 +36,13 @@ install:
   # pypy3-2.4.0 and pypy-2.6.1 are manually bootstrapped and tested
   - ps: (New-Object Net.WebClient).DownloadFile('https://bootstrap.pypa.io/get-pip.py', "$env:appveyor_build_folder\get-pip.py")
   # errors are ignored due to https://github.com/pypa/pip/issues/2669#issuecomment-136405390
-  # NOTE: If and when a new version of PyPy3 is released for Windows that
-  #       supports anything newer than Python 3.2, remove the setuptools pin.
-  - ps: C:\pypy3-2.4.0-win32\pypy3 "$env:appveyor_build_folder\get-pip.py"; C:\pypy3-2.4.0-win32\pypy3 -m pip install -U --force-reinstall pip==8.1.2 "setuptools<30"; echo "ignore error"
+#  - ps: C:\pypy3-v5.10.0-win32\pypy3 "$env:appveyor_build_folder\get-pip.py"; echo "ignore error"
+#  - ps: C:\pypy3-v5.10.0-win32\pypy3 -m pip install -U --force-reinstall pip setuptools; echo "ignore error"
   - ps: C:\pypy-2.6.1-win32\pypy "$env:appveyor_build_folder\get-pip.py"
 
 build: off
 
 test_script:
   - python -m tox
-  - C:\pypy3-2.4.0-win32\pypy3 setup.py test -q
+#  - C:\pypy3-v5.10.0-win32\pypy3 setup.py test -q
   - C:\pypy-2.6.1-win32\pypy setup.py test -q
diff --git a/.travis.yml b/.travis.yml
index 780b117..29f1d44 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,9 +1,7 @@
 language: python
 cache: pip
 python:
-  - 2.6
   - 2.7
-  - 3.3
   - 3.4
   - 3.5
   - 3.6
@@ -11,13 +9,10 @@ python:
   - pypy
   - pypy-5.3
   - pypy3
-  - pypy3.3-5.2-alpha1
 install:
-  - pip install flake8==2.1.0 pep8==1.5.6
-  - python setup.py install
+  - pip install --upgrade .
   - pip list
-  - if [ "$TRAVIS_PYTHON_VERSION" != "nightly" ]; then flake8 --version; fi
 script:
   - python setup.py test -q
-  - if [ "$TRAVIS_PYTHON_VERSION" != "nightly" ]; then flake8 pyflakes setup.py; fi
+  - if [ "$TRAVIS_PYTHON_VERSION" != "nightly" ]; then pip install flake8==2.1.0 pep8==1.5.6 && flake8 --version && flake8 pyflakes setup.py; fi
 sudo: false
diff --git a/README.rst b/README.rst
index 45f0ab8..6699b4c 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.python.org/pypi/pyflakes>`_
-and it supports all active versions of Python from 2.5 to 3.6.
+and it supports all active versions of Python: 2.7 and 3.4 to 3.6.
 
 
 
diff --git a/pyflakes/__main__.py b/pyflakes/__main__.py
index a69e689..68cd9ef 100644
--- a/pyflakes/__main__.py
+++ b/pyflakes/__main__.py
@@ -1,5 +1,5 @@
 from pyflakes.api import main
 
-# python -m pyflakes (with Python >= 2.7)
+# python -m pyflakes
 if __name__ == '__main__':
     main(prog='pyflakes')
diff --git a/pyflakes/api.py b/pyflakes/api.py
index 49ee38d..805a886 100644
--- a/pyflakes/api.py
+++ b/pyflakes/api.py
@@ -89,19 +89,8 @@ def checkPath(filename, reporter=None):
     if reporter is None:
         reporter = modReporter._makeDefaultReporter()
     try:
-        # in Python 2.6, compile() will choke on \r\n line endings. In later
-        # versions of python it's smarter, and we want binary mode to give
-        # compile() the best opportunity to do the right thing WRT text
-        # encodings.
-        if sys.version_info < (2, 7):
-            mode = 'rU'
-        else:
-            mode = 'rb'
-
-        with open(filename, mode) as f:
+        with open(filename, 'rb') as f:
             codestr = f.read()
-        if sys.version_info < (2, 7):
-            codestr += '\n'     # Work around for Python <= 2.6
     except UnicodeError:
         reporter.unexpectedError(filename, 'problem decoding source')
         return 1
@@ -117,6 +106,10 @@ def isPythonFile(filename):
     if filename.endswith('.py'):
         return True
 
+    # Avoid obvious Emacs backup files
+    if filename.endswith("~"):
+        return False
+
     max_bytes = 128
 
     try:
diff --git a/pyflakes/checker.py b/pyflakes/checker.py
index baef833..bd5eba5 100644
--- a/pyflakes/checker.py
+++ b/pyflakes/checker.py
@@ -5,14 +5,13 @@ Implement the central Checker class.
 Also, it models the Bindings and Scopes.
 """
 import __future__
+import ast
 import doctest
 import os
 import sys
 
 PY2 = sys.version_info < (3, 0)
-PY32 = sys.version_info < (3, 3)    # Python 2.5 to 3.2
-PY33 = sys.version_info < (3, 4)    # Python 2.5 to 3.3
-PY34 = sys.version_info < (3, 5)    # Python 2.5 to 3.4
+PY34 = sys.version_info < (3, 5)    # Python 2.7 to 3.4
 try:
     sys.pypy_version_info
     PYPY = True
@@ -21,16 +20,6 @@ except AttributeError:
 
 builtin_vars = dir(__import__('__builtin__' if PY2 else 'builtins'))
 
-try:
-    import ast
-except ImportError:     # Python 2.5
-    import _ast as ast
-
-    if 'decorator_list' not in ast.ClassDef._fields:
-        # Patch the missing attribute 'decorator_list'
-        ast.ClassDef.decorator_list = ()
-        ast.FunctionDef.decorator_list = property(lambda s: s.decorators)
-
 from pyflakes import messages
 
 
@@ -38,15 +27,22 @@ if PY2:
     def getNodeType(node_class):
         # workaround str.upper() which is locale-dependent
         return str(unicode(node_class.__name__).upper())
+
+    def get_raise_argument(node):
+        return node.type
+
 else:
     def getNodeType(node_class):
         return node_class.__name__.upper()
 
+    def get_raise_argument(node):
+        return node.exc
+
     # Silence `pyflakes` from reporting `undefined name 'unicode'` in Python 3.
     unicode = str
 
 # Python >= 3.3 uses ast.Try instead of (ast.TryExcept + ast.TryFinally)
-if PY32:
+if PY2:
     def getAlternatives(n):
         if isinstance(n, (ast.If, ast.TryFinally)):
             return [n.body]
@@ -131,13 +127,17 @@ def convert_to_value(item):
             result.name,
             result,
         )
-    elif (not PY33) and isinstance(item, ast.NameConstant):
+    elif (not PY2) and isinstance(item, ast.NameConstant):
         # None, True, False are nameconstants in python3, but names in 2
         return item.value
     else:
         return UnhandledKeyType()
 
 
+def is_notimplemented_name_node(node):
+    return isinstance(node, ast.Name) and getNodeName(node) == 'NotImplemented'
+
+
 class Binding(object):
     """
     Represents the binding of a value to a name.
@@ -410,8 +410,8 @@ class FunctionScope(Scope):
     @ivar globals: Names declared 'global' in this function.
     """
     usesLocals = False
-    alwaysUsed = set(['__tracebackhide__',
-                      '__traceback_info__', '__traceback_supplement__'])
+    alwaysUsed = {'__tracebackhide__', '__traceback_info__',
+                  '__traceback_supplement__'}
 
     def __init__(self):
         super(FunctionScope, self).__init__()
@@ -710,10 +710,14 @@ class Checker(object):
 
         # try enclosing function scopes and global scope
         for scope in self.scopeStack[-1::-1]:
-            # only generators used in a class scope can access the names
-            # of the class. this is skipped during the first iteration
-            if in_generators is False and isinstance(scope, ClassScope):
-                continue
+            if isinstance(scope, ClassScope):
+                if not PY2 and name == '__class__':
+                    return
+                elif in_generators is False:
+                    # only generators used in a class scope can access the
+                    # names of the class. this is skipped during the first
+                    # iteration
+                    continue
 
             try:
                 scope[name].used = (self.scope, node)
@@ -961,7 +965,7 @@ class Checker(object):
 
     # "stmt" type nodes
     DELETE = PRINT = FOR = ASYNCFOR = WHILE = IF = WITH = WITHITEM = \
-        ASYNCWITH = ASYNCWITHITEM = RAISE = TRYFINALLY = EXEC = \
+        ASYNCWITH = ASYNCWITHITEM = TRYFINALLY = EXEC = \
         EXPR = ASSIGN = handleChildren
 
     PASS = ignore
@@ -985,6 +989,19 @@ class Checker(object):
         EQ = NOTEQ = LT = LTE = GT = GTE = IS = ISNOT = IN = NOTIN = \
         MATMULT = ignore
 
+    def RAISE(self, node):
+        self.handleChildren(node)
+
+        arg = get_raise_argument(node)
+
+        if isinstance(arg, ast.Call):
+            if is_notimplemented_name_node(arg.func):
+                # Handle "raise NotImplemented(...)"
+                self.report(messages.RaiseNotImplemented, node)
+        elif is_notimplemented_name_node(arg):
+            # Handle "raise NotImplemented"
+            self.report(messages.RaiseNotImplemented, node)
+
     # additional node types
     COMPREHENSION = KEYWORD = FORMATTEDVALUE = JOINEDSTR = handleChildren
 
@@ -1178,9 +1195,9 @@ class Checker(object):
             wildcard = getattr(node.args, arg_name)
             if not wildcard:
                 continue
-            args.append(wildcard if PY33 else wildcard.arg)
+            args.append(wildcard if PY2 else wildcard.arg)
             if is_py3_func:
-                if PY33:  # Python 2.5 to 3.3
+                if PY2:  # Python 2.7
                     argannotation = arg_name + 'annotation'
                     annotations.append(getattr(node.args, argannotation))
                 else:     # Python >= 3.4
@@ -1221,7 +1238,7 @@ class Checker(object):
                     self.report(messages.UnusedVariable, binding.source, name)
             self.deferAssignment(checkUnusedAssignments)
 
-            if PY32:
+            if PY2:
                 def checkReturnWithArgumentInsideGenerator():
                     """
                     Check to see if there is any return statement with
diff --git a/pyflakes/messages.py b/pyflakes/messages.py
index 670f95f..eb87a72 100644
--- a/pyflakes/messages.py
+++ b/pyflakes/messages.py
@@ -239,3 +239,7 @@ class ForwardAnnotationSyntaxError(Message):
     def __init__(self, filename, loc, annotation):
         Message.__init__(self, filename, loc)
         self.message_args = (annotation,)
+
+
+class RaiseNotImplemented(Message):
+    message = "'raise NotImplemented' should be 'raise NotImplementedError'"
diff --git a/setup.py b/setup.py
index 387b7bc..6567b53 100755
--- a/setup.py
+++ b/setup.py
@@ -44,6 +44,7 @@ setup(
     author_email="code-quality@python.org",
     url="https://github.com/PyCQA/pyflakes",
     packages=["pyflakes", "pyflakes.scripts", "pyflakes.test"],
+    python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*',
     classifiers=[
         "Development Status :: 6 - Mature",
         "Environment :: Console",
@@ -51,7 +52,13 @@ setup(
         "License :: OSI Approved :: MIT License",
         "Programming Language :: Python",
         "Programming Language :: Python :: 2",
+        "Programming Language :: Python :: 2.7",
         "Programming Language :: Python :: 3",
+        "Programming Language :: Python :: 3.4",
+        "Programming Language :: Python :: 3.5",
+        "Programming Language :: Python :: 3.6",
+        "Programming Language :: Python :: Implementation :: CPython",
+        "Programming Language :: Python :: Implementation :: PyPy",
         "Topic :: Software Development",
         "Topic :: Utilities",
     ],
diff --git a/tox.ini b/tox.ini
index 737e334..fabad9d 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,7 +1,7 @@
 [tox]
 skip_missing_interpreters = True
 envlist =
-    py26,py27,py33,py34,py35,py36,pypy,pypy3
+    py27,py34,py35,py36,pypy,pypy3
 
 [testenv]
 deps =

Drop support for EOL Python versions?
I'd like to suggest pyflakes only supports non-EOL Python versions.

Python 2.5, 2.6, 3.2 and 3.3 are EOL and no longer receive security updates.

![image](https://user-images.githubusercontent.com/1324225/33826009-275286e4-de6c-11e7-8f70-781433006423.png)

https://github.com/PyCQA/pyflakes#pyflakes says:

> It is available on PyPI and it supports all active versions of Python from 2.5 to 3.6.

It can be argued that 2.5-2.6 and 3.0-3.3 are no longer active and no longer need support.

Here's the pip installs for pyflakes from PyPI for the last month (via `pypinfo --percent --pip --markdown pyflakes pyversion`) showing low or non-existent numbers for the EOL versions.

| python_version | percent | download_count |
| -------------- | ------: | -------------: |
| 2.7            |   54.1% |        582,452 |
| 3.6            |   20.5% |        221,023 |
| 3.5            |   17.2% |        185,122 |
| 3.4            |    6.8% |         72,930 |
| 3.3            |    0.6% |          6,432 |
| 2.6            |    0.4% |          4,789 |
| 3.7            |    0.4% |          4,226 |
| 3.2            |    0.0% |            414 |
| None           |    0.0% |              4 |

Some other PyCQA projects are planning on ending all Python 2 support around mid-2018 when Python 3.7 is due out (https://github.com/PyCQA/meta/issues/19).
diff --git a/pyflakes/test/harness.py b/pyflakes/test/harness.py
index 009923f..3f592db 100644
--- a/pyflakes/test/harness.py
+++ b/pyflakes/test/harness.py
@@ -1,5 +1,4 @@
 
-import sys
 import textwrap
 import unittest
 
@@ -7,12 +6,8 @@ from pyflakes import checker
 
 __all__ = ['TestCase', 'skip', 'skipIf']
 
-if sys.version_info < (2, 7):
-    skip = lambda why: (lambda func: 'skip')  # not callable
-    skipIf = lambda cond, why: (skip(why) if cond else lambda func: func)
-else:
-    skip = unittest.skip
-    skipIf = unittest.skipIf
+skip = unittest.skip
+skipIf = unittest.skipIf
 PyCF_ONLY_AST = 1024
 
 
diff --git a/pyflakes/test/test_api.py b/pyflakes/test/test_api.py
index 8aa6df9..56ca269 100644
--- a/pyflakes/test/test_api.py
+++ b/pyflakes/test/test_api.py
@@ -180,6 +180,7 @@ class TestIterSourceCode(TestCase):
         """
         os.mkdir(os.path.join(self.tempdir, 'foo'))
         apath = self.makeEmptyFile('foo', 'a.py')
+        self.makeEmptyFile('foo', 'a.py~')
         os.mkdir(os.path.join(self.tempdir, 'bar'))
         bpath = self.makeEmptyFile('bar', 'b.py')
         cpath = self.makeEmptyFile('c.py')
@@ -514,7 +515,7 @@ foo(bar=baz, bax)
 foo(bar=baz, bax)
 %s""" % (sourcePath, column, message, last_line)])
 
-    @skipIf(PYPY, 'Output in PyPy varies highly, dependending on version')
+    @skipIf(PYPY, 'Output in PyPy varies highly, depending on version')
     def test_invalidEscape(self):
         """
         The invalid escape syntax raises ValueError in Python 2
diff --git a/pyflakes/test/test_dict.py b/pyflakes/test/test_dict.py
index 628ec0c..b9059c2 100644
--- a/pyflakes/test/test_dict.py
+++ b/pyflakes/test/test_dict.py
@@ -19,15 +19,11 @@ class Test(TestCase):
 
     @skipIf(version_info < (3,),
             "bytes and strings with same 'value' are not equal in python3")
-    @skipIf(version_info[0:2] == (3, 2),
-            "python3.2 does not allow u"" literal string definition")
     def test_duplicate_keys_bytes_vs_unicode_py3(self):
         self.flakes("{b'a': 1, u'a': 2}")
 
     @skipIf(version_info < (3,),
             "bytes and strings with same 'value' are not equal in python3")
-    @skipIf(version_info[0:2] == (3, 2),
-            "python3.2 does not allow u"" literal string definition")
     def test_duplicate_values_bytes_vs_unicode_py3(self):
         self.flakes(
             "{1: b'a', 1: u'a'}",
diff --git a/pyflakes/test/test_imports.py b/pyflakes/test/test_imports.py
index 4723954..586a0a5 100644
--- a/pyflakes/test/test_imports.py
+++ b/pyflakes/test/test_imports.py
@@ -569,7 +569,6 @@ class Test(TestCase):
         ''')
 
     def test_redefinedByExcept(self):
-        as_exc = ', ' if version_info < (2, 6) else ' as '
         expected = [m.RedefinedWhileUnused]
         if version_info >= (3,):
             # The exc variable is unused inside the exception handler.
@@ -577,8 +576,8 @@ class Test(TestCase):
         self.flakes('''
         import fu
         try: pass
-        except Exception%sfu: pass
-        ''' % as_exc, *expected)
+        except Exception as fu: pass
+        ''', *expected)
 
     def test_usedInRaise(self):
         self.flakes('''
@@ -1149,13 +1148,6 @@ class TestSpecialAll(TestCase):
             return "hello"
         ''', m.UndefinedName)
 
-
-class Python26Tests(TestCase):
-    """
-    Tests for checking of syntax which is valid in Python 2.6 and newer.
-    """
-
-    @skipIf(version_info < (2, 6), "Python >= 2.6 only")
     def test_usedAsClassDecorator(self):
         """
         Using an imported name as a class decorator results in no warnings,
diff --git a/pyflakes/test/test_other.py b/pyflakes/test/test_other.py
index 5bae7a0..364b375 100644
--- a/pyflakes/test/test_other.py
+++ b/pyflakes/test/test_other.py
@@ -81,7 +81,6 @@ class Test(TestCase):
         (1 for a, b in [(1, 2)])
         ''')
 
-    @skipIf(version_info < (2, 7), "Python >= 2.7 only")
     def test_redefinedInSetComprehension(self):
         """
         Test that reusing a variable in a set comprehension does not raise
@@ -111,7 +110,6 @@ class Test(TestCase):
         {1 for a, b in [(1, 2)]}
         ''')
 
-    @skipIf(version_info < (2, 7), "Python >= 2.7 only")
     def test_redefinedInDictComprehension(self):
         """
         Test that reusing a variable in a dict comprehension does not raise
@@ -279,7 +277,6 @@ class Test(TestCase):
             a = classmethod(a)
         ''')
 
-    @skipIf(version_info < (2, 6), "Python >= 2.6 only")
     def test_modernProperty(self):
         self.flakes("""
         class A:
@@ -1584,7 +1581,6 @@ class TestUnusedAssignment(TestCase):
             pass
         ''', m.UndefinedName)
 
-    @skipIf(version_info < (2, 7), "Python >= 2.7 only")
     def test_dictComprehension(self):
         """
         Dict comprehensions are properly handled.
@@ -1593,7 +1589,6 @@ class TestUnusedAssignment(TestCase):
         a = {1: x for x in range(10)}
         ''')
 
-    @skipIf(version_info < (2, 7), "Python >= 2.7 only")
     def test_setComprehensionAndLiteral(self):
         """
         Set comprehensions are properly handled.
@@ -1604,17 +1599,16 @@ class TestUnusedAssignment(TestCase):
         ''')
 
     def test_exceptionUsedInExcept(self):
-        as_exc = ', ' if version_info < (2, 6) else ' as '
         self.flakes('''
         try: pass
-        except Exception%se: e
-        ''' % as_exc)
+        except Exception as e: e
+        ''')
 
         self.flakes('''
         def download_review():
             try: pass
-            except Exception%se: e
-        ''' % as_exc)
+            except Exception as e: e
+        ''')
 
     @skipIf(version_info < (3,),
             "In Python 2 exception names stay bound after the exception handler")
@@ -1625,12 +1619,11 @@ class TestUnusedAssignment(TestCase):
         ''', m.UnusedVariable)
 
     def test_exceptionUnusedInExceptInFunction(self):
-        as_exc = ', ' if version_info < (2, 6) else ' as '
         self.flakes('''
         def download_review():
             try: pass
-            except Exception%se: pass
-        ''' % as_exc, m.UnusedVariable)
+            except Exception as e: pass
+        ''', m.UnusedVariable)
 
     def test_exceptWithoutNameInFunction(self):
         """
@@ -1983,3 +1976,20 @@ class TestAsyncStatements(TestCase):
         self.flakes('''
         a: 'a: "A"'
         ''', m.ForwardAnnotationSyntaxError)
+
+    def test_raise_notimplemented(self):
+        self.flakes('''
+        raise NotImplementedError("This is fine")
+        ''')
+
+        self.flakes('''
+        raise NotImplementedError
+        ''')
+
+        self.flakes('''
+        raise NotImplemented("This isn't gonna work")
+        ''', m.RaiseNotImplemented)
+
+        self.flakes('''
+        raise NotImplemented
+        ''', m.RaiseNotImplemented)
diff --git a/pyflakes/test/test_undefined_names.py b/pyflakes/test/test_undefined_names.py
index 3d19210..8434cd8 100644
--- a/pyflakes/test/test_undefined_names.py
+++ b/pyflakes/test/test_undefined_names.py
@@ -728,14 +728,13 @@ class Test(TestCase):
             B = dict((i, str(i)) for i in T)
         ''')
 
-        if version_info >= (2, 7):
-            self.flakes('''
-            class A:
-                T = range(10)
+        self.flakes('''
+        class A:
+            T = range(10)
 
-                X = {x for x in T}
-                Y = {x:x for x in T}
-            ''')
+            X = {x for x in T}
+            Y = {x:x for x in T}
+        ''')
 
     def test_definedInClassNested(self):
         """Defined name for nested generator expressions in a class."""
@@ -761,7 +760,6 @@ class Test(TestCase):
         (42 for i in range(i))
         ''', m.UndefinedName)
 
-    @skipIf(version_info < (2, 7), 'Dictionary comprehensions do not exist')
     def test_definedFromLambdaInDictionaryComprehension(self):
         """
         Defined name referenced from a lambda function within a dict/set
@@ -780,7 +778,6 @@ class Test(TestCase):
         any(lambda: id(x) for x in range(10))
         ''')
 
-    @skipIf(version_info < (2, 7), 'Dictionary comprehensions do not exist')
     def test_undefinedFromLambdaInDictionaryComprehension(self):
         """
         Undefined name referenced from a lambda function within a dict/set
@@ -799,6 +796,24 @@ class Test(TestCase):
         any(lambda: id(y) for x in range(10))
         ''', m.UndefinedName)
 
+    def test_dunderClass(self):
+        """
+        `__class__` is defined in class scope under Python 3, but is not
+        in Python 2.
+        """
+        code = '''
+        class Test(object):
+            def __init__(self):
+                print(__class__.__name__)
+                self.x = 1
+
+        t = Test()
+        '''
+        if version_info < (3,):
+            self.flakes(code, m.UndefinedName)
+        else:
+            self.flakes(code)
+
 
 class NameTests(TestCase):
     """

pip install -e .
parse_log_pytest
pytest
flake8 pytest
3.6
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs @ file:///opt/conda/conda-bld/attrs_1642510447205/work
certifi==2021.5.30
flake8==5.0.4
importlib-metadata==4.2.0
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
mccabe==0.7.0
more-itertools @ file:///tmp/build/80754af9/more-itertools_1637733554872/work
packaging @ file:///tmp/build/80754af9/packaging_1637314298585/work
pluggy @ file:///tmp/build/80754af9/pluggy_1615976315926/work
py @ file:///opt/conda/conda-bld/py_1644396412707/work
pycodestyle==2.9.1
-e git+https://github.com/PyCQA/pyflakes.git@8a1feac08dae2478e3f67ab4018af86ff4ec56f0#egg=pyflakes
pyparsing @ file:///tmp/build/80754af9/pyparsing_1635766073266/work
pytest==6.2.4
toml @ file:///tmp/build/80754af9/toml_1616166611790/work
typing_extensions @ file:///opt/conda/conda-bld/typing_extensions_1647553014482/work
zipp @ file:///tmp/build/80754af9/zipp_1633618647012/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=21.4.0=pyhd3eb1b0_0
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - importlib_metadata=4.8.1=hd3eb1b0_0
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - more-itertools=8.12.0=pyhd3eb1b0_0
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - packaging=21.3=pyhd3eb1b0_0
  - pip=21.2.2=py36h06a4308_0
  - pluggy=0.13.1=py36h06a4308_0
  - py=1.11.0=pyhd3eb1b0_0
  - pyparsing=3.0.4=pyhd3eb1b0_0
  - pytest=6.2.4=py36h06a4308_2
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - toml=0.10.2=pyhd3eb1b0_0
  - typing_extensions=4.1.1=pyh06a4308_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zipp=3.6.0=pyhd3eb1b0_0
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - flake8==5.0.4
      - importlib-metadata==4.2.0
      - mccabe==0.7.0
      - pycodestyle==2.9.1
prefix: /opt/conda/envs/pyflakes

pyflakes/test/test_other.py::TestAsyncStatements::test_raise_notimplemented pyflakes/test/test_undefined_names.py::Test::test_dunderClass
pyflakes/test/test_api.py::TestIterSourceCode::test_emptyDirectory pyflakes/test/test_api.py::TestIterSourceCode::test_explicitFiles pyflakes/test/test_api.py::TestIterSourceCode::test_multipleDirectories pyflakes/test/test_api.py::TestIterSourceCode::test_onlyPythonSource pyflakes/test/test_api.py::TestIterSourceCode::test_recurses pyflakes/test/test_api.py::TestIterSourceCode::test_shebang pyflakes/test/test_api.py::TestIterSourceCode::test_singleFile pyflakes/test/test_api.py::TestReporter::test_flake pyflakes/test/test_api.py::TestReporter::test_multiLineSyntaxError pyflakes/test/test_api.py::TestReporter::test_syntaxError pyflakes/test/test_api.py::TestReporter::test_syntaxErrorNoOffset pyflakes/test/test_api.py::TestReporter::test_unexpectedError pyflakes/test/test_api.py::CheckTests::test_CRLFLineEndings pyflakes/test/test_api.py::CheckTests::test_checkPathNonExisting pyflakes/test/test_api.py::CheckTests::test_checkRecursive pyflakes/test/test_api.py::CheckTests::test_encodedFileUTF8 pyflakes/test/test_api.py::CheckTests::test_eofSyntaxError pyflakes/test/test_api.py::CheckTests::test_eofSyntaxErrorWithTab pyflakes/test/test_api.py::CheckTests::test_invalidEscape pyflakes/test/test_api.py::CheckTests::test_legacyScript pyflakes/test/test_api.py::CheckTests::test_misencodedFileUTF16 pyflakes/test/test_api.py::CheckTests::test_misencodedFileUTF8 pyflakes/test/test_api.py::CheckTests::test_missingTrailingNewline pyflakes/test/test_api.py::CheckTests::test_multilineSyntaxError pyflakes/test/test_api.py::CheckTests::test_nonDefaultFollowsDefaultSyntaxError pyflakes/test/test_api.py::CheckTests::test_nonKeywordAfterKeywordSyntaxError pyflakes/test/test_api.py::CheckTests::test_pyflakesWarning pyflakes/test/test_api.py::IntegrationTests::test_errors_io pyflakes/test/test_api.py::IntegrationTests::test_errors_syntax pyflakes/test/test_api.py::IntegrationTests::test_fileWithFlakes pyflakes/test/test_api.py::IntegrationTests::test_goodFile pyflakes/test/test_api.py::IntegrationTests::test_readFromStdin pyflakes/test/test_api.py::TestMain::test_errors_io pyflakes/test/test_api.py::TestMain::test_errors_syntax pyflakes/test/test_api.py::TestMain::test_fileWithFlakes pyflakes/test/test_api.py::TestMain::test_goodFile pyflakes/test/test_api.py::TestMain::test_readFromStdin pyflakes/test/test_dict.py::Test::test_duplicate_key_float_and_int pyflakes/test/test_dict.py::Test::test_duplicate_keys pyflakes/test/test_dict.py::Test::test_duplicate_keys_bools pyflakes/test/test_dict.py::Test::test_duplicate_keys_bools_false pyflakes/test/test_dict.py::Test::test_duplicate_keys_bytes_vs_unicode_py3 pyflakes/test/test_dict.py::Test::test_duplicate_keys_in_function pyflakes/test/test_dict.py::Test::test_duplicate_keys_in_lambda pyflakes/test/test_dict.py::Test::test_duplicate_keys_ints pyflakes/test/test_dict.py::Test::test_duplicate_keys_none pyflakes/test/test_dict.py::Test::test_duplicate_keys_tuples pyflakes/test/test_dict.py::Test::test_duplicate_keys_tuples_int_and_float pyflakes/test/test_dict.py::Test::test_duplicate_values_bytes_vs_unicode_py3 pyflakes/test/test_dict.py::Test::test_duplicate_variable_keys pyflakes/test/test_dict.py::Test::test_duplicate_variable_values pyflakes/test/test_dict.py::Test::test_duplicate_variable_values_same_value pyflakes/test/test_dict.py::Test::test_multiple_duplicate_keys pyflakes/test/test_dict.py::Test::test_no_duplicate_key_error_same_value pyflakes/test/test_dict.py::Test::test_no_duplicate_key_errors pyflakes/test/test_dict.py::Test::test_no_duplicate_key_errors_bool_or_none pyflakes/test/test_dict.py::Test::test_no_duplicate_key_errors_func_call pyflakes/test/test_dict.py::Test::test_no_duplicate_key_errors_instance_attributes pyflakes/test/test_dict.py::Test::test_no_duplicate_key_errors_ints pyflakes/test/test_dict.py::Test::test_no_duplicate_key_errors_tuples pyflakes/test/test_dict.py::Test::test_no_duplicate_key_errors_vars pyflakes/test/test_dict.py::Test::test_no_duplicate_keys_tuples_same_first_element 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::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::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_redefinedByGenExp pyflakes/test/test_imports.py::TestSpecialAll::test_unboundExported pyflakes/test/test_imports.py::TestSpecialAll::test_unrecognizable 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_other.py::Test::test_attrAugmentedAssignment pyflakes/test/test_other.py::Test::test_breakInsideLoop pyflakes/test/test_other.py::Test::test_breakOutsideLoop pyflakes/test/test_other.py::Test::test_classFunctionDecorator pyflakes/test/test_other.py::Test::test_classNameDefinedPreviously pyflakes/test/test_other.py::Test::test_classNameUndefinedInClassBody pyflakes/test/test_other.py::Test::test_classRedefinedAsFunction pyflakes/test/test_other.py::Test::test_classRedefinition pyflakes/test/test_other.py::Test::test_classWithReturn pyflakes/test/test_other.py::Test::test_classWithYield pyflakes/test/test_other.py::Test::test_classWithYieldFrom pyflakes/test/test_other.py::Test::test_comparison pyflakes/test/test_other.py::Test::test_containment pyflakes/test/test_other.py::Test::test_continueInFinally pyflakes/test/test_other.py::Test::test_continueInsideLoop pyflakes/test/test_other.py::Test::test_continueOutsideLoop pyflakes/test/test_other.py::Test::test_defaultExceptLast pyflakes/test/test_other.py::Test::test_defaultExceptNotLast pyflakes/test/test_other.py::Test::test_doubleAssignmentConditionally pyflakes/test/test_other.py::Test::test_doubleAssignmentWithUse pyflakes/test/test_other.py::Test::test_duplicateArgs pyflakes/test/test_other.py::Test::test_ellipsis pyflakes/test/test_other.py::Test::test_extendedSlice pyflakes/test/test_other.py::Test::test_functionDecorator pyflakes/test/test_other.py::Test::test_functionRedefinedAsClass pyflakes/test/test_other.py::Test::test_globalDeclaredInDifferentScope pyflakes/test/test_other.py::Test::test_identity pyflakes/test/test_other.py::Test::test_localReferencedBeforeAssignment pyflakes/test/test_other.py::Test::test_loopControl pyflakes/test/test_other.py::Test::test_modernProperty pyflakes/test/test_other.py::Test::test_moduleWithReturn pyflakes/test/test_other.py::Test::test_moduleWithYield pyflakes/test/test_other.py::Test::test_moduleWithYieldFrom pyflakes/test/test_other.py::Test::test_redefinedClassFunction pyflakes/test/test_other.py::Test::test_redefinedFunction pyflakes/test/test_other.py::Test::test_redefinedIfElseFunction pyflakes/test/test_other.py::Test::test_redefinedIfElseInListComp pyflakes/test/test_other.py::Test::test_redefinedIfFunction pyflakes/test/test_other.py::Test::test_redefinedInDictComprehension pyflakes/test/test_other.py::Test::test_redefinedInGenerator pyflakes/test/test_other.py::Test::test_redefinedInSetComprehension pyflakes/test/test_other.py::Test::test_redefinedTryExceptFunction pyflakes/test/test_other.py::Test::test_redefinedTryFunction pyflakes/test/test_other.py::Test::test_redefinedUnderscoreFunction pyflakes/test/test_other.py::Test::test_redefinedUnderscoreImportation pyflakes/test/test_other.py::Test::test_starredAssignmentErrors pyflakes/test/test_other.py::Test::test_starredAssignmentNoError pyflakes/test/test_other.py::Test::test_unaryPlus pyflakes/test/test_other.py::Test::test_undefinedBaseClass pyflakes/test/test_other.py::Test::test_varAugmentedAssignment pyflakes/test/test_other.py::TestUnusedAssignment::test_assert_static pyflakes/test/test_other.py::TestUnusedAssignment::test_assert_tuple pyflakes/test/test_other.py::TestUnusedAssignment::test_assert_tuple_empty pyflakes/test/test_other.py::TestUnusedAssignment::test_assert_with_message pyflakes/test/test_other.py::TestUnusedAssignment::test_assert_without_message pyflakes/test/test_other.py::TestUnusedAssignment::test_assignInForLoop pyflakes/test/test_other.py::TestUnusedAssignment::test_assignInListComprehension pyflakes/test/test_other.py::TestUnusedAssignment::test_assignToGlobal pyflakes/test/test_other.py::TestUnusedAssignment::test_assignToMember pyflakes/test/test_other.py::TestUnusedAssignment::test_assignToNonlocal pyflakes/test/test_other.py::TestUnusedAssignment::test_assignmentInsideLoop pyflakes/test/test_other.py::TestUnusedAssignment::test_augmentedAssignmentImportedFunctionCall pyflakes/test/test_other.py::TestUnusedAssignment::test_closedOver pyflakes/test/test_other.py::TestUnusedAssignment::test_dictComprehension pyflakes/test/test_other.py::TestUnusedAssignment::test_doubleClosedOver pyflakes/test/test_other.py::TestUnusedAssignment::test_exceptWithoutNameInFunction pyflakes/test/test_other.py::TestUnusedAssignment::test_exceptWithoutNameInFunctionTuple pyflakes/test/test_other.py::TestUnusedAssignment::test_exceptionUnusedInExcept pyflakes/test/test_other.py::TestUnusedAssignment::test_exceptionUnusedInExceptInFunction pyflakes/test/test_other.py::TestUnusedAssignment::test_exceptionUsedInExcept pyflakes/test/test_other.py::TestUnusedAssignment::test_f_string pyflakes/test/test_other.py::TestUnusedAssignment::test_generatorExpression pyflakes/test/test_other.py::TestUnusedAssignment::test_ifexp pyflakes/test/test_other.py::TestUnusedAssignment::test_listUnpacking pyflakes/test/test_other.py::TestUnusedAssignment::test_setComprehensionAndLiteral pyflakes/test/test_other.py::TestUnusedAssignment::test_tracebackhideSpecialVariable pyflakes/test/test_other.py::TestUnusedAssignment::test_tupleUnpacking pyflakes/test/test_other.py::TestUnusedAssignment::test_unusedVariable pyflakes/test/test_other.py::TestUnusedAssignment::test_unusedVariableAsLocals pyflakes/test/test_other.py::TestUnusedAssignment::test_unusedVariableNoLocals pyflakes/test/test_other.py::TestUnusedAssignment::test_variableUsedInLoop pyflakes/test/test_other.py::TestUnusedAssignment::test_withStatementAttributeName pyflakes/test/test_other.py::TestUnusedAssignment::test_withStatementComplicatedTarget pyflakes/test/test_other.py::TestUnusedAssignment::test_withStatementListNames pyflakes/test/test_other.py::TestUnusedAssignment::test_withStatementNameDefinedInBody pyflakes/test/test_other.py::TestUnusedAssignment::test_withStatementNoNames pyflakes/test/test_other.py::TestUnusedAssignment::test_withStatementSingleName pyflakes/test/test_other.py::TestUnusedAssignment::test_withStatementSingleNameRedefined pyflakes/test/test_other.py::TestUnusedAssignment::test_withStatementSingleNameUndefined pyflakes/test/test_other.py::TestUnusedAssignment::test_withStatementSubscript pyflakes/test/test_other.py::TestUnusedAssignment::test_withStatementSubscriptUndefined pyflakes/test/test_other.py::TestUnusedAssignment::test_withStatementTupleNames pyflakes/test/test_other.py::TestUnusedAssignment::test_withStatementTupleNamesRedefined pyflakes/test/test_other.py::TestUnusedAssignment::test_withStatementTupleNamesUndefined pyflakes/test/test_other.py::TestUnusedAssignment::test_withStatementUndefinedInExpression pyflakes/test/test_other.py::TestUnusedAssignment::test_withStatementUndefinedInside pyflakes/test/test_other.py::TestUnusedAssignment::test_yieldFromUndefined pyflakes/test/test_other.py::TestAsyncStatements::test_asyncDef pyflakes/test/test_other.py::TestAsyncStatements::test_asyncDefAwait pyflakes/test/test_other.py::TestAsyncStatements::test_asyncDefUndefined pyflakes/test/test_other.py::TestAsyncStatements::test_asyncFor pyflakes/test/test_other.py::TestAsyncStatements::test_asyncWith pyflakes/test/test_other.py::TestAsyncStatements::test_asyncWithItem pyflakes/test/test_other.py::TestAsyncStatements::test_continueInAsyncForFinally pyflakes/test/test_other.py::TestAsyncStatements::test_formatstring pyflakes/test/test_other.py::TestAsyncStatements::test_loopControlInAsyncFor pyflakes/test/test_other.py::TestAsyncStatements::test_loopControlInAsyncForElse pyflakes/test/test_other.py::TestAsyncStatements::test_matmul pyflakes/test/test_other.py::TestAsyncStatements::test_variable_annotations pyflakes/test/test_undefined_names.py::Test::test_annotationUndefined pyflakes/test/test_undefined_names.py::Test::test_badNestedClass pyflakes/test/test_undefined_names.py::Test::test_builtinWindowsError pyflakes/test/test_undefined_names.py::Test::test_builtins pyflakes/test/test_undefined_names.py::Test::test_definedAsStarArgs pyflakes/test/test_undefined_names.py::Test::test_definedAsStarUnpack pyflakes/test/test_undefined_names.py::Test::test_definedByGlobal pyflakes/test/test_undefined_names.py::Test::test_definedByGlobalMultipleNames pyflakes/test/test_undefined_names.py::Test::test_definedFromLambdaInDictionaryComprehension pyflakes/test/test_undefined_names.py::Test::test_definedFromLambdaInGenerator pyflakes/test/test_undefined_names.py::Test::test_definedInClass pyflakes/test/test_undefined_names.py::Test::test_definedInClassNested pyflakes/test/test_undefined_names.py::Test::test_definedInGenExp pyflakes/test/test_undefined_names.py::Test::test_definedInListComp pyflakes/test/test_undefined_names.py::Test::test_del pyflakes/test/test_undefined_names.py::Test::test_delConditional pyflakes/test/test_undefined_names.py::Test::test_delConditionalNested pyflakes/test/test_undefined_names.py::Test::test_delExceptionInExcept pyflakes/test/test_undefined_names.py::Test::test_delGlobal pyflakes/test/test_undefined_names.py::Test::test_delUndefined pyflakes/test/test_undefined_names.py::Test::test_delWhile pyflakes/test/test_undefined_names.py::Test::test_delWhileNested pyflakes/test/test_undefined_names.py::Test::test_delWhileTestUsage pyflakes/test/test_undefined_names.py::Test::test_doubleNestingReportsClosestName pyflakes/test/test_undefined_names.py::Test::test_functionsNeedGlobalScope pyflakes/test/test_undefined_names.py::Test::test_globalFromNestedScope pyflakes/test/test_undefined_names.py::Test::test_globalImportStar pyflakes/test/test_undefined_names.py::Test::test_globalInGlobalScope pyflakes/test/test_undefined_names.py::Test::test_global_reset_name_only pyflakes/test/test_undefined_names.py::Test::test_intermediateClassScopeIgnored pyflakes/test/test_undefined_names.py::Test::test_keywordOnlyArgs pyflakes/test/test_undefined_names.py::Test::test_keywordOnlyArgsUndefined pyflakes/test/test_undefined_names.py::Test::test_laterRedefinedGlobalFromNestedScope pyflakes/test/test_undefined_names.py::Test::test_laterRedefinedGlobalFromNestedScope2 pyflakes/test/test_undefined_names.py::Test::test_laterRedefinedGlobalFromNestedScope3 pyflakes/test/test_undefined_names.py::Test::test_magicGlobalsBuiltins pyflakes/test/test_undefined_names.py::Test::test_magicGlobalsFile pyflakes/test/test_undefined_names.py::Test::test_magicGlobalsName pyflakes/test/test_undefined_names.py::Test::test_magicGlobalsPath pyflakes/test/test_undefined_names.py::Test::test_metaClassUndefined pyflakes/test/test_undefined_names.py::Test::test_namesDeclaredInExceptBlocks pyflakes/test/test_undefined_names.py::Test::test_nestedClass pyflakes/test/test_undefined_names.py::Test::test_undefined pyflakes/test/test_undefined_names.py::Test::test_undefinedAugmentedAssignment pyflakes/test/test_undefined_names.py::Test::test_undefinedExceptionName pyflakes/test/test_undefined_names.py::Test::test_undefinedExceptionNameObscuringGlobalVariableFalsePositive1 pyflakes/test/test_undefined_names.py::Test::test_undefinedExceptionNameObscuringGlobalVariableFalsePositive2 pyflakes/test/test_undefined_names.py::Test::test_undefinedExceptionNameObscuringLocalVariable2 pyflakes/test/test_undefined_names.py::Test::test_undefinedExceptionNameObscuringLocalVariableFalsePositive1 pyflakes/test/test_undefined_names.py::Test::test_undefinedExceptionNameObscuringLocalVariableFalsePositive2 pyflakes/test/test_undefined_names.py::Test::test_undefinedFromLambdaInComprehension pyflakes/test/test_undefined_names.py::Test::test_undefinedFromLambdaInDictionaryComprehension pyflakes/test/test_undefined_names.py::Test::test_undefinedInGenExpNested pyflakes/test/test_undefined_names.py::Test::test_undefinedInListComp pyflakes/test/test_undefined_names.py::Test::test_undefinedInLoop pyflakes/test/test_undefined_names.py::Test::test_undefinedWithErrorHandler pyflakes/test/test_undefined_names.py::Test::test_unusedAsStarUnpack pyflakes/test/test_undefined_names.py::Test::test_usedAsStarUnpack pyflakes/test/test_undefined_names.py::NameTests::test_impossibleContext
README.rst pyflakes/messages.py setup.py .travis.yml tox.ini pyflakes/api.py pyflakes/__main__.py pyflakes/checker.py .appveyor.yml
README.rst pyflakes/messages.py setup.py .travis.yml tox.ini pyflakes/api.py pyflakes/__main__.py pyflakes/checker.py .appveyor.yml