Changelogs » Pyflakes

PyUp Safety actively tracks 362,670 Python packages for vulnerabilities and notifies you when to upgrade.



- Remove unused tracing code (``traceTree``)
  - Add support for ``match`` statement
  - Detect ``typing`` module attributes when imported with ``import ... as ...``


- Fix regression in 2.3.0: type annotations no longer redefine imports


- Recognize tuple concatenation in ``__all__`` export definitions
  - Better support use of annotation-only assignments when using
  ``from __future__ import annotations``
  - Recognize special-case typing for ``Annotated``
  - Fix undefined name ``__qualname__`` in class scope
  - Recognize special-cased typing for ``TypeVar``
  - Errors for undefined exports in ``__all__`` are shown in a deterministic order
  - Fix false positives in certain typing constructs (``TypeVar``,
  ``NamedTuple``, ``TypedDict``, ``cast``)


- Include column information in error messages
  - Fix ``overload`` detection with other decorators and in non-global scopes
  - Fix return-type annotation being a class member
  - Fix assignment to ``_`` in doctests with existing ``_`` name
  - Namespace attributes which are attached to ast nodes with ``_pyflakes_`` to
  avoid conflicts with other libraries (notably bandit)
  - Add check for f-strings without placeholders
  - Add check for unused/extra/invalid ``'string literal'.format(...)``
  - Add check for unused/extra/invalid ``'string literal % ...``
  - Improve python shebang detection
  - Allow type ignore to be followed by a code `` type: ignore[attr-defined]``
  - Add support for assignment expressions (PEP 572)
  - Support ``overload`` detection from ``typing_extensions`` as well
  - Fix ``overload`` detection for async functions
  - Allow ``continue`` inside ``finally`` in python 3.8+
  - Fix handling of annotations in positional-only arguments
  - Make pyflakes more resistant to future syntax additions
  - Fix false positives in partially quoted type annotations
  - Warn about ``is`` comparison to tuples
  - Fix ``Checker`` usage with async function subtrees
  - Add check for ``if`` of non-empty tuple
  - Switch from ``optparse`` to ``argparse``
  - Fix false positives in partially quoted type annotations in unusual contexts
  - Be more cautious when identifying ``Literal`` type expressions


- Fix reported line number for type comment errors
  - Fix typing.overload check to only check imported names


- Allow intentional assignment to variables named ``_``
  - Recognize ``__module__`` as a valid name in class scope
  - ``pyflakes.checker.Checker`` supports checking of partial ``ast`` trees
  - Detect assign-before-use for local variables which shadow builtin names
  - Detect invalid ``print`` syntax using ``>>`` operator
  - Treat ``async for`` the same as a ``for`` loop for introducing variables
  - Add detection for list concatenation in ``__all__``
  - Exempt ``typing.overload`` from duplicate function declaration
  - Importing a submodule of an ``as``-aliased ``import``-import is marked as
  - Report undefined names from ``__all__`` as possibly coming from a ``*``
  - Add support for changes in Python 3.8-dev
  - Add support for PEP 563 (``from __future__ import annotations``)
  - Include Python version and platform information in ``pyflakes --version``
  - Recognize ``__annotations__`` as a valid magic global in Python 3.6+
  - Mark names used in PEP 484 `` type: ...`` comments as used
  - Add check for use of ``is`` operator with ``str``, ``bytes``, and ``int``


- Drop support for EOL Python <2.7 and 3.2-3.3
  - Check for unused exception binding in ``except:`` block
  - Handle string literal type annotations
  - Ignore redefinitions of ``_``, unless originally defined by import
  - Support ``__class__`` without ``self`` in Python 3
  - Issue an error for ``raise NotImplemented(...)``


- Process function scope variable annotations for used names
  - Find Python files without extensions by their shebang


- Enable support for PEP 526 annotated assignments


- Change formatting of ImportStarMessage to be consistent with other errors
  - Support PEP 498 "f-strings"


- Fix PyPy2 Windows IntegrationTests
  - Check for duplicate dictionary keys
  - Fix TestMain tests on Windows
  - Fix "continue" and "break" checks ignoring py3.5's "async for" loop


- Fix TypeError when processing relative imports


- Avoid traceback when exception is del-ed in except


- Fix false RedefinedWhileUnused for submodule imports


- Warn against reusing exception names after the except: block on Python 3
  - Improve the error messages for imports


- Allow main() to accept arguments.
  - Support  matrix-multiplication operator
  - Validate ``__future__`` imports
  - Fix doctest scope testing
  - Warn for tuple assertions which are always true
  - Warn for "import \*" not at module level on Python 3
  - Catch many more kinds of SyntaxErrors
  - Check PEP 498 f-strings
  - (and a few more sundry bugfixes)


- Python 3.5 support. async/await statements in particular.
  - Fix on Windows.
  - Eliminate a false UnusedImport warning when the name has been
  declared "global"


- Fix a traceback when a global is defined in one scope, and used in another.


- Update NEWS.txt to include 0.9.0, which had been forgotten.


- Exit gracefully, not with a traceback, on SIGINT and SIGPIPE.
  - Fix incorrect report of undefined name when using lambda expressions in
  generator expressions.
  - Don't crash on DOS line endings on Windows and Python 2.6.
  - Don't report an undefined name if the 'del' which caused a name to become
  undefined is only conditionally executed.
  - Properly handle differences in list comprehension scope in Python 3.
  - Improve handling of edge cases around 'global' defined variables.
  - Report an error for 'return' outside a function.


- Detect the declared encoding in Python 3.
  - Do not report redefinition of import in a local scope, if the
  global name is used elsewhere in the module.
  - Catch undefined variable in loop generator when it is also used as
  loop variable.
  - Report undefined name for ``(a, b) = (1, 2)`` but not for the general
  unpacking ``(a, b) = func()``.
  - Correctly detect when an imported module is used in default arguments
  of a method, when the method and the module use the same name.
  - Distribute a universal wheel file.


- Adapt for the AST in Python 3.4.
  - Fix caret position on SyntaxError.
  - Fix crash on Python 2.x with some doctest SyntaxError.
  - Add tox.ini.
  - The ``PYFLAKES_NODOCTEST`` environment variable has been replaced with the
  ``PYFLAKES_DOCTEST`` environment variable (with the opposite meaning).
  Doctest checking is now disabled by default; set the environment variable
  to enable it.
  - Correctly parse incremental ``__all__ += [...]``.
  - Catch return with arguments inside a generator (Python <= 3.2).
  - Do not complain about ``_`` in doctests.
  - Drop deprecated methods ``pushFunctionScope`` and ``pushClassScope``.


- Do not report undefined name for generator expression and dict or
  set comprehension at class level.
  - Deprecate ``Checker.pushFunctionScope`` and ``Checker.pushClassScope``:
  use ``Checker.pushScope`` instead.
  - Remove dependency on Unittest2 for the tests.


- Fix computation of ``DoctestSyntaxError.lineno`` and ``col``.
  - Add boolean attribute ``Checker.withDoctest`` to ignore doctests.
  - If environment variable ``PYFLAKES_NODOCTEST`` is set, skip doctests.
  - Environment variable ``PYFLAKES_BUILTINS`` accepts a comma-separated
  list of additional built-in names.


- File ``bin/pyflakes`` was missing in tarball generated with distribute.
  - Fix reporting errors in non-ASCII filenames (Python 2.x).


- Add --version and --help options.
  - Support ``python -m pyflakes`` (Python 2.7 and Python 3.x).
  - Add attribute ``Message.col`` to report column offset.
  - Do not report redefinition of variable for a variable used in a list
  comprehension in a conditional.
  - Do not report redefinition of variable for generator expressions and
  set or dict comprehensions.
  - Do not report undefined name when the code is protected with a
  ``NameError`` exception handler.
  - Do not report redefinition of variable when unassigning a module imported
  for its side-effect.
  - Support special locals like ``__tracebackhide__`` for py.test.
  - Support checking doctests.
  - Fix issue with Turkish locale where ``'i'.upper() == 'i'`` in Python 2.


- Fix detection of variables in augmented assignments.


- Support Python 3 up to 3.3, based on the pyflakes3k project.
  - Preserve compatibility with Python 2.5 and all recent versions of Python.
  - Support custom reporters in addition to the default Reporter.
  - Allow function redefinition for modern property construction via
  - Fix spurious redefinition warnings in conditionals.
  - Do not report undefined name in ``__all__`` if import * is used.
  - Add WindowsError as a known built-in name on all platforms.
  - Support specifying additional built-ins in the ``Checker`` constructor.
  - Don't issue Unused Variable warning when using locals() in current scope.
  - Handle problems with the encoding of source files.
  - Remove dependency on Twisted for the tests.
  - Support ``python test`` and ``python develop``.
  - Create script using setuptools ``entry_points`` to support all platforms,
  including Windows.


- Convert pyflakes to use newer _ast infrastructure rather than compiler.
  - Support for new syntax in 2.7 (including set literals, set comprehensions,
  and dictionary comprehensions).
  - Make sure class names don't get bound until after class definition.


- Fix reporting for certain SyntaxErrors which lack line number
  - Check for syntax errors more rigorously.
  - Support checking names used with the class decorator syntax in versions
  of Python which have it.
  - Detect local variables which are bound but never used.
  - Handle permission errors when trying to read source files.
  - Handle problems with the encoding of source files.
  - Support importing dotted names so as not to incorrectly report them as
  redefined unused names.
  - Support all forms of the with statement.
  - Consider static ``__all__`` definitions and avoid reporting unused names
  if the names are listed there.
  - Fix incorrect checking of class names with respect to the names of their
  bases in the class statement.
  - Support the ``__path__`` global in ````.


- Display more informative SyntaxError messages.
  - Don't hang flymake with unmatched triple quotes (only report a single
  line of source for a multiline syntax error).
  - Recognize ``__builtins__`` as a defined name.
  - Improve pyflakes support for python versions 2.3-2.5
  - Support for if-else expressions and with statements.
  - Warn instead of error on non-existent file paths.
  - Check for ``__future__`` imports after other statements.
  - Add reporting for some types of import shadowing.
  - Improve reporting of unbound locals