Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update pylint to 3.1.0 #229

Closed
wants to merge 1 commit into from
Closed

Conversation

pyup-bot
Copy link
Collaborator

This PR updates pylint from 2.9.6 to 3.1.0.

Changelog

3.1.0

Two new checks--``use-yield-from``, ``deprecated-attribute``-- and a smattering of bug fixes.

New Features
------------

- Skip ``consider-using-join`` check for non-empty separators if an ``suggest-join-with-non-empty-separator`` option is set to ``no``.

Closes 8701 

- Discover ``.pyi`` files when linting.

These can be ignored with the ``ignore-patterns`` setting.

Closes 9097 

- Check ``TypeAlias`` and ``TypeVar`` (PEP 695) nodes for ``invalid-name``.

Refs 9196 

- Support for resolving external toml files named pylintrc.toml and .pylintrc.toml.

Closes 9228 

- Check for `.clear`, `.discard`, `.pop` and `remove` methods being called on a set while it is being iterated over.

Closes 9334 



New Checks
----------

- New message `use-yield-from` added to the refactoring checker. This message is emitted when yielding from a loop can be replaced by `yield from`.

Closes 9229. 

- Added a ``deprecated-attribute`` message to check deprecated attributes in the stdlib.

Closes 8855 


False Positives Fixed
---------------------

- Fixed false positive for ``inherit-non-class`` for generic Protocols.

Closes 9106

- Exempt ``TypedDict`` from ``typing_extensions`` from ``too-many-ancestor`` checks.

Refs 9167 



False Negatives Fixed
---------------------

- Extend broad-exception-raised and broad-exception-caught to except*.

Closes 8827 

- Fix a false-negative for unnecessary if blocks using a different than expected ordering of arguments.

Closes 8947. 



Other Bug Fixes
---------------

- Improve the message provided for wrong-import-order check.  Instead of the import statement ("import x"), the message now specifies the import that is out of order and which imports should come after it.  As reported in the issue, this is particularly helpful if there are multiple imports on a single line that do not follow the PEP8 convention.

The message will report imports as follows:
For "import X", it will report "(standard/third party/first party/local) import X"
For "import X.Y" and "from X import Y", it will report "(standard/third party/first party/local) import X.Y"
The import category is specified to provide explanation as to why pylint has issued the message and guidence to the developer on how to fix the problem.

Closes 8808 



Other Changes
-------------

- Print how many files were checked in verbose mode.

Closes 8935 

- Fix a crash when an enum class which is also decorated with a ``dataclasses.dataclass`` decorator is defined.

Closes 9100 



Internal Changes
----------------

- Update astroid version to 3.1.0.

Refs 9457

3.0.4

False Positives Fixed
---------------------

- ``used-before-assignment`` is no longer emitted when using a name in a loop and
depending on an earlier name assignment in an ``except`` block paired with
``else: continue``.

Closes 6804

- Avoid false positives for ``no-member`` involving function
attributes supplied by decorators.

Closes 9246 

- Fixed false positive nested-min-max for nested lists.

Closes 9307 

- Fix false positive for ``used-before-assignment`` in a ``finally`` block
when assignments took place in both the ``try`` block and each exception handler.

Closes 9451 



Other Bug Fixes
---------------

- Catch incorrect ValueError ``"generator already executing"`` for Python 3.12.0 - 3.12.2.
This is fixed upstream in Python 3.12.3.

Closes 9138

3.0.3

---------------------------
Release date: 2023-12-11


False Positives Fixed
---------------------

- Fixed false positive for ``unnecessary-lambda`` when the call has keyword arguments but not the lambda.

Closes 9148

- Fixed incorrect suggestion for shallow copy in unnecessary-comprehension

Example of the suggestion:
pylint: disable=missing-module-docstring
a = [1, 2, 3]
b = [x for x in a]
b[0] = 0
print(a)  [1, 2, 3]

After changing b = [x for x in a] to b = a based on the suggestion, the script now prints [0, 2, 3]. The correct suggestion should be use list(a) to preserve the original behavior.

Closes 9172 

- Fix false positives for ``undefined-variable`` and ``unused-argument`` for
classes and functions using Python 3.12 generic type syntax.

Closes 9193 

- Fixed ``pointless-string-statement`` false positive for docstrings
on Python 3.12 type aliases.

Closes 9268 

- Fix false positive for ``invalid-exception-operation`` when concatenating tuples
of exception types.

Closes 9288



Other Bug Fixes
---------------

- Fix a bug where pylint was unable to walk recursively through a directory if the
directory has an `__init__.py` file.

Closes 9210

3.0.2

False Positives Fixed
---------------------

- Fix ``used-before-assignment`` false positive for generic type syntax (PEP 695, Python 3.12).

Closes 9110



Other Bug Fixes
---------------

- Escape special symbols and newlines in messages.

Closes 7874

- Fixes suggestion for ``nested-min-max`` for expressions with additive operators, list and dict comprehensions.

Closes 8524

- Fixes ignoring conditional imports with ``ignore-imports=y``.

Closes 8914

- Emit ``inconsistent-quotes`` for f-strings with 3.12 interpreter only if targeting pre-3.12 versions.

Closes 9113

3.0.1

False Positives Fixed
---------------------

- Fixed false positive for ``inherit-non-class`` for generic Protocols.

Closes 9106 


Other Changes
-------------

- Fix a crash when an enum class which is also decorated with a ``dataclasses.dataclass`` decorator is defined.

Closes 9100

3.0.0

Pylint now support python 3.12 officially.

This long anticipated major version also provides some important usability and performance improvements, along with enacting necessary breaking changes and long-announced deprecations. The documentation of each message with an example is very close too.

The required astroid version is now 3.0.0. See the [astroid changelog](https://pylint.readthedocs.io/projects/astroid/en/latest/changelog.html#what-s-new-in-astroid-3-0-0) for additional fixes, features, and performance improvements applicable to pylint.

Our code is now fully typed. The invalid-name message no longer checks for a minimum length of 3 characters by default. Dependencies like wrapt or setuptools were removed.

A new json2 reporter has been added. It features an enriched output that is easier to parse and provides more info, here's a sample output.

json
{
 "messages": [
     {
         "type": "convention",
         "symbol": "line-too-long",
         "message": "Line too long (1/2)",
         "messageId": "C0301",
         "confidence": "HIGH",
         "module": "0123",
         "obj": "",
         "line": 1,
         "column": 0,
         "endLine": 1,
         "endColumn": 4,
         "path": "0123",
         "absolutePath": "0123"
     }
 ],
 "statistics": {
     "messageTypeCount": {
         "fatal": 0,
         "error": 0,
         "warning": 0,
         "refactor": 0,
         "convention": 1,
         "info": 0
     },
     "modulesLinted": 1,
     "score": 5.0
 }
}



Breaking Changes
----------------

- Enabling or disabling individual messages will now take effect even if an
``--enable=all`` or ``disable=all`` follows in the same configuration file
(or on the command line).

This means for the following example, ``fixme`` messages will now be emitted:

bash
   pylint my_module --enable=fixme --disable=all

To regain the prior behavior, remove the superfluous earlier option.

Closes 3696 

- Remove support for launching pylint with Python 3.7.
Code that supports Python 3.7 can still be linted with the ``--py-version=3.7`` setting.

Refs 6306 

- Disables placed in a ``try`` block now apply to the ``except`` block.
Previously, they only happened to do so in the presence of an ``else`` clause.

Refs 7767

- `pyreverse` now uses a new default color palette that is more colorblind friendly.
The color scheme is taken from `Paul Tol's Notes <https://personal.sron.nl/~pault/>`_.
If you prefer other colors, you can use the `--color-palette` option to specify custom colors.

Closes 8251 

- Everything related to the ``__implements__`` construct was removed. It was based on PEP245
that was proposed in 2001 and rejected in 2006.

The capability from pyreverse to take ``__implements__`` into account when generating diagrams
was also removed.

Refs 8404 

- ``pyreverse``: Support for the ``.vcg`` output format (Visualization of Compiler Graphs) has been dropped.

Closes 8416 

- The warning when the now useless old pylint cache directory (pylint.d) was
found was removed. The cache dir is documented in
`the FAQ <https://pylint.readthedocs.io/en/latest/faq.html#where-is-the-persistent-data-stored-to-compare-between-successive-runs>`_.

Refs 8462 

- Following a deprecation period, ``pylint.config.PYLINTRC`` was removed.
Use the ``pylint.config.find_default_config_files`` generator instead.

Closes 8862 



Changes requiring user actions
------------------------------

- The ``invalid-name`` message no longer checks for a minimum length of 3 characters by default.
(This was an unadvertised commingling of concerns between casing
and name length, and users regularly reported this to be surprising.)

If checking for a minimum length is still desired, it can be regained in two ways:

- If you are content with a ``disallowed-name`` message (instead of
 ``invalid-name``), then simply add the option ``bad-names-rgxs="^..?$"``,
 which will fail 1-2 character-long names. (Ensure you enable
 ``disallowed-name``.)

- If you would prefer an ``invalid-name`` message to be emitted, or would
 prefer finer-grained control over the circumstances in which messages are
 emitted (classes vs. methods, etc.), then avail yourself of the regex
 options described
 `here <https://pylint.readthedocs.io/en/stable/user_guide/configuration/all-options.html#main-checker>`_.
 (In particular, take note of the commented out options in the "example
 configuration" given at the bottom of the section.) The prior regexes can
 be found in the
 `pull request <https://github.com/pylint-dev/pylint/pull/8813>`_
 that removed the length requirements.

Closes 2018 

- The compare to empty string checker (``pylint.extensions.emptystring``) and the compare to
zero checker (``pylint.extensions.compare-to-zero``) have been removed and their checks are
now part of the implicit booleaness checker:

- ``compare-to-zero`` was renamed ``use-implicit-booleaness-not-comparison-to-zero`` and
 ``compare-to-empty-string`` was renamed ``use-implicit-booleaness-not-comparison-to-string``
 and they now need to be enabled explicitly.

- The ``pylint.extensions.emptystring`` and ``pylint.extensions.compare-to-zero`` extensions
 no longer exist and need to be removed from the ``load-plugins`` option.

- Messages related to implicit booleaness were made more explicit and actionable.
 This permits to make their likeness explicit and will provide better performance as they
 share most of their conditions to be raised.

Closes 6871 

- epylint was removed. It now lives at: https://github.com/emacsorphanage/pylint.

Refs 7737

- The ``overgeneral-exceptions`` option now only takes fully qualified names
into account (``builtins.Exception`` not ``Exception``). If you overrode
this option, you need to use the fully qualified name now.

There's still a warning, but it will be removed in 3.1.0.

Refs 8411 

- Following a deprecation period, it's no longer possible to use ``MASTER``
or ``master`` as configuration section in ``setup.cfg`` or ``tox.ini``. It's bad practice
to not start a section title with the tool name. Please use ``pylint.main`` instead.

Refs 8465

- Package stats are now printed when running Pyreverse and a ``--verbose`` flag was added to get the original output with parsed modules. You might need to activate the verbose option if you want to keep the old output.

Closes 8973 



New Features
------------

- A new ``json2`` reporter has been added. It features a more enriched output that is
easier to parse and provides more info.

Compared to ``json`` the only changes are that messages are now under the ``"messages"``
key and that ``"message-id"`` now follows the camelCase convention and is renamed to
``"messageId"``.
The new reporter also reports the "score" of the modules you linted as defined by the
``evaluation`` option and provides statistics about the modules you linted.

We encourage users to use the new reporter as the ``json`` reporter will no longer
be maintained.

Closes 4741 

- In Pyreverse package dependency diagrams, show when a module imports another only for type-checking.

Closes 8112 

- Add new option (``--show-stdlib``, ``-L``) to ``pyreverse``.
This is similar to the behavior of ``--show-builtin`` in that standard library
modules are now not included by default, and this option will include them.

Closes 8181 

- Add Pyreverse option to exclude standalone nodes from diagrams with `--no-standalone`.

Closes 8476



New Checks
----------

- Added ``DataclassChecker`` module and ``invalid-field-call`` checker to check for invalid dataclasses.field() usage.

Refs 5159 

- Add ``return-in-finally`` to emit a message if a return statement was found in a finally clause.

Closes 8260 

- Add a new checker ``kwarg-superseded-by-positional-arg`` to warn when a function is called with a keyword argument which shares a name with a positional-only parameter and the function contains a keyword variadic parameter dictionary. It may be surprising behaviour when the keyword argument is added to the keyword variadic parameter dictionary.

Closes 8558 



Extensions
----------

- Add new ``prefer-typing-namedtuple`` message to the ``CodeStyleChecker`` to suggest
rewriting calls to ``collections.namedtuple`` as classes inheriting from ``typing.NamedTuple``
on Python 3.6+.

Requires ``load-plugins=pylint.extensions.code_style`` and ``enable=prefer-typing-namedtuple`` to be raised.

Closes 8660 



False Positives Fixed
---------------------

- Extend concept of "function ambiguity" in ``safe_infer()`` from
differing number of function arguments to differing set of argument names.

Solves false positives in ``tensorflow``.

Closes 3613 

- Fix `unused-argument` false positive when `__new__` does not use all the arguments of `__init__`.

Closes 3670 

- Fix a false positive for ``invalid-name`` when a type-annotated class variable in an ``enum.Enum`` class has no assigned value.

Refs 7402 

- Fix ``unused-import`` false positive for usage of ``six.with_metaclass``.

Closes 7506 

- Fix false negatives and false positives for ``too-many-try-statements``,
``too-complex``, and ``too-many-branches`` by correctly counting statements
under a ``try``.

Refs 7767 

- When checking for unbalanced dict unpacking in for-loops, Pylint will now test whether the length of each value to be
unpacked matches the number of unpacking targets. Previously, Pylint would test the number of values for the loop
iteration, which would produce a false unbalanced-dict-unpacking warning.

Closes 8156

- Fix false positive for ``used-before-assignment`` when usage and assignment
are guarded by the same test in different statements.

Closes 8167 

- Adds ``asyncSetUp`` to the default ``defining-attr-methods`` list to silence
``attribute-defined-outside-init`` warning when using
``unittest.IsolatedAsyncioTestCase``.

Refs 8403 

- `logging-not-lazy` is not longer emitted for explicitly concatenated string arguments.

Closes 8410 

- Fix false positive for isinstance-second-argument-not-valid-type when union types contains None.

Closes 8424 

- ``invalid-name`` now allows for integers in ``typealias`` names:
- now valid: ``Good2Name``, ``GoodName2``.
- still invalid: ``_1BadName``.

Closes 8485

- No longer consider ``Union`` as type annotation as type alias for naming checks.

Closes 8487 

- ``unnecessary-lambda`` no longer warns on lambdas which use its parameters in
their body (other than the final arguments), e.g.
``lambda foo: (bar if foo else baz)(foo)``.

Closes 8496 

- Fixed `unused-import` so that it observes the `dummy-variables-rgx` option.

Closes 8500 

- `Union` typed variables without assignment are no longer treated as
`TypeAlias`.

Closes 8540

- Allow parenthesized implicitly concatenated strings when `check-str-concat-over-line-jumps` is enabled.

Closes 8552. 

- Fix false positive for ``positional-only-arguments-expected`` when a function contains both a positional-only parameter that has a default value, and ``**kwargs``.

Closes 8555 

- Fix false positive for ``keyword-arg-before-vararg`` when a positional-only parameter with a default value precedes ``*args``.

Closes 8570 

- Fix false positive for ``arguments-differ`` when overriding `__init_subclass__`.

Closes 8919 

- Fix a false positive for ``no-value-for-parameter`` when a staticmethod is called in a class body.

Closes 9036



False Negatives Fixed
---------------------

- Emit ``used-before-assignment`` when calling module-level functions before definition.

Closes 1144 

- Apply ``infer_kwarg_from_call()`` to more checks

These mostly solve false negatives for various checks,
save for one false positive for ``use-maxsplit-arg``.

Closes 7761 

- `TypeAlias` variables defined in functions are now checked for `invalid-name` errors.

Closes 8536 

- Fix false negative for ``no-value-for-parameter`` when a function, whose signature contains both a positional-only parameter ``name`` and also ``*kwargs``, is called with a keyword-argument for ``name``.

Closes 8559 

- Fix a false negative for ``too-many-arguments`` by considering positional-only and keyword-only parameters.

Closes 8667 

- Emit ``assignment-from-no-return`` for calls to builtin methods like ``dict.update()``.
Calls to ``list.sort()`` now raise ``assignment-from-no-return``
rather than ``assignment-from-none`` for consistency.

Closes 8714
Closes 8810 

- ``consider-using-augmented-assign`` is now applied to dicts and lists as well.

Closes 8959



Other Bug Fixes
---------------

- Support ``duplicate-code`` message when parallelizing with ``--jobs``.

Closes 374 

- Support ``cyclic-import`` message when parallelizing with ``--jobs``.

Closes 4171 

- ``--jobs`` can now be used with ``--load-plugins``.

This had regressed in astroid 2.5.0.

Closes 4874 

- docparams extension considers type comments as type documentation.

Closes 6287

- When parsing comma-separated lists of regular expressions in the config, ignore
commas that are inside braces since those indicate quantifiers, not delineation
between expressions.

Closes 7229 

- The ``ignored-modules`` option will now be correctly taken into account for ``no-name-in-module``.

Closes 7578 

- ``sys.argv`` is now always correctly considered as impossible to infer (instead of
using the actual values given to pylint).

Closes 7710 

- Avoid duplicative warnings for unqualified exception names in the ``overgeneral-exceptions``
setting when running with ``--jobs``.

Closes 7774 

- Don't show class fields more than once in Pyreverse diagrams.

Closes 8189 

- Fix ``used-before-assignment`` false negative when TYPE_CHECKING imports
are used in multiple scopes.

Closes 8198 

- ``--clear-cache-post-run`` now also clears LRU caches for pylint utilities
holding references to AST nodes.

Closes 8361 

- Fix a crash when ``TYPE_CHECKING`` is used without importing it.

Closes 8434

- Fix a ``used-before-assignment`` false positive when imports
are made under the ``TYPE_CHECKING`` else if branch.

Closes 8437 

- Fix a regression of ``preferred-modules`` where a partial match was used instead of the required full match.

Closes 8453 

- Fix a crash in pyreverse when "/" characters are used in the output filename e.g pyreverse -o png -p name/ path/to/project.

Closes 8504 

- Don't show arrows more than once in Pyreverse diagrams.

Closes 8522

- Improve output of ``consider-using-generator`` message for ``min()`` calls with ``default`` keyword.

Closes 8563 

- Fixed a crash when generating a configuration file: ``tomlkit.exceptions.TOMLKitError: Can't add a table to a dotted key``
caused by tomlkit ``v0.11.8``.

Closes 8632 

- Fix a line break error in Pyreverse dot output.

Closes 8671 

- Fix a false positive for ``method-hidden`` when using ``cached_property`` decorator.

Closes 8753 

- Dunder methods defined in lambda do not trigger ``unnecessary-dunder-call`` anymore, if they cannot be replaced by the non-dunder call.

Closes 8769 

- Don't show duplicate type annotations in Pyreverse diagrams.

Closes 8888 

- Fixing inconsistent hashing issue in `BaseChecker` causing some reports not being exported.

Closes 9001 

- Don't add `Optional` to `|` annotations with `None` in Pyreverse diagrams.

Closes 9014 

- Pyreverse doesn't show multiple class association arrows anymore, but only the strongest one.

Refs 9045 

- Prevented data loss in the linter stats for messages relating
to the linter itself (e.g. ``unknown-option-value``), fixing
problems with score, fail-on, etc.

Closes 9059

- Fix crash in refactoring checker when unary operand used with variable in for loop.

Closes 9074 



Other Changes
-------------

- Pylint now exposes its type annotations.

Closes 5488 and 2079

- Search for ``pyproject.toml`` recursively in parent directories up to a project or file system root.

Refs 7163, Closes 3289 

- All code related to the optparse config parsing has been removed.

Refs 8405 

- Pylint now supports python 3.12.

Refs 8718

- Add a CITATION.cff file to the root of the repository containing the necessary metadata to cite Pylint.

Closes 8760

- Renamed the "unneeded-not" error into "unnecessary_negation" to be clearer.

Closes 8789



Internal Changes
----------------

- ``get_message_definition`` was removed from the base checker API. You can access
message definitions through the ``MessageStore``.

Refs 8401 

- Everything related to the ``__implements__`` construct was removed. It was based on PEP245
that was proposed in 2001 and rejected in 2006.

All the classes inheriting ``Interface`` in ``pylint.interfaces`` were removed.
``Checker`` should only inherit ``BaseChecker`` or any of the other checker types
from ``pylint.checkers``. ``Reporter`` should only inherit ``BaseReporter``.

Refs 8404 

- ``modname`` and ``msg_store`` are now required to be given in ``FileState``.
``collect_block_lines`` has also been removed. ``Pylinter.current_name``
cannot be null anymore.

Refs 8407 

- ``Reporter.set_output`` was removed in favor of ``reporter.out = stream``.

Refs 8408 

- A number of old utility functions and classes have been removed:

``MapReduceMixin``: To make a checker reduce map data simply implement
``get_map_data`` and ``reduce_map_data``.

``is_inside_lambda``: Use ``utils.get_node_first_ancestor_of_type(x, nodes.Lambda)``

``check_messages``: Use ``utils.only_required_for_messages``

``is_class_subscriptable_pep585_with_postponed_evaluation_enabled``: Use
``is_postponed_evaluation_enabled(node)`` and ``is_node_in_type_annotation_context(node)``

``get_python_path``: assumption that there's always an __init__.py is not true since
python 3.3 and is causing problems, particularly with PEP 420. Use ``discover_package_path``
and pass source root(s).

``fix_import_path``: Use ``augmented_sys_path`` and pass additional ``sys.path``
entries as an argument obtained from ``discover_package_path``.

``get_global_option``: Use ``checker.linter.config`` to get all global options.

Related private objects have been removed as well.

Refs 8409 

- ``colorize_ansi`` now only accepts a ``MessageStyle`` object.

Refs 8412 

- Following a deprecation period, ``Pylinter.check`` now only works with sequences of strings, not strings.

Refs 8463 

- Following a deprecation period, ``ColorizedTextReporter`` only accepts ``ColorMappingDict``.

Refs 8464

- Following a deprecation period, ``MessageTest``'s ``end_line`` and ``end_col_offset``
must be accurate in functional tests (for python 3.8 or above on cpython, and for
python 3.9 or superior on pypy).

Refs 8466 

- Following a deprecation period, the ``do_exit`` argument of the ``Run`` class (and of the ``_Run``
class in testutils) were removed.

Refs 8472 

- Following a deprecation period, the ``py_version`` argument of the
``MessageDefinition.may_be_emitted`` function is now required. The most likely solution
is to use 'linter.config.py_version' if you need to keep using this
function, or to use 'MessageDefinition.is_message_enabled' instead.

Refs 8473 

- Following a deprecation period, the ``OutputLine`` class now requires
the right number of argument all the time. The functional output can be
regenerated automatically to achieve that easily.

Refs 8474 

- Following a deprecation period, ``is_typing_guard``, ``is_node_in_typing_guarded_import_block`` and
``is_node_in_guarded_import_block`` from ``pylint.utils`` were removed: use a combination of
``is_sys_guard`` and ``in_type_checking_block`` instead.

Refs 8475 

- Following a deprecation period, the ``location`` argument of the
``Message`` class must now be a ``MessageLocationTuple``.

Refs 8477

- Following a deprecation period, the ``check_single_file`` function of the
``Pylinter`` is replaced by ``Pylinter.check_single_file_item``.

Refs 8478 



Performance Improvements
------------------------

- ``pylint`` runs (at least) ~5% faster after improvements to ``astroid``
that make better use of the inference cache.

Refs pylint-dev/astroid529 

- - Optimize ``is_trailing_comma()``.
- Cache ``class_is_abstract()``.

Refs 1954 

- Exit immediately if all messages are disabled.

Closes 8715

3.0.0b0

3.0.0b0`` is a beta release using the new astroid ``3.0.0``. Expect no more breaking changes before the official 3.0.0 release, and almost no changes from ``3.0.0a7``. We're aiming for a release for when python 3.12 is officially out (in 2 days, 2023-10-02).

3.0.0a7

3.0.0a7 is an alpha release, other breaking changes will be added before the official 3.0.0 release. Compared to 3.0.0a6, this alpha brings mainly python 3.12 compatibility but also the changes you would usually expect with a minor of regular size. It will requires some changes to the configuration that should be automated when 3.0.0 is out, but aren't yet. Those changes *can* make the configuration incompatible or at least not equivalent if used with pylint 2.x.

3.0.0a6

3.0.0a6 is an alpha release, other breaking changes will be added before the official 3.0.0 release. We're including the new features and false negative fixes that will be in 3.0.0, so it's the latest current version of pylint.

Breaking Changes
----------------

- `pyreverse` now uses a new default color palette that is more colorblind
friendly.
The color scheme is taken from [Paul Tol's Notes](https://personal.sron.nl/~pault/>).
If you prefer other colors, you can use the `--color-palette` option to
specify custom colors.

Closes 8251

- Everything related to the ``__implements__`` construct was removed. It was
based on PEP245
that was proposed in 2001 and rejected in 2006.

The capability from pyreverse to take ``__implements__`` into account when
generating diagrams
was also removed.

Refs 8404 

- ``pyreverse``: Support for the ``.vcg`` output format (Visualaization of
Compiler Graphs) has been dropped.

Closes 8416

- The warning when the now useless old pylint cache directory (pylint.d) was
found was removed. The cache dir is documented in
[the
FAQ](https://pylint.readthedocs.io/en/latest/faq.html#where-is-the-persistent-data-stored-to-compare-between-successive-runs).

Refs 8462 



Changes requiring user actions
------------------------------

- epylint was removed. It now lives at:
https://github.com/emacsorphanage/pylint.

Refs 7737 

- The 'overgeneral-exceptions' option now only takes fully qualified name
into account (``builtins.Exception`` not ``Exception``). If you overrode
this option, you need to use the fully qualified name now.

There's still a warning, but it will be removed in 3.1.0.

Refs 8411 

- Following a deprecation period, it's no longer possible to use ``MASTER``
or ``master`` as configuration section in ``setup.cfg`` or ``tox.ini``. It's
bad practice
to not start sections titles with the tool name. Please use ``pylint.main``
instead.

Refs 8465 



New Features
------------

- Add new option (``--show-stdlib``, ``-L``) to ``pyreverse``.
This is similar to the behavior of ``--show-builtin`` in that standard
library
modules are now not included by default, and this option will include them.

Closes 8181 



False Positives Fixed
---------------------

- Adds ``asyncSetUp`` to the default ``defining-attr-methods`` list to silence
``attribute-defined-outside-init`` warning when using
``unittest.IsolatedAsyncioTestCase``.

Refs 8403

- ``invalid-name`` now allows for integers in ``typealias`` names:
- now valid: ``Good2Name``, ``GoodName2``.
- still invalid: ``_1BadName``.

Closes 8485 

- No longer consider ``Union`` as type annotation as type alias for naming
checks.

Closes 8487 

- ``unnecessary-lambda`` no longer warns on lambdas which use its parameters in
their body (other than the final arguments), e.g.
``lambda foo: (bar if foo else baz)(foo)``.

Closes 8496 



Other Bug Fixes
---------------

- ``--clear-cache-post-run`` now also clears LRU caches for pylint utilities
holding references to AST nodes.

Closes 8361 

- Fix a crash when ``TYPE_CHECKING`` is used without importing it.

Closes 8434 

- Fix a ``used-before-assignment`` false positive when imports
are made under the ``TYPE_CHECKING`` else if branch.

Closes 8437 

- Fix a regression of ``preferred-modules`` where a partial match was used
instead of the required full match.

Closes 8453 



Other Changes
-------------

- Pylint now exposes its type annotations.

Closes 5488 and 2079 

- All code related to the optparse config parsing has been removed.

Refs 8405 



Internal Changes
----------------

- ``get_message_definition`` was removed from the base checker API. You can
access
message definitions through the ``MessageStore``.

Refs 8401 

- Everything related to the ``__implements__`` construct was removed. It was
based on PEP245
that was proposed in 2001 and rejected in 2006.

All the classes inheriting ``Interface`` in ``pylint.interfaces`` were
removed.
``Checker`` should only inherit ``BaseChecker`` or any of the other checker
types
from ``pylint.checkers``. ``Reporter`` should only inherit ``BaseReporter``.

Refs 8404 

- ``modname`` and ``msg_store`` are now required to be given in ``FileState``.
``collect_block_lines`` has also been removed. ``Pylinter.current_name``
cannot be null anymore.

Refs 8407 

- 'Reporter.set_output' was removed in favor of 'reporter.out = stream'.

Refs 8408

- A number of old utility functions and classes have been removed:

``MapReduceMixin``: To make a checker reduce map data simply implement
``get_map_data`` and ``reduce_map_data``.

``is_inside_lambda``: Use ``utils.get_node_first_ancestor_of_type(x,
nodes.Lambda)``

``check_messages``: Use ``utils.only_required_for_messages``

``is_class_subscriptable_pep585_with_postponed_evaluation_enabled``: Use
``is_postponed_evaluation_enabled(node)`` and
``is_node_in_type_annotation_context(node)``

``get_python_path``: assumption that there's always an __init__.py is not
true since
python 3.3 and is causing problems, particularly with PEP 420. Use
``discover_package_path``
and pass source root(s).

``fix_import_path``: Use ``augmented_sys_path`` and pass additional
``sys.path``
entries as an argument obtained from ``discover_package_path``.

``get_global_option``: Use ``checker.linter.config`` to get all global
options.

Related private objects have been removed as well.

Refs 8409

- ``colorize_ansi`` now only accept a ``MessageStyle`` object.

Refs 8412

- The following utilities are deprecated in favor of the more robust
``in_type_checking_block``
and will be removed in pylint 3.0:

 - ``is_node_in_guarded_import_block``
 - ``is_node_in_typing_guarded_import_block``
 - ``is_typing_guard``

``is_sys_guard`` is still available, which was part of
``is_node_in_guarded_import_block``.

Refs 8433 

- Following a deprecation period, ``Pylinter.check`` now only work with
sequences of strings, not strings.

Refs 8463

- Following a deprecation period, ``ColorizedTextReporter`` only accepts
``ColorMappingDict``.

Refs 8464 

- Following a deprecation period, ``MessageTest``'s ``end_line`` and
``end_col_offset``
must be accurate in functional tests (for python 3.8 or above on cpython, and
for
python 3.9 or superior on pypy).

Refs 8466

- Following a deprecation period, the ``do_exit`` argument of the ``Run`` class
(and of the ``_Run``
class in testutils) were removed.

Refs 8472 

- Following a deprecation period, the ``py_version`` argument of the
``MessageDefinition.may_be_emitted`` function is now required. The most
likely solution
is to use 'linter.config.py_version' if you need to keep using this
function, or to use 'MessageDefinition.is_message_enabled' instead.

Refs 8473 

- Following a deprecation period, the ``OutputLine`` class now requires
the right number of argument all the time. The functional output can be
regenerated automatically to achieve that easily.

Refs 8474 

- Following a deprecation period, ``is_typing_guard``,
``is_node_in_typing_guarded_import_block`` and
``is_node_in_guarded_import_block``: from ``pylint.utils`` were removed: use
a combination of
``is_sys_guard`` and ``in_type_checking_block`` instead.

Refs 8475 

- Following a deprecation period, the ``location`` argument of the
``Message`` class must now be a ``MessageLocationTuple``.

Refs 8477

- Following a deprecation period, the ``check_single_file`` function of the
``Pylinter`` is replaced by ``Pylinter.check_single_file_item``.

Refs 8478

3.0.0a5

This is 2.14.0 with breaking changes for 3.0 included. Released only so that the old alpha 4 release based on pylint 2.9.0 is not proposed by tools instead of 2.14.0. 2.14.0 is the stable version you should use that.

3.0.0a4

* This is 2.9.0 with the breaking changes of the future version 3.0.

* Fix the score option not being honored when exporting to JSON

The default setting was to have a score, but it did not work. Now it will give a score at the end of the json:

Close 3504

2.17.7

2.17.7 is the last release before we only support pylint 3.0.0 or superior and python 3.8 or superior.

False Positives Fixed
---------------------

- Fix a regression in pylint 2.17.6 / astroid 2.15.7 causing various
messages for code involving ``TypeVar``.

Closes 9069



Other Bug Fixes
---------------

- Fix crash in refactoring checker when unary operand used with variable in for
loop.

Closes 9074

2.17.6

Other Bug Fixes
---------------

- When parsing comma-separated lists of regular expressions in the config,
ignore commas that are inside braces since those indicate quantifiers, not
delineation between expressions.

Closes 7229

- ``sys.argv`` is now always correctly considered as impossible to infer
(instead of using the actual values given to pylint).

Closes 9047 

- Don't show class fields more than once in Pyreverse diagrams.

Closes 8189

- Don't show arrows more than once in Pyreverse diagrams.

Closes 8522

- Don't show duplicate type annotations in Pyreverse diagrams.

Closes 8888 

- Don't add `Optional` to `|` annotations with `None` in Pyreverse diagrams.

Closes 9014

2.17.5

----------------------------
Release date: 2023-07-26


False Positives Fixed
---------------------

- Fix a false positive for ``unused-variable`` when there is an import in a
``if TYPE_CHECKING:`` block and ``allow-global-unused-variables`` is set to
``no`` in the configuration.

Closes 8696 

- Fix false positives generated when supplying arguments as ``**kwargs`` to IO
calls like open().

Closes 8719

- Fix a false positive where pylint was ignoring method calls annotated as
``NoReturn`` during the ``inconsistent-return-statements`` check.

Closes 8747

- Exempt parents with only type annotations from the ``invalid-enum-extension``
message.

Closes 8830



Other Bug Fixes
---------------

- Fixed crash when a call to ``super()`` was placed after an operator (e.g.
``not``).

Closes 8554 

- Fix crash for ``modified-while-iterating`` checker when deleting
members of a dict returned from a call.

Closes 8598 

- Fix crash in ``invalid-metaclass`` check when a metaclass had duplicate
bases.

Closes 8698 

- Avoid ``consider-using-f-string`` on modulos with brackets in template.

Closes 8720. 

- Fix a crash when ``__all__`` exists but cannot be inferred.

Closes 8740

- Fix crash when a variable is assigned to a class attribute of identical name.

Closes 8754 

- Fixed a crash when calling ``copy.copy()`` without arguments.

Closes 8774 



Other Changes
-------------

- Fix a crash when a ``nonlocal`` is defined at module-level.

Closes 8735

2.17.4

False Positives Fixed
---------------------

- Fix a false positive for ``bad-dunder-name`` when there is a user-defined
``__index__`` method.

Closes 8613 



Other Bug Fixes
---------------

- ``pyreverse``: added escaping of vertical bar character in annotation labels
produced by DOT printer to ensure it is not treated as field separator of
record-based nodes.

Closes 8603 

- Fixed a crash when generating a configuration file:
``tomlkit.exceptions.TOMLKitError: Can't add a table to a dotted key``
caused by tomlkit ``v0.11.8``.

Closes 8632

2.17.3

----------------------------
Release date: 2023-04-24


False Positives Fixed
---------------------

- Fix `unused-argument` false positive when `__new__` does not use all the
arguments of `__init__`.

Closes 3670 

- Fix ``unused-import`` false positive for usage of ``six.with_metaclass``.

Closes 7506 

- `logging-not-lazy` is not longer emitted for explicitly concatenated string
arguments.

Closes 8410 

- Fix false positive for isinstance-second-argument-not-valid-type when union
types contains None.

Closes 8424 

- Fixed `unused-import` so that it observes the `dummy-variables-rgx` option.

Closes 8500 

- `Union` typed variables without assignment are no longer treated as
`TypeAlias`.

Closes 8540 

- Fix false positive for ``positional-only-arguments-expected`` when a function
contains both a positional-only parameter that has a default value, and
``**kwargs``.

Closes 8555 

- Fix false positive for ``keyword-arg-before-vararg`` when a positional-only
parameter with a default value precedes ``*args``.

Closes 8570



Other Bug Fixes
---------------

- Improve output of ``consider-using-generator`` message for ``min()` calls
with ``default`` keyword.

Closes 8563

2.17.2

False Positives Fixed
---------------------

- ``invalid-name`` now allows for integers in ``typealias`` names:
- now valid: ``Good2Name``, ``GoodName2``.
- still invalid: ``_1BadName``.

Closes 8485

- No longer consider ``Union`` as type annotation as type alias for naming
checks.

Closes 8487 

- ``unnecessary-lambda`` no longer warns on lambdas which use its parameters in
their body (other than the final arguments), e.g.
``lambda foo: (bar if foo else baz)(foo)``.

Closes 8496 



Other Bug Fixes
---------------

- Fix a crash in pyreverse when "/" characters are used in the output filename
e.g pyreverse -o png -p name/ path/to/project.

Closes 8504

2.17.1

False Positives Fixed
---------------------

- Adds ``asyncSetUp`` to the default ``defining-attr-methods`` list to silence
``attribute-defined-outside-init`` warning when using
``unittest.IsolatedAsyncioTestCase``.

Refs 8403


Other Bug Fixes
---------------

- ``--clear-cache-post-run`` now also clears LRU caches for pylint utilities
holding references to AST nodes.

Closes 8361 

- Fix a crash when ``TYPE_CHECKING`` is used without importing it.

Closes 8434 

- Fix a regression of ``preferred-modules`` where a partial match was used
instead of the required full match.

Closes 8453 



Internal Changes
----------------

- The following utilities are deprecated in favor of the more robust
``in_type_checking_block``
and will be removed in pylint 3.0:

 - ``is_node_in_guarded_import_block``
 - ``is_node_in_typing_guarded_import_block``
 - ``is_typing_guard``

``is_sys_guard`` is still available, which was part of
``is_node_in_guarded_import_block``.

Refs 8433

2.17.0

----------------------------
Release date: 2023-03-08


New Features
------------

- `pyreverse` now supports custom color palettes with the `--color-palette`
option.

Closes 6738

- Add ``invalid-name`` check for ``TypeAlias`` names.

Closes 7081

- Accept values of the form ``<class name>.<attribute name>`` for the
``exclude-protected`` list.

Closes 7343

- Add `--version` option to `pyreverse`.

Refs 7851

- Adds new functionality with preferred-modules configuration to detect
submodules.

Refs 7957 

- Support implicit namespace packages (PEP 420).

Closes 8154 

- Add globbing pattern support for ``--source-roots``.

Closes 8290

- Support globbing pattern when defining which file/directory/module to lint.

Closes 8310

- pylint now supports ``TryStar`` nodes from Python 3.11 and should be fully
compatible with Python 3.11.

Closes 8387 



New Checks
----------

- Add a ``bad-chained-comparison`` check that emits a warning when
there is a chained comparison where one expression is semantically
incompatible with the other.

Closes 6559 

- Adds an ``implicit-flag-alias`` check that emits a warning when a class
derived from ``enum.IntFlag`` assigns distinct integer values that share
common bit positions.

Refs 8102 



False Positives Fixed
---------------------

- Fix various false positives for functions that return directly from
structural pattern matching cases.

Closes 5288 

- Fix false positive for ``used-before-assignment`` when
``typing.TYPE_CHECKING`` is used with if/elif/else blocks.

Closes 7574

- Fix false positive for isinstance-second-argument-not-valid-type with union
types.

Closes 8205

- Fix false positive for ``used-before-assignment`` for named expressions
appearing after the first element in a list, tuple, or set.

Closes 8252

- Fix false positive for ``wrong-spelling-in-comment`` with class names in a
python 2 type comment.

Closes 8370 



False Negatives Fixed
---------------------

- Fix a false negative for 'missing-parentheses-for-call-in-test' when
inference
failed for the internal of the call as we did not need that information to
raise
correctly.

Refs 8185 

- Fix false negative for inconsistent-returns with while-loops.

Closes 8280



Other Bug Fixes
---------------

- Fix ``used-before-assignment`` false positive when the walrus operator
is used with a ternary operator in dictionary key/value initialization.

Closes 8125

- Fix ``no-name-in-module`` false positive raised when a package defines a
variable with the
same name as one of its submodules.

Closes 8148 

- Fix a crash happening for python interpreter < 3.9 following a failed typing
update.

Closes 8161 

- Fix ``nested-min-max`` suggestion message to indicate it's possible to splat
iterable objects.

Closes 8168 

- Fix a crash happening when a class attribute was negated in the start
argument of an enumerate.

Closes 8207

- Prevent emitting ``invalid-name`` for the line on which a ``global``
statement is declared.

Closes 8307 



Other Changes
-------------

- Update explanation for ``global-variable-not-assigned`` and add confidence.

Closes 5073 

- The governance model and the path to become a maintainer have been documented
as  part of our effort to guarantee that the software supply chain in which  pylint is included is secure.

Refs 8329

2.16.4

False Positives Fixed
---------------------

- Fix false positive for isinstance-second-argument-not-valid-type with union
types.

Closes 8205

2.16.3

False Positives Fixed
---------------------

- Fix false positive for ``wrong-spelling-in-comment`` with class names in a
python 2 type comment.

Closes 8370 



Other Bug Fixes
---------------

- Prevent emitting ``invalid-name`` for the line on which a ``global``
statement is declared.

Closes 8307

2.16.2

New Features
------------

- Add `--version` option to `pyreverse`.

Refs 7851



False Positives Fixed
---------------------

- Fix false positive for ``used-before-assignment`` when
``typing.TYPE_CHECKING`` is used with if/elif/else blocks.

Closes 7574

- Fix false positive for ``used-before-assignment`` for named expressions
appearing after the first element in a list, tuple, or set.

Closes 8252 



Other Bug Fixes
---------------

- Fix ``used-before-assignment`` false positive when the walrus operator
is used with a ternary operator in dictionary key/value initialization.

Closes 8125

- Fix ``no-name-in-module`` false positive raised when a package defines a
variable with the  same name as one of its submodules.

Closes 8148

- Fix ``nested-min-max`` suggestion message to indicate it's possible to splat
iterable objects.

Closes 8168 

- Fix a crash happening when a class attribute was negated in the start
argument of an enumerate.

Closes 8207

2.16.1

Other Bug Fixes
---------------

- Fix a crash happening for python interpreter < 3.9 following a failed typing
update.

Closes 8161

2.16.0

----------------------------

Changes requiring user actions
------------------------------

- The ``accept-no-raise-doc`` option related to ``missing-raises-doc`` will now
be correctly taken into account all the time.

Pylint will no longer raise missing-raises-doc (W9006) when no exceptions are
documented and accept-no-raise-doc is true (issue 7208).
If you were expecting missing-raises-doc errors to be raised in that case,
you
will now have to add ``accept-no-raise-doc=no`` in your configuration to keep
the same behavior.
Closes 7208



New Features
------------

- Added the ``no-header`` output format. If enabled with
``--output-format=no-header``, it will not include the module name in the
output.
Closes 5362

- Added configuration option ``clear-cache-post-run`` to support server-like
usage.
Use this flag if you expect the linted files to be altered between runs.
Refs 5401

- Add ``--allow-reexport-from-package`` option to configure the
``useless-import-alias`` check not to emit a warning if a name
is reexported from a package.
Closes 6006

- Update ``pyreverse`` to differentiate between aggregations and compositions.
``pyreverse`` checks if it's an Instance or a Call of an object via method
parameters (via type hints)
to decide if it's a composition or an aggregation.
Refs 6543



New Checks
----------

- Adds a ``pointless-exception-statement`` check that emits a warning when an
Exception is created and not assigned, raised or returned.
Refs 3110

- Add a ``shadowed-import`` message for aliased imports.
Closes 4836

- Add new check called ``unbalanced-dict-unpacking`` to check for unbalanced
dict unpacking
in assignment and for loops.
Closes 5797

- Add new checker ``positional-only-arguments-expected`` to check for cases
when
positional-only arguments have been passed as keyword arguments.
Closes 6489

- Added ``singledispatch-method`` which informs that ``singledispatch`` should
decorate functions and not class/instance methods.
Added ``singledispatchmethod-function`` which informs that
``singledispatchmethod`` should decorate class/instance methods and not
functions.
Closes 6917

- Rename ``broad-except`` to ``broad-exception-caught`` and add new checker
``broad-exception-raised``
which will warn if general exceptions ``BaseException`` or ``Exception`` are
raised.
Closes 7494

- Added ``nested-min-max`` which flags ``min(1, min(2, 3))`` to simplify to
``min(1, 2, 3)``.
Closes 7546

- Extended ``use-dict-literal`` to also warn about call to ``dict()`` when
passing keyword arguments.
Closes 7690

- Add ``named-expr-without-context`` check to emit a warning if a named
expression is used outside a context like ``if``, ``for``, ``while``, or
a comprehension.
Refs 7760

- Add ``invalid-slice-step`` check to warn about a slice step value of ``0``
for common builtin sequences.
Refs 7762

- Add ``consider-refactoring-into-while-condition`` check to recommend
refactoring when
a while loop is defined with a constant condition with an immediate ``if``
statement to check for ``break`` condition as a first statement.
Closes 8015



Extensions
----------

- Add new extension checker ``dict-init-mutate`` that flags mutating a
dictionary immediately
after the dictionary was created.
Closes 2876

- Added ``bad-dunder-name`` extension check, which flags bad or misspelled
dunder methods.
You can use the ``good-dunder-names`` option to allow specific dunder names.
Closes 3038

- Added ``consider-using-augmented-assign`` check for ``CodeStyle`` extension
which flags ``x = x + 1`` to simplify to ``x += 1``.
This check is disabled by default. To use it, load the code style extension
with ``load-plugins=pylint.extensions.code_style`` and add
``consider-using-augmented-assign`` in the ``enable`` option.
Closes 3391

- Add ``magic-number`` plugin checker for comparison with constants instead of
named constants or enums.
You can use it with ``--load-plugins=pylint.extensions.magic_value``.
Closes 7281

- Add ``redundant-typehint-argument`` message for `typing` plugin for duplicate
assign typehints.
Enable the plugin to enable the message with:
``--load-plugins=pylint.extensions.typing``.
Closes 7636



False Positives Fixed
---------------------

- Fix false positive for ``unused-variable`` and ``unused-import`` when a name
is only used in a string literal type annotation.
Closes 3299

- Document a known false positive for ``useless-suppression`` when disabling
``line-too-long`` in a module with only comments and no code.
Closes 3368

- ``trailing-whitespaces`` is no longer reported within strings.
Closes 3822

- Fix false positive for ``global-variable-not-assigned`` when a global
variable is re-assigned via an ``ImportFrom`` node.
Closes 4809

- Fix false positive for ``use-maxsplit-arg`` with custom split method.
Closes 4857

- Fix ``logging-fstring-interpolation`` false positive raised when logging and
f-string with ``%s`` formatting.
Closes 4984

- Fix false-positive for ``used-before-assignment`` in pattern matching
with a guard.
Closes 5327

- Fix ``use-sequence-for-iteration`` when unpacking a set with ``*``.
Closes 5788

- Fix ``deprecated-method`` false positive when alias for method is similar to
name of deprecated method.
Closes 5886

- Fix false positive ``assigning-non-slot`` when a class attribute is
re-assigned.
Closes 6001

- Fix false positive for ``too-many-function-args`` when a function call is
assigned to a class attribute inside the class where the function is defined.
Closes 6592

- Fixes false positive ``abstract-method`` on Protocol classes.
Closes 7209

- Pylint now understands the ``kw_only`` keyword argument for ``dataclass``.
Closes 7290, closes 6550, closes 5857

- 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

- Fix ``used-before-assignment`` for functions/classes defined in type checking
guard.
Closes 7368

- Fix false positive for ``unhashable-member`` when subclassing ``dict`` and
using the subclass as a dictionary key.
Closes 7501

- Fix the message for ``unnecessary-dunder-call`` for ``__aiter__`` and
``__aneext__``. Also
only emit the warning when ``py-version`` >= 3.10.
Closes 7529

- Fix ``used-before-assignment`` false positive when else branch calls
``sys.exit`` or similar terminating functions.
Closes 7563

- Fix a false positive for ``used-before-assignment`` for imports guarded by
``typing.TYPE_CHECKING`` later used in variable annotations.
Closes 7609

- Fix a false positive for ``simplify-boolean-expression`` when multiple values
are inferred for a constant.
Closes 7626

- ``unnecessary-list-index-lookup`` will not be wrongly emitted if
``enumerate`` is called with ``start``.
Closes 7682

- Don't warn about ``stop-iteration-return`` when using ``next()`` over
``itertools.cycle``.
Closes 7765

- Fixes ``used-before-assignment`` false positive when the walrus operator
is used in a ternary operator.
Closes 7779

- Fix ``missing-param-doc`` false positive when function parameter has an
escaped underscore.
Closes 7827

- Fixes ``method-cache-max-size-none`` false positive for methods inheriting
from ``Enum``.
Closes 7857

- ``multiple-statements`` no longer triggers for function stubs using inlined
``...``.
Closes 7860

- Fix a false positive for ``used-before-assignment`` when a name guarded by
``if TYPE_CHECKING:`` is used as a type annotation in a function body and
later re-imported in the same scope.
Closes 7882

- Prevent ``used-before-assignment`` when imports guarded by ``if
TYPE_CHECKING``
are guarded again when used.
Closes 7979

- Fixes false positive for ``try-except-raise`` with multiple exceptions in one
except statement if exception are in different namespace.
Closes 8051

- Fix ``invalid-name`` errors for ``typing_extension.TypeVar``.
Refs 8089

- Fix ``no-kwoa`` false positive for context managers.
Closes 8100

- Fix a false positive for ``redefined-variable-type`` when ``async`` methods
are present.
Closes 8120



False Negatives Fixed
---------------------

- Code following a call to  ``quit``,  ``exit``, ``sys.exit`` or ``os._exit``
will be marked as `unreachable`.
Refs 519

- Emit ``used-before-assignment`` when function arguments are redefined inside
an inner function and accessed there before assignment.
Closes 2374

- Fix a false negative for ``unused-import`` when one module used an import in
a type annotation that was also used in another module.
Closes 4150

- Flag ``superfluous-parens`` if parentheses are used during string
concatenation.
Closes 4792

- Emit ``used-before-assignment`` when relying on names only defined under
conditions always testing false.
Closes 4913

- ``consider-using-join`` can now be emitted for non-empty string separators.
Closes 6639

- Emit ``used-before-assignment`` for further imports guarded by
``TYPE_CHECKING``
Previously, this message was only emitted for imports guarded directly under
``TYPE_CHECKING``, not guarded two if-branches deep, nor when
``TYPE_CHECKING``
was imported from ``typing`` under an alias.
Closes 7539

- Fix a false negative for ``unused-import`` when a constant inside
``typing.Annotated`` was treated as a reference to an import.
Closes 7547

- ``consider-using-any-or-all`` message will now be raised in cases when
boolean is initialized, reassigned during loop, and immediately returned.
Closes 7699

- Extend ``invalid-slice-index`` to emit an warning for invalid slice indices
used with string and byte sequences, and range objects.
Refs 7762

- Fixes ``unnecessary-list-index-lookup`` false negative when ``enumerate`` is
called with ``iterable`` as a kwarg.
Closes 7770

- ``no-else-return`` or ``no-else-raise`` will be emitted if ``except`` block
always returns or raises.
Closes 7788

- Fix ``dangerous-default-value`` false negative when ``*`` is used.
Closes 7818

- ``consider-using-with`` now triggers for ``pathlib.Path.open``.
Closes 7964

Other Bug Fixes
---------------

- Fix bug in detecting ``unused-variable`` when iterating on variable.
Closes 3044

- Fix bug in scanning of names inside arguments to ``typing.Literal``.
See https://peps.python.org/pep-0586/#literals-enums-and-forward-references
for details.
Refs 3299

- Update ``disallowed-name`` check to flag module-level variables.
Closes 3701

- Pylint will no longer deadlock if a parallel job is killed but fail
immediately instead.
Closes 3899

- Fix ignored files being linted when passed on stdin.
Closes 4354

- Fix ``no-member`` false negative when augmented assign is done manually,
without ``+=``.
Closes 4562

- Any assertion on a populated tuple will now receive a ``assert-on-tuple``
warning.
Closes 4655

- ``missing-return-doc``, ``missing-raises-doc`` and ``missing-yields-doc`` now
respect
the ``no-docstring-rgx`` option.
Closes 4743

- Update ``reimported`` help message for clarity.
Closes 4836

- ``consider-iterating-dictionary`` will no longer be raised if bitwise
operations are used.
Closes 5478

- Using custom braces in ``msg-template`` will now work properly.
Closes 5636

- Pylint will now filter duplicates given to it before linting. The output
should
be the same whether a file is given/discovered multiple times or not.
Closes 6242, 4053

- Remove ``__index__`` dunder method call from ``unnecessary-dunder-call``
check.
Closes 6795

- Fixed handling of ``--`` as separator between positional arguments and flags.
This was not actually fixed in 2.14.5.
Closes 7003, Refs 7096

- Don't crash on ``OSError`` in config file discovery.
Closes 7169

- Messages sent to reporter are now copied so a reporter cannot modify the
message sent to other reporters.
Closes 7214

- Fixed a case where custom plugins specified by command line could silently
fail.
Specifically, if a plugin relies on the ``init-hook`` option 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.

- Update ``modified_iterating`` checker to fix a crash with ``for`` loops on
empty list.
Closes 7380

- Update wording for ``arguments-differ`` and ``arguments-renamed`` to clarify
overriding object.
Closes 7390

- ``disable-next`` is now correctly scoped to only the succeeding line.
Closes 7401

- Fixed a crash in the ``unhashable-member`` checker when using a ``lambda`` as
a dict key.
Closes 7453

- Add ``mailcap`` to deprecated modules list.
Closes 7457

- Fix a crash in the ``modified-iterating-dict`` checker involving instance
attributes.
Closes 7461

- ``invalid-class-object`` does not crash anymore when ``__class__`` is
assigned alongside another variable.
Closes 7467

- ``--help-msg`` now accepts a comma-separated list of message IDs again.
Closes 7471

- Allow specifying non-builtin exceptions in the ``overgeneral-exception``
option
using an exception's qualified name.
Closes 7495

- Report ``no-self-argument`` rather 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

- Use ``py-version`` to determine if a message should be emitted for messages
defined with ``max-version`` or ``min-version``.
Closes 7569

- Improve ``bad-thread-instantiation`` check to warn if ``target`` is not
passed in as a keyword argument
or as a second argument.
Closes 7570

- Fixes edge case of custom method named ``next`` raised an astroid error.
Closes 7610

- Fixed a multi-processing crash that prevents using any more than 1 thread on
MacOS.
The returned module objects and errors that were cached by the linter plugin
loader
cannot be reliably pickled. This means that ``dill`` would throw an error
when
attempting to serialise the linter object for multi-processing use.
Closes 7635.

- Fix crash that happened when parsing files with unexpected encoding starting
with 'utf' like ``utf13``.
Closes 7661

- Fix a crash when a child class with an ``__init__`` method inherits from a
parent class with an ``__init__`` class attribute.
Closes 7742

- Fix ``valid-metaclass-classmethod-first-arg`` default config value from "cls"
to "mcs"
which would cause both a false-positive and false-negative.
Closes 7782

- Fixes a crash in the ``unnecessary_list_index_lookup`` check when using
``enumerate`` with ``start`` and a class attribute.
Closes 7821

- Fixes a crash in ``stop-iteration-return`` when the ``next`` builtin is
called without arguments.
Closes 7828

- When pylint exit due to bad arguments being provided the exit code will now
be the expected ``32``.
Refs 7931

- Fixes a ``ModuleNotFound`` exception when running pylint on a Django project
with the ``pylint_django`` plugin enabled.
Closes 7938

- Fixed a crash when inferring a value and using its qname on a slice that was
being incorrectly called.
Closes 8067

- Use better regex to check for private attributes.
Refs 8081

- Fix issue with new typing Union syntax in runtime context for Python 3.10+.
Closes 8119

Other Changes
-------------

- Pylint now provides basic support for Python 3.11.
Closes 5920

- Update message for ``abstract-method`` to include child class name.
Closes 7124

- Update Pyreverse's dot and plantuml printers to detect when class methods are
abstract and show them with italic font.
For the dot printer update the label to use html-like syntax.
Closes 7346

- The ``docparams`` extension now considers typing in Numpy style docstrings
as "documentation" for the ``missing-param-doc`` message.
Refs 7398

- Relevant ``DeprecationWarnings`` are now raised with ``stacklevel=2``, so
they have the callsite attached in the message.
Closes 7463

- Add a ``minimal`` option to ``pylint-config`` and its toml generator.
Closes 7485

- Add method name to the error messages of ``no-method-argument`` and
``no-self-argument``.
Closes 7507

- Prevent leaving the pip install cache in the Docker image.
Refs 7544

- Add a keyword-only ``compare_constants`` argument to ``safe_infer``.
Refs 7626

- Add ``default_enabled`` option to optional message dict. Provides an option
to disable a checker message by default.
To use a disabled message, the user must enable it explicitly by adding the
message to the ``enable`` option.
Refs 7629

- Sort ``--generated-rcfile`` output.
Refs 7655

- epylint is now deprecated and will be removed in pylint 3.0.0. All emacs and
flymake related
files were removed and their support will now happen in an external
repository :
https://gith

@pyup-bot pyup-bot mentioned this pull request Feb 25, 2024
Copy link

codecov bot commented Feb 25, 2024

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 67.85%. Comparing base (71f6d84) to head (9986765).

Additional details and impacted files
@@           Coverage Diff           @@
##           master     #229   +/-   ##
=======================================
  Coverage   67.85%   67.85%           
=======================================
  Files           2        2           
  Lines          56       56           
=======================================
  Hits           38       38           
  Misses         18       18           

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@pyup-bot
Copy link
Collaborator Author

Closing this in favor of #235

@pyup-bot pyup-bot closed this May 13, 2024
@aragilar aragilar deleted the pyup-update-pylint-2.9.6-to-3.1.0 branch May 13, 2024 15:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant