| 4.0.3 (2026-10-07) | |
| - A few performance improvements | |
| - Fix handling of unconventional ``NamedTuple`` / ``TypedDict`` argument 1. | |
| 4.0.2 (2026-10-03) | |
| - Fix for ``lazy`` import of ``Literal`` considered eager | |
| 4.0.1 (2026-09-30) | |
| - Fix for ``lazy`` imports inside ``try:`` (not at module scope) | |
| 4.0.0 (2026-09-22) | |
| - Add support for python 3.15 | |
| - Drop support for EOL python 3.9 | |
| - Add new errors for ``lazy`` imports: | |
| - lazy import is eagerly used at module scope | |
| - ``lazy from ... import *`` is invalid syntax | |
| - ``lazy from __future__ import ...`` is invalid syntax | |
| - lazy import must be at module scope | |
| - Improve typing specialization: | |
| - Handle ``cast(...)`` with named arguments | |
| - Fix duplicate errors in first argument of ``cast(...)`` | |
| - Handle ``TypeVar(... default='...')`` | |
| - Fix missing error for first argument of ``TypeVar(...)`` call | |
| - Update handling of ``NamedTuple(...)`` for python 3.15 changes | |
| - Update handling of ``TypedDict(...)`` for python 3.13 changes | |
| - Add handling of ``assert_type(...)`` | |
| - Add handling of ``NewType(...)`` | |
| - Add handling of ``TypeVarTuple(...)`` | |
| - Add handling of ``ParamSpec(...)`` | |
| - Fix assignment expressions in dictionary literals | |
| - Remove ``file_tokens`` parameter to ``Checker``. Unused since 3.0.0 | |
| - Fix false-negative for deleting special variables such as ``del __tracebackhide__`` | |
| - Add support for ``python3t`` shebangs | |
| - Remove support for obsolete ``python3m`` and ``pythonu`` shebangs | |
| 3.4.0 (2025-06-20) | |
| - Add support for python 3.14 | |
| - Add "t-string is missing placeholders" error | |
| - Fix annotation erroneously causing a name to be defined with | |
| ``from __future__ import annotations`` | |
| - Add support for always-deferred annotations (PEP 749) | |
| 3.3.2 (2025-03-31) | |
| - Fix crash with ``global`` / ``nonlocal`` in class bodies (regressed in 3.3.0) | |
| 3.3.1 (2025-03-30) | |
| - Allow assignment expressions to redefine annotations (regressed in 3.3.0) | |
| 3.3.0 (2025-03-29) | |
| - Add ``__debuggerskip__`` as a special local | |
| - Allow assignment expressions to redefine outer names | |
| - Drop support for EOL python 3.8 | |
| - Add new error for unused ``global`` / ``nonlocal`` names | |
| 3.2.0 (2024-01-04) | |
| - Add support for ``*T`` (TypeVarTuple) and ``**P`` (ParamSpec) in PEP 695 | |
| annotations. | |
| 3.1.0 (2023-07-29) | |
| - Drop support for EOL python 3.6 / 3.7 | |
| - Remove ``ContinueInFinally`` check (only relevant in python < 3.8) | |
| - Fix forward annotations inside a nested scope | |
| - Produce an error when a definition shadows an unused variable | |
| - Fix accessed global annotation being redefined in a local scope | |
| - Allow redefinition of functions across ``match`` arms | |
| - Fix potential ``None`` for ``lineno`` during tokenization errors | |
| - Add support for PEP 695 and python 3.12 | |
| 3.0.1 (2022-11-24) | |
| - Fix crash on augmented assign to ``print`` builtin | |
| 3.0.0 (2022-11-23) | |
| - Detect undefined name in variable defined by an annotated assignment | |
| - Add a new error for names which are annotated but unused | |
| - Remove handling of python 2.x ``# type:`` comments. Use annotations instead | |
| 2.5.0 (2022-07-30) | |
| - Drop support for EOL python 2.7 / 3.4 / 3.5 | |
| - Ignore ``__all__`` when not directly assigned | |
| - Handle ``TypeAlias`` annotations as aliases (PEP 613) | |
| - Assignment expressions (``:=``) target outer scope in comprehensions | |
| - Add support for new python 3.11 syntax | |
| - Unify output so it is always ``filename:lineno:col: message`` | |
| - Properly report ``SyntaxError`` from stdin in python < 3.9 | |
| - Fix offsets of ``SyntaxError``s in pypy | |
| 2.4.0 (2021-10-06) | |
| - Remove unused tracing code (``traceTree``) | |
| - Add support for ``match`` statement | |
| - Detect ``typing`` module attributes when imported with ``import ... as ...`` | |
| 2.3.1 (2021-03-24) | |
| - Fix regression in 2.3.0: type annotations no longer redefine imports | |
| 2.3.0 (2021-03-14) | |
| - 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``) | |
| 2.2.0 (2020-04-08) | |
| - 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 | |
| 2.1.1 (2019-02-28) | |
| - Fix reported line number for type comment errors | |
| - Fix typing.overload check to only check imported names | |
| 2.1.0 (2019-01-23) | |
| - 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 | |
| used | |
| - Report undefined names from ``__all__`` as possibly coming from a ``*`` | |
| import | |
| - 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`` | |
| literals | |
| 2.0.0 (2018-05-20) | |
| - 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(...)`` | |
| 1.6.0 (2017-08-03) | |
| - Process function scope variable annotations for used names | |
| - Find Python files without extensions by their shebang | |
| 1.5.0 (2017-01-09) | |
| - Enable support for PEP 526 annotated assignments | |
| 1.4.0 (2016-12-30): | |
| - Change formatting of ImportStarMessage to be consistent with other errors | |
| - Support PEP 498 "f-strings" | |
| 1.3.0 (2016-09-01): | |
| - 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 | |
| 1.2.3 (2016-05-12): | |
| - Fix TypeError when processing relative imports | |
| 1.2.2 (2016-05-06): | |
| - Avoid traceback when exception is del-ed in except | |
| 1.2.1 (2015-05-05): | |
| - Fix false RedefinedWhileUnused for submodule imports | |
| 1.2.0 (2016-05-03): | |
| - Warn against reusing exception names after the except: block on Python 3 | |
| - Improve the error messages for imports | |
| 1.1.0 (2016-03-01): | |
| - 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) | |
| 1.0.0 (2015-09-20): | |
| - Python 3.5 support. async/await statements in particular. | |
| - Fix test_api.py on Windows. | |
| - Eliminate a false UnusedImport warning when the name has been | |
| declared "global" | |
| 0.9.2 (2015-06-17): | |
| - Fix a traceback when a global is defined in one scope, and used in another. | |
| 0.9.1 (2015-06-09): | |
| - Update NEWS.txt to include 0.9.0, which had been forgotten. | |
| 0.9.0 (2015-05-31): | |
| - 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. | |
| 0.8.1 (2014-03-30): | |
| - 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. | |
| 0.8.0 (2014-03-22): | |
| - 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``. | |
| 0.7.3 (2013-07-02): | |
| - 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. | |
| 0.7.2 (2013-04-24): | |
| - 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. | |
| 0.7.1 (2013-04-23): | |
| - File ``bin/pyflakes`` was missing in tarball generated with distribute. | |
| - Fix reporting errors in non-ASCII filenames (Python 2.x). | |
| 0.7.0 (2013-04-17): | |
| - 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. | |
| 0.6.1 (2013-01-29): | |
| - Fix detection of variables in augmented assignments. | |
| 0.6.0 (2013-01-29): | |
| - 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 | |
| property.setter/deleter. | |
| - 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 setup.py test`` and ``python setup.py develop``. | |
| - Create script using setuptools ``entry_points`` to support all platforms, | |
| including Windows. | |
| 0.5.0 (2011-09-02): | |
| - 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. | |
| 0.4.0 (2009-11-25): | |
| - Fix reporting for certain SyntaxErrors which lack line number | |
| information. | |
| - 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 ``__init__.py``. | |
| 0.3.0 (2009-01-30): | |
| - 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 |