chore(deps): update dependency pylint to v4 #384
Reference in New Issue
Block a user
No description provided.
Delete Branch "renovate/pylint-4.x"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
This PR contains the following updates:
<4.0.0,>=3.3.3
-><4.1.0,>=4.0.0
Release Notes
pylint-dev/pylint (pylint)
v4.0.0
Compare Source
Pylint now supports Python 3.14.
Pylint's inference engine (
astroid
) is now much more precise,understanding implicit booleanness and ternary expressions. (Thanks @zenlyj!)
Consider this example:
The required
astroid
version is now 4.0.0. See the astroid changelog for additional fixes, features, and performance improvements applicable to pylint.invalid-name
at the module level was patchy. Now,module-level constants that are reassigned are treated as variables and checked
against
--variable-rgx
rather than--const-rgx
. Module-level lists,sets, and objects can pass against either regex.
Here,
LIMIT
is reassigned, so pylint only uses--variable-rgx
:If this is undesired, refactor using exclusive assignment so that it is
evident that this assignment happens only once:
Lists, sets, and objects still pass against either
const-rgx
orvariable-rgx
even if reassigned, but are no longer completely skipped:
Remember to adjust the regexes and allow lists to your liking.
Breaking Changes
invalid-name
now distinguishes module-level constants that are assigned only oncefrom those that are reassigned and now applies
--variable-rgx
to the latter. Valuesother than literals (lists, sets, objects) can pass against either the constant or
variable regexes (e.g. "LOGGER" or "logger" but not "LoGgEr").
Remember that
--good-names
or--good-names-rgxs
can be provided to explicitlyallow good names.
Closes #3585
The unused
pylintrc
argument toPyLinter.__init__()
is deprecatedand will be removed.
Refs #6052
Commented out code blocks such as
# bar() # TODO: remove dead code
will no longer emitfixme
.Refs #9255
pyreverse
Run
was changed to no longer callsys.exit()
in its__init__
.You should now call
Run(args).run()
which will return the exit code instead.Having a class that always raised a
SystemExit
exception was considered a bug.Normal usage of pyreverse through the CLI will not be affected by this change.
Refs #9689
The
suggestion-mode
option was removed, as pylint now always emits user-friendly hints insteadof false-positive error messages. You should remove it from your conf if it's defined.
Refs #9962
The
async.py
checker module has been renamed toasync_checker.py
sinceasync
is a Python keywordand cannot be imported directly. This allows for better testing and extensibility of the async checker functionality.
Refs #10071
The message-id of
continue-in-finally
was changed fromE0116
toW0136
. The warning isnow emitted for every Python version since it will raise a syntax warning in Python 3.14.
See PEP 765 - Disallow return/break/continue that exit a finally block.
Refs #10480
Removed support for
nmp.NaN
alias fornumpy.NaN
being recognized in ':ref:nan-comparison
'. Usenp
ornumpy
instead.Refs #10583
Version requirement for
isort
has been bumped to >=5.0.0.The internal compatibility for older
isort
versions exposed viapylint.utils.IsortDriver
hasbeen removed.
Refs #10637
New Features
comparison-of-constants
now uses the unicode from the ast instead of reformatting fromthe node's values preventing some bad formatting due to
utf-8
limitation. The message now uses"
instead of'
to better work with what the python ast returns.Refs #8736
Enhanced pyreverse to properly distinguish between UML relationship types (association, aggregation, composition) based on object ownership semantics. Type annotations without assignment are now treated as associations, parameter assignments as aggregations, and object instantiation as compositions.
Closes #9045
Closes #9267
The
fixme
check can now search through docstrings as well as comments, by usingcheck-fixme-in-docstring = true
in the[tool.pylint.miscellaneous]
section.Closes #9255
The
use-implicit-booleaness-not-x
checks now distinguish between comparisonsused in boolean contexts and those that are not, enabling them to provide more accurate refactoring suggestions.
Closes #9353
The verbose option now outputs the filenames of the files that have been checked.
Previously, it only included the number of checked and skipped files.
Closes #9357
colorized reporter now colorizes messages/categories that have been configured as
fail-on
in red inverse.This makes it easier to quickly find the errors that are causing pylint CI job failures.
Closes #9898
Enhanced support for @property decorator in pyreverse to correctly display return types of annotated properties when generating class diagrams.
Closes #10057
Add --max-depth option to pyreverse to control diagram complexity. A depth of 0 shows only top-level packages, 1 shows one level of subpackages, etc.
This helps manage visualization of large codebases by limiting the depth of displayed packages and classes.
Refs #10077
Handle deferred evaluation of annotations in Python 3.14.
Closes #10149
Enhanced pyreverse to properly detect aggregations for comprehensions (list, dict, set, generator).
Closes #10236
pyreverse
: add support for colorized output when using output formatmmd
(MermaidJS) andhtml
.Closes #10242
pypy 3.11 is now officially supported.
Refs #10287
Add support for Python 3.14.
Refs #10467
Add naming styles for
ParamSpec
andTypeVarTuple
that align with theTypeVar
style.Refs #10541
New Checks
Add
match-statements
checker and the following message:bare-name-capture-pattern
.This will emit an error message when a name capture pattern is used in a match statement which would make the remaining patterns unreachable.
This code is a SyntaxError at runtime.
Closes #7128
Add new check
async-context-manager-with-regular-with
to detect async context managers used with regularwith
statements instead ofasync with
.Refs #10408
Add
break-in-finally
warning. Usingbreak
inside thefinally
clausewill raise a syntax warning in Python 3.14.
See
PEP 765 - Disallow return/break/continue that exit a finally block <https://peps.python.org/pep-0765/>
_.Refs #10480
Add new checks for invalid uses of class patterns in :keyword:
match
.invalid-match-args-definition
is emitted if :py:data:object.__match_args__
isn't a tuple of strings.too-many-positional-sub-patterns
if there are more positional sub-patterns than specified in :py:data:object.__match_args__
.multiple-class-sub-patterns
if there are multiple sub-patterns for the same attribute.Refs #10559
Add additional checks for suboptimal uses of class patterns in :keyword:
match
.match-class-bind-self
is emitted if a name is bound toself
instead ofusing an
as
pattern.match-class-positional-attributes
is emitted if a class pattern has positionalattributes when keywords could be used.
Refs #10587
Add a
consider-math-not-float
message.float("nan")
andfloat("inf")
are slowerthan their counterpart
math.inf
andmath.nan
by a factor of 4 (notwithstandingthe initial import of math) and they are also not well typed when using mypy.
This check also catches typos in float calls as a side effect.
The :ref:
pylint.extensions.code_style
need to be activated for this check to work.Refs #10621
False Positives Fixed
Fix a false positive for
used-before-assignment
when a variable defined underan
if
and via a named expression (walrus operator) is used later when guardedunder the same
if
test.Closes #10061
Fix :ref:
no-name-in-module
for members ofconcurrent.futures
with Python 3.14.Closes #10632
False Negatives Fixed
Fix false negative for
used-before-assignment
when aTYPE_CHECKING
import is used as a type annotation prior to erroneous usage.Refs #8893
Match cases are now counted as edges in the McCabe graph and will increase the complexity accordingly.
Refs #9667
Check module-level constants with type annotations for
invalid-name
.Remember to adjust
const-naming-style
orconst-rgx
to your liking.Closes #9770
Fix false negative where function-redefined (E0102) was not reported for functions with a leading underscore.
Closes #9894
We now raise a
logging-too-few-args
for format string with nointerpolation arguments at all (i.e. for something like
logging.debug("Awaiting process %s")
or
logging.debug("Awaiting process {pid}")
). Previously we did not raise for such case.Closes #9999
Fix false negative for
used-before-assignment
when a function is defined inside aTYPE_CHECKING
guard block and used later.Closes #10028
Fix a false negative for
possibly-used-before-assignment
when a variable is conditionally definedand later assigned to a type-annotated variable.
Closes #10421
Fix false negative for
deprecated-module
when a__import__
method is used instead ofimport
sentence.Refs #10453
Count match cases for
too-many-branches
check.Refs #10542
Fix false-negative where :ref:
unused-import
was not reported for names referenced in a precedingglobal
statement.Refs #10633
Other Bug Fixes
When displaying unicode with surrogates (or other potential
UnicodeEncodeError
),pylint will now display a '?' character (using
encode(encoding="utf-8", errors="replace")
)instead of crashing. The functional tests classes are also updated to handle this case.
Closes #8736
Fixed unidiomatic-typecheck only checking left-hand side.
Closes #10217
Fix a crash caused by malformed format strings when using
.format
with keyword arguments.Closes #10282
Fix false positive
inconsistent-return-statements
when usingquit()
orexit()
functions.Closes #10508
Fix a crash in :ref:
nested-min-max
when usingbuiltins.min
orbuiltins.max
instead of
min
ormax
directly.Closes #10626
Fixed a crash in :ref:
unnecessary-dict-index-lookup
when the index of an enumerated listwas deleted inside a for loop.
Closes #10627
Other Changes
Remove support for launching pylint with Python 3.9.
Code that supports Python 3.9 can still be linted with the
--py-version=3.9
setting.Refs #10405
Internal Changes
Modified test framework to allow for different test output for different Python versions.
Refs #10382
Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR has been generated by Renovate Bot.