chore(deps): update dependency pylint to v2.17.4
This MR contains the following updates:
Package | Change | Age | Adoption | Passing | Confidence |
---|---|---|---|---|---|
pylint (changelog) |
2.11.1 -> 2.17.4
|
Release Notes
PyCQA/pylint (pylint)
v2.17.4
False Positives Fixed
-
Fix a false positive for
bad-dunder-name
when there is a user-defined__index__
method.Closes #8613
Other Bug Fixes
-
pyreverse
: added escaping of vertical bar character in annotation labels produced by DOT printer to ensure it is not treated as field separator of record-based nodes.Closes #8603
-
Fixed a crash when generating a configuration file:
tomlkit.exceptions.TOMLKitError: Can't add a table to a dotted key
caused by tomlkitv0.11.8
.Closes #8632
v2.17.3
What's new in Pylint 2.17.3?
Release date: 2023-04-24
False Positives Fixed
-
Fix
unused-argument
false positive when__new__
does not use all the arguments of__init__
.Closes #3670
-
Fix
unused-import
false positive for usage ofsix.with_metaclass
.Closes #7506
-
logging-not-lazy
is not longer emitted for explicitly concatenated string arguments.Closes #8410
-
Fix false positive for isinstance-second-argument-not-valid-type when union types contains None.
Closes #8424
-
Fixed
unused-import
so that it observes thedummy-variables-rgx
option.Closes #8500
-
Union
typed variables without assignment are no longer treated asTypeAlias
.Closes #8540
-
Fix false positive for
positional-only-arguments-expected
when a function contains both a positional-only parameter that has a default value, and**kwargs
.Closes #8555
-
Fix false positive for
keyword-arg-before-vararg
when a positional-only parameter with a default value precedes*args
.Closes #8570
Other Bug Fixes
-
Improve output of
consider-using-generator
message formin()` calls with
default`` keyword.Closes #8563
v2.17.2
False Positives Fixed
-
invalid-name
now allows for integers intypealias
names:- now valid:
Good2Name
,GoodName2
. - still invalid:
_1BadName
.
Closes #8485
- now valid:
-
No longer consider
Union
as type annotation as type alias for naming checks.Closes #8487
-
unnecessary-lambda
no longer warns on lambdas which use its parameters in their body (other than the final arguments), e.g.lambda foo: (bar if foo else baz)(foo)
.Closes #8496
Other Bug Fixes
-
Fix a crash in pyreverse when "/" characters are used in the output filename e.g pyreverse -o png -p name/ path/to/project.
Closes #8504
v2.17.1
False Positives Fixed
-
Adds
asyncSetUp
to the defaultdefining-attr-methods
list to silenceattribute-defined-outside-init
warning when usingunittest.IsolatedAsyncioTestCase
.Refs #8403
Other Bug Fixes
-
--clear-cache-post-run
now also clears LRU caches for pylint utilities holding references to AST nodes.Closes #8361
-
Fix a crash when
TYPE_CHECKING
is used without importing it.Closes #8434
-
Fix a regression of
preferred-modules
where a partial match was used instead of the required full match.Closes #8453
Internal Changes
-
The following utilities are deprecated in favor of the more robust
in_type_checking_block
and will be removed in pylint 3.0:is_node_in_guarded_import_block
is_node_in_typing_guarded_import_block
is_typing_guard
is_sys_guard
is still available, which was part ofis_node_in_guarded_import_block
.Refs #8433
v2.17.0
2.17 is a small release that is the first to support python 3.11 officially with the addition of TryStar nodes.
There's still two new default checks: bad-chained-comparison
and
implicit-flag-alias
, one of them already fixed a previously undetected
bug in sentry.
Thanks to the community effort our documentation is almost complete, and almost all messages should have a proper documentation now. A big thank you to everyone who participated !
The next release is going to be 3.0.0
, bring breaking changes and
enact long announced deprecations. There's going to be frequent beta
releases, before the official releases, everyone is welcome to try the betas
so we find problems before the actual release.
What's new in Pylint 2.17.0?
Release date: 2023-03-08
New Features
-
pyreverse
now supports custom color palettes with the--color-palette
option.Closes #6738
-
Add
invalid-name
check forTypeAlias
names.Closes #7081
-
Accept values of the form
<class name>.<attribute name>
for theexclude-protected
list.Closes #7343
-
Add
--version
option topyreverse
.Refs #7851
-
Adds new functionality with preferred-modules configuration to detect submodules.
Refs #7957
-
Support implicit namespace packages (PEP 420).
Closes #8154
-
Add globbing pattern support for
--source-roots
.Closes #8290
-
Support globbing pattern when defining which file/directory/module to lint.
Closes #8310
-
pylint now supports
TryStar
nodes from Python 3.11 and should be fully compatible with Python 3.11.Closes #8387
New Checks
-
Add a
bad-chained-comparison
check that emits a warning when there is a chained comparison where one expression is semantically incompatible with the other.Closes #6559
-
Adds an
implicit-flag-alias
check that emits a warning when a class derived fromenum.IntFlag
assigns distinct integer values that share common bit positions.Refs #8102
False Positives Fixed
-
Fix various false positives for functions that return directly from structural pattern matching cases.
Closes #5288
-
Fix false positive for
used-before-assignment
whentyping.TYPE_CHECKING
is used with if/elif/else blocks.Closes #7574
-
Fix false positive for isinstance-second-argument-not-valid-type with union types.
Closes #8205
-
Fix false positive for
used-before-assignment
for named expressions appearing after the first element in a list, tuple, or set.Closes #8252
-
Fix false positive for
wrong-spelling-in-comment
with class names in a python 2 type comment.Closes #8370
False Negatives Fixed
-
Fix a false negative for 'missing-parentheses-for-call-in-test' when inference failed for the internal of the call as we did not need that information to raise correctly.
Refs #8185
-
Fix false negative for inconsistent-returns with while-loops.
Closes #8280
Other Bug Fixes
-
Fix
used-before-assignment
false positive when the walrus operator is used with a ternary operator in dictionary key/value initialization.Closes #8125
-
Fix
no-name-in-module
false positive raised when a package defines a variable with the same name as one of its submodules.Closes #8148
-
Fix a crash happening for python interpreter < 3.9 following a failed typing update.
Closes #8161
-
Fix
nested-min-max
suggestion message to indicate it's possible to splat iterable objects.Closes #8168
-
Fix a crash happening when a class attribute was negated in the start argument of an enumerate.
Closes #8207
-
Prevent emitting
invalid-name
for the line on which aglobal
statement is declared.Closes #8307
Other Changes
-
Update explanation for
global-variable-not-assigned
and add confidence.Closes #5073
-
The governance model and the path to become a maintainer have been documented as part of our effort to guarantee that the software supply chain in which pylint is included is secure.
Refs #8329
v2.16.4
False Positives Fixed
-
Fix false positive for isinstance-second-argument-not-valid-type with union types.
Closes #8205
v2.16.3
False Positives Fixed
-
Fix false positive for
wrong-spelling-in-comment
with class names in a python 2 type comment.Closes #8370
Other Bug Fixes
-
Prevent emitting
invalid-name
for the line on which aglobal
statement is declared.Closes #8307
v2.16.2
New Features
-
Add
--version
option topyreverse
.Refs #7851
False Positives Fixed
-
Fix false positive for
used-before-assignment
whentyping.TYPE_CHECKING
is used with if/elif/else blocks.Closes #7574
-
Fix false positive for
used-before-assignment
for named expressions appearing after the first element in a list, tuple, or set.Closes #8252
Other Bug Fixes
-
Fix
used-before-assignment
false positive when the walrus operator is used with a ternary operator in dictionary key/value initialization.Closes #8125
-
Fix
no-name-in-module
false positive raised when a package defines a variable with the same name as one of its submodules.Closes #8148
-
Fix
nested-min-max
suggestion message to indicate it's possible to splat iterable objects.Closes #8168
-
Fix a crash happening when a class attribute was negated in the start argument of an enumerate.
Closes #8207
v2.16.1
Other Bug Fixes
-
Fix a crash happening for python interpreter < 3.9 following a failed typing update.
Closes #8161
v2.16.0
Summary -- Release highlights
In 2.16.0 we added aggregation and composition understanding in pyreverse
, and a way to clear
the cache in between run in server mode (originally for the VS Code integration). Apart from the bug
fixes there's also a lot of new checks, and new extensions that have been asked for for a long time
that were implemented.
If you want to benefit from all the new checks load the following plugins::
pylint.extensions.dict_init_mutate,
pylint.extensions.dunder,
pylint.extensions.typing,
pylint.extensions.magic_value,
We still welcome any community effort to help review, integrate, and add good/bad examples to the doc for
#5953. This should be doable without any pylint
or astroid
knowledge, so this is the perfect entrypoint if you want to contribute to pylint
or open source without
any experience with our code!
Last but not least @clavedeluna and @nickdrozd became triagers, welcome to the team !
What's new in Pylint 2.16.0?
Changes requiring user actions
-
The
accept-no-raise-doc
option related tomissing-raises-doc
will now be correctly taken into account all the time.Pylint will no longer raise missing-raises-doc (W9006) when no exceptions are documented and accept-no-raise-doc is true (issue #7208). If you were expecting missing-raises-doc errors to be raised in that case, you will now have to add
accept-no-raise-doc=no
in your configuration to keep the same behavior. Closes #7208
New Features
-
Added the
no-header
output format. If enabled with--output-format=no-header
, it will not include the module name in the output. Closes #5362 -
Added configuration option
clear-cache-post-run
to support server-like usage. Use this flag if you expect the linted files to be altered between runs. Refs #5401 -
Add
--allow-reexport-from-package
option to configure theuseless-import-alias
check not to emit a warning if a name is reexported from a package. Closes #6006 -
Update
pyreverse
to differentiate between aggregations and compositions.pyreverse
checks if it's an Instance or a Call of an object via method parameters (via type hints) to decide if it's a composition or an aggregation. Refs #6543
New Checks
-
Adds a
pointless-exception-statement
check that emits a warning when an Exception is created and not assigned, raised or returned. Refs #3110 -
Add a
shadowed-import
message for aliased imports. Closes #4836 -
Add new check called
unbalanced-dict-unpacking
to check for unbalanced dict unpacking in assignment and for loops. Closes #5797 -
Add new checker
positional-only-arguments-expected
to check for cases when positional-only arguments have been passed as keyword arguments. Closes #6489 -
Added
singledispatch-method
which informs that@singledispatch
should decorate functions and not class/instance methods. Addedsingledispatchmethod-function
which informs that@singledispatchmethod
should decorate class/instance methods and not functions. Closes #6917 -
Rename
broad-except
tobroad-exception-caught
and add new checkerbroad-exception-raised
which will warn if general exceptionsBaseException
orException
are raised. Closes #7494 -
Added
nested-min-max
which flagsmin(1, min(2, 3))
to simplify tomin(1, 2, 3)
. Closes #7546 -
Extended
use-dict-literal
to also warn about call todict()
when passing keyword arguments. Closes #7690 -
Add
named-expr-without-context
check to emit a warning if a named expression is used outside a context likeif
,for
,while
, or a comprehension. Refs #7760 -
Add
invalid-slice-step
check to warn about a slice step value of0
for common builtin sequences. Refs #7762 -
Add
consider-refactoring-into-while-condition
check to recommend refactoring when a while loop is defined with a constant condition with an immediateif
statement to check forbreak
condition as a first statement. Closes #8015
Extensions
-
Add new extension checker
dict-init-mutate
that flags mutating a dictionary immediately after the dictionary was created. Closes #2876 -
Added
bad-dunder-name
extension check, which flags bad or misspelled dunder methods. You can use thegood-dunder-names
option to allow specific dunder names. Closes #3038 -
Added
consider-using-augmented-assign
check forCodeStyle
extension which flagsx = x + 1
to simplify tox += 1
. This check is disabled by default. To use it, load the code style extension withload-plugins=pylint.extensions.code_style
and addconsider-using-augmented-assign
in theenable
option. Closes #3391 -
Add
magic-number
plugin checker for comparison with constants instead of named constants or enums. You can use it with--load-plugins=pylint.extensions.magic_value
. Closes #7281 -
Add
redundant-typehint-argument
message fortyping
plugin for duplicate assign typehints. Enable the plugin to enable the message with:--load-plugins=pylint.extensions.typing
. Closes #7636
False Positives Fixed
-
Fix false positive for
unused-variable
andunused-import
when a name is only used in a string literal type annotation. Closes #3299 -
Document a known false positive for
useless-suppression
when disablingline-too-long
in a module with only comments and no code. Closes #3368 -
trailing-whitespaces
is no longer reported within strings. Closes #3822 -
Fix false positive for
global-variable-not-assigned
when a global variable is re-assigned via anImportFrom
node. Closes #4809 -
Fix false positive for
use-maxsplit-arg
with custom split method. Closes #4857 -
Fix
logging-fstring-interpolation
false positive raised when logging and f-string with%s
formatting. Closes #4984 -
Fix false-positive for
used-before-assignment
in pattern matching with a guard. Closes #5327 -
Fix
use-sequence-for-iteration
when unpacking a set with*
. Closes #5788 -
Fix
deprecated-method
false positive when alias for method is similar to name of deprecated method. Closes #5886 -
Fix false positive
assigning-non-slot
when a class attribute is re-assigned. Closes #6001 -
Fix false positive for
too-many-function-args
when a function call is assigned to a class attribute inside the class where the function is defined. Closes #6592 -
Fixes false positive
abstract-method
on Protocol classes. Closes #7209 -
Pylint now understands the
kw_only
keyword argument fordataclass
. Closes #7290, closes #6550, closes #5857 -
Fix false positive for
undefined-loop-variable
infor-else
loops that use a function having a return type annotation ofNoReturn
orNever
. Closes #7311 -
Fix
used-before-assignment
for functions/classes defined in type checking guard. Closes #7368 -
Fix false positive for
unhashable-member
when subclassingdict
and using the subclass as a dictionary key. Closes #7501 -
Fix the message for
unnecessary-dunder-call
for__aiter__
and__aneext__
. Also only emit the warning whenpy-version
>= 3.10. Closes #7529 -
Fix
used-before-assignment
false positive when else branch callssys.exit
or similar terminating functions. Closes #7563 -
Fix a false positive for
used-before-assignment
for imports guarded bytyping.TYPE_CHECKING
later used in variable annotations. Closes #7609 -
Fix a false positive for
simplify-boolean-expression
when multiple values are inferred for a constant. Closes #7626 -
unnecessary-list-index-lookup
will not be wrongly emitted ifenumerate
is called withstart
. Closes #7682 -
Don't warn about
stop-iteration-return
when usingnext()
overitertools.cycle
. Closes #7765 -
Fixes
used-before-assignment
false positive when the walrus operator is used in a ternary operator. Closes #7779 -
Fix
missing-param-doc
false positive when function parameter has an escaped underscore. Closes #7827 -
Fixes
method-cache-max-size-none
false positive for methods inheriting fromEnum
. Closes #7857 -
multiple-statements
no longer triggers for function stubs using inlined...
. Closes #7860 -
Fix a false positive for
used-before-assignment
when a name guarded byif TYPE_CHECKING:
is used as a type annotation in a function body and later re-imported in the same scope. Closes #7882 -
Prevent
used-before-assignment
when imports guarded byif TYPE_CHECKING
are guarded again when used. Closes #7979 -
Fixes false positive for
try-except-raise
with multiple exceptions in one except statement if exception are in different namespace. Closes #8051 -
Fix
invalid-name
errors fortyping_extension.TypeVar
. Refs #8089 -
Fix
no-kwoa
false positive for context managers. Closes #8100 -
Fix a false positive for
redefined-variable-type
whenasync
methods are present. Closes #8120
False Negatives Fixed
-
Code following a call to
quit
,exit
,sys.exit
oros._exit
will be marked asunreachable
. Refs #519 -
Emit
used-before-assignment
when function arguments are redefined inside an inner function and accessed there before assignment. Closes #2374 -
Fix a false negative for
unused-import
when one module used an import in a type annotation that was also used in another module. Closes #4150 -
Flag
superfluous-parens
if parentheses are used during string concatenation. Closes #4792 -
Emit
used-before-assignment
when relying on names only defined under conditions always testing false. Closes #4913 -
consider-using-join
can now be emitted for non-empty string separators. Closes #6639 -
Emit
used-before-assignment
for further imports guarded byTYPE_CHECKING
Previously, this message was only emitted for imports guarded directly underTYPE_CHECKING
, not guarded two if-branches deep, nor whenTYPE_CHECKING
was imported fromtyping
under an alias. Closes #7539 -
Fix a false negative for
unused-import
when a constant insidetyping.Annotated
was treated as a reference to an import. Closes #7547 -
consider-using-any-or-all
message will now be raised in cases when boolean is initialized, reassigned during loop, and immediately returned. Closes #7699 -
Extend
invalid-slice-index
to emit an warning for invalid slice indices used with string and byte sequences, and range objects. Refs #7762 -
Fixes
unnecessary-list-index-lookup
false negative whenenumerate
is called withiterable
as a kwarg. Closes #7770 -
no-else-return
orno-else-raise
will be emitted ifexcept
block always returns or raises. Closes #7788 -
Fix
dangerous-default-value
false negative when*
is used. Closes #7818 -
consider-using-with
now triggers forpathlib.Path.open
. Closes #7964
Other Bug Fixes
-
Fix bug in detecting
unused-variable
when iterating on variable. Closes #3044 -
Fix bug in scanning of names inside arguments to
typing.Literal
. See https://peps.python.org/pep-0586/#literals-enums-and-forward-references for details. Refs #3299 -
Update
disallowed-name
check to flag module-level variables. Closes #3701 -
Pylint will no longer deadlock if a parallel job is killed but fail immediately instead. Closes #3899
-
Fix ignored files being linted when passed on stdin. Closes #4354
-
Fix
no-member
false negative when augmented assign is done manually, without+=
. Closes #4562 -
Any assertion on a populated tuple will now receive a
assert-on-tuple
warning. Closes #4655 -
missing-return-doc
,missing-raises-doc
andmissing-yields-doc
now respect theno-docstring-rgx
option. Closes #4743 -
Update
reimported
help message for clarity. Closes #4836 -
consider-iterating-dictionary
will no longer be raised if bitwise operations are used. Closes #5478 -
Using custom braces in
msg-template
will now work properly. Closes #5636 -
Pylint will now filter duplicates given to it before linting. The output should be the same whether a file is given/discovered multiple times or not. Closes #6242, #4053
-
Remove
__index__
dunder method call fromunnecessary-dunder-call
check. Closes #6795 -
Fixed handling of
--
as separator between positional arguments and flags. This was not actually fixed in 2.14.5. Closes #7003, Refs #7096 -
Don't crash on
OSError
in config file discovery. Closes #7169 -
Messages sent to reporter are now copied so a reporter cannot modify the message sent to other reporters. Closes #7214
-
Fixed a case where custom plugins specified by command line could silently fail. Specifically, if a plugin relies on the
init-hook
option changingsys.path
before it can be imported, this will now emit abad-plugin-value
message. Before this change, it would silently fail to register the plugin for use, but would load any configuration, which could have unintended effects. Fixes part of #7264. -
Update
modified_iterating
checker to fix a crash withfor
loops on empty list. Closes #7380 -
Update wording for
arguments-differ
andarguments-renamed
to clarify overriding object. Closes #7390 -
disable-next
is now correctly scoped to only the succeeding line. Closes #7401 -
Fixed a crash in the
unhashable-member
checker when using alambda
as a dict key. Closes #7453 -
Add
mailcap
to deprecated modules list. Closes #7457 -
Fix a crash in the
modified-iterating-dict
checker involving instance attributes. Closes #7461 -
invalid-class-object
does not crash anymore when__class__
is assigned alongside another variable. Closes #7467 -
--help-msg
now accepts a comma-separated list of message IDs again. Closes #7471 -
Allow specifying non-builtin exceptions in the
overgeneral-exception
option using an exception's qualified name. Closes #7495 -
Report
no-self-argument
rather thanno-method-argument
for methods with variadic arguments. Closes #7507 -
Fixed an issue where
syntax-error
couldn't be raised on files with invalid encodings. Closes #7522 -
Fix false positive for
redefined-outer-name
when aliasingtyping
e.g. ast
and guarding imports undert.TYPE_CHECKING
. Closes #7524 -
Fixed a crash of the
modified_iterating
checker when iterating on a set defined as a class attribute. Closes #7528 -
Use
py-version
to determine if a message should be emitted for messages defined withmax-version
ormin-version
. Closes #7569 -
Improve
bad-thread-instantiation
check to warn iftarget
is not passed in as a keyword argument or as a second argument. Closes #7570 -
Fixes edge case of custom method named
next
raised an astroid error. Closes #7610 -
Fixed a multi-processing crash that prevents using any more than 1 thread on MacOS. The returned module objects and errors that were cached by the linter plugin loader cannot be reliably pickled. This means that
dill
would throw an error when attempting to serialise the linter object for multi-processing use. Closes #7635. -
Fix crash that happened when parsing files with unexpected encoding starting with 'utf' like
utf13
. Closes #7661 -
Fix a crash when a child class with an
__init__
method inherits from a parent class with an__init__
class attribute. Closes #7742 -
Fix
valid-metaclass-classmethod-first-arg
default config value from "cls" to "mcs" which would cause both a false-positive and false-negative. Closes #7782 -
Fixes a crash in the
unnecessary_list_index_lookup
check when usingenumerate
withstart
and a class attribute. Closes #7821 -
Fixes a crash in
stop-iteration-return
when thenext
builtin is called without arguments. Closes #7828 -
When pylint exit due to bad arguments being provided the exit code will now be the expected
32
. Refs #7931 -
Fixes a
ModuleNotFound
exception when running pylint on a Django project with thepylint_django
plugin enabled. Closes #7938 -
Fixed a crash when inferring a value and using its qname on a slice that was being incorrectly called. Closes #8067
-
Use better regex to check for private attributes. Refs #8081
-
Fix issue with new typing Union syntax in runtime context for Python 3.10+. Closes #8119
Other Changes
-
Pylint now provides basic support for Python 3.11. Closes #5920
-
Update message for
abstract-method
to include child class name. Closes #7124 -
Update Pyreverse's dot and plantuml printers to detect when class methods are abstract and show them with italic font. For the dot printer update the label to use html-like syntax. Closes #7346
-
The
docparams
extension now considers typing in Numpy style docstrings as "documentation" for themissing-param-doc
message. Refs #7398 -
Relevant
DeprecationWarnings
are now raised withstacklevel=2
, so they have the callsite attached in the message. Closes #7463 -
Add a
minimal
option topylint-config
and its toml generator. Closes #7485 -
Add method name to the error messages of
no-method-argument
andno-self-argument
. Closes #7507 -
Prevent leaving the pip install cache in the Docker image. Refs #7544
-
Add a keyword-only
compare_constants
argument tosafe_infer
. Refs #7626 -
Add
default_enabled
option to optional message dict. Provides an option to disable a checker message by default. To use a disabled message, the user must enable it explicitly by adding the message to theenable
option. Refs #7629 -
Sort
--generated-rcfile
output. Refs #7655 -
epylint is now deprecated and will be removed in pylint 3.0.0. All emacs and flymake related files were removed and their support will now happen in an external repository : https://github.com/emacsorphanage/pylint. Closes #7737
-
Adds test for existing preferred-modules configuration functionality. Refs #7957
Internal Changes
- Add and fix regression tests for plugin loading.
This shores up the tests that cover the loading of custom plugins as affected
by any changes made to the
sys.path
during execution of aninit-hook
. Given the existing contract of allowing plugins to be loaded by fiddling with the path in this way, this is now the last bit of work needed to close Github issue #7264. Closes #7264
v2.15.10
False Positives Fixed
-
Fix
use-sequence-for-iteration
when unpacking a set with*
.Closes #5788
-
Fix false positive
assigning-non-slot
when a class attribute is re-assigned.Closes #6001
-
Fixes
used-before-assignment
false positive when the walrus operator is used in a ternary operator.Closes #7779
-
Prevent
used-before-assignment
when imports guarded byif TYPE_CHECKING
are guarded again when used.Closes #7979
Other Bug Fixes
-
Using custom braces in
msg-template
will now work properly.Closes #5636
v2.15.9
False Positives Fixed
-
Fix false-positive for
used-before-assignment
in pattern matching with a guard.Closes #5327
Other Bug Fixes
-
Pylint will no longer deadlock if a parallel job is killed but fail immediately instead.
Closes #3899
-
When pylint exit due to bad arguments being provided the exit code will now be the expected
32
.Refs #7931
-
Fixes a
ModuleNotFound
exception when running pylint on a Django project with thepylint_django
plugin enabled.Closes #7938
v2.15.8
False Positives Fixed
-
Document a known false positive for
useless-suppression
when disablingline-too-long
in a module with only comments and no code.Closes #3368
-
Fix
logging-fstring-interpolation
false positive raised when logging and f-string with%s
formatting.Closes #4984
-
Fixes false positive
abstract-method
on Protocol classes.Closes #7209
-
Fix
missing-param-doc
false positive when function parameter has an escaped underscore.Closes #7827
-
multiple-statements
no longer triggers for function stubs using inlined...
.Closes #7860
v2.15.7
False Positives Fixed
-
Fix
deprecated-method
false positive when alias for method is similar to name of deprecated method.Closes #5886
-
Fix a false positive for
used-before-assignment
for imports guarded bytyping.TYPE_CHECKING
later used in variable annotations.Closes #7609
Other Bug Fixes
-
Pylint will now filter duplicates given to it before linting. The output should be the same whether a file is given/discovered multiple times or not.
-
Fixes a crash in
stop-iteration-return
when thenext
builtin is called without arguments.Closes #7828
v2.15.6
False Positives Fixed
-
Fix false positive for
unhashable-member
when subclassingdict
and using the subclass as a dictionary key.Closes #7501
-
unnecessary-list-index-lookup
will not be wrongly emitted ifenumerate
is called withstart
.Closes #7682
-
Don't warn about
stop-iteration-return
when usingnext()
overitertools.cycle
.Closes #7765
Other Bug Fixes
-
Messages sent to reporter are now copied so a reporter cannot modify the message sent to other reporters.
Closes #7214
-
Fixes edge case of custom method named
next
raised an astroid error.Closes #7610
-
Fix crash that happened when parsing files with unexpected encoding starting with 'utf' like
utf13
.Closes #7661
-
Fix a crash when a child class with an
__init__
method inherits from a parent class with an__init__
class attribute.Closes #7742
v2.15.5
What's new in Pylint 2.15.5?
Release date: 2022-10-21
False Positives Fixed
-
Fix a false positive for
simplify-boolean-expression
when multiple values are inferred for a constant.Closes #7626
Other Bug Fixes
-
Remove
__index__
dunder method call fromunnecessary-dunder-call
check.Closes #6795
-
Fixed a multi-processing crash that prevents using any more than 1 thread on MacOS.
The returned module objects and errors that were cached by the linter plugin loader cannot be reliably pickled. This means that
dill
would throw an error when attempting to serialise the linter object for multi-processing use.Closes #7635.
Other Changes
-
Add a keyword-only
compare_constants
argument tosafe_infer
.Refs #7626
-
Sort
--generated-rcfile
output.Refs #7655
v2.15.4
False Positives Fixed
-
Fix the message for
unnecessary-dunder-call
for__aiter__
and__anext__
. Also only emit the warning whenpy-version
>= 3.10.Closes #7529
Other Bug Fixes
-
Fix bug in detecting
unused-variable
when iterating on variable.Closes #3044
-
Fixed handling of
--
as separator between positional arguments and flags. This was not actually fixed in 2.14.5. -
Report
no-self-argument
rather thanno-method-argument
for methods with variadic arguments.Closes #7507
-
Fixed an issue where
syntax-error
couldn't be raised on files with invalid encodings.Closes #7522
-
Fix false positive for
redefined-outer-name
when aliasingtyping
e.g. ast
and guarding imports undert.TYPE_CHECKING
.Closes #7524
-
Fixed a crash of the
modified_iterating
checker when iterating on a set defined as a class attribute.Closes #7528
-
Fix bug in scanning of names inside arguments to
typing.Literal
. See https://peps.python.org/pep-0586/#literals-enums-and-forward-references for details.Refs #3299
Other Changes
-
Add method name to the error messages of
no-method-argument
andno-self-argument
.Closes #7507
v2.15.3
-
Fixed a crash in the
unhashable-member
checker when using alambda
as a dict key.Closes #7453
-
Fix a crash in the
modified-iterating-dict
checker involving instance attributes.Closes #7461
-
invalid-class-object
does not crash anymore when__class__
is assigned alongside another variable.Closes #7467
-
Fix false positive for
global-variable-not-assigned
when a global variable is re-assigned via anImportFrom
node.Closes #4809
-
Fix false positive for
undefined-loop-variable
infor-else
loops that use a function having a return type annotation ofNoReturn
orNever
.Closes #7311
-
--help-msg
now accepts a comma-separated list of message IDs again.Closes #7471
v2.15.2
-
Fixed a case where custom plugins specified by command line could silently fail.
Specifically, if a plugin relies on the
init-hook
option changingsys.path
before it can be imported, this will now emit abad-plugin-value
message. Before this change, it would silently fail to register the plugin for use, but would load any configuration, which could have unintended effects.Fixes part of #7264.
-
Fix
used-before-assignment
for functions/classes defined in type checking guard.Closes #7368
-
Update
modified_iterating
checker to fix a crash withfor
loops on empty list.Closes #7380
-
The
docparams
extension now considers typing in Numpy style docstrings as "documentation" for themissing-param-doc
message.Refs #7398
-
Fix false positive for
unused-variable
andunused-import
when a name is only used in a string literal type annotation.Closes #3299
-
Fix false positive for
too-many-function-args
when a function call is assigned to a class attribute inside the class where the function is defined.Closes #6592
-
Fix
used-before-assignment
for functions/classes defined in type checking guard.Closes #7368
-
Fix ignored files being linted when passed on stdin.
Closes #4354
-
missing-return-doc
,missing-raises-doc
andmissing-yields-doc
now respect theno-docstring-rgx
option.Closes #4743
-
Don't crash on
OSError
in config file discovery.Closes #7169
-
disable-next
is now correctly scoped to only the succeeding line.Closes #7401
-
Update
modified_iterating
checker to fix a crash withfor
loops on empty list.Closes #7380
v2.15.0
In pylint 2.15.0, we added a new check missing-timeout
to warn of default timeout values that could cause a program to be hanging indefinitely.
We improved pylint
's handling of namespace packages. More packages should be linted without resorting to using the --recursive=y
option.
We still welcome any community effort to help review, integrate, and add good/bad examples to the doc for https://github.com/PyCQA/pylint/issues/5953. This should be doable without any pylint
or astroid
knowledge, so this is the perfect entrypoint if you want to contribute to pylint
or open source without any experience with our code!
Internally, we changed the way we generate the release notes, thanks to DudeNr33. There will be no more conflict resolution to do in the changelog, and every contributor rejoice.
Marc Byrne became a maintainer, welcome to the team !
New Checks
-
Added new checker
missing-timeout
to warn of default timeout values that could cause a program to be hanging indefinitely.Refs #6780
False Positives Fixed
-
Don't report
super-init-not-called
for abstract__init__
methods.Closes #3975
-
Don't report
unsupported-binary-operation
on Python <= 3.9 when using the|
operator with types, if one has a metaclass that overloads__or__
or__ror__
as appropriate.Closes #4951
-
Don't report
no-value-for-parameter
for dataclasses fields annotated withKW_ONLY
.Closes #5767
-
Fixed inference of
Enums
when they are imported under an alias.Closes #5776
-
Prevent false positives when accessing
PurePath.parents
by index (not slice) on Python 3.10+.Closes #5832
-
unnecessary-list-index-lookup
is now more conservative to avoid potential false positives.Closes #6896
-
Fix double emitting
trailing-whitespace
for multi-line docstrings.Closes #6936
-
import-error
now correctly checks forcontextlib.suppress
guards on import statements.Closes #7270
-
Fix false positive for
no-self-argument
/no-method-argument
when a staticmethod is applied to a function but uses a different name.Closes #7300
-
Fix
undefined-loop-variable
withbreak
andcontinue
statements inelse
blocks.Refs #7311
False Negatives Fixed
-
Emit
used-before-assignment
when relying on a name that is reimported later in a function.Closes #4624
-
Emit
used-before-assignment
for self-referencing named expressions (:=
) lacking prior assignments.Closes #5653
-
Emit
used-before-assignment
for self-referencing assignments under if conditions.Closes #6643
-
Emit
modified-iterating-list
and analogous messages for dicts and sets when iterating literals, or when using thedel
keyword.Closes #6648
-
Emit
used-before-assignment
when calling nested functions before assignment.Closes #6812
-
Emit
nonlocal-without-binding
when a nonlocal name has been assigned at a later point in the same scope.Closes #6883
-
Emit
using-constant-test
when testing the truth value of a variable or call result holding a generator.Closes #6909
-
Rename
unhashable-dict-key
tounhashable-member
and emit when creating sets and dicts, not just when accessing dicts.
Other Bug Fixes
-
Fix a failure to lint packages with
__init__.py
contained in directories lacking__init__.py
.Closes #1667
-
Fixed a syntax-error crash that was not handled properly when the declared encoding of a file was
utf-9
.Closes #3860
-
Fix a crash in the
not-callable
check when there is ambiguity whether an instance is being incorrectly provided to__new__()
.Closes #7109
-
Fix crash when regex option raises a
re.error
exception.Closes #7202
-
Fix
undefined-loop-variable
from walrus in comprehension test.Closes #7222
-
Check for
<cwd>
before removing first item fromsys.path
inmodify_sys_path
.Closes #7231
-
Fix sys.path pollution in parallel mode.
Closes #7246
-
Prevent
useless-parent-delegation
for delegating to a builtin written in C (e.g.Exception.__init__
) with non-self arguments.Closes #7319
Other Changes
-
bad-exception-context
has been renamed tobad-exception-cause
as it is about the cause and not the context.Closes #3694
-
The message for
literal-comparison
is now more explicit about the problem and the solution.Closes #5237
-
useless-super-delegation
has been renamed touseless-parent-delegation
in order to be more generic.Closes #6953
-
Pylint now uses
towncrier
for changelog generation.Refs #6974
-
Update
astroid
to 2.12.Refs #7153
-
Fix crash when a type-annotated
__slots__
with no value is declared.Closes #7280
Internal Changes
-
Fixed an issue where it was impossible to update functional tests output when the existing output was impossible to parse. Instead of raising an error we raise a warning message and let the functional test fail with a default value.
Refs #6891
-
pylint.testutils.primer
is now a private API.Refs #6905
-
We changed the way we handle the changelog internally by using towncrier. If you're a contributor you won't have to fix merge conflicts in the changelog anymore.
Closes #6974
-
Pylint is now using Scorecards to implement security recommendations from the
OpenSSF <https://openssf.org/>
_. This is done in order to secure our supply chains using a combination of automated tooling and best practices, most of which were already implemented before.Refs #7267
v2.14.5
-
Fixed a crash in the
undefined-loop-variable
check 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
fixme
and its interaction withuseless-suppression
. -
Allow lists of default values in parameter documentation for
Numpy
style.Closes #4035
v2.14.4
-
The
differing-param-doc
check was triggered by positional only arguments.Closes #6950
-
Fixed an issue where scanning
.
directory recursively with--ignore-path=^path/to/dir
is not ignoring thepath/to/dir
directory.Closes #6964
-
Fixed regression that didn't allow quoted
init-hooks
in option files.Closes #7006
-
Fixed a false positive for
modified-iterating-dict
when 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.cfg
files. Only.cfg
files that are exactly namedsetup.cfg
require section names that start withpylint.
.Closes #3630
-
Don't report
import-private-name
for relative imports.Closes #7078
v2.14.3
-
Fixed two false positives for
bad-super-call
for calls that refer to a non-direct parent. -
Fixed a false positive for
useless-super-delegation
for subclasses that specify the number of of parameters against a parent that uses a variadic argument.Closes #2270
-
Allow suppressing
undefined-loop-variable
andundefined-variable
without raisinguseless-suppression
. -
Fixed false positive for
undefined-variable
for__class__
in inner methods.Closes #4032
v2.14.2
-
Fixed a false positive for
unused-variable
when a function returns anargparse.Namespace
object.Closes #6895
-
Avoided raising an identical
undefined-loop-variable
message 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-string
if the left side of a%
is not a string.Closes #6689
-
Fixed a false positive in
unnecessary-list-index-lookup
andunnecessary-dict-index-lookup
when the subscript is updated in the body of a nested loop.Closes #6818
-
Fixed an issue with multi-line
init-hook
options which did not record the line endings.Closes #6888
-
Fixed a false positive for
used-before-assignment
when a try block returns but an except handler defines a name via type annotation. -
--errors-only
no longer enables previously disabled messages. It was acting as "emit all and only error messages" without being clearly documented that way.Closes #6811
v2.14.1
-
Avoid reporting
unnecessary-dict-index-lookup
orunnecessary-list-index-lookup
when 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-import
when aliasingtyping
e.g. ast
and guarding imports undert.TYPE_CHECKING
.Closes #3846
-
Fixed a false positive regression in 2.13 for
used-before-assignment
where it is safe to rely on a name defined only in anexcept
block because theelse
block 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_import
extension.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-value
will still work on both new messages.Refs #6794
v2.14.0
Summary -- Release highlights
With 2.14 pylint
only supports Python version 3.7.2 and above.
We introduced several new checks among which duplicate-value
for sets,
comparison-of-constants
, and checks related to lambdas. We removed no-init
and
made no-self-use
optional as they were too opinionated. We also added an option
to generate a toml configuration: --generate-toml-config
.
We migrated to argparse
from optparse
and refactored the configuration handling
thanks to Daniël van Noord. On the user side it should change the output of the
--help
command, and some inconsistencies and bugs should disappear. The behavior
between options set in a config file versus on the command line will be more consistent. For us,
it will permit to maintain this part of the code easily in the future and anticipate
optparse
's removal in Python 3.12.
As a result of the refactor there are a lot of internal deprecations. If you're a library maintainer that depends on pylint, please verify that you're ready for pylint 3.0 by activating deprecation warnings.
We continued the integration of pylint-error
and are now at 33%!. We still welcome
any community effort to help review, integrate, and add good/bad examples in #5953.
This should be doable without any pylint
or astroid
knowledge, so this is the perfect
entrypoint if you want to contribute to pylint
or open source without any experience
with our code!
New checkers
-
Added new checker
comparison-of-constants
.Closes #6076
-
Added new checker
typevar-name-mismatch
: TypeVar must be assigned to a variable with the same name as its name argument.Closes #5224
-
invalid-enum-extension
: Used when a class tries to extend an inherited Enum class.Closes #5501
-
Added new checker
typevar-double-variance
: The "covariant" and "contravariant" keyword arguments cannot both be set to "True" in a TypeVar.Closes #5895
-
Add new check
unnecessary-dunder-call
for unnecessary dunder method calls.Closes #5936
-
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 new checker
unnecessary-list-index-lookup
for indexing into a list while iterating overenumerate()
.Closes #4525
-
Added new message called
duplicate-value
which identifies duplicate values inside sets.Closes #5880
-
Added the
super-without-brackets
checker, raised when a super call is missing its brackets.Closes #4008
Removed checkers
-
The
no-init
(W0232) warning has been removed. It's ok to not have an__init__
in a class.Closes #2409
-
Removed the
assign-to-new-keyword
message as there are no new keywords in the supported Python versions any longer.Closes #4683
-
Moved
no-self-use
check to optional extension. You now need to explicitly enable this check usingload-plugins=pylint.extensions.no_self_use
.Closes #5502
Extensions
-
RedefinedLoopNameChecker
- Added optional extension
redefined-loop-name
to emit messages when a loop variable is redefined in the loop body.
Closes #5072
- Added optional extension
-
DocStringStyleChecker
- Re-enable checker
bad-docstring-quotes
for Python <= 3.7.
Closes #6087
- Re-enable checker
-
NoSelfUseChecker
- Added
no-self-use
check, previously enabled by default.
Closes #5502
- Added
Other Changes
-
Started ignoring underscore as a local variable for
too-many-locals
.Closes #6488
-
Pylint can now be installed with an extra-require called
spelling
(pip install pylint[spelling]
). This will addpyenchant
to pylint's dependencies. You will still need to install the requirements forpyenchant
(theenchant
library and any dictionaries) yourself. You will also need to set thespelling-dict
option.Refs #6462
-
Improved wording of the message of
deprecated-module
Closes #6169
-
Pylint
now requires Python 3.7.2 or newer to run.Closes #4301
-
We made a greater effort to reraise failures stemming from the
astroid
library asAstroidError
, with the effect that pylint emitsastroid-error
rather than merelyfatal
. Regardless, please report any such issues you encounter! -
We have improved our recognition of inline disable and enable comments. It is now possible to disable
bad-option-value
inline (as long as you disable it before the bad option value is raised, i.e.disable=bad-option-value,bad-message
notdisable=bad-message,bad-option-value
) as well as certain other previously unsupported messages.Closes #3312
-
The main checker name is now
main
instead ofmaster
. The configuration does not need to be updated as sections' name are optional.Closes #5467
-
Update
invalid-slots-object
message to show bad object rather than its inferred value.Closes #6101
-
Fixed a crash in the
not-an-iterable
checker involving multiple starred expressions inside a call.Closes #6372
-
Fixed a crash in the
unused-private-member
checker involving chained private attributes.Closes #6709
-
Disable spellchecking of mypy rule names in ignore directives.
Closes #5929
-
implicit-str-concat
will now be raised on calls likeopen("myfile.txt" "a+b")
too.Closes #6441
-
Fix a failure to respect inline disables for
fixme
occurring on the last line of a module when pylint is launched with--enable=fixme
. -
Removed the broken
generate-man
option. -
Fixed failure to enable
deprecated-module
after adisable=all
by makingImportsChecker
solely responsible for emittingdeprecated-module
instead of sharing responsibility withStdlibChecker
. (This could have led to double messages.) -
Added the
generate-toml-config
option.Refs #5462
-
bad-option-value
will be emitted whenever a configuration value or command line invocation includes an unknown message.Closes #4324
-
Added the
unrecognized-option
message. Raised if we encounter any unrecognized options.Closes #5259
-
Fix false negative for
bad-string-format-type
if the value to be formatted is passed in as a variable holding a constant. -
The concept of checker priority has been removed.
-
The
cache-max-size-none
checker has been renamed tomethod-cache-max-size-none
.Closes #5670
-
The
method-cache-max-size-none
checker will now also checkfunctools.cache
.Closes #5670
-
BaseChecker
classes now require thelinter
argument to be passed. -
The
set_config_directly
decorator has been removed. -
Don't report
useless-super-delegation
for the__hash__
method in classes that also override the__eq__
method.Closes #3934
-
Fix falsely issuing
useless-suppression
on thewrong-import-position
checker.Closes #5219
-
Fixed false positive
no-member
for Enums with self-defined members.Closes #5138
-
Fix false negative for
no-member
when attempting to assign an instance attribute to itself without any prior assignment.Closes #1555
-
Changed message type from
redefined-outer-name
toredefined-loop-name
(optional extension) for redefinitions of outer loop variables by inner loops.Closes #5608
-
By default the similarity checker will now ignore imports and ignore function signatures when computing duplication. If you want to keep the previous behaviour set
ignore-imports
andignore-signatures
toFalse
. -
Pylint now expands the user path (i.e.
~
tohome/yusef/
) and expands environment variables (i.e.home/$USER/$project
tohome/yusef/pylint
forUSER=yusef
andproject=pylint
) for pyreverse'soutput-directory
,import-graph
,ext-import-graph
,int-import-graph
options, and the spell checker'sspelling-private-dict-file
option.Refs #6493
-
Don't emit
unsubscriptable-object
for string annotations. Pylint doesn't check if class is only generic in type stubs only. -
Fix pyreverse crash
RuntimeError: dictionary changed size during iteration
Refs #6612
-
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
pyreverse
diagrams. -
Fix bug where it writes a plain text error message to stdout, invalidating output formats.
Closes #6597
-
The refactoring checker now also raises 'consider-using-a-generator' messages for
max()
,min()
andsum()
.Refs #6595
-
Update ranges for
using-constant-test
andmissing-parentheses-for-call-in-test
error messages. -
Don't emit
no-member
inside type annotations withfrom __future__ import annotations
.Closes #6594
-
Fix
unexpected-special-method-signature
false positive for__init_subclass__
methods with one or more arguments.Closes #6644
Deprecations
-
The
ignore-mixin-members
option has been deprecated. You should now use the newignored-checks-for-mixins
option.Closes #5205
-
interfaces.implements
has been deprecated and will be removed in 3.0. Please use standard inheritance patterns instead of__implements__
.Refs #2287
-
All
Interface
classes inpylint.interfaces
have 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
-
MapReduceMixin
has been deprecated.BaseChecker
now implementsget_map_data
andreduce_map_data
. If a checker actually needs to reduce data it should defineget_map_data
as returning something different thanNone
and let itsreduce_map_data
handle a list of the types returned byget_map_data
. An example can be seen by looking atpylint/checkers/similar.py
. -
The
config
attribute ofBaseChecker
has been deprecated. You can usechecker.linter.config
to access the global configuration object instead of a checker-specific object.Refs #5392
-
The
level
attribute ofBaseChecker
has been deprecated: everything is now displayed in--help
, all the time.Refs #5392
-
The
set_option
method ofBaseChecker
has been deprecated. You can usechecker.linter.set_option
to set an option on the global configuration object instead of a checker-specific object.Refs #5392
-
The
options_providers
attribute ofArgumentsManager
has been deprecated.Refs #5392
-
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
-
The
method-cache-max-size-none
checker will now also checkfunctools.cache
. -
The
config
attribute ofPyLinter
is now of theargparse.Namespace
type instead ofoptparse.Values
.Refs #5392
-
UnsupportedAction
has been deprecated.Refs #5392
-
OptionsManagerMixIn
has been deprecated.Refs #5392
-
OptionParser
has been deprecated.Refs #5392
-
Option
has been deprecated.Refs #5392
-
OptionsProviderMixIn
has been deprecated.Refs #5392
-
ConfigurationMixIn
has been deprecated. -
The
option_groups
attribute ofPyLinter
has been deprecated.Refs #5392
-
get_global_config
has been deprecated. You can now access all global options fromchecker.linter.config
.Refs #5392
-
OptionsManagerMixIn
has been replaced withArgumentsManager
.ArgumentsManager
is considered private API and most methods that were public onOptionsManagerMixIn
have now been deprecated and will be removed in a future release.Refs #5392
-
OptionsProviderMixIn
has been replaced withArgumentsProvider
.ArgumentsProvider
is considered private API and most methods that were public onOptionsProviderMixIn
have now been deprecated and will be removed in a future release.Refs #5392
-
pylint.pyreverse.ASTWalker
has 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
-
is_class_subscriptable_pep585_with_postponed_evaluation_enabled
has been deprecated. Useis_postponed_evaluation_enabled(node) and is_node_in_type_annotation_context(node)
instead.Refs #6536
v2.13.9
2.13.9
is the last release supporting python interpreter between 3.6.2 and 3.7.2.
-
Respect ignore configuration options with
--recursive=y
.Closes #6471
-
Fix false positives for
no-name-in-module
andimport-error
fornumpy.distutils
andpydantic
.Closes #6497
-
Fix
IndexError
crash inuninferable_final_decorators
method.Relates to #6531
-
Fix a crash in
unnecessary-dict-index-lookup
when subscripting an attribute.Closes #6557
-
Fix a crash when accessing
__code__
and assigning it to a variable.Closes #6539
-
Fix a false positive for
undefined-loop-variable
when usingenumerate()
.Closes #6593
v2.13.8
-
Fix a false positive for
undefined-loop-variable
for a variable used in a lambda inside the first of multiple loops.Closes #6419
-
Fix a crash when linting a file that passes an integer
mode=
toopen
Closes #6414
-
Avoid reporting
superfluous-parens
on expressions using theis not
operator.Closes #5930
-
Fix a false positive for
undefined-loop-variable
when theelse
of afor
loop raises or returns.Closes #5971
-
Fix false positive for
unused-variable
for classes inside functions and where a metaclass is provided via a call.Closes #4020
-
Fix false positive for
unsubscriptable-object
in Python 3.8 and below for statements guarded byif TYPE_CHECKING
.Closes #3979
v2.13.7
-
Fix a crash caused by using the new config from 2.14.0 in 2.13.x code.
Closes #6408
v2.13.6
-
Fix a crash in the
unsupported-membership-test
checker when assigning multiple constants to class attributes including__iter__
via unpacking.Closes #6366
-
Asterisks are no longer required in Sphinx and Google style parameter documentation for
missing-param-doc
and are parsed correctly. -
Fixed a false positive for
unused-variable
when a builtin specified in--additional-builtins
is given a type annotation.Closes #6388
-
Fixed an
AstroidError
in 2.13.0 raised by theduplicate-code
checker withignore-imports
orignore-signatures
enabled.Closes #6301
v2.13.5
-
Fix false positive regression in 2.13.0 for
used-before-assignment
for homonyms between variable assignments in try/except blocks and variables in subscripts in comprehensions. -
lru-cache-decorating-method
has been renamed tocache-max-size-none
and will only be emitted whenmaxsize
isNone
.Closes #6180
-
Fix false positive for
unused-import
when disabling bothused-before-assignment
andundefined-variable
.Closes #6089
-
Narrow the scope of the
unnecessary-ellipsis
checker to:- functions & classes which contain both a docstring and an ellipsis.
- A body which contains an ellipsis
nodes.Expr
node & at least one other statement.
-
Fix false positive for
used-before-assignment
for assignments taking place via nonlocal declarations after an earlier type annotation.Closes #5394
-
Fix crash for
redefined-slots-in-subclass
when the type of the slot is not a const or a string.Closes #6100
-
Only raise
not-callable
when all the inferred values of a property are not callable.Closes #5931
-
Fix a false negative for
subclassed-final-class
when a set of other messages were disabled.
v2.13.4
-
Fix false positive regression in 2.13.0 for
used-before-assignment
for homonyms between variable assignments in try/except blocks and variables in a comprehension's filter.Closes #6035
-
Include
testing_pylintrc
in source and wheel distributions.Closes #6028
-
Fix crash in
super-init-not-called
checker when usingctypes.Union
.Closes #6027
-
Fix crash for
unneccessary-ellipsis
checker when an ellipsis is used inside of a container or a lambda expression.
v2.13.3
-
Fix false positive for
unnecessary-ellipsis
when using an ellipsis as a default argument.Closes #5973
-
Fix crash involving unbalanced tuple unpacking.
Closes #5998
-
Fix false positive for 'nonexistent-operator' when repeated '-' are separated (e.g. by parens).
Closes #5769
v2.13.2
-
Fix crash when subclassing a
namedtuple
.Closes #5982
-
Fix false positive for
superfluous-parens
for patterns like "return (a or b) in iterable".Closes #5803
-
Fix a false negative regression in 2.13.0 where
protected-access
was 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-assignment
was emitted for the usage of a nonlocal in a try block.Fixes #5965
-
Avoid emitting
raising-bad-type
when 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.
HVACModeT
orIPAddressT
.Closes #5981
-
Fixed false positive for
unused-argument
when anonlocal
name 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/dict
when the list/dict/set being iterated through is a function call.Closes #5969
-
Don't emit
broken-noreturn
andbroken-collections-callable
errors insideif TYPE_CHECKING
blocks.
v2.13.0
: 2.13.0
-
Add missing dunder methods to
unexpected-special-method-signature
check. -
No longer emit
no-member
in for loops that referenceself
if the binary operation that started the for loop uses aself
that is encapsulated in tuples or lists.Ref PyCQA/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
--notes
options 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 the
def
orclass
+ the name of the class/function are covered.Closes #5466
-
using-f-string-in-unsupported-version
andusing-final-decorator-in-unsupported-version
msgids were renamed fromW1601
andW1602
toW2601
andW2602
. Disabling using these msgids will break. This is done in order to restore consistency with the already existing msgids forapply-builtin
andbasestring-builtin
from 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
--recursive
option to allow recursive discovery of all modules and packages in subtree. Running pylint with--recursive=y
option will check all discovered.py
files and packages found inside subtree of directory provided as parameter to pylint.Closes #352
-
Add
modified-iterating-list
,modified-iterating-dict
andmodified-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-none
checker 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-differ
andarguments-renamed
when methods were defined outside the top level of a class.Closes #5648
-
Removed the deprecated
check_docs
extension. You can use thedocparams
checker to get the checks previously included incheck_docs
.Closes #5322
-
Added a
testutil
extra require to the packaging, asgitpython
should 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_hash
optional extension.Closes #5025
-
Fixed an issue where
ungrouped-imports
could not be disabled without raisinguseless-suppression
.Ref #2366
-
Added several checkers to deal with unicode security issues (see
Trojan Sources <https://trojansource.codes/>
_ andPEP 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-encoding
checks that the file is encoded in UTF-8 as suggested byPEP8 <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 changesinvalid-unicode-codec
checks that they aren't used, to allow for backwards compatibility. -
bidirectional-unicode
checks 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-space
andinvalid-character-nul
to check for possibly harmful unescaped characters.
Closes #5281
-
-
Use the
tomli
package instead oftoml
to parse.toml
files.
Closes #5885
- Fix false positive - Allow unpacking of
self
in a subclass oftyping.NamedTuple
.
Closes #5312
- Fixed false negative
unpacking-non-sequence
when 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-comprehension
when 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-undefined
whenglobal
is used with a class nameCloses #3088
-
Fixed false positive for
unused-variable
when anonlocal
name is assigned as part of a multi-name assignment.Closes #3781
-
Fixed a crash in
unspecified-encoding
checker when providingNone
to themode
argument of anopen()
call.Closes #5731
-
Fixed a crash involving a
NewType
named with an f-string.Closes #5770 Ref PyCQA/astroid#1400
-
Improved
bad-open-mode
message when providingNone
to themode
argument of anopen()
call.Closes #5733
-
Added
lru-cache-decorating-method
checker 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 PyCQA/astroid#1392
-
Fixed false positive for
unused-argument
when a method overridden in a subclass does nothing with the value of a keyword-only argument.Closes #5771 Ref PyCQA/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. See
Confusable Characters in PEP 672 <https://www.python.org/dev/peps/pep-0672/#confusable-characters-in-identifiers>
_ -
When run in parallel mode
pylint
now pickles the data passed to subprocesses with thedill
package. Thedill
package has therefore been added as a dependency. -
An astroid issue where symlinks were not being taken into account was fixed
Closes #1470 Closes #3499 Closes #4302 Closes #4798 Closes #5081
-
Fix a crash in
unused-private-member
checker when analyzing code usingtype(self)
in bound methods.Closes #5569
-
Optimize parsing of long lines when
missing-final-newline
is enabled.Closes #5724
-
Fix false positives for
used-before-assignment
from using named expressions in a ternary operator test and using that expression as a call argument. -
Fix false positive for
undefined-variable
whennamedtuple
class attributes are used as return annotations.Closes #5568
-
Fix false negative for
undefined-variable
and 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-assignment
instead ofundefined-variable
when attempting to access unused type annotations.Closes #5713
-
Added confidence level
CONTROL_FLOW
for warnings relying on assumptions about control flow. -
used-before-assignment
now 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-assignment
when a conditional or context manager intervened before the try statement that suggested it might fail.Closes #4045
-
Fixed false negative for
used-before-assignment
in 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-slot
when the slotted class defined__setattr__
.Closes #3793
-
Fixed a false positive for
invalid-class-object
when the object being assigned to the__class__
attribute is uninferable. -
Fixed false positive for
used-before-assignment
with 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-assigned
when thedel
statement 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-Locks.html. This behavior can be reverted by redefining theignore-patterns
option.Closes #367
-
Fixed a false positive for
used-before-assignment
when a named expression appears as the first value in a container.Closes #5112
-
used-before-assignment
now assumes that assignments in except blocks may not have occurred and warns accordingly.Closes #4761
-
When evaluating statements after an except block,
used-before-assignment
assumes that assignments in the except blocks took place if the corresponding try block contained a return statement.Closes #5500
-
Fixed a false negative for
used-before-assignment
when some but not all except handlers defined a name relied upon after an except block when the corresponding try block contained a return statement.Closes #5524
-
When evaluating statements in the
else
clause of a loop,used-before-assignment
assumes that assignments in the except blocks took place if the except handlers constituted the only ways for the loop to finish without breaking early.Closes #5683
-
used-before-assignment
now checks names in try blocks. -
Fixed false positive with
used-before-assignment
for assignment expressions in lambda statements. -
Fixed a false positive (affecting unreleased development) for
used-before-assignment
involving homonyms between filtered comprehensions and assignments in except blocks.Closes #5586
-
Fixed crash with slots assignments and annotated assignments.
Closes #5479
-
Fixed crash on list comprehensions that used
type
as inner variable name.Closes #5461
-
Fixed crash in
use-maxsplit-arg
checker when providing thesep
argument tostr.split()
by keyword.Closes #5737
-
Fix false positive for
unused-variable
for a comprehension variable matching an outer scope type annotation.Closes #5326
-
Fix false negative for
undefined-variable
for a variable used multiple times in a comprehension matching an unused outer scope type annotation.Closes #5654
-
Some files in
pylint.testutils
were deprecated. In the future imports should be done from thepylint.testutils.functional
namespace directly. -
Fixed false positives for
no-value-for-parameter
with variadic positional arguments.Closes #5416
-
safe_infer
no longer makes an inference when given two function definitions with differing numbers of arguments.Closes #3675
-
Fix
comparison-with-callable
false positive for callables that raise, such as typing constants.Closes #5557
-
Fixed a crash on
__init__
nodes when the attribute was previously uninferable due to a cache limit size. This limit can be hit when the inheritance pattern of a class (and therefore of the__init__
attribute) is very large.Closes #5679
-
Fix false positive for
used-before-assignment
from a class definition nested under a function subclassing a class defined outside the function.Closes #4590
-
Fix
unnecessary_dict_index_lookup
false positive when deleting a dictionary's entry.Closes #4716
-
Fix false positive for
used-before-assignment
when an except handler shares a name with a test in a filtered comprehension.Closes #5817
-
Fix crash in
unnecessary-dict-index-lookup
checker if the output ofitems()
is assigned to a 1-tuple.Closes #5504
-
When invoking
pylint
,epylint
,symilar
orpyreverse
by importing them in a python file you can now pass anargv
keyword besides patchingsys.argv
.Closes #5320
-
The
PyLinter
class will now be initialized with aTextReporter
as its reporter if none is provided. -
Fix
super-init-not-called
when parent orself
is aProtocol
Closes #4790
-
Fix false positive
not-callable
with attributes that aliasNamedTuple
Partially closes #1730
-
Emit
redefined-outer-name
when a nested except handler shadows an outer one. -
Fix false positive
super-init-not-called
for classes that inherit theirinit
from a parent.Closes #4941
-
encoding
can now be supplied as a positional argument to calls that open files without triggeringunspecified-encoding
.Closes #5638
-
Fatal errors now emit a score of 0.0 regardless of whether the linted module contained any statements
Closes #5451
-
fatal
was added to the variables permitted in score evaluation expressions. -
The default score evaluation now uses a floor of 0.
Closes #2399
-
Fix false negative for
consider-iterating-dictionary
during membership checks encapsulated in iterables ornot in
checksCloses #5323
-
Fixed crash on uninferable decorators on Python 3.6 and 3.7
-
Add checker
unnecessary-ellipsis
: Emitted when the ellipsis constant is used unnecessarily.Closes #5460
-
Disable checker
bad-docstring-quotes
for Python <= 3.7, because in these versions the line numbers for decorated functions and classes are not reliable which interferes with the checker.Closes #3077
-
Fixed incorrect classification of Numpy-style docstring as Google-style docstring for docstrings with property setter documentation. Docstring classification is now based on the highest amount of matched sections instead of the order in which the docstring styles were tried.
-
Fixed detection of
arguments-differ
when superclass static methods lacked a@staticmethod
decorator.Closes #5371
-
TypingChecker
-
Added new check
broken-noreturn
to detect broken uses oftyping.NoReturn
ifpy-version
is set to Python3.7.1
or below. https://bugs.python.org/issue34921 -
Added new check
broken-collections-callable
to detect broken uses ofcollections.abc.Callable
ifpy-version
is set to Python3.9.1
or below. https://bugs.python.org/issue42965
-
-
The
testutils
for unittests now acceptend_lineno
andend_column
. Tests without these will trigger aDeprecationWarning
. -
arguments-differ
will no longer complain about method redefinitions with extra parameters that have default values. -
Fixed false positive
unexpected-keyword-arg
for decorators.Closes #258
-
Importing the deprecated stdlib module
xml.etree.cElementTree
now emitsdeprecated_module
.Closes #5862
-
Disables for
deprecated-module
and similar warnings for stdlib features deprecated in newer versions of Python no longer raiseuseless-suppression
when linting with older Python interpreters where those features are not yet deprecated. -
Importing the deprecated stdlib module
distutils
now emitsdeprecated_module
on Python 3.10+. -
missing-raises-doc
will now check the class hierarchy of the raised exceptions.. code-block:: python
def my_function() """My function.
Raises: Exception: if something fails """ raise ValueError
Closes #4955
-
Allow disabling
duplicate-code
with a disable comment when running through pylint.Closes #214
-
Improve
invalid-name
check forTypeVar
names. The accepted pattern can be customized with--typevar-rgx
.Closes #3401
-
Added new checker
typevar-name-missing-variance
. Emitted when a covariant or contravariantTypeVar
does not end with_co
or_contra
respectively or when aTypeVar
is not either but has a suffix. -
Allow usage of mccabe 0.7.x release
Closes #5878
-
Fix
unused-private-member
false positive when accessing private methods throughproperty
.Closes #4756
v2.12.2
-
Fixed a false positive for
unused-import
where everything was not analyzed properly inside typing guards. -
Fixed a false-positive regression for
used-before-assignment
for typed variables in the body of class methods that reference the same classCloses #5342
-
Specified that the
ignore-paths
option considers "" to represent a windows directory delimiter instead of a regular expression escape character. -
Fixed a crash with the
ignore-paths
option 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
endLine
andendColumn
keys 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-dictionary
during membership checks encapsulated in iterables ornot in
checksCloses #5323
-
unused-import
now check all ancestors for typing guardsCloses #5316
v2.12.1
: 2.12.1
-
Require Python
3.6.2
to run pylint.Closes #5065
v2.12.0
: 2.12.0
-
Upgrade astroid to 2.9.0
Closes #4982
-
Add ability to add
end_line
andend_column
to the--msg-template
option. With the standardTextReporter
this 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 graphiz
message which isn't needed for puml output format. -
MessageTest
of the unittesttestutil
now requires theconfidence
attribute to match the expected value. If none is provided it is set toUNDEFINED
. -
add_message
of the unittesttestutil
now actually handles thecol_offset
parameter and allows it to be checked against actual output in a test. -
Fix a crash in the
check_elif
extensions 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-expression
when condition can be inferred as False.Closes #5200
-
Fix exception when pyreverse parses
property function
of a class. -
The functional
testutils
now acceptend_lineno
andend_column
. Expected output files without these will trigger aDeprecationWarning
. Expected output files can be easily updated with thepython tests/test_functional.py --update-functional-output
command. -
The functional
testutils
now correctly check the distinction betweeenHIGH
andUNDEFINED
confidence. Expected output files without defiendconfidence
levels will now trigger aDeprecationWarning
. Expected output files can be easily updated with thepython tests/test_functional.py --update-functional-output
command. -
The functional test runner now supports the option
min_pyver_end_position
to control on which python versions theend_lineno
andend_column
attributes should be checked. The default value is 3.8. -
Fix
accept-no-yields-doc
andaccept-no-return-doc
not allowing missingyield
orreturn
documentation when a docstring is partially correctCloses #5223
-
Add an optional extension
consider-using-any-or-all
: Emitted when afor
loop only produces a boolean and could be replaced byany
orall
using 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-doc
Closes #3799
-
Add checkers
overridden-final-method
&subclassed-final-class
Closes #3197
-
Fixed
protected-access
for accessing of attributes and methods of inner classesCloses #3066
-
Added support for
ModuleNotFoundError
(import-error
andno-name-in-module
).ModuleNotFoundError
inherits fromImportError
and was added in Python3.6
-
undefined-variable
now correctly flags variables which only receive a type annotations and never get assigned a valueCloses #5140
-
undefined-variable
now correctly considers the line numbering and order of classes used in metaclass declarationsCloses #4031
-
used-before-assignment
now correctly considers references to classes as type annotation or default values in first-level methodsCloses #3771
-
undefined-variable
andunused-variable
now correctly trigger for assignment expressions in functions defaultsFixes part of #3688
-
undefined-variable
now 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-extensions
command 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-import
messageCloses #3859
-
In length checker,
len-as-condition
has been renamed asuse-implicit-booleaness-not-len
in order to be consistent withuse-implicit-booleaness-not-comparison
. -
Created new
UnsupportedVersionChecker
checker class that includes checks for features not supported by all versions indicated by apy-version
.- Added
using-f-string-in-unsupported-version
checker. Issued whenpy-version
is set to a version that does not support f-strings (< 3.6)
- Added
-
Fix
useless-super-delegation
false positive when default keyword argument is a variable. -
Properly emit
duplicate-key
when Enum members are duplicate dictionary keysCloses #5150
-
Use
py-version
setting for alternative union syntax check (PEP 604), instead of the Python interpreter version. -
Subclasses of
dict
are regarded as reversible by thebad-reversed-sequence
checker (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-doc
now correctly parses asterisks for variable length and keyword parametersCloses #3733
-
mising-param-doc
now correctly handles Numpy parameter documentation without explicit typingCloses #5222
-
pylint
no 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-paths
option to allow both Posix and Windows pathsCloses #5194
-
Fix double emitting of
not-callable
on inferrableproperties
Closes #4426
-
self-cls-assignment
now also considers tuple assignment -
Fix
missing-function-docstring
not being able to check__init__
and other magic methods even if theno-docstring-rgx
setting was set to do so -
Added
using-final-decorator-in-unsupported-version
checker. Issued whenpy-version
is set to a version that does not supporttyping.final
(< 3.8) -
Added configuration option
exclude-too-few-public-methods
to allow excluding classes from themin-public-methods
checker.Closes #3370
-
The
--jobs
parameter now fallbacks to 1 if the host operating system does not have functioning shared semaphore implementation.Closes #5216
-
Fix crash for
unused-private-member
when 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-constant
to its own extensioncomparison_placement
. This checker was opinionated and now no longer a default. It can be reactived by addingpylint.extensions.comparison_placement
toload-plugins
in your config.Closes #1064
-
A new
bad-configuration-section
checker 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-access
on (outer) class traversal -
Added new checker
useless-with-lock
to 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
True
andFalse
in config files. -
Fix crash on
open()
calls when themode
argument 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-string
ifpy-version
is set to Python <3.6
.f-strings
were added in Python3.6
Closes #5019
-
Fix regression for
unspecified-encoding
withpathlib.Path.read_text()
Closes #5029
-
Don't emit
consider-using-f-string
if the variables to be interpolated include a backslash -
Fixed false positive for
cell-var-from-loop
when variable is used as the default value for a keyword-only parameter.Closes #5012
-
Fix false-positive
undefined-variable
withLambda
,IfExp
, and assignment expression. -
Fix false-positive
useless-suppression
forwrong-import-order
Closes #2366
-
Fixed
toml
dependency issueCloses #5066
-
Fix false-positive
useless-suppression
forline-too-long
Closes #4212
-
Fixed
invalid-name
not checking parameters of overwritten baseobject
methodsCloses #3614
-
Fixed crash in
consider-using-f-string
ifformat
is not calledCloses #5058
-
Fix crash with
AssignAttr
inif TYPE_CHECKING
blocks.Closes #5111
-
Improve node information for
invalid-name
on function argument. -
Prevent return type checkers being called on functions with ellipses as body
Closes #4736
-
Add
is_sys_guard
andis_typing_guard
helper functions from astroid topylint.checkers.utils
. -
Fix regression on ClassDef inference
-
Fix regression on Compare node inference
Closes #5048
-
Fix false-positive
isinstance-second-argument-not-valid-type
withtyping.Callable
. -
It is now recommended to do
pylint
development onPython
3.8 or higher. This allows using the latestast
parser. -
All standard jobs in the
pylint
CI now run onPython
3.8 by default. We still support python 3.6 and 3.7 and run tests for those interpreters. -
TypingChecker
- Fix false-negative for
deprecated-typing-alias
andconsider-using-alias
withtyping.Type
+typing.Callable
.
- Fix false-negative for
Configuration
-
If you want to rebase/retry this MR, check this box
This MR has been generated by Renovate Bot.