NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #501 most downloaded on PyPI
python code static checker
Last release today
02 Oct 2026
Release timing varies
gaps range from 9 days to 4 months
Most releases are documented
notes for 50 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
18 years old
218 releases · first in 2009
New beta release following a performance fix in the new pointless exception statement checks in https://github.com/PyCQA/pylint/issues/8073 and a fals
New beta release following a performance fix in the new pointless exception statement checks in https://github.com/PyCQA/pylint/issues/8073 and a false positive fixed in the unreleased consider-using-augmented-assign check in https://github.com/PyCQA/pylint/pull/8088. We're also using the latest version of astroid (2.13.3).
The complete changelog will be published when the actual 2.16.0 is released.
This is the beta version of 2.16.0 the complete changelog will be published when the actual 2.16.0 is released.
This is the beta version of 2.16.0 the complete changelog will be published when the actual 2.16.0 is released.
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 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!
Last but not least @clavedeluna and @nickdrozd became triagers, welcome to the team !
One column per quarter.
Nothing published for this version
Fix use-sequence-for-iteration when unpacking a set with *.
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 by if TYPE_CHECKING
are guarded again when used.
Closes #7979
Using custom braces in msg-template will now work properly.
Closes #5636
Fix false-positive for used-before-assignment in pattern matching with a guard.
Fix false-positive for used-before-assignment in pattern matching with a guard.
Closes #5327
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 the pylint_django plugin enabled.
Closes #7938
Document a known false positive for useless-suppression when disabling line-too-long in a module with only comments and no code.
Document a known false positive for useless-suppression when disabling
line-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
Fix deprecated-method false positive when alias for method is similar to name of deprecated method.
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 by
typing.TYPE_CHECKING later used in variable annotations.
Closes #7609
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
Fixes a crash in stop-iteration-return when the next builtin is
called without arguments.
Closes #7828
Fix false positive for unhashable-member when subclassing dict and using the subclass as a dictionary key.
Fix false positive for unhashable-member when subclassing dict and
using the subclass as a dictionary key.
Closes #7501
unnecessary-list-index-lookup will not be wrongly emitted if
enumerate is called with start.
Closes #7682
Don't warn about stop-iteration-return when using next() over
itertools.cycle.
Closes #7765
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
Fix a false positive for simplify-boolean-expression when multiple values are inferred for a constant.
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.
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.
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.
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
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.
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.
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.
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.
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.
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
Avoid reporting unnecessary-dict-index-lookup or unnecessary-list-index-lookup when the index lookup is part of a destructuring assignment.
Avoid reporting unnecessary-dict-index-lookup or unnecessary-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 aliasing typing e.g. as t
and guarding imports under t.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 an except block because the else 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 warning unknown-option-value (W0012). Deleted messages that do not exist
anymore in pylint now raise useless-option-value (R0022) instead of bad-option-value. This allows to
distinguish between genuine typos and configuration that could be cleaned up. Existing message disables for
bad-option-value will still work on both new messages.
Refs #6794
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…
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!
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 over enumerate().
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
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 using
load-plugins=pylint.extensions.no_self_use.
Closes #5502
RedefinedLoopNameChecker
redefined-loop-name to emit messages when a loop variable
is redefined in the loop body.Closes #5072
DocStringStyleChecker
bad-docstring-quotes for Python <= 3.7.Closes #6087
NoSelfUseChecker
no-self-use check, previously enabled by default.Closes #5502
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 add pyenchant to pylint's dependencies. You will still need to install the
requirements for pyenchant (the enchant library and any dictionaries) yourself. You will also
need to set the spelling-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 as AstroidError, with the effect that pylint emits astroid-error
rather than merely fatal. 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 not disable=bad-message,bad-option-value ) as well as certain other
previously unsupported messages.
Closes #3312
The main checker name is now main instead of master. 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 like open("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.
Closes #5283 Closes #1887
Fixed failure to enable deprecated-module after a disable=all
by making ImportsChecker solely responsible for emitting deprecated-module instead
of sharing responsibility with StdlibChecker. (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 to method-cache-max-size-none.
Closes #5670
The method-cache-max-size-none checker will now also check functools.cache.
Closes #5670
BaseChecker classes now require the linter 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 the wrong-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 to redefined-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 and ignore-signatures to False.
Pylint now expands the user path (i.e. ~ to home/yusef/) and expands environment variables (i.e. home/$USER/$project
to home/yusef/pylint for USER=yusef and project=pylint) for pyreverse's output-directory,
import-graph, ext-import-graph, int-import-graph options, and the spell checker's spelling-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.
Closes #4369 and #6523
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() and sum().
Refs #6595
Update ranges for using-constant-test and missing-parentheses-for-call-in-test
error messages.
Don't emit no-member inside type annotations with
from __future__ import annotations.
Closes #6594
Fix unexpected-special-method-signature false positive for __init_subclass__ methods with one or more arguments.
Closes #6644
The ignore-mixin-members option has been deprecated. You should now use the new
ignored-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 in pylint.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 implements get_map_data and
reduce_map_data. If a checker actually needs to reduce data it should define get_map_data
as returning something different than None and let its reduce_map_data handle a list
of the types returned by get_map_data.
An example can be seen by looking at pylint/checkers/similar.py.
The config attribute of BaseChecker has been deprecated. You can use checker.linter.config
to access the global configuration object instead of a checker-specific object.
Refs #5392
The level attribute of BaseChecker has been deprecated: everything is now
displayed in --help, all the time.
Refs #5392
The set_option method of BaseChecker has been deprecated. You can use checker.linter.set_option
to set an option on the global configuration object instead of a checker-specific object.
Refs #5392
The options_providers attribute of ArgumentsManager 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 check functools.cache.
The config attribute of PyLinter is now of the argparse.Namespace type instead of
optparse.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 of PyLinter has been deprecated.
Refs #5392
get_global_config has been deprecated. You can now access all global options from
checker.linter.config.
Refs #5392
OptionsManagerMixIn has been replaced with ArgumentsManager. ArgumentsManager is considered
private API and most methods that were public on OptionsManagerMixIn have now been deprecated and will
be removed in a future release.
Refs #5392
OptionsProviderMixIn has been replaced with ArgumentsProvider. ArgumentsProvider is considered
private API and most methods that were public on OptionsProviderMixIn 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.
Use is_postponed_evaluation_enabled(node) and is_node_in_type_annotation_context(node)
instead.
Refs #6536
Improved wording of the message of deprecated-module
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 not disable=bad-message,bad-option-value ) as well as certain other previously unsupported messages.
Closes #3312
Added new checker comparison-of-constants.
Closes #6076
Started ignoring underscore as a local variable for too-many-locals.
Closes #6488
Improved wording of the message of deprecated-module
Closes #6169
Pylint now requires Python 3.7.2 or newer to run.
Closes #4301
BaseChecker classes now require the linter argument to be passed.
Fix a failure to respect inline disables for fixme occurring on the last line
of a module when pylint is launched with --enable=fixme.
Update invalid-slots-object message to show bad object rather than its inferred value.
Closes #6101
The main checker name is now main instead of master. The configuration does not need to be updated as sections' name are optional.
Closes #5467
Added new checker typevar-name-mismatch: TypeVar must be assigned to a variable with the same name as its name argument.
Closes #5224
Pylint can now be installed with an extra-require called spelling (pip install pylint[spelling]).
This will add pyenchant to pylint's dependencies. You will still need to install the
requirements for pyenchant (the enchant library and any dictionaries) yourself. You will also
need to set the spelling-dict option.
Refs #6462
Removed the assign-to-new-keyword message as there are no new keywords in the supported Python
versions any longer.
Closes #4683
Fixed a crash in the not-an-iterable checker involving multiple starred expressions
inside a call.
Closes #6372
Fixed failure to enable deprecated-module after a disable=all
by making ImportsChecker solely responsible for emitting deprecated-module instead
of sharing responsibility with StdlibChecker. (This could have led to double messages.)
The no-init (W0232) warning has been removed. It's ok to not have an __init__ in a class.
Closes #2409
The config attribute of BaseChecker has been deprecated. You can use checker.linter.config
to access the global configuration object instead of a checker-specific object.
Ref #5392
The level attribute of BaseChecker has been deprecated: everything is now
displayed in --help, all the time.
Ref #5392
The options_providers attribute of ArgumentsManager has been deprecated.
Ref #5392
The option_groups attribute of PyLinter has been deprecated.
Ref #5392
All Interface classes in pylint.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
The set_option method of BaseChecker has been deprecated. You can use checker.linter.set_option
to set an option on the global configuration object instead of a checker-specific object.
Ref #5392
implicit-str-concat will now be raised on calls like open("myfile.txt" "a+b") too.
Closes #6441
The config attribute of PyLinter is now of the argparse.Namespace type instead of
optparse.Values.
Ref #5392
MapReduceMixin has been deprecated. BaseChecker now implements get_map_data and
reduce_map_data. If a checker actually needs to reduce data it should define get_map_data
as returning something different than None and let its reduce_map_data handle a list
of the types returned by get_map_data.
An example can be seen by looking at pylint/checkers/similar.py.
UnsupportedAction has been deprecated.
Ref #5392
OptionsManagerMixIn has been deprecated.
Ref #5392
OptionParser has been deprecated.
Ref #5392
Option has been deprecated.
Ref #5392
OptionsProviderMixIn has been deprecated.
Ref #5392
ConfigurationMixIn has been deprecated.
Ref #5392
get_global_config has been deprecated. You can now access all global options from
checker.linter.config.
Ref #5392
OptionsManagerMixIn has been replaced with ArgumentsManager. ArgumentsManager is considered
private API and most methods that were public on OptionsManagerMixIn have now been deprecated and will
be removed in a future release.
Ref #5392
OptionsProviderMixIn has been replaced with ArgumentsProvider. ArgumentsProvider is considered
private API and most methods that were public on OptionsProviderMixIn have now been deprecated and will
be removed in a future release.
Ref #5392
interfaces.implements has been deprecated and will be removed in 3.0. Please use standard inheritance
patterns instead of __implements__.
Ref #2287
invalid-enum-extension: Used when a class tries to extend an inherited Enum class.
Closes #5501
Added the unrecognized-option message. Raised if we encounter any unrecognized options.
Closes #5259
Added new checker typevar-double-variance: The "covariant" and "contravariant" keyword arguments
cannot both be set to "True" in a TypeVar.
Closes #5895
Re-enable checker bad-docstring-quotes for Python <= 3.7.
Closes #6087
Removed the broken generate-man option.
Closes #5283 Closes #1887
Fix false negative for bad-string-format-type if the value to be formatted is passed in
as a variable holding a constant.
Add new check unnecessary-dunder-call for unnecessary dunder method calls.
Closes #5936 Closes #6074
The cache-max-size-none checker has been renamed to method-cache-max-size-none.
Closes #5670
The method-cache-max-size-none checker will now also check functools.cache.
Closes #5670
unnecessary-lambda-assignment: Lambda expression assigned to a variable.
Define a function using the "def" keyword instead.
unnecessary-direct-lambda-call: Lambda expression called directly.
Execute the expression inline instead.
Closes #5976
potential-index-error: Emitted when the index of a list or tuple exceeds its length.
This checker is currently quite conservative to avoid false positives. We welcome
suggestions for improvements.
Closes #578
Added optional extension redefined-loop-name to emit messages when a loop variable
is redefined in the loop body.
Closes #5072
Changed message type from redefined-outer-name to redefined-loop-name
(optional extension) for redefinitions of outer loop variables by inner loops.
Closes #5608
The ignore-mixin-members option has been deprecated. You should now use the new
ignored-checks-for-mixins option.
Closes #5205
bad-option-value will be emitted whenever a configuration value or command line invocation
includes an unknown message.
Closes #4324
Avoid reporting superfluous-parens on expressions using the is not operator.
Closes #5930
Added the super-without-brackets checker, raised when a super call is missing its brackets.
Closes #4008
Added the generate-toml-config option.
Ref #5462
Added new checker unnecessary-list-index-lookup for indexing into a list while
iterating over enumerate().
Closes #4525
Fix falsely issuing useless-suppression on the wrong-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
The concept of checker priority has been removed.
Add a new command line option --minimal-messages-config for pytest, which disables all
irrelevant messages when running the functional tests.
duplicate-argument-name now only raises once for each set of duplicated arguments.
Fix bug where specifically enabling just await-outside-async was not possible.
The set_config_directly decorator has been removed.
Added new message called duplicate-value which identifies duplicate values inside sets.
Closes #5880
Pylint now expands the user path (i.e. ~ to home/yusef/) and expands environment variables (i.e. home/$USER/$project
to home/yusef/pylint for USER=yusef and project=pylint) for pyreverse's output-directory,
import-graph, ext-import-graph, int-import-graph options, and the spell checker's spelling-private-dict-file
option.
Relates to #6493
Created NoSelfUseChecker extension and moved the no-self-use check.
You now need to explicitly enable this check using
load-plugins=pylint.extensions.no_self_use.
Closes #5502
Fix saving of persistent data files in environments where the user's cache directory and the linted file are on a different drive.
Closes #6394
Don't emit unsubscriptable-object for string annotations.
Pylint doesn't check if class is only generic in type stubs only.
Closes #4369 and #6523
is_class_subscriptable_pep585_with_postponed_evaluation_enabled has been deprecated.
Use subscriptable_with_postponed_evaluation_enabled instead.
Ref #6536
2.13.9 is the last release supporting python interpreter between 3.6.2 and 3.7.2.
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 and import-error for numpy.distutils and pydantic.
Closes #6497
Fix IndexError crash in uninferable_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 using enumerate().
Closes #6593
Fix a false positive for undefined-loop-variable for a variable used in a lambda inside the first of multiple loops.
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= to open
Closes #6414
Avoid reporting superfluous-parens on expressions using the is not operator.
Closes #5930
Fix a false positive for undefined-loop-variable when the else of a for
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 by if TYPE_CHECKING.
Closes #3979
Fix a crash caused by using the new config from 2.14.0 in 2.13.x code.
Fix a crash caused by using the new config from 2.14.0 in 2.13.x code.
Closes #6408
Fix a crash in the unsupported-membership-test checker when assigning multiple constants to class attributes including __iter__ via unpacking.
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.
Closes #5815 Closes #5406
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 the duplicate-code checker with
ignore-imports or ignore-signatures enabled.
Closes #6301
Fix false positive regression in 2.13.0 for used-before-assignment for homonyms between variable assignments in try/except blocks and variables in sub
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.
Closes #6069 Closes #6136
lru-cache-decorating-method has been renamed to cache-max-size-none and
will only be emitted when maxsize is None.
Closes #6180
Fix false positive for unused-import when disabling both used-before-assignment and undefined-variable.
Closes #6089
Narrow the scope of the unnecessary-ellipsis checker to:
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.
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 c
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 using ctypes.Union.
Closes #6027
Fix crash for unneccessary-ellipsis checker when an ellipsis is used inside of a container or a lambda expression.
Closes #6036 Closes #6037 Closes #6048
Fix false positive for unnecessary-ellipsis when using an ellipsis as a default argument.
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
Fix crash when subclassing a namedtuple.
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
Fix a regression in 2.13.0 where used-before-assignment was emitted for the usage of a nonlocal in a try block.
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 or IPAddressT.
Closes #5981
Fixed false positive for unused-argument when a nonlocal 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 and broken-collections-callable errors
inside if TYPE_CHECKING blocks.
Removed the deprecated check_docs extension. You can use the docparams checker to get the checks previously included in check_docs.
Add missing dunder methods to unexpected-special-method-signature check.
No longer emit no-member in for loops that reference self if the binary operation that
started the for loop uses a self 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 or class + the name of the class/function
are covered.
Closes #5466
using-f-string-in-unsupported-version and using-final-decorator-in-unsupported-version msgids
were renamed from W1601 and W1602 to W2601 and W2602. Disabling using these msgids will break.
This is done in order to restore consistency with the already existing msgids for apply-builtin and
basestring-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 and modified-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 using load-plugins=pylint.extensions.private_import.
Closes #5463
Fixed crash from arguments-differ and arguments-renamed when methods were
defined outside the top level of a class.
Closes #5648
Removed the deprecated check_docs extension. You can use the docparams checker
to get the checks previously included in check_docs.
Closes #5322
Added a testutil extra require to the packaging, as gitpython should not be a dependency
all the time but is still required to use the primer helper code in pylint.testutil. You can
install it with pip 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 the pylint.extensions.eq_without_hash optional
extension.
Closes #5025
Fixed an issue where ungrouped-imports could not be disabled without raising
useless-suppression.
Ref #2366
Added several checkers to deal with unicode security issues
(see Trojan Sources <https://trojansource.codes/>_ and
PEP 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 by
PEP8 <https://www.python.org/dev/peps/pep-0008/#id20>.
UTF-16 and UTF-32 are not supported by Python <https://bugs.python.org/issue1503789>
at the moment. If this ever changes
invalid-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 and invalid-character-nul
to check for possibly harmful unescaped characters.
Closes #5281
Use the tomli package instead of toml to parse .toml files.
Closes #5885
self in a subclass of typing.NamedTuple.Closes #5312
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 when global is used with a class name
Closes #3088
Fixed false positive for unused-variable when a nonlocal name is assigned as part of a multi-name assignment.
Closes #3781
Fixed a crash in unspecified-encoding checker when providing None
to the mode argument of an open() 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 providing None to the mode
argument of an open() call.
Closes #5733
Added lru-cache-decorating-method checker with checks for the use of functools.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
the dill package. The dill 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 using
type(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.
Closes #5177, #5212
Fix false positive for undefined-variable when namedtuple 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 of undefined-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.
Closes #85, #2615
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 the del statement is used
Closes #5333
By default, pylint does no longer take files starting with .# into account. Those are
considered emacs file locks. See
https://www.gnu.org/software/emacs/manual/html_node/elisp/File-Locks.html.
This behavior can be reverted by redefining the ignore-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.
Closes #5360, #3877
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 the sep argument
to str.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 the
pylint.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 of
items() is assigned to a 1-tuple.
Closes #5504
When invoking pylint, epylint, symilar or pyreverse by importing them in a python file
you can now pass an argv keyword besides patching sys.argv.
Closes #5320
The PyLinter class will now be initialized with a TextReporter
as its reporter if none is provided.
Fix super-init-not-called when parent or self is a Protocol
Closes #4790
Fix false positive not-callable with attributes that alias NamedTuple
Partially closes #1730
Emit redefined-outer-name when a nested except handler shadows an outer one.
Closes #4434 Closes #5370
Fix false positive super-init-not-called for classes that inherit their init from
a parent.
Closes #4941
encoding can now be supplied as a positional argument to calls that open
files without triggering unspecified-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
or not in checks
Closes #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 of typing.NoReturn
if py-version is set to Python 3.7.1 or below.
https://bugs.python.org/issue34921
Added new check broken-collections-callable to detect broken uses of collections.abc.Callable
if py-version is set to Python 3.9.1 or below.
https://bugs.python.org/issue42965
The testutils for unittests now accept end_lineno and end_column. Tests
without these will trigger a DeprecationWarning.
arguments-differ will no longer complain about method redefinitions with extra parameters
that have default values.
Closes #1556, #5338
Fixed false positive unexpected-keyword-arg for decorators.
Closes #258
Importing the deprecated stdlib module xml.etree.cElementTree now emits deprecated_module.
Closes #5862
Disables for deprecated-module and similar warnings for stdlib features deprecated
in newer versions of Python no longer raise useless-suppression when linting with
older Python interpreters where those features are not yet deprecated.
Importing the deprecated stdlib module distutils now emits deprecated_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 for TypeVar names.
The accepted pattern can be customized with --typevar-rgx.
Closes #3401
Added new checker typevar-name-missing-variance. Emitted when a covariant
or contravariant TypeVar does not end with _co or _contra respectively or
when a TypeVar 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 through property.
Closes #4756
Fixed a false positive for unused-import where everything was not analyzed properly inside typing guards.
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 class
Closes #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 and endColumn keys to output of JSONReporter.
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
or not in checks
Closes #5323
unused-import now check all ancestors for typing guards
Closes #5316
Require Python 3.6.2 to run pylint.
Require Python 3.6.2 to run pylint.
Closes #5065
The functional testutils now accept end_lineno and end_column. Expected output files without these will trigger a DeprecationWarning. Expected output…
Upgrade astroid to 2.9.0
Closes #4982
Add ability to add end_line and end_column to the --msg-template option.
With the standard TextReporter 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.
Closes #4412 #5287
Fix install graphiz message which isn't needed for puml output format.
MessageTest of the unittest testutil now requires the confidence attribute
to match the expected value. If none is provided it is set to UNDEFINED.
add_message of the unittest testutil now actually handles the col_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 accept end_lineno and end_column. Expected
output files without these will trigger a DeprecationWarning. Expected output files
can be easily updated with the python tests/test_functional.py --update-functional-output command.
The functional testutils now correctly check the distinction betweeen HIGH and
UNDEFINED confidence. Expected output files without defiend confidence levels will now
trigger a DeprecationWarning. Expected output files can be easily updated with the
python 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 the end_lineno and end_column attributes should be checked. The default value is 3.8.
Fix accept-no-yields-doc and accept-no-return-doc not allowing missing yield or
return documentation when a docstring is partially correct
Closes #5223
Add an optional extension consider-using-any-or-all : Emitted when a for loop only
produces a boolean and could be replaced by any or all 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 classes
Closes #3066
Added support for ModuleNotFoundError (import-error and no-name-in-module).
ModuleNotFoundError inherits from ImportError and was added in Python 3.6
undefined-variable now correctly flags variables which only receive a type annotations
and never get assigned a value
Closes #5140
undefined-variable now correctly considers the line numbering and order of classes
used in metaclass declarations
Closes #4031
used-before-assignment now correctly considers references to classes as type annotation
or default values in first-level methods
Closes #3771
undefined-variable and unused-variable now correctly trigger for assignment expressions
in functions defaults
Fixes 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 values
Closes #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
Closes #2967 and #5131
Improve and flatten unused-wildcard-import message
Closes #3859
In length checker, len-as-condition has been renamed as
use-implicit-booleaness-not-len in order to be consistent with
use-implicit-booleaness-not-comparison.
Created new UnsupportedVersionChecker checker class that includes checks for features
not supported by all versions indicated by a py-version.
using-f-string-in-unsupported-version checker. Issued when py-version
is set to a version that does not support f-strings (< 3.6)Fix useless-super-delegation false positive when default keyword argument is a variable.
Properly emit duplicate-key when Enum members are duplicate dictionary keys
Closes #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 the bad-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 parameters
Closes #3733
mising-param-doc now correctly handles Numpy parameter documentation without
explicit typing
Closes #5222
pylint no longer crashes when checking assignment expressions within if-statements
Closes #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 paths
Closes #5194
Fix double emitting of not-callable on inferrable properties
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 the no-docstring-rgx setting was set to do so
Added using-final-decorator-in-unsupported-version checker. Issued when py-version
is set to a version that does not support typing.final (< 3.8)
Added configuration option exclude-too-few-public-methods to allow excluding
classes from the min-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 extension comparison_placement.
This checker was opinionated and now no longer a default. It can be reactived by adding
pylint.extensions.comparison_placement to load-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 when with threading.Lock(): is used instead of with lock_instance:.
Closes #5208
Make yn validator case insensitive, to allow for True and False in config files.
Fix crash on open() calls when the mode argument is not a simple string.
Partially closes #5321
Inheriting from a class that implements __class_getitem__ no longer raises inherit-non-class.
Pyreverse - Add the project root directory to sys.path
Closes #2479
Don't emit consider-using-f-string if py-version is set to Python < 3.6.
f-strings were added in Python 3.6
Closes #5019
Fix regression for unspecified-encoding with pathlib.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 with Lambda, IfExp, and
assignment expression.
Fix false-positive useless-suppression for wrong-import-order
Closes #2366
Fixed toml dependency issue
Closes #5066
Fix false-positive useless-suppression for line-too-long
Closes #4212
Fixed invalid-name not checking parameters of overwritten base object methods
Closes #3614
Fixed crash in consider-using-f-string if format is not called
Closes #5058
Fix crash with AssignAttr in if 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 and is_typing_guard helper functions from astroid
to pylint.checkers.utils.
Fix regression on ClassDef inference
Closes #5030 Closes #5036
Fix regression on Compare node inference
Closes #5048
Fix false-positive isinstance-second-argument-not-valid-type with typing.Callable.
Closes #3507 Closes #5087
It is now recommended to do pylint development on Python 3.8 or higher. This
allows using the latest ast parser.
All standard jobs in the pylint CI now run on Python 3.8 by default. We still
support python 3.6 and 3.7 and run tests for those interpreters.
TypingChecker
deprecated-typing-alias and consider-using-alias
with typing.Type + typing.Callable.unspecified-encoding now checks the encoding of pathlib.Path() correctly
unspecified-encoding now checks the encoding of pathlib.Path() correctly
Closes #5017
The python3 porting mode checker and it's py3k option were removed. You can still find it in older pylint versions.
The python3 porting mode checker and it's py3k option were removed. You can still find it in older pylint
versions.
raising-bad-type is now properly emitted when raising a string
Added new extension SetMembershipChecker with use-set-for-membership check:
Emitted when using an in-place defined list or tuple to do a membership test. sets are better optimized for that.
Closes #4776
Added py-version config key (if [MASTER] section). Used for version dependant checks.
Will default to whatever Python version pylint is executed with.
CodeStyleChecker
Added consider-using-assignment-expr: Emitted when an assignment is directly followed by an if statement
and both can be combined by using an assignment expression :=. Requires Python 3.8
Closes #4862
Added consider-using-f-string: Emitted when .format() or '%' is being used to format a string.
Closes #3592
Fix false positive for consider-using-with if a context manager is assigned to a
variable in different paths of control flow (e. g. if-else clause).
Closes #4751
https is now prefered in the documentation and http://pylint.pycqa.org correctly redirect to https://pylint.pycqa.org
Closes #3802
Fix false positive for function-redefined for simple type annotations
Closes #4936
Fix false positive for protected-access if a protected member is used in type hints of function definitions
Fix false positive dict-iter-missing-items for dictionaries only using tuples as keys
Closes #3282
The unspecified-encoding checker now also checks calls to pathlib.Path().read_text()
and pathlib.Path().write_text()
Closes #4945
Fix false positive superfluous-parens for tuples created with inner tuples
Closes #4907
Fix false positive unused-private-member for accessing attributes in a class using cls
Closes #4849
Fix false positive unused-private-member for private staticmethods accessed in classmethods.
Closes #4849
Extended consider-using-in check to work for attribute access.
Setting min-similarity-lines to 0 now makes the similarty checker stop checking for duplicate code
Closes #4901
Fix a bug where pylint complained if the cache's parent directory does not exist
Closes #4900
The global-variable-not-assigned checker now catches global variables that are never reassigned in a
local scope and catches (reassigned) functions
Closes #1375 Closes #330
Fix false positives for invalid-all-format that are lists or tuples at runtime
Closes #4711
Fix no-self-use and docparams extension for async functions and methods.
Add documentation for pyreverse and symilar
Closes #4616
Non symbolic messages with the wrong capitalisation now correctly trigger use-symbolic-message-instead
Closes #5000
The consider-iterating-dictionary checker now also considers membership checks
Closes #4069
The invalid-name message is now more detailed when using multiple naming style regexes.
We now use platformdirs instead of appdirs since the latter is not maintained.
We now use platformdirs instead of appdirs since the latter is not maintained.
Closes #4886
Fix a crash in the checker raising shallow-copy-environ when failing to infer
on copy.copy
Closes #4891
pylint does not crash when PYLINT_HOME does not exist.
pylint does not crash when PYLINT_HOME does not exist.
Closes #4883
pyreverse: add option to produce colored output.
pyreverse: add option to produce colored output.
Closes #4488
pyreverse: add output in PlantUML format.
Closes #4498
consider-using-with is no longer triggered if a context manager is returned from a function.
Closes #4748
pylint does not crash with a traceback anymore when a file is problematic. It creates a template text file for opening an issue on the bug tracker instead. The linting can go on for other non problematic files instead of being impossible.
pyreverse: Show class has-a relationships inferred from the type-hint
Closes #4744
Fixed a crash when importing beyond the top level package during import-error
message creation
Closes #4775
Added ignored-parents option to the design checker to ignore specific
classes from the too-many-ancestors check (R0901).
Partially closes #3057
Added unspecified-encoding: Emitted when open() is called without specifying an encoding
Closes #3826
Improved the Similarity checker performance. Fix issue with --min-similarity-lines used with --jobs.
Close #4120 Close #4118
Don't emit no-member error if guarded behind if statement.
Ref #1162 Closes #1990 Closes #4168
The default for PYLINTHOME is now the standard XDG_CACHE_HOME, and pylint now uses appdirs.
Closes #3878
Added use-list-literal: Emitted when list() is called with no arguments instead of using []
Closes #4365
Added use-dict-literal: Emitted when dict() is called with no arguments instead of using {}
Closes #4365
Added optional extension consider-ternary-expression: Emitted whenever a variable is assigned in both branches of an if/else block.
Closes #4366
Added optional extension while-used: Emitted whenever a while loop is used.
Closes #4367
Added forgotten-debug-statement: Emitted when breakpoint, pdb.set_trace or sys.breakpointhook calls are found
Closes #3692
Fix false-positive of unused-private-member when using nested functions in a class
Closes #4673
Fix crash for unused-private-member that occurred with nested attributes.
Closes #4755
Fix a false positive for unused-private-member with class names
Closes #4681
Fix false positives for superfluous-parens with walrus operator, ternary operator and inside list comprehension.
Closes #2818 Closes #3249 Closes #3608 Closes #4346
Added format-string-without-interpolation checker: Emitted when formatting is applied to a string without any variables to be replaced
Closes #4042
Refactor of --list-msgs & --list-msgs-enabled: both options now show whether messages are emittable with the current interpreter.
Closes #4778
Fix false negative for used-before-assignment when the variable is assigned
in an exception handler, but used outside of the handler.
Closes #626
Added disable-next option: allows using # pylint: disable-next=msgid to disable a message for the following line
Closes #1682
Added redundant-u-string-prefix checker: Emitted when the u prefix is added to a string
Closes #4102
Fixed cell-var-from-loop checker: handle cell variables in comprehensions within functions,
and function default argument expressions. Also handle basic variable shadowing.
Closes #2846 Closes #3107
Fixed bug with cell-var-from-loop checker: it no longer has false negatives when
both unused-variable and used-before-assignment are disabled.
Fix false postive for invalid-all-format if the list or tuple builtin functions are used
Closes #4711
Config files can now contain environment variables
Closes #3839
Fix false-positive used-before-assignment with an assignment expression in a Return node
Closes #4828
Added use-sequence-for-iteration: Emitted when iterating over an in-place defined set.
CodeStyleChecker
Limit consider-using-tuple to be emitted only for in-place defined lists.
Emit consider-using-tuple even if list contains a starred expression.
Ignore decorators lines by similarities checker when ignore signatures flag enabled
Closes #4839
Allow true and false values in pylintrc for better compatibility with toml config.
Class methods' signatures are ignored the same way as functions' with similarities "ignore-signatures" option enabled
Closes #4653
Improve performance when inferring Call nodes, by utilizing caching.
Improve error message for invalid-metaclass when the node is an Instance.
Fix a false positive undefined-variable when variable name in decoration matches function argument
Fix a false positive undefined-variable when variable name in decoration
matches function argument
Closes #3791
Fix a crash when there would be a 'TypeError object does not support item assignment' in the code we parse.
Fix a crash when there would be a 'TypeError object does not support item assignment' in the code we parse.
Closes #4439
Fix crash if a callable returning a context manager was assigned to a list or dict item
Closes #4732
Fix a crash when a AttributeInferenceError was not handled properly when failing to infer the real name of an import in astroid.
Closes #4692
Added time.clock to deprecated functions/methods for python 3.3
Added time.clock to deprecated functions/methods for python 3.3
Fix bug in which --fail-on can return a zero exit code even when the specified issue is present
Closes #4296 Closes #3363
Fix hard failure when handling missing attribute in a class with duplicated bases
Closes #4687
Fix false-positive consider-using-with (R1732) if a ternary conditional is used together with with
Closes #4676
Fix false-positive deprecated-module when relative import uses deprecated module name.
Closes #4629
Fix false-positive consider-using-with (R1732) if contextlib.ExitStack takes care of calling the __exit__ method
Closes #4654
Fix a false positive for unused-private-member when mutating a private attribute
with cls
Closes #4657
Fix ignored empty functions by similarities checker with "ignore-signatures" option enabled
Closes #4652
Fix false-positive of use-maxsplit-arg when index is incremented in
a loop
Closes #4664
Don't emit cyclic-import message if import is guarded by typing.TYPE_CHECKING.
Closes #3525
Fix false-positive not-callable with alternative TypedDict syntax
Closes #4715
Clarify documentation for consider-using-from-import
Don't emit unreachable warning for empty generator functions
Closes #4698
Don't emit import-error, no-name-in-module, and ungrouped-imports
for imports guarded by sys.version_info or typing.TYPE_CHECKING.
Closes #3285 Closes #3382
Fix invalid-overridden-method with nested property
Closes #4368
Fix false-positive of unused-private-member when using __new__ in a class
Closes #4668
No longer emit consider-using-with for ThreadPoolExecutor and ProcessPoolExecutor
as they have legitimate use cases without a with block.
Closes #4689
Fix crash when inferring variables assigned in match patterns
Closes #4685
Fix a crash when a StopIteration was raised when inferring a faulty function in a context manager.
Closes #4723
Fix a crash that happened when analyzing empty function with docstring in the similarity checker.
Fix a crash that happened when analyzing empty function with docstring
in the similarity checker.
Closes #4648
The similarity checker no longer add three trailing whitespaces for
empty lines in its report.
Fix a crash that happened when analysing code using type(self) to access a class attribute in the unused-private-member checker.
Fix a crash that happened when analysing code using type(self) to access
a class attribute in the unused-private-member checker.
Closes #4638
Fix a false positive for unused-private-member when accessing a private variable
with self
Closes #4644
Fix false-positive of unnecessary-dict-index-lookup and consider-using-dict-items
for reassigned dict index lookups
Closes #4630
* Upgrade astroid to 2.6.2 Closes #4631 Closes #4633
Upgrade astroid to 2.6.2
Closes #4631 Closes #4633
Fix missing support for detecting deprecated aliases to existing functions/methods.
Python 3.10 is now supported.
Add type annotations to pyreverse dot files
Closes #1548
Fix missing support for detecting deprecated aliases to existing functions/methods.
Closes #4618
astroid has been upgraded to 2.6.1
Added various deprecated functions/methods for python 3.10, 3.7, 3.6 and 3.3
Fix false positive useless-type-doc on ignored argument using pylint.extensions.docparams
when a function was typed using pep484 but not inside the docstring.
Closes #4117 Closes #4593
setuptools_scm has been removed and replaced by tbump in order to not
have hidden runtime dependencies to setuptools
Fix a crash when a test function is decorated with @pytest.fixture and astroid can't
infer the name of the decorator when using open without with.
Closes #4612
Added deprecated-decorator: Emitted when deprecated decorator is used.
Closes #4429
Added ignore-paths behaviour. Defined regex patterns are matched against full file path.
Close #2541
Fix false negative for consider-using-with if calls like open() were used outside of assignment expressions.
The warning for arguments-differ now signals explicitly the difference it detected
by naming the argument or arguments that changed and the type of change that occurred.
Suppress consider-using-with inside context managers.
Closes #4430
Added --fail-on option to return non-zero exit codes regardless of --fail-under value.
numversion tuple contains integers again to fix multiple pylint's plugins that relied on it
Closes #4420
Fix false-positive too-many-ancestors when inheriting from builtin classes,
especially from the collections.abc module
Closes #4166 Closes #4415
Stdlib deprecated modules check is moved to stdlib checker. New deprecated modules are added.
Fix raising false-positive no-member on abstract properties
Created new error message called arguments-renamed which identifies any changes at the parameter
names of overridden functions.
Closes #3536
New checker consider-using-dict-items. Emitted when iterating over dictionary keys and then
indexing the same dictionary with the key within loop body.
Closes #3389
Don't emit import-error if import guarded behind if sys.version_info >= (x, x)
Fix incompatibility with Python 3.6.0 caused by typing.Counter and typing.NoReturn usage
Closes #4412
New checker use-maxsplit-arg. Emitted either when accessing only the first or last
element of str.split().
Closes #4440
Add ignore_signatures to duplicate code checker
Closes #3619
Fix documentation errors in "Block disables" paragraph of User Guide.
New checker unnecessary-dict-index-lookup. Emitted when iterating over dictionary items
(key-value pairs) and accessing the value by index lookup.
Closes #4470
New checkerconsider-using-from-import. Emitted when a submodule/member of a package is imported and aliased
with the same name.
Closes #2309
Allow comma-separated list in output-format and separate output files for
each specified format.
Closes #1798
Make using-constant-test detect constant tests consisting of list literals like [] and
[1, 2, 3].
Improved error message of unnecessary-comprehension checker by providing code suggestion.
Closes #4499
New checker unused-private-member. Emitted when a private member (i.e., starts with __) of a class
is defined but not used.
Closes #4483
Fix false negative of consider-using-enumerate when iterating over an attribute.
Closes #3657
New checker invalid-class-object. Emitted when a non-class is assigned to a __class__ attribute.
Closes #585
Fix a crash when a plugin from the configuration could not be loaded and raise an error 'bad-plugin-value' instead
Closes #4555
Added handling of floating point values when parsing configuration from pyproject.toml
Closes #4518
invalid-length-returned, now also works when nothing at all is returned
following an upgrade in astroid.
logging-format-interpolation and logging-not-lazy, now works on logger
class created from renamed logging import following an upgrade in astroid.
Fix false-positive no-member with generic base class
Closes PyCQA/astroid#942
Fix assigning-non-slot false-positive with base that inherits from typing.Generic
Closes #4509 Closes PyCQA/astroid#999
New checker invalid-all-format. Emitted when __all__ has an invalid format,
i.e. isn't a tuple or list.
Fix false positive unused-variable and undefined-variable with
Pattern Matching in Python 3.10
New checker await-outside-async. Emitted when await is used outside an async function.
Clarify documentation for typing extension.
Closes #4545
Add new extension CodeStyleChecker. It includes checkers that can improve code
consistency. As such they don't necessarily provide a performance benefit
and are often times opinionated.
New checker consider-using-tuple. Emitted when an in-place defined
list or set can be replaced by a tuple.
New checker consider-using-namedtuple-or-dataclass. Emitted when dictionary values
can be replaced by namedtuples or dataclass instances.
Fix error that occurred when using slice as subscript for dict.
Reduce false-positives around inference of .value and .name
properties on Enum subclasses, following an upgrade in astroid
Closes #1932 Closes #2062
Fix issue with cached_property that caused invalid-overridden-method error
when overriding a property.
Closes #4023
Fix unused-import false positive for imported modules referenced in
attribute lookups in type comments.
Closes #4603
Nothing published for this version
Pin astroid to 2.5.6 for pylint 2.8.3
Pin astroid to 2.5.6 for pylint 2.8.3
Keep __pkginfo__.numversion a tuple to avoid breaking pylint-django.
Keep __pkginfo__.numversion a tuple to avoid breaking pylint-django.
Closes #4405
scm_setuptools has been added to the packaging.
Pylint's tags are now the standard form vX.Y.Z and not pylint-X.Y.Z anymore.
Add numversion back (temporarily) in __pkginfo__ because it broke Pylama and revert the unnecessary pylint.version breaking change.
Add numversion back (temporarily) in __pkginfo__ because it broke Pylama and revert the unnecessary
pylint.version breaking change.
Closes #4399
Nothing published for this version
Add new extension TypingChecker. This optional checker can detect the use of deprecated typing aliases and can suggest the use of the alternative unio…
New refactoring message consider-using-with. This message is emitted if resource-allocating functions or methods of the
standard library (like open() or threading.Lock.acquire()) that can be used as a context manager are called without
a with block.
Closes #3413
Resolve false positives on unused variables in decorator functions
Closes #4252
Add new extension ConfusingConsecutiveElifChecker. This optional checker emits a refactoring message (R5601 confusing-consecutive-elif)
if if/elif statements with different indentation levels follow directly one after the other.
New option --output=<file> to output result to a file rather than printing to stdout.
Closes #1070
Use a prescriptive message for unidiomatic-typecheck
Closes #3891
Apply const-naming-style to module constants annotated with
typing.Final
The packaging is now done via setuptools exclusively. doc, tests, man, elisp and Changelog are
not packaged anymore - reducing the size of the package by 75%.
Debian packaging is now (officially) done in https://salsa.debian.org/python-team/packages/pylint.
The 'doc' extra-require has been removed.
__pkginfo__ now only contain __version__ (also accessible with pylint.__version__), other meta-information are still
accessible with import importlib;metadata.metadata('pylint').
COPYING has been renamed to LICENSE for standardization.
Fix false-positive used-before-assignment in function returns.
Closes #4301
Updated astroid to 2.5.3
Closes #2822, #4206, #4284
Add consider-using-min-max-builtin check for if statement which could be replaced by Python builtin min or max
Closes #3406
Don't auto-enable postponed evaluation of type annotations with Python 3.10
Update astroid to 2.5.4
Add new extension TypingChecker. This optional checker can detect the use of deprecated typing aliases
and can suggest the use of the alternative union syntax where possible.
(For example, 'typing.Dict' can be replaced by 'dict', and 'typing.Unions' by '|', etc.)
Make sure to check the config options if you plan on using it!
Reactivates old counts in report mode.
Closes #3819
During detection of inconsistent-return-statements consider that assert False is a return node.
Closes #4019
Run will not fail if score exactly equals config.fail_under.
Functions that never returns may declare NoReturn as type hints, so that
inconsistent-return-statements is not emitted.
Closes #4122, #4188
Improved protected access checks to allow access inside class methods
Closes #1159
Fix issue with PEP 585 syntax and the use of collections.abc.Set
Fix issue that caused class variables annotated with typing.ClassVar to be
identified as class constants. Now, class variables annotated with
typing.Final are identified as such.
Closes #4277
Continuous integration with read the doc has been added.
Closes #3850
Don't show DuplicateBasesError for attribute access
Fix crash when checking setup.cfg for pylint config when there are non-ascii characters in there
Closes #4328
Allow code flanked in backticks to be skipped by spellchecker
Closes #4319
Allow Python tool directives (for black, flake8, zimports, isort, mypy, bandit, pycharm) at beginning of comments to be skipped by spellchecker
Closes #4320
Fix issue that caused emacs pylint to fail when used with tramp
Improve check for invalid PEP 585 syntax inside functions if postponed evaluation of type annotations is enabled
Improve check for invalid PEP 585 syntax as default function arguments
Fix a problem with disabled msgid not being ignored
Fix a problem with disabled msgid not being ignored
Closes #4265
Fix issue with annotated class constants
Introduce logic for checking deprecated attributes in DeprecationMixin.
Introduce logic for checking deprecated attributes in DeprecationMixin.
Reduce usage of blacklist/whitelist terminology. Notably, extension-pkg-allow-list is an
alternative to extension-pkg-whitelist and the message blacklisted-name is now emitted as
disallowed-name. The previous names are accepted to maintain backward compatibility.
Move deprecated checker to DeprecatedMixin
Closes #4086
Bump astroid version to 2.5.2
Fix false positive for method-hidden when using private attribute and method
Closes #3936
use-symbolic-message-instead now also works on legacy messages like C0111 (missing-docstring).
Remove unwanted print to stdout from _emit_no_member
Introduce a command-line option to specify pyreverse output directory
Closes #4159
Fix issue with Enums and class-attribute-naming-style=snake_case
Closes #4149
Add allowed-redefined-builtins option for fine tuning redefined-builtin check.
Close #3263
Fix issue when executing with python -m pylint
Closes #4161
Exempt typing.TypedDict from too-few-public-methods check.
Closes #4180
Fix false-positive no-member for typed annotations without default value.
Closes #3167
Add --class-const-naming-style for Enum constants and class variables annotated
with typing.ClassVar
Closes #4181
Fix astroid.Inference error for undefined-variables with ``len()```
Closes #4215
Fix column index on FIXME warning messages
Closes #4218
Improve handling of assignment expressions, better edge case handling
Closes #3763, #4238
Improve check if class is subscriptable PEP585
Fix documentation and filename handling of --import-graph
Fix false-positive for unused-import on class keyword arguments
Closes #3202
Fix regression with plugins on PYTHONPATH if latter is cwd
Closes #4252
Fix False Positive on Enum.__members__.items(), Enum.__members__.values, and Enum.__members__.keys Closes #4123
Fix False Positive on Enum.__members__.items(), Enum.__members__.values, and Enum.__members__.keys
Closes #4123
Properly strip dangerous sys.path entries (not just the first one)
Closes #3636
Expose UnittestLinter in pylint.testutils
Expose UnittestLinter in pylint.testutils
Don't check directories starting with '.' when using register_plugins
Closes #4119
Nothing published for this version
Fix vulnerable regular expressions in pyreverse
Introduce DeprecationMixin for reusable deprecation checks.
Closes #4049
Fix false positive for builtin-not-iterating when map receives iterable
Closes #4078
Python 3.6+ is now required.
Fix false positive for builtin-not-iterating when zip receives iterable
Add nan-comparison check for NaN comparisons
Bug fix for empty-comment message line number.
Closes #4009
Only emit bad-reversed-sequence on dictionaries if below py3.8
Closes #3940
Handle class decorators applied to function.
Closes #3882
Add check for empty comments
Fix minor documentation issue in contribute.rst
Enums are now required to be named in UPPER_CASE by invalid-name.
Close #3834
Add missing checks for deprecated functions.
Postponed evaluation of annotations are now recognized by default if python version is above 3.10
Closes #3992
Fix column metadata for anomalous backslash lints
Drop support for Python 3.5
Add support for pep585 with postponed evaluation
Closes #3320
Check alternative union syntax - PEP 604
Closes #4065
Fix multiple false positives with assignment expressions
Closes #3347, #3953, #3865, #3275
Fix TypedDict inherit-non-class false-positive Python 3.9+
Closes #1927
Fix issue with nested PEP 585 syntax
Fix issue with nested PEP 604 syntax
Fix a crash in undefined-variable caused by chained attributes in metaclass
Close #3742
Fix false positive for not-async-context-manager when contextlib.asynccontextmanager is used
Close #3862
Fix linter multiprocessing pool shutdown (triggered warnings when runned in parallels with other pytest plugins)
Closes #3779
Fix a false-positive emission of no-self-use and unused-argument for methods
of generic structural types (Protocol[T])
Closes #3885
Fix bug that lead to duplicate messages when using --jobs 2 or more.
Close #3584
Adds option check-protected-access-in-special-methods in the ClassChecker to activate/deactivate
protected-access message emission for single underscore prefixed attribute in special methods.
Close #3120
Fix vulnerable regular expressions in pyreverse
Close #3811
inconsistent-return-statements message is now emitted if one of try/except statement
is not returning explicitly while the other do.
Closes #3468
Fix useless-super-delegation false positive when default keyword argument is a dictionnary.
Close #3773
Fix a crash when a specified config file does not exist
Add support to ignored-argument-names in DocstringParameterChecker and adds useless-param-doc and useless-type-doc messages.
Close #3800
Enforce docparams consistently when docstring is not present
Close #2738
Fix duplicate-code false positive when lines only contain whitespace and non-alphanumeric characters (e.g. parentheses, bracket, comman, etc.)
Improve lint message for singleton-comparison with bools
Fix spell-checker crash on indented docstring lines that look like # comments
Close #3786
Fix AttributeError in checkers/refactoring.py
Improve sphinx directives spelling filter
Fix a bug with postponed evaluation when using aliases for annotations.
Close #3798
Fix minor documentation issues
Improve the performance of the line length check.
Removed incorrect deprecation of inspect.getfullargspec
Fix signature-differs false positive for functions with variadics
Close #3737
Fix a crash in consider-using-enumerate when encountering range() without arguments
Close #3735
len-as-conditions is now triggered only for classes that are inheriting directly from list, dict, or set and not implementing the __bool__ function, or from generators like range or list/dict/set comprehension. This should reduce the false positives for other classes, like pandas's DataFrame or numpy's Array.
Close #1879
Fixes duplicate-errors not working with -j2+
Close #3314
generated-members now matches the qualified name of members
Close #2498
Add check for bool function to len-as-condition
Add simplifiable-condition check for extraneous constants in conditionals using and/or.
Add condition-evals-to-constant check for conditionals using and/or that evaluate to a constant.
Close #3407
Changed setup.py to work with distlib
Close #3555
New check: consider-using-generator
This check warns when a comprehension is used inside an any or all function,
since it is unnecessary and should be replaced by a generator instead.
Using a generator would be less code and way faster.
Close #3165
Add Github Actions to replace Travis and AppVeyor in the future
Nothing published for this version
Astroid version has been set as < 2.5
Astroid version has been set as < 2.5
Close #4093
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →