Releases: PyCQA/flake8-pyi
24.9.0
24.6.0
Bugfixes
- Allow the use of
typing_extensions.TypeVar
in stubs.typing_extensions.TypeVar
has the default parameter, which only exists on Python 3.13+ when usingtyping.TypeVar
. - Reduce false positives from Y052 in relation to enum subclasses.
Other changes
- Declare support for Python 3.13
24.4.1
New error codes:
- Y066: When using if/else with
sys.version_info
, put the code for new Python versions first.
24.4.0
Bugfixes:
- Fix Y026 false positive: allow simple assignment to
None
in class scopes if the class is known to be an enum class.
24.3.1
New error codes:
- Y064: Use simpler syntax to define final literal types. For example, use
x: Final = 42
instead ofx: Final[Literal[42]]
- Y065: Don't use bare
Incomplete
in parameter and return annotations.
Bugfixes:
- Y090: Fix false positive for
tuple[Unpack[Ts]]
.
24.3.0
New error codes:
- Y063: Use PEP 570 syntax to mark positional-only arguments, rather than the older Python 3.7-compatible syntax described in PEP 484.
24.1.0
New error codes:
- Y062: Disallow duplicate elements inside
Literal[]
slices.
Other features:
- Support flake8>=7.0.0
- Y061 is no longer emitted in situations where Y062 would also be emitted.
- Improve error message for Y060.
- Y023 now bans more imports from
typing_extensions
now that typeshed has dropped support for Python 3.7.
Bugfixes:
- Y016: Fix false positive if a method had positional-only parameters using PEP 570 syntax and the first positional-or-keyword parameter following the positional-only parameters used a custom TypeVar (see #455).
- Y046: Fix false negative where an unused protocol would not be detected if the protocol was generic.
23.11.0
New error codes:
- Y058: Use
Iterator
rather thanGenerator
as the return value for simple__iter__
methods, andAsyncIterator
rather thanAsyncGenerator
as the return value for simple__aiter__
methods. - Y059:
Generic[]
should always be the last base class, if it is present in the bases of a class. - Y060, which flags redundant inheritance from
Generic[]
. - Y061: Do not use
None
inside aLiteral[]
slice. For example, useLiteral["foo"] | None
instead ofLiteral["foo", None]
.
Other changes:
- The undocumented
pyi.__version__
andpyi.PyiTreeChecker.version
attributes has been removed. Useflake8 --version
from the command line, orimportlib.metadata.version("flake8_pyi")
at runtime, to determine the version offlake8-pyi
installed at runtime. - Y038 now flags
from typing_extensions import AbstractSet
as well asfrom typing import AbstractSet
. - Y022 and Y037 now flag more imports from
typing_extensions
. - Y034 now attempts to avoid flagging methods inside classes that inherit from
builtins.type
,abc.ABCMeta
and/orenum.EnumMeta
. Classes that have one or more of these as bases are metaclasses, and PEP 673 forbids the use oftyping(_extensions).Self
for metaclasses. While reliably determining whether a class is a metaclass in all cases would be impossible for flake8-pyi, the new heuristics should reduce the number of false positives from this check. - Attempting to import
typing_extensions.Text
now causes Y039 to be emitted rather than Y023. - Y053 will no longer be emitted for the argument to
@typing_extensions.deprecated
.
23.10.0
-
Introduce Y090, which warns if you have an annotation such as
tuple[int]
orTuple[int]
. These mean "a tuple of length 1, in which the sole element is of typeint
". This is sometimes what you want, but more usually you'll wanttuple[int, ...]
, which means "a tuple of arbitrary (possibly 0) length, in which all elements are of typeint
".This error code is disabled by default due to the risk of false-positive errors. To enable it, use the
--extend-select=Y090
option. -
Y011 now ignores
sentinel
and_typeshed.sentinel
in default values.
23.6.0
Features:
- Support Python 3.12
- Support PEP 695 syntax for declaring type aliases
- Correctly emit Y019 errors for PEP-695 methods that are generic around a
TypeVar
instead of returningtyping_extensions.Self
- Introduce Y057: Do not use
typing.ByteString
orcollections.abc.ByteString
. These types have unclear semantics, and are deprecated; usetyping_extensions.Buffer
or a union such asbytes | bytearray | memoryview
instead. See PEP 688 for more details. - The way in which flake8-pyi modifies pyflakes runs has been improved:
-
When flake8-pyi is installed, pyflakes will now complain about forward references in default values for function and method parameters (the same as pyflakes does when it checks
.py
files). Unlike in.py
files, forward references in default values are legal in stub files. However, they are never necessary, and are considered bad style. (Forward references for parameter annotations are still allowed.)Contributed by tomasr8.
-
When flake8-pyi is installed, pyflakes's F822 check now produces many fewer false positives when flake8 is run on
.pyi
files. It now understands thatx: int
in a stub file is sufficient forx
to be considered "bound", and that"x"
can therefore be included in__all__
.
-
Bugfixes:
- Y018, Y046, Y047 and Y049 previously failed to detect unused TypeVars/ParamSpecs/TypeAliases/TypedDicts/Protocols if the object in question had multiple definitions in the same file (e.g. across two branches of an
if sys.version_info >= (3, 10)
check). This bug has now been fixed. - Y020 was previously not emitted if quoted annotations were used in TypeVar constraints. This bug has now been fixed.
Other changes:
- flake8-pyi no longer supports being run on Python 3.7, which has reached its end of life.
- flake8-pyi no longer supports being run with flake8 <v6.