Releases: pylint-dev/pylint
v2.13.5
-
Fix false positive regression in 2.13.0 for
used-before-assignmentfor
homonyms between variable assignments in try/except blocks and variables in
subscripts in comprehensions. -
lru-cache-decorating-methodhas been renamed tocache-max-size-noneand
will only be emitted whenmaxsizeisNone.Closes #6180
-
Fix false positive for
unused-importwhen disabling bothused-before-assignmentandundefined-variable.Closes #6089
-
Narrow the scope of the
unnecessary-ellipsischecker to:- functions & classes which contain both a docstring and an ellipsis.
- A body which contains an ellipsis
nodes.Exprnode & at least one other statement.
-
Fix false positive for
used-before-assignmentfor assignments taking place via
nonlocal declarations after an earlier type annotation.Closes #5394
-
Fix crash for
redefined-slots-in-subclasswhen the type of the slot is not a const or a string.Closes #6100
-
Only raise
not-callablewhen all the inferred values of a property are not callable.Closes #5931
-
Fix a false negative for
subclassed-final-classwhen a set of other messages were disabled.
v2.13.4
-
Fix false positive regression in 2.13.0 for
used-before-assignmentfor
homonyms between variable assignments in try/except blocks and variables in
a comprehension's filter.Closes #6035
-
Include
testing_pylintrcin source and wheel distributions.Closes #6028
-
Fix crash in
super-init-not-calledchecker when usingctypes.Union.Closes #6027
-
Fix crash for
unneccessary-ellipsischecker when an ellipsis is used inside of a container or a lambda expression.
v2.13.3
v2.13.2
-
Fix crash when subclassing a
namedtuple.Closes #5982
-
Fix false positive for
superfluous-parensfor patterns like
"return (a or b) in iterable".Closes #5803
-
Fix a false negative regression in 2.13.0 where
protected-accesswas not
raised on functions.Fixes #5989
-
Better error messages in case of crash if pylint can't write the issue template.
Refer to #5987
v2.13.1
-
Fix a regression in 2.13.0 where
used-before-assignmentwas emitted for
the usage of a nonlocal in a try block.Fixes #5965
-
Avoid emitting
raising-bad-typewhen there is inference ambiguity on
the variable being raised.Closes #2793
-
Loosen TypeVar default name pattern a bit to allow names with multiple uppercase
characters. E.g.HVACModeTorIPAddressT.Closes #5981
-
Fixed false positive for
unused-argumentwhen anonlocalname is used
in a nested function that is returned without being called by its parent.Closes #5187
-
Fix program crash for
modified_iterating-list/set/dictwhen the list/dict/set
being iterated through is a function call.Closes #5969
-
Don't emit
broken-noreturnandbroken-collections-callableerrors
insideif TYPE_CHECKINGblocks.
2.13.0
-
Add missing dunder methods to
unexpected-special-method-signaturecheck. -
No longer emit
no-memberin for loops that referenceselfif the binary operation that
started the for loop uses aselfthat is encapsulated in tuples or lists.Ref pylint-dev/astroid#1360
Closes #4826 -
Output better error message if unsupported file formats are used with
pyreverse.Closes #5950
-
Fix pyreverse diagrams type hinting for classmethods and staticmethods.
-
Fix pyreverse diagrams type hinting for methods returning None.
-
Fix matching
--notesoptions that end in a non-word character.Closes #5840
-
Updated the position of messages for class and function defintions to no longer cover
the complete definition. Only thedeforclass+ the name of the class/function
are covered.Closes #5466
-
using-f-string-in-unsupported-versionandusing-final-decorator-in-unsupported-versionmsgids
were renamed fromW1601andW1602toW2601andW2602. Disabling using these msgids will break.
This is done in order to restore consistency with the already existing msgids forapply-builtinand
basestring-builtinfrom the now deleted python 3K+ checker. There is now a check that we're not using
existing msgids or symbols from deleted checkers.Closes #5729
-
The line numbering for messages related to function arguments is now more accurate. This can
require some message disables to be relocated to updated positions. -
Add
--recursiveoption to allow recursive discovery of all modules and packages in subtree. Running pylint with
--recursive=yoption will check all discovered.pyfiles and packages found inside subtree of directory provided
as parameter to pylint.Closes #352
-
Add
modified-iterating-list,modified-iterating-dictandmodified-iterating-set,
emitted when items are added to or removed from respectively a list, dictionary or
set being iterated through.Closes #5348
-
Fix false-negative for
assignment-from-nonechecker using list.sort() method.closes #5722
-
New extension
import-private-name: indicate imports of external private packages
and objects (prefixed with_). It can be loaded usingload-plugins=pylint.extensions.private_import.Closes #5463
-
Fixed crash from
arguments-differandarguments-renamedwhen methods were
defined outside the top level of a class.Closes #5648
-
Removed the deprecated
check_docsextension. You can use thedocparamschecker
to get the checks previously included incheck_docs.Closes #5322
-
Added a
testutilextra require to the packaging, asgitpythonshould not be a dependency
all the time but is still required to use the primer helper code inpylint.testutil. You can
install it withpip install pylint[testutil].Closes #5486
-
Reinstated checks from the python3 checker that are still useful for python 3
(eq-without-hash). This is now in thepylint.extensions.eq_without_hashoptional
extension.Closes #5025
-
Fixed an issue where
ungrouped-importscould not be disabled without raising
useless-suppression.Ref #2366
-
Added several checkers to deal with unicode security issues
(seeTrojan Sources <https://trojansource.codes/>_ and
PEP 672 <https://www.python.org/dev/peps/pep-0672/>_ for details) that also
concern the readability of the code. In detail the following checks were added:-
bad-file-encodingchecks that the file is encoded in UTF-8 as suggested by
PEP8 <https://www.python.org/dev/peps/pep-0008/#id20>.
UTF-16 and UTF-32 arenot supported by Python <https://bugs.python.org/issue1503789>
at the moment. If this ever changes
invalid-unicode-codecchecks that they aren't used, to allow for backwards
compatibility. -
bidirectional-unicodechecks for bidirectional unicode characters that
could make code execution different than what the user expects. -
invalid-character-backspace,invalid-character-carriage-return,
invalid-character-sub,invalid-character-esc,
invalid-character-zero-width-spaceandinvalid-character-nul
to check for possibly harmful unescaped characters.
Closes #5281
-
-
Use the
tomlipackage instead oftomlto parse.tomlfiles.
Closes #5885
- Fix false positive - Allow unpacking of
selfin a subclass oftyping.NamedTuple.
Closes #5312
- Fixed false negative
unpacking-non-sequencewhen value is an empty list.
Closes #5707
-
Better warning messages for useless else or elif when a function returns early.
Closes #5614
-
Fixed false positive
consider-using-dict-comprehensionwhen creating a dict
using a list of tuples where key AND value vary depending on the same condition.Closes #5588
-
Fixed false positive for
global-variable-undefinedwhenglobalis used with a class nameCloses #3088
-
Fixed false positive for
unused-variablewhen anonlocalname is assigned as part of a multi-name assignment.Closes #3781
-
Fixed a crash in
unspecified-encodingchecker when providingNone
to themodeargument of anopen()call.Closes #5731
-
Fixed a crash involving a
NewTypenamed with an f-string.Closes #5770
Ref pylint-dev/astroid#1400 -
Improved
bad-open-modemessage when providingNoneto themode
argument of anopen()call.Closes #5733
-
Added
lru-cache-decorating-methodchecker with checks for the use offunctools.lru_cache
on class methods. This is unrecommended as it creates memory leaks by never letting the instance
getting garbage collected.Closes #5670
-
Fixed crash with recursion error for inference of class attributes that referenced
the class itself.Closes #5408
Ref pylint-dev/astroid#1392 -
Fixed false positive for
unused-argumentwhen a method overridden in a subclass
does nothing with the value of a keyword-only argument.Closes #5771
Ref pylint-dev/astroid#1382 -
The issue template for crashes is now created for crashes which were previously not covered
by this mechanism.Closes #5668
-
Rewrote checker for
non-ascii-name.
It now ensures all Python names are ASCII and also properly
checks the names of imports (non-ascii-module-import) as
well as file names (non-ascii-file-name) and emits their respective new warnings.Non ASCII characters could be homoglyphs (look alike characters) and hard to
enter on a non specialized keyboard.
SeeConfusable Characters in PEP 672 <https://www.python.org/dev/peps/pep-0672/#confusable-characters-in-identifiers>_ -
When run in parallel mode
pylintnow pickles the data passed to subprocesses with
thedillpackage. Thedillpackage has therefore been added as a dependency. -
An astroid issue where symlinks were not being taken into account
was fixedCloses #1470
Closes #3499
Closes #4302
Closes #4798
Closes #5081 -
Fix a crash in
unused-private-memberchecker when analyzing code using
type(self)in bound methods.Closes #5569
-
Optimize parsing of long lines when
missing-final-newlineis enabled.Closes #5724
-
Fix false positives for
used-before-assignmentfrom using named
expressions in a ternary operator test and using that expression as
a call argument. -
Fix false positive for
undefined-variablewhennamedtupleclass
attributes are used as return annotations.Closes #5568
-
Fix false negative for
undefined-variableand related variable messages
when the same undefined variable is used as a type annotation and is
accessed multiple times, or is used as a default argument to a function.Closes #5399
-
Pyreverse - add output in mermaidjs format
-
Emit
used-before-assignmentinstead ofundefined-variablewhen attempting
to access unused type annotations.Closes #5713
-
Added confidence level
CONTROL_FLOWfor warnings relying on assumptions
about control flow. -
used-before-assignmentnow considers that assignments in a try block
may not have occurred when the except or finally blocks are executed. -
Fixed false negative for
used-before-assignmentwhen a conditional
or context manager intervened before the try statement that suggested
it might fail.Closes #4045
-
Fixed false negative for
used-before-assignmentin finally blocks
if an except handler did not define the assignment that might have failed
in the try block. -
Fixed extremely long processing of long lines with comma's.
Closes #5483
-
Fixed crash on properties and inherited class methods when comparing them for
equality against an empty dict.Closes #5646
-
Fixed a false positive for
assigning-non-slotwhen the slotted class
defined__setattr__.Closes #3793
-
Fixed a false positive for
invalid-class-objectwhen the object
being assigned to the__class__attribute is uninferable. -
Fixed false positive for
used-before-assignmentwith self-referential type
annotation in conditional statements within class methods.Closes #5499
-
Add checker
redefined-slots-in-subclass: Emitted when a slot is redefined in a subclass.Closes #5617
-
Fixed false positive for
global-variable-not-assignedwhen thedelstatement is usedCloses #5333
-
By default, pylint does no longer take files starting with
.#into account. Those are
consideredemacs file locks. See
https://www.gnu.org/software/emacs/manual/html_node/elisp/File-Lock...
v2.12.2
-
Fixed a false positive for
unused-importwhere everything was not analyzed properly inside typing guards. -
Fixed a false-positive regression for
used-before-assignmentfor
typed variables in the body of class methods that reference the same classCloses #5342
-
Specified that the
ignore-pathsoption considers "" to represent a
windows directory delimiter instead of a regular expression escape
character. -
Fixed a crash with the
ignore-pathsoption when invoking the option
via the command line.Closes #5437
-
Fixed handling of Sphinx-style parameter docstrings with asterisks. These
should be escaped with by prepending a "".Closes #5406
-
Add
endLineandendColumnkeys to output ofJSONReporter.Closes #5380
-
Fixed handling of Google-style parameter specifications where descriptions
are on the line following the parameter name. These were generating
false positives formissing-param-doc.Closes #5452
-
Fix false negative for
consider-iterating-dictionaryduring membership checks encapsulated in iterables
ornot inchecksCloses #5323
-
unused-importnow check all ancestors for typing guardsCloses #5316
2.12.1
2.12.0
-
Upgrade astroid to 2.9.0
Closes #4982
-
Add ability to add
end_lineandend_columnto the--msg-templateoption.
With the standardTextReporterthis will add the line and column number of the
end of a node to the output of Pylint. If these numbers are unknown, they are represented
by an empty string. -
Introduced primer tests and a configuration tests framework. The helper classes available in
pylint/testutil/are still unstable and might be modified in the near future. -
Fix
install graphizmessage which isn't needed for puml output format. -
MessageTestof the unittesttestutilnow requires theconfidenceattribute
to match the expected value. If none is provided it is set toUNDEFINED. -
add_messageof the unittesttestutilnow actually handles thecol_offsetparameter
and allows it to be checked against actual output in a test. -
Fix a crash in the
check_elifextensions where an undetected if in a comprehension
with an if statement within a f-string resulted in an out of range error. The checker no
longer relies on counting if statements anymore and uses known if statements locations instead.
It should not crash on badly parsed if statements anymore. -
Fix
simplify-boolean-expressionwhen condition can be inferred as False.Closes #5200
-
Fix exception when pyreverse parses
property functionof a class. -
The functional
testutilsnow acceptend_linenoandend_column. Expected
output files without these will trigger aDeprecationWarning. Expected output files
can be easily updated with thepython tests/test_functional.py --update-functional-outputcommand. -
The functional
testutilsnow correctly check the distinction betweeenHIGHand
UNDEFINEDconfidence. Expected output files without defiendconfidencelevels will now
trigger aDeprecationWarning. Expected output files can be easily updated with the
python tests/test_functional.py --update-functional-outputcommand. -
The functional test runner now supports the option
min_pyver_end_positionto control on which python
versions theend_linenoandend_columnattributes should be checked. The default value is 3.8. -
Fix
accept-no-yields-docandaccept-no-return-docnot allowing missingyieldor
returndocumentation when a docstring is partially correctCloses #5223
-
Add an optional extension
consider-using-any-or-all: Emitted when aforloop only
produces a boolean and could be replaced byanyorallusing a generator. Also suggests
a suitable any or all statement.Closes #5008
-
Properly identify parameters with no documentation and add new message called
missing-any-param-docCloses #3799
-
Add checkers
overridden-final-method&subclassed-final-classCloses #3197
-
Fixed
protected-accessfor accessing of attributes and methods of inner classesCloses #3066
-
Added support for
ModuleNotFoundError(import-errorandno-name-in-module).
ModuleNotFoundErrorinherits fromImportErrorand was added in Python3.6 -
undefined-variablenow correctly flags variables which only receive a type annotations
and never get assigned a valueCloses #5140
-
undefined-variablenow correctly considers the line numbering and order of classes
used in metaclass declarationsCloses #4031
-
used-before-assignmentnow correctly considers references to classes as type annotation
or default values in first-level methodsCloses #3771
-
undefined-variableandunused-variablenow correctly trigger for assignment expressions
in functions defaultsFixes part of #3688
-
undefined-variablenow correctly triggers for assignment expressions in if ... else statements
This includes a basic form of control flow inference for if ... else statements using
constant boolean valuesCloses #3688
-
Added the
--enable-all-extensionscommand line option. It will load all available extensions
which can be listed by running--list-extensions -
Fix bug with importing namespace packages with relative imports
-
Improve and flatten
unused-wildcard-importmessageCloses #3859
-
In length checker,
len-as-conditionhas been renamed as
use-implicit-booleaness-not-lenin order to be consistent with
use-implicit-booleaness-not-comparison. -
Created new
UnsupportedVersionCheckerchecker class that includes checks for features
not supported by all versions indicated by apy-version.- Added
using-f-string-in-unsupported-versionchecker. Issued whenpy-version
is set to a version that does not support f-strings (< 3.6)
- Added
-
Fix
useless-super-delegationfalse positive when default keyword argument is a variable. -
Properly emit
duplicate-keywhen Enum members are duplicate dictionary keysCloses #5150
-
Use
py-versionsetting for alternative union syntax check (PEP 604),
instead of the Python interpreter version. -
Subclasses of
dictare regarded as reversible by thebad-reversed-sequencechecker
(Python 3.8 onwards).Closes #4981
-
Support configuring mixin class pattern via
mixin-class-rgx -
Added new checker
use-implicit-booleaness-not-comparison: Emitted when
collection literal comparison is being used to check for emptiness.Closes #4774
-
mising-param-docnow correctly parses asterisks for variable length and
keyword parametersCloses #3733
-
mising-param-docnow correctly handles Numpy parameter documentation without
explicit typingCloses #5222
-
pylintno longer crashes when checking assignment expressions within if-statementsCloses #5178
-
Update ``literal-comparison``` checker to ignore tuple literals
Closes #3031
-
Normalize the input to the
ignore-pathsoption to allow both Posix and
Windows pathsCloses #5194
-
Fix double emitting of
not-callableon inferrablepropertiesCloses #4426
-
self-cls-assignmentnow also considers tuple assignment -
Fix
missing-function-docstringnot being able to check__init__and other
magic methods even if theno-docstring-rgxsetting was set to do so -
Added
using-final-decorator-in-unsupported-versionchecker. Issued whenpy-version
is set to a version that does not supporttyping.final(< 3.8) -
Added configuration option
exclude-too-few-public-methodsto allow excluding
classes from themin-public-methodschecker.Closes #3370
-
The
--jobsparameter now fallbacks to 1 if the host operating system does not
have functioning shared semaphore implementation.Closes #5216
-
Fix crash for
unused-private-memberwhen checking private members on__class__Closes #5261
-
Crashes when a list is encountered in a toml configuration do not happen anymore.
Closes #4580
-
Moved
misplaced-comparison-constantto its own extensioncomparison_placement.
This checker was opinionated and now no longer a default. It can be reactived by adding
pylint.extensions.comparison_placementtoload-pluginsin your config.Closes #1064
-
A new
bad-configuration-sectionchecker was added that will emit for misplaced option
in pylint's top level namespace for toml configuration. Top-level dictionaries or option defined
in the wrong section will still silently not be taken into account, which is tracked in a
follow-up issue.Follow-up in #5259
-
Fix crash for
protected-accesson (outer) class traversal -
Added new checker
useless-with-lockto find incorrect usage of with statement and threading module locks.
Emitted whenwith threading.Lock():is used instead ofwith lock_instance:.Closes #5208
-
Make yn validator case insensitive, to allow for
TrueandFalsein config files. -
Fix crash on
open()calls when themodeargument is not a simple string.Partially closes #5321
-
Inheriting from a class that implements
__class_getitem__no longer raisesinherit-non-class. -
Pyreverse - Add the project root directory to sys.path
Closes #2479
-
Don't emit
consider-using-f-stringifpy-versionis set to Python <3.6.
f-stringswere added in Python3.6Closes #5019
-
Fix regression for
unspecified-encodingwithpathlib.Path.read_text()Closes #5029
-
Don't emit
consider-using-f-stringif the variables to be interpolated include a backslash -
Fixed false positive for
cell-var-from-loopwhen variable is used as the default
value for a keyword-only parameter.Closes #5012
-
Fix false-positive
undefined-variablewithLambda,IfExp, and
assignment expression. -
Fix false-positive
useless-suppressionforwrong-import-orderCloses #2366
-
Fixed
tomldependency issueCloses #5066
-
Fix false-positive
useless-suppressionforline-too-longCloses #4212
-
Fixed
invalid-namenot checking parameters of overwritten baseobjectmethodsCloses #3614
-
Fixed crash in
consider-using-f-stringifformatis not calledCloses #5058
-
Fix crash with
AssignAttrinif TYPE_CHECKINGblocks.Closes #5111
-
Improve node information for
invalid-nameon function argument. -
Prevent return type checkers being called on functions with ellipses as body
Closes #4736
-
Add
is_sys_guardandis_typing_guardhelper functions from astroid
topylint.checkers.utils. -
Fix regression on ClassDef inference
Closes #5030
Clos...