You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
implicit-str-concat is no longer emitted for an implicit concatenation of
a raw string with a non-raw one (e.g. r"\d" "\n"). Such literals cannot be
merged into a single string, so the concatenation is intentional rather than a
forgotten comma.
Fix a false positive for function-redefined (E0102) when reusing names that
match dummy-variables-rgx (such as _), which is common for pytest-bdd step definitions. This restores the behavior from before pylint
4.0.0; as a consequence the false negative fixed in #9894 is reintroduced for
functions whose name matches dummy-variables-rgx.
Fix a false positive for unused-variable where global variables matching dummy-variables-rgx were still reported as unused when allow-global-unused-variables was disabled.
Fix the suggestion of unnecessary-comprehension for a dict comprehension
that iterates a dict directly, e.g. {a: b for a, b in d}. Iterating a dict
yields its keys, so the suggestion is now dict(d.keys()) instead of the
incorrect dict(d), which would simply copy d.
Fix a crash in consider-using-enumerate when the for loop target is an attribute (e.g. for self.idx in range(len(x))) rather than a simple variable name.
Fix add_message silently overwriting an explicit col_offset=0 (or any other zero-valued line/end_lineno/end_col_offset) with the AST node's value. The internal _add_one_message helper used a falsey check (if not col_offset:) to detect an omitted argument, which incorrectly treated a legitimate 0 the same as None. It now uses an identity check against None.
Fix a crash in the variables checker when NotImplemented is used as the test of an if statement, which raised a TypeError in a boolean context on Python 3.14.
Fix a crash in the variables checker when a class declares a metaclass whose
attribute-access chain does not bottom out at a name (e.g. class C(metaclass=None._)).
Originally reported as pylint-dev/astroid#3066.
Fix a crash in the name checker when a chained assignment of a TypeAlias
value has a non-name target such as a Subscript (for example a[0] = b = TypeAlias).
Allow digits in ParamSpec and TypeVarTuple names for invalid-name check.
The default paramspec-rgx and typevartuple-rgx patterns rejected names
containing digits (e.g. Ec2P, S3Ts), emitting a false invalid-name
(C0103). Allow digits in the lowercase segments, consistent with the typevar and typealias patterns.
The duplicate-code checker no longer runs when its message (R0801) is disabled, even if reports=yes is set. Previously, the checker's report (RP0801) would cause the expensive similarity computation to run regardless.
Coverage variation is the difference between the coverage for the head and common ancestor commits of the pull request branch: <coverage of head commit> - <coverage of common ancestor commit>
Diff coverage is the percentage of lines that are covered by tests out of the coverable lines that the pull request added or modified: <covered lines added or modified>/<coverable lines added or modified> * 100%
NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer TIP This summary will be updated as you push new changes.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
4.0.5→4.0.6Release Notes
pylint-dev/pylint (pylint)
v4.0.6Compare Source
What's new in Pylint 4.0.6?
Release date: 2026-06-14
False Positives Fixed
implicit-str-concatis no longer emitted for an implicit concatenation ofa raw string with a non-raw one (e.g.
r"\d" "\n"). Such literals cannot bemerged into a single string, so the concatenation is intentional rather than a
forgotten comma.
Closes #6663
Fix a false positive for
invalid-name(C0103) where the defaulttypevar-rgxrejectedTypeVarnames containing digits, such asEc2T.Closes #8499
Fix a false positive for
too-many-argumentsin (non-static) methods and classmethods.Closes #8675
Fix a false positive for
no-memberwhen a value is inferred to severalpossible types and at least one of them defines a dynamic
__getattr__.Closes #9833
Fix a false positive for
function-redefined(E0102) when reusing names thatmatch
dummy-variables-rgx(such as_), which is common forpytest-bddstep definitions. This restores the behavior from before pylint4.0.0; as a consequence the false negative fixed in #9894 is reintroduced for
functions whose name matches
dummy-variables-rgx.Closes #10665
Fix
undefined-variablefalse positive when a name used as ametaclassargument in a nested class is referenced again later in the module.
Closes #10823
Fix a false positive for
unused-variablewhere global variables matchingdummy-variables-rgxwere still reported as unused whenallow-global-unused-variableswas disabled.Closes #10890
Fix a false positive for
bad-dunder-namewhen there is a user-defined__suppress_context__attribute on exception subclasses.Closes #10960
Fix
used-before-assignmentfalse positive for names bound byfrom X import *in every branch of anif/elif/elsechain.Refs #10980
Check for metaclass call signature when evaluating arguments of a class call.
Closes #11032
Fix false positive
method-hiddenwhencached_propertyis imported directly withfrom functools import cached_property.Refs #11037
Other Bug Fixes
Fix the suggestion of
unnecessary-comprehensionfor a dict comprehensionthat iterates a dict directly, e.g.
{a: b for a, b in d}. Iterating a dictyields its keys, so the suggestion is now
dict(d.keys())instead of theincorrect
dict(d), which would simply copyd.Closes #8256
Fix a crash in
consider-using-enumeratewhen theforloop target is an attribute (e.g.for self.idx in range(len(x))) rather than a simple variable name.Closes #10099
Fix crash when checking
attribute-defined-outside-initon classes that inherit from a base class pylint cannot fully analyze.Closes #10892
Fix
add_messagesilently overwriting an explicitcol_offset=0(or any other zero-valuedline/end_lineno/end_col_offset) with the AST node's value. The internal_add_one_messagehelper used a falsey check (if not col_offset:) to detect an omitted argument, which incorrectly treated a legitimate0the same asNone. It now uses an identity check againstNone.Refs #11020
Fix a crash in the name checker when a non-constant value is passed as the
covariantorcontravariantargument of aTypeVar.Closes #11022
Fix a crash in the variable checker when a name resolves to a dataclass-synthesized
__init__, which has no line number.Closes #11023
Fix a crash in the variables checker when
NotImplementedis used as the test of anifstatement, which raised aTypeErrorin a boolean context on Python 3.14.Closes #11025
Avoided a crash from the implicit booleaness checker for
len()calls without arguments.Closes #11028
Fix a crash in the variables checker when a class declares a metaclass whose
attribute-access chain does not bottom out at a name (e.g.
class C(metaclass=None._)).Originally reported as
pylint-dev/astroid#3066.Refs #11031
Fix a crash in the name checker when a chained assignment of a
TypeAliasvalue has a non-name target such as a
Subscript(for examplea[0] = b = TypeAlias).Closes #11056
Fix a crash in the deprecated checker when
__import__is called with anon-string constant argument (for example
__import__(1)).Closes #11059
Avoid crashing when enum member inference fails while checking enum subclasses.
Closes #11069
Prevent a crash in
unexpected-keyword-arganalysis wheninfer_call_result()raisesInferenceErrorwhile inspectingdecorator return signatures.
Closes #11070
Fix a crash in the typecheck checker when a class uses a non-class object
(for example a function) as its
metaclass=argument.Closes #11071
Allow digits in ParamSpec and TypeVarTuple names for
invalid-namecheck.The default
paramspec-rgxandtypevartuple-rgxpatterns rejected namescontaining digits (e.g.
Ec2P,S3Ts), emitting a falseinvalid-name(C0103). Allow digits in the lowercase segments, consistent with the
typevarandtypealiaspatterns.Closes #11090
Performance Improvements
The duplicate-code checker no longer runs when its message (R0801) is disabled, even if
reports=yesis set. Previously, the checker's report (RP0801) would cause the expensive similarity computation to run regardless.Closes #3443
Configuration
📅 Schedule: (UTC)
🚦 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 was generated by Mend Renovate. View the repository job log.