Full changelog¶
What's New in Pylint 2.14.5?¶
Release date: 2022-07-17
Fixed a crash in the
undefined-loop-variablecheck whenenumerate()is used in a ternary expression.Closes #7131
Fixed handling of
--as separator between positional arguments and flags.Closes #7003
Fixed the disabling of
fixmeand its interaction withuseless-suppression.Allow lists of default values in parameter documentation for
Numpystyle.Closes #4035
What's New in Pylint 2.14.4?¶
Release date: 2022-06-29
The
differing-param-doccheck was triggered by positional only arguments.Closes #6950
Fixed an issue where scanning . directory recursively with
--ignore-path=^path/to/diris not ignoring the path/to/dir directory.Closes #6964
Fixed regression that didn't allow quoted
init-hooksin option files.Closes #7006
Fixed a false positive for
modified-iterating-dictwhen updating an existing key.Closes #6179
Fixed an issue where many-core Windows machines (>~60 logical processors) would hang when using the default jobs count.
Closes #6965
Fixed an issue with the recognition of
setup.cfgfiles. Only.cfgfiles that are exactly namedsetup.cfgrequire section names that start withpylint..Closes #3630
Don't report
import-private-namefor relative imports.Closes #7078
What's New in Pylint 2.14.3?¶
Release date: 2022-06-18
Fixed two false positives for
bad-super-callfor calls that refer to a non-direct parent.Closes #4922, Closes #2903
Fixed a false positive for
useless-super-delegationfor subclasses that specify the number of of parameters against a parent that uses a variadic argument.Closes #2270
Allow suppressing
undefined-loop-variableandundefined-variablewithout raisinguseless-suppression.Fixed false positive for
undefined-variablefor__class__in inner methods.Closes #4032
What's New in Pylint 2.14.2?¶
Release date: 2022-06-15
Fixed a false positive for
unused-variablewhen a function returns anargparse.Namespaceobject.Closes #6895
Avoided raising an identical
undefined-loop-variablemessage twice on the same line.Don't crash if
lint.run._query_cpu()is run within a Kubernetes Pod, that has only a fraction of a cpu core assigned. Just go with one process then.Closes #6902
Fixed a false positive in
consider-using-f-stringif the left side of a%is not a string.Closes #6689
Fixed a false positive in
unnecessary-list-index-lookupandunnecessary-dict-index-lookupwhen the subscript is updated in the body of a nested loop.Closes #6818
Fixed an issue with multi-line
init-hookoptions which did not record the line endings.Closes #6888
Fixed a false positive for
used-before-assignmentwhen a try block returns but an except handler defines a name via type annotation.--errors-onlyno longer enables previously disabled messages. It was acting as "emit all and only error messages" without being clearly documented that way.Closes #6811
What's New in Pylint 2.14.1?¶
Release date: 2022-06-06
Avoid reporting
unnecessary-dict-index-lookuporunnecessary-list-index-lookupwhen the index lookup is part of a destructuring assignment.Closes #6788
Fixed parsing of unrelated options in
tox.ini.Closes #6800
Fixed a crash when linting
__new__()methods that return a call expression.Closes #6805
Don't crash if we can't find the user's home directory.
Closes #6802
Fixed false positives for
unused-importwhen aliasingtypinge.g. astand guarding imports undert.TYPE_CHECKING.Closes #3846
Fixed a false positive regression in 2.13 for
used-before-assignmentwhere it is safe to rely on a name defined only in anexceptblock because theelseblock returned.Closes #6790
Fixed the use of abbreviations for some special options on the command line.
Closes #6810
Fix a crash in the optional
pylint.extensions.private_importextension.Closes #6624
bad-option-value(E0012) is now a warningunknown-option-value(W0012). Deleted messages that do not exist anymore in pylint now raiseuseless-option-value(R0022) instead ofbad-option-value. This allows to distinguish between genuine typos and configuration that could be cleaned up. Existing message disables forbad-option-valuewill still work on both new messages.Refs #6794
What's New in Pylint 2.14.0?¶
Release date: 2022-06-01
The refactoring checker now also raises 'consider-using-generator' messages for
max(),min()andsum().Refs #6595
We have improved our recognition of inline disable and enable comments. It is now possible to disable
bad-option-valueinline (as long as you disable it before the bad option value is raised, i.e.disable=bad-option-value,bad-messagenotdisable=bad-message,bad-option-value) as well as certain other previously unsupported messages.Closes #3312
Fixed a crash in the
unused-private-memberchecker involving chained private attributes.Closes #6709
Added new checker
comparison-of-constants.Closes #6076
pylint.pyreverse.ASTWalkerhas been removed, as it was only used internally by a single child class.Refs #6712
pyreverse: Resolving and displaying implemented interfaces that are defined by the__implements__attribute has been deprecated and will be removed in 3.0.Refs #6713
Fix syntax for return type annotations in MermaidJS diagrams produced with
pyreverse.Closes #6467
Fix type annotations of class and instance attributes using the alternative union syntax in
pyreversediagrams.Fix
unexpected-special-method-signaturefalse positive for__init_subclass__methods with one or more arguments.Closes #6644
Started ignoring underscore as a local variable for
too-many-locals.Closes #6488
Improved wording of the message of
deprecated-moduleCloses #6169
Pylintnow requires Python 3.7.2 or newer to run.Closes #4301
BaseCheckerclasses now require thelinterargument to be passed.Fix a failure to respect inline disables for
fixmeoccurring on the last line of a module when pylint is launched with--enable=fixme.Update
invalid-slots-objectmessage to show bad object rather than its inferred value.Closes #6101
The main checker name is now
maininstead ofmaster. The configuration does not need to be updated as sections' name are optional.Closes #5467
Don't report
useless-super-delegationfor the__hash__method in classes that also override the__eq__method.Closes #3934
Added new checker
typevar-name-mismatch: TypeVar must be assigned to a variable with the same name as its name argument.Closes #5224
Pylint can now be installed with an extra-require called
spelling(pip install pylint[spelling]). This will addpyenchantto pylint's dependencies. You will still need to install the requirements forpyenchant(theenchantlibrary and any dictionaries) yourself. You will also need to set thespelling-dictoption.Refs #6462
Removed the
assign-to-new-keywordmessage as there are no new keywords in the supported Python versions any longer.Closes #4683
Fixed a crash in the
not-an-iterablechecker involving multiple starred expressions inside a call.Closes #6372
Fixed a crash in the
docparamsextension involving raising the result of a function.Fixed failure to enable
deprecated-moduleafter adisable=allby makingImportsCheckersolely responsible for emittingdeprecated-moduleinstead of sharing responsibility withStdlibChecker. (This could have led to double messages.)The
no-init(W0232) warning has been removed. It's ok to not have an__init__in a class.Closes #2409
The
configattribute ofBaseCheckerhas been deprecated. You can usechecker.linter.configto access the global configuration object instead of a checker-specific object.Refs #5392
The
levelattribute ofBaseCheckerhas been deprecated: everything is now displayed in--help, all the time.Refs #5392
The
options_providersattribute ofArgumentsManagerhas been deprecated.Refs #5392
The
option_groupsattribute ofPyLinterhas been deprecated.Refs #5392
All
Interfaceclasses inpylint.interfaceshave been deprecated. You can subclass the respective normal classes to get the same behaviour. The__implements__functionality was based on a rejected PEP from 2001: https://peps.python.org/pep-0245/Closes #2287
The
set_optionmethod ofBaseCheckerhas been deprecated. You can usechecker.linter.set_optionto set an option on the global configuration object instead of a checker-specific object.Refs #5392
implicit-str-concatwill now be raised on calls likeopen("myfile.txt" "a+b")too.Closes #6441
The
configattribute ofPyLinteris now of theargparse.Namespacetype instead ofoptparse.Values.Refs #5392
MapReduceMixinhas been deprecated.BaseCheckernow implementsget_map_dataandreduce_map_data. If a checker actually needs to reduce data it should defineget_map_dataas returning something different thanNoneand let itsreduce_map_datahandle a list of the types returned byget_map_data. An example can be seen by looking atpylint/checkers/similar.py.UnsupportedActionhas been deprecated.Refs #5392
OptionsManagerMixInhas been deprecated.Refs #5392
OptionParserhas been deprecated.Refs #5392
Optionhas been deprecated.Refs #5392
OptionsProviderMixInhas been deprecated.Refs #5392
ConfigurationMixInhas been deprecated.Refs #5392
get_global_confighas been deprecated. You can now access all global options fromchecker.linter.config.Refs #5392
OptionsManagerMixInhas been replaced withArgumentsManager.ArgumentsManageris considered private API and most methods that were public onOptionsManagerMixInhave now been deprecated and will be removed in a future release.Refs #5392
OptionsProviderMixInhas been replaced withArgumentsProvider.ArgumentsProvideris considered private API and most methods that were public onOptionsProviderMixInhave now been deprecated and will be removed in a future release.Refs #5392
interfaces.implementshas been deprecated and will be removed in 3.0. Please use standard inheritance patterns instead of__implements__.Refs #2287
invalid-enum-extension: Used when a class tries to extend an inherited Enum class.Closes #5501
Added the
unrecognized-optionmessage. Raised if we encounter any unrecognized options.Closes #5259
Added new checker
typevar-double-variance: The "covariant" and "contravariant" keyword arguments cannot both be set to "True" in a TypeVar.Closes #5895
Re-enable checker
bad-docstring-quotesfor Python <= 3.7.Closes #6087
Removed the broken
generate-manoption.Closes #5283 Closes #1887
Fix false negative for
bad-string-format-typeif the value to be formatted is passed in as a variable holding a constant.Add new check
unnecessary-dunder-callfor unnecessary dunder method calls.Closes #5936 Closes #6074
The
cache-max-size-nonechecker has been renamed tomethod-cache-max-size-none.Closes #5670
The
method-cache-max-size-nonechecker will now also checkfunctools.cache.Closes #5670
unnecessary-lambda-assignment: Lambda expression assigned to a variable. Define a function using the "def" keyword instead.unnecessary-direct-lambda-call: Lambda expression called directly. Execute the expression inline instead.Closes #5976
potential-index-error: Emitted when the index of a list or tuple exceeds its length. This checker is currently quite conservative to avoid false positives. We welcome suggestions for improvements.Closes #578
Added optional extension
redefined-loop-nameto emit messages when a loop variable is redefined in the loop body.Closes #5072
Changed message type from
redefined-outer-nametoredefined-loop-name(optional extension) for redefinitions of outer loop variables by inner loops.Closes #5608
The
ignore-mixin-membersoption has been deprecated. You should now use the newignored-checks-for-mixinsoption.Closes #5205
bad-option-valuewill be emitted whenever a configuration value or command line invocation includes an unknown message.Closes #4324
Avoid reporting
superfluous-parenson expressions using theis notoperator.Closes #5930
Added the
super-without-bracketschecker, raised when a super call is missing its brackets.Closes #4008
Added the
generate-toml-configoption.Refs #5462
Added new checker
unnecessary-list-index-lookupfor indexing into a list while iterating overenumerate().Closes #4525
Fix falsely issuing
useless-suppressionon thewrong-import-positionchecker.Closes #5219
Fixed false positive
no-memberfor Enums with self-defined members.Closes #5138
Fix false negative for
no-memberwhen attempting to assign an instance attribute to itself without any prior assignment.Closes #1555
The concept of checker priority has been removed.
Add a new command line option
--minimal-messages-configforpytest, which disables all irrelevant messages when running the functional tests.duplicate-argument-namenow only raises once for each set of duplicated arguments.Fix bug where specifically enabling just
await-outside-asyncwas not possible.The
set_config_directlydecorator has been removed.Added new message called
duplicate-valuewhich identifies duplicate values inside sets.Closes #5880
Pylint now expands the user path (i.e.
~tohome/yusef/) and expands environment variables (i.e.home/$USER/$projecttohome/yusef/pylintforUSER=yusefandproject=pylint) for pyreverse'soutput-directory,import-graph,ext-import-graph,int-import-graphoptions, and the spell checker'sspelling-private-dict-fileoption.Refs #6493
Created
NoSelfUseCheckerextension and moved theno-self-usecheck. You now need to explicitly enable this check usingload-plugins=pylint.extensions.no_self_use.Closes #5502
Fix saving of persistent data files in environments where the user's cache directory and the linted file are on a different drive.
Closes #6394
Don't emit
unsubscriptable-objectfor string annotations. Pylint doesn't check if class is only generic in type stubs only.Closes #4369 and #6523
Fix pyreverse crash
RuntimeError: dictionary changed size during iterationRefs #6612
Fix bug where it writes a plain text error message to stdout, invalidating output formats.
Closes #6597
is_class_subscriptable_pep585_with_postponed_evaluation_enabledhas been deprecated. Useis_postponed_evaluation_enabled(node) and is_node_in_type_annotation_context(node)instead.Refs #6536
Update ranges for
using-constant-testandmissing-parentheses-for-call-in-testerror messages.Don't emit
no-memberinside type annotations withfrom __future__ import annotations.Closes #6594