Pylint

Latest version: v3.1.0

Safety actively analyzes 627119 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 4 of 19

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://github.com/emacsorphanage/pylint.
Closes 7737

- Adds test for existing preferred-modules configuration functionality.
Refs 7957

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

- Add and fix regression tests for plugin loading.
This shores up the tests that cover the loading of custom plugins as affected
by any changes made to the ``sys.path`` during execution of an ``init-hook``.
Given the existing contract of allowing plugins to be loaded by fiddling with
the path in this way, this is now the last bit of work needed to close Github
issue 7264.
Closes 7264

Page 4 of 19

© 2024 Safety CLI Cybersecurity Inc. All Rights Reserved.