Full changelog¶
What's New in Pylint 2.12.2?¶
Release date: 2021-11-25
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 for
missing-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
What's New in Pylint 2.12.1?¶
Release date: 2021-11-25
Require Python
3.6.2to run pylint.Closes #5065
What's New in Pylint 2.12.0?¶
Release date: 2021-11-24
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.Closes #4412 #5287
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 betweenHIGHandUNDEFINEDconfidence. Expected output files without definedconfidencelevels will now trigger aDeprecationWarning. Expected output files can be easily updated with thepython 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 missingyieldorreturndocumentation 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.6undefined-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 defaultsRefs #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-extensionsFix bug with importing namespace packages with relative imports
Closes #2967 and #5131
Improve and flatten
unused-wildcard-importmessageCloses #3859
In length checker,
len-as-conditionhas been renamed asuse-implicit-booleaness-not-lenin order to be consistent withuse-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-versionis set to a version that does not support f-strings (< 3.6)
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-rgxAdded new checker
use-implicit-booleaness-not-comparison: Emitted when collection literal comparison is being used to check for emptiness.Closes #4774
missing-param-docnow correctly parses asterisks for variable length and keyword parametersCloses #3733
missing-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 literalsCloses #3031
Normalize the input to the
ignore-pathsoption to allow both Posix and Windows pathsCloses #5194
Fix double emitting of
not-callableon inferablepropertiesCloses #4426
self-cls-assignmentnow also considers tuple assignmentFix
missing-function-docstringnot being able to check__init__and other magic methods even if theno-docstring-rgxsetting was set to do soAdded
using-final-decorator-in-unsupported-versionchecker. Issued whenpy-versionis 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 addingpylint.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 traversalAdded 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.Fixes part of #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 backslashFixed 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 Closes #5036
Fix regression on Compare node inference
Closes #5048
Fix false-positive
isinstance-second-argument-not-valid-typewithtyping.Callable.Closes #3507 Closes #5087
It is now recommended to do
pylintdevelopment onPython3.8 or higher. This allows using the latestastparser.All standard jobs in the
pylintCI now run onPython3.8 by default. We still support python 3.6 and 3.7 and run tests for those interpreters.TypingCheckerFix false-negative for
deprecated-typing-aliasandconsider-using-aliaswithtyping.Type+typing.Callable.