blob: 7a743eaa45aef3f5502c46660a84afb66a9e0357 [file] [log] [blame]
Full changelog
==============
What's New in Pylint 2.14.5?
----------------------------
Release date: TBA
What's New in Pylint 2.14.4?
----------------------------
Release date: 2022-06-29
* 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
What's New in Pylint 2.14.3?
----------------------------
Release date: 2022-06-18
* 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
What's New in Pylint 2.14.2?
----------------------------
Release date: 2022-06-15
* 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
What's New in Pylint 2.14.1?
----------------------------
Release date: 2022-06-06
* 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
What's New in Pylint 2.14.0?
----------------------------
Release date: 2022-06-01
* The refactoring checker now also raises 'consider-using-generator' messages for
``max()``, ``min()`` and ``sum()``.
Refs #6595
* 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
* Fixed a crash in the ``unused-private-member`` checker involving chained private attributes.
Closes #6709
* Added new checker ``comparison-of-constants``.
Closes #6076
* ``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
* 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 ``unexpected-special-method-signature`` false positive for ``__init_subclass__`` methods with one or more arguments.
Closes #6644
* Started ignoring underscore as a local variable for ``too-many-locals``.
Closes #6488
* Improved wording of the message of ``deprecated-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
* Don't report ``useless-super-delegation`` for the ``__hash__`` method in classes that also override the ``__eq__`` method.
Closes #3934
* Added new checker ``typevar-name-mismatch``: TypeVar must be assigned to a variable with the same name as its name argument.
Closes #5224
* Pylint can now be installed with an extra-require called ``spelling`` (``pip install pylint[spelling]``).
This will 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 a crash in the ``docparams`` extension involving raising the result of a function.
* 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.
Refs #5392
* The ``level`` attribute of ``BaseChecker`` has been deprecated: everything is now
displayed in ``--help``, all the time.
Refs #5392
* The ``options_providers`` attribute of ``ArgumentsManager`` has been deprecated.
Refs #5392
* The ``option_groups`` attribute of ``PyLinter`` has been deprecated.
Refs #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.
Refs #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``.
Refs #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.
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.
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
* ``interfaces.implements`` has been deprecated and will be removed in 3.0. Please use standard inheritance
patterns instead of ``__implements__``.
Refs #2287
* ``invalid-enum-extension``: Used when a class tries to extend an inherited Enum class.
Closes #5501
* Added the ``unrecognized-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.
Refs #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.
Refs #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
* Fix pyreverse crash ``RuntimeError: dictionary changed size during iteration``
Refs #6612
* Fix bug where it writes a plain text error message to stdout, invalidating output formats.
Closes #6597
* ``is_class_subscriptable_pep585_with_postponed_evaluation_enabled`` has been deprecated.
Use ``is_postponed_evaluation_enabled(node) and is_node_in_type_annotation_context(node)``
instead.
Refs #6536
* 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