Skip to content

Releases: PyCQA/flake8-pyi

26.5.0

11 May 14:41

Choose a tag to compare

Breaking Changes

  • Previously, flake8-pyi monkey patched flake8's F821 (undefined name) check to
    avoid false positives in stub files. This monkey patch has been removed.
    Instead, we now recommend to disable F821 when running flake8 on stub files.
  • Remove the now unnecessary --no-pyi-aware-file-checker option.
  • Y034 no longer triggers in protocol class definitions.

New Error Codes

  • Y068: Don't use @override in stub files

Other changes

  • Drop support for Python 3.9

25.5.0

25 May 17:21
6051cb1

Choose a tag to compare

New error codes:

  • Introduce Y067: Don't use Incomplete | None = None.
  • Introduce Y091: Protocol method parameters should not be positional-or-keyword.

Other changes:

  • Y011/Y015 will now allow all defaults that include an attribute access, for example math.inf or enum members.
  • Development-only dependencies are now declared using dependency groups rather than optional dependencies.
  • The plugin now exists as a flake8_pyi package rather than a single pyi.py file.
  • Declare support for Python 3.14

24.9.0

23 Sep 18:48
33c8d9d

Choose a tag to compare

Bugfixes:

  • Don't emit Y053 for long strings inside Literal slices or metadata strings inside Annotated slices.

Other changes:

  • flake8-pyi no longer supports being run using Python 3.8. As a result, it not longer depends on the third-party ast_decompiler package.

24.6.0

12 Jun 10:18
f99a1b1

Choose a tag to compare

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 using typing.TypeVar.
  • Reduce false positives from Y052 in relation to enum subclasses.

Other changes

  • Declare support for Python 3.13

24.4.1

19 Apr 16:08
f60d7e3

Choose a tag to compare

New error codes:

  • Y066: When using if/else with sys.version_info, put the code for new Python versions first.

24.4.0

11 Apr 11:21
4aaa22d

Choose a tag to compare

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

30 Mar 12:48
bf6f6f6

Choose a tag to compare

New error codes:

  • Y064: Use simpler syntax to define final literal types. For example, use x: Final = 42 instead of x: 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

10 Mar 13:37
0dba563

Choose a tag to compare

New error codes:

24.1.0

05 Jan 20:39
045c5e9

Choose a tag to compare

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

08 Nov 15:11
06151b7

Choose a tag to compare

New error codes:

  • Y058: Use Iterator rather than Generator as the return value for simple __iter__ methods, and AsyncIterator rather than AsyncGenerator 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 a Literal[] slice. For example, use Literal["foo"] | None instead of Literal["foo", None].

Other changes:

  • The undocumented pyi.__version__ and pyi.PyiTreeChecker.version attributes has been removed. Use flake8 --version from the command line, or importlib.metadata.version("flake8_pyi") at runtime, to determine the version of flake8-pyi installed at runtime.
  • Y038 now flags from typing_extensions import AbstractSet as well as from 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/or enum.EnumMeta. Classes that have one or more of these as bases are metaclasses, and PEP 673 forbids the use of typing(_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.