Releases: pylint-dev/pylint
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...
v2.11.1
v2.11.0
-
The python3 porting mode checker and it's
py3koption were removed. You can still find it in older pylint
versions. -
raising-bad-typeis now properly emitted when raising a string -
Added new extension
SetMembershipCheckerwithuse-set-for-membershipcheck:
Emitted when using an in-place definedlistortupleto do a membership test.setsare better optimized for that.Closes #4776
-
Added
py-versionconfig key (if[MASTER]section). Used for version dependant checks.
Will default to whatever Python version pylint is executed with. -
CodeStyleChecker-
Added
consider-using-assignment-expr: Emitted when an assignment is directly followed by an if statement
and both can be combined by using an assignment expression:=. Requires Python 3.8Closes #4862
-
-
Added
consider-using-f-string: Emitted when .format() or '%' is being used to format a string.Closes #3592
-
Fix false positive for
consider-using-withif a context manager is assigned to a
variable in different paths of control flow (e. g. if-else clause).Closes #4751
-
https is now prefered in the documentation and http://pylint.pycqa.org correctly redirect to https://pylint.pycqa.org
Closes #3802
-
Fix false positive for
function-redefinedfor simple type annotationsCloses #4936
-
Fix false positive for
protected-accessif a protected member is used in type hints of function definitions -
Fix false positive
dict-iter-missing-itemsfor dictionaries only using tuples as keysCloses #3282
-
The
unspecified-encodingchecker now also checks calls topathlib.Path().read_text()
andpathlib.Path().write_text()Closes #4945
-
Fix false positive
superfluous-parensfor tuples created with inner tuplesCloses #4907
-
Fix false positive
unused-private-memberfor accessing attributes in a class usingclsCloses #4849
-
Fix false positive
unused-private-memberfor private staticmethods accessed in classmethods.Closes #4849
-
Extended
consider-using-incheck to work for attribute access. -
Setting
min-similarity-linesto 0 now makes the similarty checker stop checking for duplicate codeCloses #4901
-
Fix a bug where pylint complained if the cache's parent directory does not exist
Closes #4900
-
The
global-variable-not-assignedchecker now catches global variables that are never reassigned in a
local scope and catches (reassigned) functions -
Fix false positives for invalid-all-format that are lists or tuples at runtime
Closes #4711
-
Fix
no-self-useanddocparams extensionfor async functions and methods. -
Add documentation for
pyreverseandsymilarCloses #4616
-
Non symbolic messages with the wrong capitalisation now correctly trigger
use-symbolic-message-insteadCloses #5000
-
The
consider-iterating-dictionarychecker now also considers membership checksCloses #4069
-
The
invalid-namemessage is now more detailed when using multiple naming style regexes.
v2.10.2
v2.10.1
v2.10.0
-
pyreverse: add option to produce colored output.
Closes #4488
-
pyreverse: add output in PlantUML format.
Closes #4498
-
consider-using-withis no longer triggered if a context manager is returned from a function.Closes #4748
-
pylint does not crash with a traceback anymore when a file is problematic. It
creates a template text file for opening an issue on the bug tracker instead.
The linting can go on for other non problematic files instead of being impossible. -
pyreverse: Show class has-a relationships inferred from the type-hint
Closes #4744
-
Fixed a crash when importing beyond the top level package during
import-error
message creationCloses #4775
-
Added
ignored-parentsoption to the design checker to ignore specific
classes from thetoo-many-ancestorscheck (R0901).Partially closes #3057
-
Added
unspecified-encoding: Emitted when open() is called without specifying an encodingCloses #3826
-
Improved the Similarity checker performance. Fix issue with
--min-similarity-linesused with--jobs. -
Don't emit
no-membererror if guarded behind if statement. -
The default for
PYLINTHOMEis now the standardXDG_CACHE_HOME, and pylint now usesappdirs.Closes #3878
-
Added
use-list-literal: Emitted whenlist()is called with no arguments instead of using[]Closes #4365
-
Added
use-dict-literal: Emitted whendict()is called with no arguments instead of using{}Closes #4365
-
Added optional extension
consider-ternary-expression: Emitted whenever a variable is assigned in both branches of an if/else block.Closes #4366
-
Added optional extension
while-used: Emitted whenever awhileloop is used.Closes #4367
-
Added
forgotten-debug-statement: Emitted whenbreakpoint,pdb.set_traceorsys.breakpointhookcalls are foundCloses #3692
-
Fix false-positive of
unused-private-memberwhen using nested functions in a classCloses #4673
-
Fix crash for
unused-private-memberthat occurred with nested attributes.Closes #4755
-
Fix a false positive for
unused-private-memberwith class namesCloses #4681
-
Fix false positives for
superfluous-parenswith walrus operator, ternary operator and inside list comprehension. -
Added
format-string-without-interpolationchecker: Emitted when formatting is applied to a string without any variables to be replacedCloses #4042
-
Refactor of
--list-msgs&--list-msgs-enabled: both options now show whether messages are emittable with the current interpreter.Closes #4778
-
Fix false negative for
used-before-assignmentwhen the variable is assigned
in an exception handler, but used outside of the handler.Closes #626
-
Added
disable-nextoption: allows using# pylint: disable-next=msgidto disable a message for the following lineCloses #1682
-
Added
redundant-u-string-prefixchecker: Emitted when the u prefix is added to a stringCloses #4102
-
Fixed
cell-var-from-loopchecker: handle cell variables in comprehensions within functions,
and function default argument expressions. Also handle basic variable shadowing. -
Fixed bug with
cell-var-from-loopchecker: it no longer has false negatives when
bothunused-variableandused-before-assignmentare disabled. -
Fix false postive for
invalid-all-formatif the list or tuple builtin functions are usedCloses #4711
-
Config files can now contain environment variables
Closes #3839
-
Fix false-positive
used-before-assignmentwith an assignment expression in aReturnnodeCloses #4828
-
Added
use-sequence-for-iteration: Emitted when iterating over an in-place definedset. -
CodeStyleChecker-
Limit
consider-using-tupleto be emitted only for in-place definedlists. -
Emit
consider-using-tupleeven if list contains astarredexpression.
-
-
Ignore decorators lines by similarities checker when ignore signatures flag enabled
Closes #4839
-
Allow
trueandfalsevalues inpylintrcfor better compatibility withtomlconfig. -
Class methods' signatures are ignored the same way as functions' with similarities "ignore-signatures" option enabled
Closes #4653
-
Improve performance when inferring
Callnodes, by utilizing caching. -
Improve error message for invalid-metaclass when the node is an Instance.
v2.9.6
v2.9.5
-
Fix a crash when there would be a 'TypeError object does not support
item assignment' in the code we parse.Closes #4439
-
Fix crash if a callable returning a context manager was assigned to a list or dict item
Closes #4732
-
Fix a crash when a AttributeInferenceError was not handled properly when
failing to infer the real name of an import in astroid.Closes #4692
v2.9.4
-
Added
time.clockto deprecated functions/methods for python 3.3 -
Fix bug in which --fail-on can return a zero exit code even when the specified issue is present
-
Fix hard failure when handling missing attribute in a class with duplicated bases
Closes #4687
-
Fix false-positive
consider-using-with(R1732) if a ternary conditional is used together withwithCloses #4676
-
Fix false-positive
deprecated-modulewhen relative import uses deprecated module name.Closes #4629
-
Fix false-positive
consider-using-with(R1732) ifcontextlib.ExitStacktakes care of calling the__exit__methodCloses #4654
-
Fix a false positive for
unused-private-memberwhen mutating a private attribute
withclsCloses #4657
-
Fix ignored empty functions by similarities checker with "ignore-signatures" option enabled
Closes #4652
-
Fix false-positive of
use-maxsplit-argwhen index is incremented in
a loopCloses #4664
-
Don't emit
cyclic-importmessage if import is guarded bytyping.TYPE_CHECKING.Closes #3525
-
Fix false-positive
not-callablewith alternativeTypedDictsyntaxCloses #4715
-
Clarify documentation for consider-using-from-import
-
Don't emit
unreachablewarning for empty generator functionsCloses #4698
-
Don't emit
import-error,no-name-in-module, andungrouped-imports
for imports guarded bysys.version_infoortyping.TYPE_CHECKING. -
Fix
invalid-overridden-methodwith nested propertyCloses #4368
-
Fix false-positive of
unused-private-memberwhen using__new__in a classCloses #4668
-
No longer emit
consider-using-withforThreadPoolExecutorandProcessPoolExecutor
as they have legitimate use cases without awithblock.Closes #4689
-
Fix crash when inferring variables assigned in match patterns
Closes #4685
-
Fix a crash when a StopIteration was raised when inferring
a faulty function in a context manager.Closes #4723