Releases: pylint-dev/pylint
v3.3.2
False Positives Fixed
-
Fix a false positive for
potential-index-error
when an indexed iterable
contains a starred element that evaluates to more than one item.Closes #10076
Other Bug Fixes
-
Fixes the issue with --source-root option not working when the source files are in a subdirectory of the source root (e.g. when using a /src layout).
Closes #10026
v3.3.1
v3.3.0
Release date: 2024-09-20
Changes requiring user actions
-
We migrated
symilar
to argparse, from getopt, so the error and help output changed
(for the better). We exit with 2 instead of sometime 1, sometime 2. The error output
is not captured by the runner anymore. It's not possible to use a value for the
boolean options anymore (--ignore-comments 1
should become--ignore-comments
).Refs #9731
New Features
-
Add new
declare-non-slot
error which reports when a class has a__slots__
member and a type hint on the class is not present in__slots__
.Refs #9499
New Checks
-
Added
too-many-positional-arguments
to allow distinguishing the configuration for too many
total arguments (with keyword-only params specified after*
) from the configuration
for too many positional-or-keyword or positional-only arguments.As part of evaluating whether this check makes sense for your project, ensure you
adjust the value of--max-positional-arguments
.Closes #9099
-
Add
using-exception-groups-in-unsupported-version
and
using-generic-type-syntax-in-unsupported-version
for uses of Python 3.11+ or
3.12+ features on lower supported versions provided with--py-version
.Closes #9791
-
Add
using-assignment-expression-in-unsupported-version
for uses of:=
(walrus operator)
on Python versions below 3.8 provided with--py-version
.Closes #9820
-
Add
using-positional-only-args-in-unsupported-version
for uses of positional-only args on
Python versions below 3.8 provided with--py-version
.Closes #9823
-
Add
unnecessary-default-type-args
to thetyping
extension to detect the use
of unnecessary default type args fortyping.Generator
andtyping.AsyncGenerator
.Refs #9938
False Negatives Fixed
-
Fix computation of never-returning function:
Never
is handled in addition toNoReturn
, and priority is given to the explicit--never-returning-functions
option.Closes #7565.
-
Fix a false negative for
await-outside-async
when await is inside Lambda.Refs #9653
-
Fix a false negative for
duplicate-argument-name
by includingpositional-only
,*args
and**kwargs
arguments in the check.Closes #9669
-
Fix false negative for
multiple-statements
when multiple statements are present onelse
andfinally
lines oftry
.Refs #9759
-
Fix false negatives when
isinstance
does not have exactly two arguments.
pylint now emits atoo-many-function-args
orno-value-for-parameter
appropriately forisinstance
calls.Closes #9847
Other Bug Fixes
-
--enable
with--disable=all
now produces an error, when an unknown msg code is used. Internalpylint
messages are no longer affected by--disable=all
.Closes #9403
-
Impossible to compile regexes for paths in the configuration or argument given to pylint won't crash anymore but
raise an argparse error and display the error message fromre.compile
instead.Closes #9680
-
Fix a bug where a
tox.ini
file with pylint configuration was ignored and it exists in the current directory..cfg
and.ini
files containing aPylint
configuration may now use a section named[pylint]
. This enhancement impacts the scenario where these file types are used as defaults when they are present and have not been explicitly referred to, using the--rcfile
option.Closes #9727
-
Improve file discovery for directories that are not python packages.
Closes #9764
Other Changes
-
Remove support for launching pylint with Python 3.8.
Code that supports Python 3.8 can still be linted with the--py-version=3.8
setting.Refs #9774
-
Add support for Python 3.13.
Refs #9852
Internal Changes
-
All variables, classes, functions and file names containing the word 'similar', when it was,
in fact, referring to 'symilar' (the standalone program for the duplicate-code check) were renamed
to 'symilar'.Closes #9734
-
Remove old-style classes (Python 2) code and remove check for new-style class since everything is new-style in Python 3. Updated doc for exception checker to remove reference to new style class.
Refs #9925
v3.2.7
What's new in Pylint 3.2.7?
Release date: 2024-08-31
False Positives Fixed
-
Fixed a false positive
unreachable
forNoReturn
coroutine functions.Closes #9840
Other Bug Fixes
-
Fix crash in refactoring checker when calling a lambda bound as a method.
Closes #9865
-
Fix a crash in
undefined-loop-variable
when providing theiterable
argument toenumerate()
.Closes #9875
-
Fix to address indeterminacy of error message in case a module name is same as another in a separate namespace.
Refs #9883
v3.2.6
What's new in Pylint 3.2.6?
Release date: 2024-07-21
False Positives Fixed
-
Quiet false positives for
unexpected-keyword-arg
when pylint cannot
determine which of two or more dynamically defined classes is being instantiated.Closes #9672
-
Fix a false positive for
missing-param-doc
where a method which is decorated withtyping.overload
was expected to have a docstring specifying its parameters.Closes #9739
-
Fix a regression that raised
invalid-name
on class attributes merely
overriding invalid names from an ancestor.Closes #9765
-
Treat
assert_never()
the same way when imported fromtyping_extensions
.Closes #9780
-
Fix a false positive for
consider-using-min-max-builtin
when the assignment target is an attribute.Refs #9800
Other Bug Fixes
v3.2.5
v3.2.4
What's new in Pylint 3.2.4?
Release date: 2024-06-26
False Positives Fixed
-
Prevent emitting
possibly-used-before-assignment
when relying on names
only potentially not defined in conditional blocks guarded by functions
annotated withtyping.Never
ortyping.NoReturn
.Closes #9674
Other Bug Fixes
-
Fixed a crash when the lineno of a variable used as an annotation wasn't available for
undefined-variable
.Closes #8866
-
Fixed a crash when the
start
value in anenumerate
was non-constant and impossible to infer
(like inenumerate(apples, start=int(random_apple_index)
) forunnecessary-list-index-lookup
.Closes #9078
-
Fixed a crash in
symilar
when the-d
or-i
short option were not properly recognized.
It's still impossible to do-d=1
(you must do-d 1
).Closes #9343
v3.2.3
False Positives Fixed
-
Classes with only an Ellipsis (
...
) in their body do not trigger 'multiple-statements'
anymore if they are inlined (in accordance with black's 2024 style).Closes #9398
-
Fix a false positive for
redefined-outer-name
when there is a name defined in an exception-handling block which shares the same name as a local variable that has been defined in a function body.Closes #9671
-
Fix a false positive for
use-yield-from
when using the return value from theyield
atom.Closes #9696
v3.2.2
v3.2.1
What's new in Pylint 3.2.1?
Release date: 2024-05-18
False Positives Fixed
-
Exclude if/else branches containing terminating functions (e.g.
sys.exit()
)
frompossibly-used-before-assignment
checks.Closes #9627
-
Don't emit
typevar-name-incorrect-variance
warnings for PEP 695 style TypeVars.
The variance is inferred automatically by the type checker.
Adding_co
or_contra
suffix can help to reason about TypeVar.Refs #9638
-
Fix a false positive for
possibly-used-before-assignment
when using
typing.assert_never()
(3.11+) to indicate exhaustiveness.Closes #9643
Other Bug Fixes
-
Fix a false negative for
--ignore-patterns
when the directory to be linted is specified using a dot(.
) and all files are ignored instead of only the files whose name begin with a dot.Closes #9273
-
Restore "errors / warnings by module" section to report output (with
-ry
).Closes #9145
-
trailing-comma-tuple
should now be correctly emitted when it was disabled globally
but enabled via local message control, after removal of an over-optimisation.Refs #9608
-
Add
--prefer-stubs=yes
option to opt-in to the astroid 3.2 feature
that prefers.pyi
stubs over same-named.py
files. This has the
potential to reduceno-member
errors but at the cost of more errors
such asnot-an-iterable
from function bodies appearing as...
.Defaults to
no
.
Internal Changes
-
Update astroid version to 3.2.1. This solves some reports of
RecursionError
and also makes the prefer .pyi stubs feature in astroid 3.2.0 opt-in
with the aforementioned--prefer-stubs=y
option.Refs #9139