What's new in Pylint 4.0.7?
Release date: 2026-08-09
False Positives Fixed
-
Fix a false positive for
invalid-namewhen a module-level variable is assigned
an instance of aTypedDictsubclass. Such a name is a value, not a type
definition, so it is now checked against the constant or variable regex instead
ofclass-rgx.Closes #11231
Other Bug Fixes
-
Fix a crash in the
bad-open-modecheck when themodeargument of
openis theNotImplementedconstant (Python >= 3.14).Closes #11099
-
Fix a crash in the
not-context-managerandnot-async-context-manager
checks when the context manager infers to a value without a name, such as the
slicereturned bywith slice(...)/async with slice(...).Closes #11102
-
Fix a false positive for
nested-min-max(W3301) when the innermin/maxcall carries a keyword argument such askey=. Flattening the call dropped the keyword and changed the result, so nested calls whose inner call has keyword arguments are no longer flagged.Closes #11130
-
Fix a false suggestion from
nested-min-max(W3301): when rewriting a nestedmin/maxinto a splat call, arguments positioned after the splatted call were silently dropped, so the suggested code changed the result.Closes #11134
-
Fix a false positive for
too-many-locals(R0914): PEP 695 type parameters, i.e. theT1andT2in a genericdef f[T1, T2]signature, were counted as local variables. They are type-system constructs, not runtime locals, and are now excluded from the local-variable count.Closes #11136
-
Fix
literal-comparison(R0123) emitting a corrupted suggestion for identifiers
that containis(e.g.axis is 5was renderedax== == 5). The suggestion
is now rebuilt from the operands and operator.Closes #11146
-
Fix false positives in
bad-string-format-type(E1307) for valid%formatting:
%i/%uapplied to a float (both truncate like%d) and%aapplied to any
non-int type (%ais type-agnostic like%s/%r).Closes #11147
-
Fix a false positive for :ref:
useless-parent-delegationwhen an override changes
the default value of a positional-only parameter.Closes #11148
-
Fixed a crash in
comparison-with-callablewhen comparing a lambda assigned as a class attribute.Closes #11175
-
too-many-linescould be reported at the line of a# pylint: disable=too-many-lines
pragma found in a previously linted module. Pragma positions are now reset between
modules, so the message is reported at line 1 (or at the current module's own pragma)
regardless of which files were linted before.Refs #11191
-
Fix a crash when a call unpacks a dictionary whose keys are not string
constants, e.g.copy.copy(**{-1: 1}).Closes #11222