What's New in Pylint 3.3¶
:Release:3.3 :Date: 2024-09-20
Summary -- Release highlights¶
What's new in Pylint 3.3.9?¶
Release date: 2025-10-05
False Positives Fixed¶
Fix used-before-assignment / E0601 for PEP 695 type aliases and parameters.
Closes #9815 (#9815)
No longer flag undeprecated functions in
importlib.resourcesas deprecated.Closes #10593 (#10593)
Fix false positive
inconsistent-return-statementswhen usingquit()orexit()functions.Closes #10508 (#10508)
Fix false positive
undefined-variable(E0602) for for-loop variable shadowing patterns likefor item in item:when the variable was previously defined.Closes #10562 (#10562)
Other Bug Fixes¶
Fixed crash in
unnecessary-list-index-lookupwhen starting an enumeration using minus the length of an iterable inside a dict comprehension when the len call was only made in this dict comprehension, and not elsewhere. Also changed the approach, to use inference in all cases but the simple ones, so we don't have to fix crashes one by one for arbitrarily complex expressions in enumerate.Closes #10510 (#10510)
What's new in Pylint 3.3.8?¶
Release date: 2025-08-09
This patch release includes an exceptional fix for a false negative issue. For details, see: https://github.com/pylint-dev/pylint/pull/10482#issuecomment-3164514082
False Positives Fixed¶
Fix false positives for possibly-used-before-assignment / E0606 when variables are exhaustively assigned within a
matchblock.Closes #9668 (#9668)
Fix false positive for missing-raises-doc / W9006 and missing-yield-doc / W9013 when the method length is less than docstring-min-length.
Refs #10104 (#10104)
Fix a false positive for unused-variable / W0612 when multiple except handlers bind the same name under a try block.
Closes #10426 (#10426)
False Negatives Fixed¶
Fix false-negative for used-before-assignment / E0601 with
from __future__ import annotationsin function definitions.Refs #10482 (#10482)
Other Bug Fixes¶
What's new in Pylint 3.3.7?¶
Release date: 2025-05-04
False Positives Fixed¶
Comparisons between two calls to type() won't raise an unidiomatic-typecheck / C0123 warning anymore, consistent with the behavior applied only for
==previously.Closes #10161 (#10161)
Other Bug Fixes¶
Fixed a crash when importing a class decorator that did not exist with the same name as a class attribute after the class definition.
Closes #10105 (#10105)
Fix a crash caused by malformed format strings when using .format with keyword arguments.
Closes #10282 (#10282)
Using a slice as a class decorator now raises a not-callable / E1102 message instead of crashing. A lot of checks that dealt with decorators (too many to list) are now shortcut if the decorator can't immediately be inferred to a function or class definition.
Closes #10334 (#10334)
Other Changes¶
The algorithm used for no-member / E1101 suggestions is now more efficient and cuts the calculation when the distance score is already above the threshold.
Refs #10277 (#10277)
What's new in Pylint 3.3.6?¶
Release date: 2025-03-20
False Positives Fixed¶
Fix a false positive for used-before-assignment / E0601 when an inner function's return type annotation is a class defined at module scope.
Closes #9391 (#9391)
What's new in Pylint 3.3.5?¶
Release date: 2025-03-09
False Positives Fixed¶
Fix false positives for use-implicit-booleaness-not-comparison / C1803, use-implicit-booleaness-not-comparison-to-string / C1804 and use-implicit-booleaness-not-comparison-to-zero / C1805 when chained comparisons are checked.
Closes #10065 (#10065)
Fix a false positive for invalid-getnewargs-ex-returned / E0313 when the tuple or dict has been assigned to a name.
Closes #10208 (#10208)
Remove
getoptandoptparsefrom the list of deprecated modules.Closes #10211 (#10211)
Other Bug Fixes¶
Fixed conditional import x.y causing false positive possibly-used-before-assignment / E0606.
Closes #10081 (#10081)
Fix a crash when something besides a class is found in an except handler.
Closes #10106 (#10106)
Fixed raising invalid-name / C0103 when using camelCase for private methods with two leading underscores.
Closes #10189 (#10189)
Other Changes¶
Upload release assets to PyPI via Trusted Publishing.
Closes #10256 (#10256)
What's new in Pylint 3.3.4?¶
Release date: 2025-01-28
Other Bug Fixes¶
Fixes "skipped files" count calculation; the previous method was displaying an arbitrary number.
Closes #10073 (#10073)
Fixes a crash that occurred when pylint was run in a container on a host with cgroupsv2 and restrictions on CPU usage.
Closes #10103 (#10103)
Relaxed the requirements for isort so pylint can benefit from isort 6.
Closes #10203 (#10203)
What's new in Pylint 3.3.3?¶
Release date: 2024-12-23
False Positives Fixed¶
Fix false positives for undefined-variable / E0602 for classes using Python 3.12 generic type syntax.
Closes #9335 (#9335)
Fix a false positive for use-implicit-booleaness-not-len / C1802. No lint should be emitted for generators (
len()is not defined for generators).Refs #10100 (#10100)
Other Bug Fixes¶
Fix
Unable to import 'collections.abc' (import-error)on Python 3.13.1.Closes #10112 (#10112)
What's new in Pylint 3.3.2?¶
Release date: 2024-12-01
False Positives Fixed¶
Fix a false positive for potential-index-error / E0643 when an indexed iterable contains a starred element that evaluates to more than one item.
Closes #10076 (#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 (#10026)
What's new in Pylint 3.3.1?¶
Release date: 2024-09-24
False Positives Fixed¶
Fix regression causing some f-strings to not be inferred as strings.
Closes #9947 (#9947)
What's new in Pylint 3.3.0?¶
Release date: 2024-09-20
Changes requiring user actions¶
We migrated
symilarto 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 1should become--ignore-comments).Refs #9731 (#9731)
New Features¶
Add new declare-non-slot / E0245 error which reports when a class has a __slots__ member and a type hint on the class is not present in __slots__.
Refs #9499 (#9499)
New Checks¶
Added too-many-positional-arguments / R0917 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 (#9099)
Add using-exception-groups-in-unsupported-version / W2603 and using-generic-type-syntax-in-unsupported-version / W2604 for uses of Python 3.11+ or 3.12+ features on lower supported versions provided with
--py-version.Closes #9791 (#9791)
Add using-assignment-expression-in-unsupported-version / W2605 for uses of
:=(walrus operator) on Python versions below 3.8 provided with--py-version.Closes #9820 (#9820)
Add using-positional-only-args-in-unsupported-version / W2606 for uses of positional-only args on Python versions below 3.8 provided with
--py-version.Closes #9823 (#9823)
Add unnecessary-default-type-args / R6007 to the
typingextension to detect the use of unnecessary default type args fortyping.Generatorandtyping.AsyncGenerator.Refs #9938 (#9938)
False Negatives Fixed¶
Fix computation of never-returning function:
typing.Neveris handled in addition totyping.NoReturn, and priority is given to the explicit --never-returning-functions option.Closes #7565. (#7565)
Fix a false negative for await-outside-async / E1142 when await is inside Lambda.
Refs #9653 (#9653)
Fix a false negative for duplicate-argument-name / E0108 by including
positional-only,*argsand**kwargsarguments in the check.Closes #9669 (#9669)
Fix false negative for multiple-statements / C0321 when multiple statements are present on
elseandfinallylines oftry.Refs #9759 (#9759)
Fix false negatives when :py:func::isinstance does not have exactly two arguments. pylint now emits a too-many-function-args / E1121 or no-value-for-parameter / E1120 appropriately for
isinstance()calls.Closes #9847 (#9847)
Other Bug Fixes¶
--enable with --disable=all now produces an error, when an unknown msg code is used. Internal pylint messages are no longer affected by --disable=all.
Closes #9403 (#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 from
re.compileinstead.Closes #9680 (#9680)
Fix a bug where a
tox.inifile with pylint configuration was ignored and it exists in the current directory..cfgand.inifiles containing aPylintconfiguration 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--rcfileoption.Closes #9727 (#9727)
Improve file discovery for directories that are not python packages.
Closes #9764 (#9764)
Other Changes¶
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 / R0801 check) were renamed to 'symilar'.
Closes #9734 (#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 (#9925)