*************************** What's New in Pylint 3.2 *************************** .. toctree:: :maxdepth: 2 :Release: 3.2 :Date: TBA Summary -- Release highlights ============================= .. towncrier release notes start What's new in Pylint 3.2.7? --------------------------- Release date: 2024-08-31 False Positives Fixed --------------------- - Fixed a false positive `unreachable` for `NoReturn` coroutine functions. Closes #9840. (`#9840 `_) Other Bug Fixes --------------- - Fix crash in refactoring checker when calling a lambda bound as a method. Closes #9865 (`#9865 `_) - Fix a crash in ``undefined-loop-variable`` when providing the ``iterable`` argument to ``enumerate()``. Closes #9875 (`#9875 `_) - Fix to address indeterminacy of error message in case a module name is same as another in a separate namespace. Refs #9883 (`#9883 `_) What's new in Pylint 3.2.6? --------------------------- Release date: 2024-07-21 False Positives Fixed --------------------- - Quiet false positives for `unexpected-keyword-arg` when pylint cannot determine which of two or more dynamically defined classes is being instantiated. Closes #9672 (`#9672 `_) - Fix a false positive for ``missing-param-doc`` where a method which is decorated with ``typing.overload`` was expected to have a docstring specifying its parameters. Closes #9739 (`#9739 `_) - Fix a regression that raised ``invalid-name`` on class attributes merely overriding invalid names from an ancestor. Closes #9765 (`#9765 `_) - Treat `assert_never()` the same way when imported from `typing_extensions`. Closes #9780 (`#9780 `_) - Fix a false positive for `consider-using-min-max-builtin` when the assignment target is an attribute. Refs #9800 (`#9800 `_) Other Bug Fixes --------------- - Fix an `AssertionError` arising from properties that return partial functions. Closes #9214 (`#9214 `_) - Fix a crash when a subclass extends ``__slots__``. Closes #9814 (`#9814 `_) What's new in Pylint 3.2.5? --------------------------- Release date: 2024-06-28 Other Bug Fixes --------------- - Fixed a false positive ``unreachable-code`` when using ``typing.Any`` as return type in python 3.8, the ``typing.NoReturn`` are not taken into account anymore for python 3.8 however. Closes #9751 (`#9751 `_) What's new in Pylint 3.2.4? --------------------------- Release date: 2024-06-26 False Positives Fixed --------------------- - Prevent emitting ``possibly-used-before-assignment`` when relying on names only potentially not defined in conditional blocks guarded by functions annotated with ``typing.Never`` or ``typing.NoReturn``. Closes #9674 (`#9674 `_) Other Bug Fixes --------------- - Fixed a crash when the lineno of a variable used as an annotation wasn't available for ``undefined-variable``. Closes #8866 (`#8866 `_) - Fixed a crash when the ``start`` value in an ``enumerate`` was non-constant and impossible to infer (like in``enumerate(apples, start=int(random_apple_index)``) for ``unnecessary-list-index-lookup``. Closes #9078 (`#9078 `_) - Fixed a crash in ``symilar`` when the ``-d`` or ``-i`` short option were not properly recognized. It's still impossible to do ``-d=1`` (you must do ``-d 1``). Closes #9343 (`#9343 `_) What's new in Pylint 3.2.3? --------------------------- Release date: 2024-06-06 False Positives Fixed --------------------- - Classes with only an Ellipsis (``...``) in their body do not trigger 'multiple-statements' anymore if they are inlined (in accordance with black's 2024 style). Closes #9398 (`#9398 `_) - Fix a false positive for ``redefined-outer-name`` when there is a name defined in an exception-handling block which shares the same name as a local variable that has been defined in a function body. Closes #9671 (`#9671 `_) - Fix a false positive for ``use-yield-from`` when using the return value from the ``yield`` atom. Closes #9696 (`#9696 `_) What's new in Pylint 3.2.2? --------------------------- Release date: 2024-05-20 False Positives Fixed --------------------- - Fix multiple false positives for generic class syntax added in Python 3.12 (PEP 695). Closes #9406 (`#9406 `_) - Exclude context manager without cleanup from ``contextmanager-generator-missing-cleanup`` checks. Closes #9625 (`#9625 `_) What's new in Pylint 3.2.1? --------------------------- Release date: 2024-05-18 False Positives Fixed --------------------- - Exclude if/else branches containing terminating functions (e.g. `sys.exit()`) from `possibly-used-before-assignment` checks. Closes #9627 (`#9627 `_) - Don't emit ``typevar-name-incorrect-variance`` warnings for PEP 695 style TypeVars. The variance is inferred automatically by the type checker. Adding ``_co`` or ``_contra`` suffix can help to reason about TypeVar. Refs #9638 (`#9638 `_) - Fix a false positive for `possibly-used-before-assignment` when using `typing.assert_never()` (3.11+) to indicate exhaustiveness. Closes #9643 (`#9643 `_) Other Bug Fixes --------------- - Fix a false negative for ``--ignore-patterns`` when the directory to be linted is specified using a dot(``.``) and all files are ignored instead of only the files whose name begin with a dot. Closes #9273 (`#9273 `_) - Restore "errors / warnings by module" section to report output (with `-ry`). Closes #9145 (`#9145 `_) - ``trailing-comma-tuple`` should now be correctly emitted when it was disabled globally but enabled via local message control, after removal of an over-optimisation. Refs #9608. (`#9608 `_) - Add `--prefer-stubs=yes` option to opt-in to the astroid 3.2 feature that prefers `.pyi` stubs over same-named `.py` files. This has the potential to reduce `no-member` errors but at the cost of more errors such as `not-an-iterable` from function bodies appearing as `...`. Defaults to `no`. Closes #9626 Closes #9623 (`#9626 `_) Internal Changes ---------------- - Update astroid version to 3.2.1. This solves some reports of ``RecursionError`` and also makes the *prefer .pyi stubs* feature in astroid 3.2.0 *opt-in* with the aforementioned ``--prefer-stubs=y`` option. Refs #9139 (`#9139 `_) What's new in Pylint 3.2.0? --------------------------- Release date: 2024-05-14 New Features ------------ - Understand `six.PY2` and `six.PY3` for conditional imports. Closes #3501 (`#3501 `_) - A new `github` reporter has been added. This reporter returns the output of `pylint` in a format that Github can use to automatically annotate code. Use it with `pylint --output-format=github` on your Github Workflows. Closes #9443. (`#9443 `_) New Checks ---------- - Add check ``possibly-used-before-assignment`` when relying on names after an ``if/else`` switch when one branch failed to define the name, raise, or return. Closes #1727 (`#1727 `_) - Checks for generators that use contextmanagers that don't handle cleanup properly. Is meant to raise visibility on the case that a generator is not fully exhausted and the contextmanager is not cleaned up properly. A contextmanager must yield a non-constant value and not handle cleanup for GeneratorExit. The using generator must attempt to use the yielded context value `with x() as y` and not just `with x()`. Closes #2832 (`#2832 `_) False Negatives Fixed --------------------- - If and Try nodes are now checked for useless return statements as well. Closes #9449. (`#9449 `_) - Fix false negative for ``property-with-parameters`` in the case of parameters which are ``positional-only``, ``keyword-only``, ``variadic positional`` or ``variadic keyword``. Closes #9584 (`#9584 `_) False Positives Fixed --------------------- pylint now understands the ``@overload`` decorator return values better. Closes #4696 (`#4696 `_) Refs #9606 (`#9606 `_) Performance Improvements ------------------------ - Ignored modules are now not checked at all, instead of being checked and then ignored. This should speed up the analysis of large codebases which have ignored modules. Closes #9442 (`#9442 `_) (`#9442 `_) - ImportChecker's logic has been modified to avoid context files when possible. This makes it possible to cache module searches on astroid and reduce execution times. Refs #9310. (`#9310 `_) - An internal check for ``trailing-comma-tuple`` being enabled for a file or not is now done once per file instead of once for each token. Refs #9608. (`#9608 `_)