What's New in Pylint 2.9
************************

Release:
   2.9

Date:
   2021-06-29


Summary -- Release highlights
=============================

Pylint is now compatible with python 3.10.

A lot of new checks have been added, some non-opinionated performance
warnings like "use-maxsplit-arg", some consensual style warnings like
"unnecessary-dict-index-lookup" or new deprecation checks.

We're aiming to reduce pylint noise for first time users and making
some new checks optional is a step in that direction. In order to do
that we created an optional code style checker that can be loaded
using "pylint.extensions.code_style" with the "load-plugins" options.
More than ever, if as a veteran you want the most checks you can
possibly get, you should check the list of pylint extensions..


New checkers
============

* "deprecated-decorator": Emitted when deprecated decorator is used.

* "consider-using-dict-items": Emitted when iterating over dictionary
  keys and then indexing the same dictionary with the key within loop
  body.

* "use-maxsplit-arg": Emitted either when accessing only the first or
  last element of "str.split()".

* An "ignore_signatures" option has been added to the similarity
  checker. It will permits  to reduce false positives when multiple
  functions have the same parameters.

* "unnecessary-dict-index-lookup": Emitted when iterating over
  dictionary items (key-value pairs) and accessing the value by index
  lookup.

* "consider-using-from-import": Emitted when a submodule/member of a
  package is imported and aliased with the same name.

* New checker "unused-private-member": Emitted when a private member
  (i.e., starts with "__") of a class is defined but not used.

* New checker "invalid-class-object": Emitted when a non-class is
  assigned to a "__class__" attribute.

* "invalid-all-format": Emitted when "__all__" has an invalid format,
  i.e. isn't a "tuple" or "list".

* New checker "await-outside-async": Emitted when await is used
  outside an async function.

* 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.

  * "consider-using-tuple": Emitted when an in-place defined list or
    set can be replaced by a tuple.

  * "consider-using-namedtuple-or-dataclass": Emitted when dictionary
    values can be replaced by namedtuples or dataclass instances.


Other Changes
=============

* Fix false-positive "consider-using-with" (R1732) if a ternary
  conditional is used together with "with"

* Fix false-positive "consider-using-with" (R1732) if
  "contextlib.ExitStack" takes care of calling the "__exit__" method

* Add type annotations to pyreverse dot files

* Pylint's tags are now the standard form "vX.Y.Z" and not
  "pylint-X.Y.Z" anymore.

* Fix false-positive "too-many-ancestors" when inheriting from builtin
  classes, especially from the "collections.abc" module

* The output messages for "arguments-differ" error message have been
  customized based on the different error cases.

* New option "--fail-on=<msg ids>" to return non-zero exit codes
  regardless of "fail-under" value.

* A new error called "arguments-renamed" has been created, which
  identifies any changes at the parameter names of overridden
  functions. It aims to separate the functionality of "arguments-
  differ".

* Fix incompatibility with Python 3.6.0 caused by "typing.Counter" and
  "typing.NoReturn" usage

* Allow comma-separated list in "output-format" and separate output
  files for each specified format.  Each output file can be defined
  after a semicolon for example : "--output-
  format=json:myfile.json,colorized"

* The "using-constant-test" checker now detects constant tests
  consisting of list literals like "[]" and "[1, 2, 3]".

* "ignore-paths" configuration directive has been added. Defined regex
  patterns are matched against file path.

* Added handling of floating point values when parsing configuration
  from pyproject.toml

* 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.

* Fix missing support for detecting deprecated aliases to existing
  functions/methods. functions/methods.

* Added various deprecated functions/methods for python 3.10, 3.7, 3.6
  and 3.3

* No longer emit "consider-using-with" for "ThreadPoolExecutor" and
  "ProcessPoolExecutor" as they have legitimate use cases without a
  "with" block.

* Fix crash if a callable returning a context manager was assigned to
  a list or dict item
