Releases: pylint-dev/pylint
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
v3.2.0
What's new in Pylint 3.2.0?
Release date: 2024-05-14
Of note: a github
reporter, two new checks (possibly-used-before-assignment
and contextmanager-generator-missing-cleanup
), performance improvements, and an astroid
upgrade providing support for @overload
and .pyi
stubs.
New Features
-
Understand
six.PY2
andsix.PY3
for conditional imports.Closes #3501
-
A new
github
reporter has been added. This reporter returns the output ofpylint
in a format that
Github can use to automatically annotate code. Use it withpylint --output-format=github
on your Github Workflows.Closes #9443.
New Checks
-
Add check
possibly-used-before-assignment
when relying on names after anif/else
switch when one branch failed to define the name, raise, or return.Closes #1727
-
Checks for generators that use contextmanagers that don't handle cleanup properly.
Is meant to raise visibilty on the case that a generator is not fully exhausted and the contextmanager is not cleaned up properly.
A contextmanager must yield a non-constant value and not handle cleanup for GeneratorExit.
The using generator must attempt to use the yielded context valuewith x() as y
and not justwith x()
.Closes #2832
False Negatives Fixed
-
If and Try nodes are now checked for useless return statements as well.
Closes #9449.
-
Fix false negative for
property-with-parameters
in the case of parameters which arepositional-only
,keyword-only
,variadic positional
orvariadic keyword
.Closes #9584
False Positives Fixed
Performance Improvements
-
Ignored modules are now not checked at all, instead of being checked and then
ignored. This should speed up the analysis of large codebases which have
ignored modules.Closes #9442
-
ImportChecker's logic has been modified to avoid context files when possible. This makes it possible
to cache module searches on astroid and reduce execution times.Refs #9310.
-
An internal check for
trailing-comma-tuple
being enabled for a file or not is now
done once per file instead of once for each token.Refs #9608.