It's not just a linter that annoys you!
Release date: 2022-10-21
Fix a false positive for simplify-boolean-expression
when multiple values
are inferred for a constant.
Closes #7626
Remove __index__
dunder method call from unnecessary-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.
Add a keyword-only compare_constants
argument to safe_infer
.
Refs #7626
Sort --generated-rcfile
output.
Refs #7655
Fix the message for unnecessary-dunder-call
for __aiter__
and
__anext__
. Also
only emit the warning when py-version
>= 3.10.
Closes #7529
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.
Closes #7003, Refs #7096
Report no-self-argument
rather than no-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 aliasing typing
e.g. as t
and guarding imports under t.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
Add method name to the error messages of no-method-argument
and
no-self-argument
.
Closes #7507
Fixed a crash in the unhashable-member
checker when using a lambda
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 an ImportFrom
node.
Closes #4809
Fix false positive for undefined-loop-variable
in for-else
loops that use a function
having a return type annotation of NoReturn
or Never
.
Closes #7311
--help-msg
now accepts a comma-separated list of message IDs again.
Closes #7471
Fixed a case where custom plugins specified by command line could silently fail.
Specifically, if a plugin relies on the init-hook
option changing sys.path
before
it can be imported, this will now emit a bad-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 with for
loops on empty list.
Closes #7380
The docparams
extension now considers typing in Numpy style docstrings
as "documentation" for the missing-param-doc
message.
Refs #7398
Fix false positive for unused-variable
and unused-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
and missing-yields-doc
now respect
the no-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 with for
loops on empty list.
Closes #7380
Fix used-before-assignment
for functions/classes defined in type checking guard.
Closes #7368
Update modified_iterating
checker to fix a crash with for
loops on empty list.
Closes #7380
The docparams
extension now considers typing in Numpy style docstrings
as "documentation" for the missing-param-doc
message.
Refs #7398
Fix false positive for unused-variable
and unused-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
and missing-yields-doc
now respect
the no-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 with for
loops on empty list.
Closes #7380
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 !
Added new checker missing-timeout
to warn of default timeout values that could cause
a program to be hanging indefinitely.
Refs #6780
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 with KW_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 for contextlib.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
with break
and continue
statements in else
blocks.
Refs #7311
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 the del
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
to unhashable-member
and emit when creating sets and dicts,
not just when accessing dicts.
Closes #7034, Closes #7055
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 from sys.path
in modify_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
bad-exception-context
has been renamed to bad-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 to useless-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
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
Fixed a crash in the undefined-loop-variable
check when enumerate()
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 with useless-suppression
.
Allow lists of default values in parameter documentation for Numpy
style.
Closes #4035
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 the path/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 named setup.cfg
require section names that
start with pylint.
.
Closes #3630
Don't report import-private-name
for relative imports.
Closes #7078
Fixed two false positives for bad-super-call
for calls that refer to a non-direct parent.
Closes #4922, Closes #2903
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
and undefined-variable
without raising useless-suppression
.
Fixed false positive for undefined-variable
for __class__
in inner methods.
Closes #4032
Fixed a false positive for unused-variable
when a function returns an
argparse.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
and unnecessary-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