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
forlineno
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 withimport ... 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 fromtyping_extensions
as well - Fix
@overload
detection for async functions - Allow
continue
insidefinally
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
toargparse
- 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 partialast
trees- Detect assign-before-use for local variables which shadow builtin names
- Detect invalid
print
syntax using>>
operator - Treat
async for
the same as afor
loop for introducing variables - Add detection for list concatenation in
__all__
- Exempt
@typing.overload
from duplicate function declaration - Importing a submodule of an
as
-aliasedimport
-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 withstr
,bytes
, andint
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__
withoutself
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 thePYFLAKES_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
andpushClassScope
.
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
andChecker.pushClassScope
: useChecker.pushScope
instead. - Remove dependency on Unittest2 for the tests.
0.7.2 (2013-04-24):
- Fix computation of
DoctestSyntaxError.lineno
andcol
. - 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
andpython 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