| ************************* |
| What's New in Pylint 3.0 |
| ************************* |
| |
| .. toctree:: |
| :maxdepth: 2 |
| |
| :Release: 3.0.0 |
| :Date: 2023-10-02 |
| |
| |
| Summary -- Release highlights |
| ============================= |
| |
| 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. |
| |
| .. code-block:: 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 |
| } |
| } |
| |
| .. towncrier release notes start |
| |
| What's new in Pylint 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 (`#9148 <https://github.com/pylint-dev/pylint/issues/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 (`#9172 <https://github.com/pylint-dev/pylint/issues/9172>`_) |
| |
| - Fix false positives for ``undefined-variable`` and ``unused-argument`` for |
| classes and functions using Python 3.12 generic type syntax. |
| |
| Closes #9193 (`#9193 <https://github.com/pylint-dev/pylint/issues/9193>`_) |
| |
| - Fixed ``pointless-string-statement`` false positive for docstrings |
| on Python 3.12 type aliases. |
| |
| Closes #9268 (`#9268 <https://github.com/pylint-dev/pylint/issues/9268>`_) |
| |
| - Fix false positive for ``invalid-exception-operation`` when concatenating tuples |
| of exception types. |
| |
| Closes #9288 (`#9288 <https://github.com/pylint-dev/pylint/issues/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 (`#9210 <https://github.com/pylint-dev/pylint/issues/9210>`_) |
| |
| |
| |
| What's new in Pylint 3.0.2? |
| --------------------------- |
| Release date: 2023-10-22 |
| |
| |
| False Positives Fixed |
| --------------------- |
| |
| - Fix ``used-before-assignment`` false positive for generic type syntax (PEP 695, Python 3.12). |
| |
| Closes #9110 (`#9110 <https://github.com/pylint-dev/pylint/issues/9110>`_) |
| |
| |
| |
| Other Bug Fixes |
| --------------- |
| |
| - Escape special symbols and newlines in messages. |
| |
| Closes #7874 (`#7874 <https://github.com/pylint-dev/pylint/issues/7874>`_) |
| |
| - Fixes suggestion for ``nested-min-max`` for expressions with additive operators, list and dict comprehensions. |
| |
| Closes #8524 (`#8524 <https://github.com/pylint-dev/pylint/issues/8524>`_) |
| |
| - Fixes ignoring conditional imports with ``ignore-imports=y``. |
| |
| Closes #8914 (`#8914 <https://github.com/pylint-dev/pylint/issues/8914>`_) |
| |
| - Emit ``inconsistent-quotes`` for f-strings with 3.12 interpreter only if targeting pre-3.12 versions. |
| |
| Closes #9113 (`#9113 <https://github.com/pylint-dev/pylint/issues/9113>`_) |
| |
| |
| What's new in Pylint 3.0.1? |
| --------------------------- |
| Release date: 2023-10-05 |
| |
| |
| False Positives Fixed |
| --------------------- |
| |
| - Fixed false positive for ``inherit-non-class`` for generic Protocols. |
| |
| Closes #9106 (`#9106 <https://github.com/pylint-dev/pylint/issues/9106>`_) |
| |
| |
| |
| Other Changes |
| ------------- |
| |
| - Fix a crash when an enum class which is also decorated with a ``dataclasses.dataclass`` decorator is defined. |
| |
| Closes #9100 (`#9100 <https://github.com/pylint-dev/pylint/issues/9100>`_) |
| |
| |
| What's new in Pylint 3.0.0? |
| --------------------------- |
| Release date: 2023-10-02 |
| |
| |
| 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: |
| |
| .. code-block:: |
| |
| pylint my_module --enable=fixme --disable=all |
| |
| To regain the prior behavior, remove the superfluous earlier option. |
| |
| Closes #3696 (`#3696 <https://github.com/pylint-dev/pylint/issues/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 (`#6306 <https://github.com/pylint-dev/pylint/issues/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 (`#7767 <https://github.com/pylint-dev/pylint/issues/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 (`#8251 <https://github.com/pylint-dev/pylint/issues/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 (`#8404 <https://github.com/pylint-dev/pylint/issues/8404>`_) |
| |
| - ``pyreverse``: Support for the ``.vcg`` output format (Visualization of Compiler Graphs) has been dropped. |
| |
| Closes #8416 (`#8416 <https://github.com/pylint-dev/pylint/issues/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 (`#8462 <https://github.com/pylint-dev/pylint/issues/8462>`_) |
| |
| - Following a deprecation period, ``pylint.config.PYLINTRC`` was removed. |
| Use the ``pylint.config.find_default_config_files`` generator instead. |
| |
| Closes #8862 (`#8862 <https://github.com/pylint-dev/pylint/issues/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 (`#2018 <https://github.com/pylint-dev/pylint/issues/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 (`#6871 <https://github.com/pylint-dev/pylint/issues/6871>`_) |
| |
| - epylint was removed. It now lives at: https://github.com/emacsorphanage/pylint. |
| |
| Refs #7737 (`#7737 <https://github.com/pylint-dev/pylint/issues/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 (`#8411 <https://github.com/pylint-dev/pylint/issues/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 (`#8465 <https://github.com/pylint-dev/pylint/issues/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 (`#8973 <https://github.com/pylint-dev/pylint/issues/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 (`#4741 <https://github.com/pylint-dev/pylint/issues/4741>`_) |
| |
| - In Pyreverse package dependency diagrams, show when a module imports another only for type-checking. |
| |
| Closes #8112 (`#8112 <https://github.com/pylint-dev/pylint/issues/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 (`#8181 <https://github.com/pylint-dev/pylint/issues/8181>`_) |
| |
| - Add Pyreverse option to exclude standalone nodes from diagrams with `--no-standalone`. |
| |
| Closes #8476 (`#8476 <https://github.com/pylint-dev/pylint/issues/8476>`_) |
| |
| |
| |
| New Checks |
| ---------- |
| |
| - Added ``DataclassChecker`` module and ``invalid-field-call`` checker to check for invalid dataclasses.field() usage. |
| |
| Refs #5159 (`#5159 <https://github.com/pylint-dev/pylint/issues/5159>`_) |
| |
| - Add ``return-in-finally`` to emit a message if a return statement was found in a finally clause. |
| |
| Closes #8260 (`#8260 <https://github.com/pylint-dev/pylint/issues/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 (`#8558 <https://github.com/pylint-dev/pylint/issues/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 (`#8660 <https://github.com/pylint-dev/pylint/issues/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 (`#3613 <https://github.com/pylint-dev/pylint/issues/3613>`_) |
| |
| - Fix `unused-argument` false positive when `__new__` does not use all the arguments of `__init__`. |
| |
| Closes #3670 (`#3670 <https://github.com/pylint-dev/pylint/issues/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 (`#7402 <https://github.com/pylint-dev/pylint/issues/7402>`_) |
| |
| - Fix ``unused-import`` false positive for usage of ``six.with_metaclass``. |
| |
| Closes #7506 (`#7506 <https://github.com/pylint-dev/pylint/issues/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 (`#7767 <https://github.com/pylint-dev/pylint/issues/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 (`#8156 <https://github.com/pylint-dev/pylint/issues/8156>`_) |
| |
| - Fix false positive for ``used-before-assignment`` when usage and assignment |
| are guarded by the same test in different statements. |
| |
| Closes #8167 (`#8167 <https://github.com/pylint-dev/pylint/issues/8167>`_) |
| |
| - Adds ``asyncSetUp`` to the default ``defining-attr-methods`` list to silence |
| ``attribute-defined-outside-init`` warning when using |
| ``unittest.IsolatedAsyncioTestCase``. |
| |
| Refs #8403 (`#8403 <https://github.com/pylint-dev/pylint/issues/8403>`_) |
| |
| - `logging-not-lazy` is not longer emitted for explicitly concatenated string arguments. |
| |
| Closes #8410 (`#8410 <https://github.com/pylint-dev/pylint/issues/8410>`_) |
| |
| - Fix false positive for isinstance-second-argument-not-valid-type when union types contains None. |
| |
| Closes #8424 (`#8424 <https://github.com/pylint-dev/pylint/issues/8424>`_) |
| |
| - ``invalid-name`` now allows for integers in ``typealias`` names: |
| - now valid: ``Good2Name``, ``GoodName2``. |
| - still invalid: ``_1BadName``. |
| |
| Closes #8485 (`#8485 <https://github.com/pylint-dev/pylint/issues/8485>`_) |
| |
| - No longer consider ``Union`` as type annotation as type alias for naming checks. |
| |
| Closes #8487 (`#8487 <https://github.com/pylint-dev/pylint/issues/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 (`#8496 <https://github.com/pylint-dev/pylint/issues/8496>`_) |
| |
| - Fixed `unused-import` so that it observes the `dummy-variables-rgx` option. |
| |
| Closes #8500 (`#8500 <https://github.com/pylint-dev/pylint/issues/8500>`_) |
| |
| - `Union` typed variables without assignment are no longer treated as |
| `TypeAlias`. |
| |
| Closes #8540 (`#8540 <https://github.com/pylint-dev/pylint/issues/8540>`_) |
| |
| - Allow parenthesized implicitly concatenated strings when `check-str-concat-over-line-jumps` is enabled. |
| |
| Closes #8552. (`#8552 <https://github.com/pylint-dev/pylint/issues/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 (`#8555 <https://github.com/pylint-dev/pylint/issues/8555>`_) |
| |
| - Fix false positive for ``keyword-arg-before-vararg`` when a positional-only parameter with a default value precedes ``*args``. |
| |
| Closes #8570 (`#8570 <https://github.com/pylint-dev/pylint/issues/8570>`_) |
| |
| - Fix false positive for ``arguments-differ`` when overriding `__init_subclass__`. |
| |
| Closes #8919 (`#8919 <https://github.com/pylint-dev/pylint/issues/8919>`_) |
| |
| - Fix a false positive for ``no-value-for-parameter`` when a staticmethod is called in a class body. |
| |
| Closes #9036 (`#9036 <https://github.com/pylint-dev/pylint/issues/9036>`_) |
| |
| |
| |
| False Negatives Fixed |
| --------------------- |
| |
| - Emit ``used-before-assignment`` when calling module-level functions before definition. |
| |
| Closes #1144 (`#1144 <https://github.com/pylint-dev/pylint/issues/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 (`#7761 <https://github.com/pylint-dev/pylint/issues/7761>`_) |
| |
| - `TypeAlias` variables defined in functions are now checked for `invalid-name` errors. |
| |
| Closes #8536 (`#8536 <https://github.com/pylint-dev/pylint/issues/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 (`#8559 <https://github.com/pylint-dev/pylint/issues/8559>`_) |
| |
| - Fix a false negative for ``too-many-arguments`` by considering positional-only and keyword-only parameters. |
| |
| Closes #8667 (`#8667 <https://github.com/pylint-dev/pylint/issues/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 (`#8714 <https://github.com/pylint-dev/pylint/issues/8714>`_) |
| |
| - ``consider-using-augmented-assign`` is now applied to dicts and lists as well. |
| |
| Closes #8959. (`#8959 <https://github.com/pylint-dev/pylint/issues/8959>`_) |
| |
| |
| |
| Other Bug Fixes |
| --------------- |
| |
| - Support ``duplicate-code`` message when parallelizing with ``--jobs``. |
| |
| Closes #374 (`#374 <https://github.com/pylint-dev/pylint/issues/374>`_) |
| |
| - Support ``cyclic-import`` message when parallelizing with ``--jobs``. |
| |
| Closes #4171 (`#4171 <https://github.com/pylint-dev/pylint/issues/4171>`_) |
| |
| - ``--jobs`` can now be used with ``--load-plugins``. |
| |
| This had regressed in astroid 2.5.0. |
| |
| Closes #4874 (`#4874 <https://github.com/pylint-dev/pylint/issues/4874>`_) |
| |
| - docparams extension considers type comments as type documentation. |
| |
| Closes #6287 (`#6287 <https://github.com/pylint-dev/pylint/issues/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 (`#7229 <https://github.com/pylint-dev/pylint/issues/7229>`_) |
| |
| - The ``ignored-modules`` option will now be correctly taken into account for ``no-name-in-module``. |
| |
| Closes #7578 (`#7578 <https://github.com/pylint-dev/pylint/issues/7578>`_) |
| |
| - ``sys.argv`` is now always correctly considered as impossible to infer (instead of |
| using the actual values given to pylint). |
| |
| Closes #7710 (`#7710 <https://github.com/pylint-dev/pylint/issues/7710>`_) |
| |
| - Avoid duplicative warnings for unqualified exception names in the ``overgeneral-exceptions`` |
| setting when running with ``--jobs``. |
| |
| Closes #7774 (`#7774 <https://github.com/pylint-dev/pylint/issues/7774>`_) |
| |
| - Don't show class fields more than once in Pyreverse diagrams. |
| |
| Closes #8189 (`#8189 <https://github.com/pylint-dev/pylint/issues/8189>`_) |
| |
| - Fix ``used-before-assignment`` false negative when TYPE_CHECKING imports |
| are used in multiple scopes. |
| |
| Closes #8198 (`#8198 <https://github.com/pylint-dev/pylint/issues/8198>`_) |
| |
| - ``--clear-cache-post-run`` now also clears LRU caches for pylint utilities |
| holding references to AST nodes. |
| |
| Closes #8361 (`#8361 <https://github.com/pylint-dev/pylint/issues/8361>`_) |
| |
| - Fix a crash when ``TYPE_CHECKING`` is used without importing it. |
| |
| Closes #8434 (`#8434 <https://github.com/pylint-dev/pylint/issues/8434>`_) |
| |
| - Fix a ``used-before-assignment`` false positive when imports |
| are made under the ``TYPE_CHECKING`` else if branch. |
| |
| Closes #8437 (`#8437 <https://github.com/pylint-dev/pylint/issues/8437>`_) |
| |
| - Fix a regression of ``preferred-modules`` where a partial match was used instead of the required full match. |
| |
| Closes #8453 (`#8453 <https://github.com/pylint-dev/pylint/issues/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 (`#8504 <https://github.com/pylint-dev/pylint/issues/8504>`_) |
| |
| - Don't show arrows more than once in Pyreverse diagrams. |
| |
| Closes #8522 (`#8522 <https://github.com/pylint-dev/pylint/issues/8522>`_) |
| |
| - Improve output of ``consider-using-generator`` message for ``min()`` calls with ``default`` keyword. |
| |
| Closes #8563 (`#8563 <https://github.com/pylint-dev/pylint/issues/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 (`#8632 <https://github.com/pylint-dev/pylint/issues/8632>`_) |
| |
| - Fix a line break error in Pyreverse dot output. |
| |
| Closes #8671 (`#8671 <https://github.com/pylint-dev/pylint/issues/8671>`_) |
| |
| - Fix a false positive for ``method-hidden`` when using ``cached_property`` decorator. |
| |
| Closes #8753 (`#8753 <https://github.com/pylint-dev/pylint/issues/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 (`#8769 <https://github.com/pylint-dev/pylint/issues/8769>`_) |
| |
| - Don't show duplicate type annotations in Pyreverse diagrams. |
| |
| Closes #8888 (`#8888 <https://github.com/pylint-dev/pylint/issues/8888>`_) |
| |
| - Fixing inconsistent hashing issue in `BaseChecker` causing some reports not being exported. |
| |
| Closes #9001 (`#9001 <https://github.com/pylint-dev/pylint/issues/9001>`_) |
| |
| - Don't add `Optional` to `|` annotations with `None` in Pyreverse diagrams. |
| |
| Closes #9014 (`#9014 <https://github.com/pylint-dev/pylint/issues/9014>`_) |
| |
| - Pyreverse doesn't show multiple class association arrows anymore, but only the strongest one. |
| |
| Refs #9045 (`#9045 <https://github.com/pylint-dev/pylint/issues/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 (`#9059 <https://github.com/pylint-dev/pylint/issues/9059>`_) |
| |
| - Fix crash in refactoring checker when unary operand used with variable in for loop. |
| |
| Closes #9074 (`#9074 <https://github.com/pylint-dev/pylint/issues/9074>`_) |
| |
| |
| |
| Other Changes |
| ------------- |
| |
| - Pylint now exposes its type annotations. |
| |
| Closes #5488 and #2079 (`#5488 <https://github.com/pylint-dev/pylint/issues/5488>`_) |
| |
| - Search for ``pyproject.toml`` recursively in parent directories up to a project or file system root. |
| |
| Refs #7163, Closes #3289 (`#7163 <https://github.com/pylint-dev/pylint/issues/7163>`_) |
| |
| - All code related to the optparse config parsing has been removed. |
| |
| Refs #8405 (`#8405 <https://github.com/pylint-dev/pylint/issues/8405>`_) |
| |
| - Pylint now supports python 3.12. |
| |
| Refs #8718 (`#8718 <https://github.com/pylint-dev/pylint/issues/8718>`_) |
| |
| - Add a CITATION.cff file to the root of the repository containing the necessary metadata to cite Pylint. |
| |
| Closes #8760 (`#8760 <https://github.com/pylint-dev/pylint/issues/8760>`_) |
| |
| - Renamed the "unneeded-not" error into "unnecessary_negation" to be clearer. |
| |
| Closes #8789 (`#8789 <https://github.com/pylint-dev/pylint/issues/8789>`_) |
| |
| |
| |
| Internal Changes |
| ---------------- |
| |
| - ``get_message_definition`` was removed from the base checker API. You can access |
| message definitions through the ``MessageStore``. |
| |
| Refs #8401 (`#8401 <https://github.com/pylint-dev/pylint/issues/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 (`#8404 <https://github.com/pylint-dev/pylint/issues/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 (`#8407 <https://github.com/pylint-dev/pylint/issues/8407>`_) |
| |
| - ``Reporter.set_output`` was removed in favor of ``reporter.out = stream``. |
| |
| Refs #8408 (`#8408 <https://github.com/pylint-dev/pylint/issues/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 (`#8409 <https://github.com/pylint-dev/pylint/issues/8409>`_) |
| |
| - ``colorize_ansi`` now only accepts a ``MessageStyle`` object. |
| |
| Refs #8412 (`#8412 <https://github.com/pylint-dev/pylint/issues/8412>`_) |
| |
| - Following a deprecation period, ``Pylinter.check`` now only works with sequences of strings, not strings. |
| |
| Refs #8463 (`#8463 <https://github.com/pylint-dev/pylint/issues/8463>`_) |
| |
| - Following a deprecation period, ``ColorizedTextReporter`` only accepts ``ColorMappingDict``. |
| |
| Refs #8464 (`#8464 <https://github.com/pylint-dev/pylint/issues/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 (`#8466 <https://github.com/pylint-dev/pylint/issues/8466>`_) |
| |
| - Following a deprecation period, the ``do_exit`` argument of the ``Run`` class (and of the ``_Run`` |
| class in testutils) were removed. |
| |
| Refs #8472 (`#8472 <https://github.com/pylint-dev/pylint/issues/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 (`#8473 <https://github.com/pylint-dev/pylint/issues/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 (`#8474 <https://github.com/pylint-dev/pylint/issues/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 (`#8475 <https://github.com/pylint-dev/pylint/issues/8475>`_) |
| |
| - Following a deprecation period, the ``location`` argument of the |
| ``Message`` class must now be a ``MessageLocationTuple``. |
| |
| Refs #8477 (`#8477 <https://github.com/pylint-dev/pylint/issues/8477>`_) |
| |
| - Following a deprecation period, the ``check_single_file`` function of the |
| ``Pylinter`` is replaced by ``Pylinter.check_single_file_item``. |
| |
| Refs #8478 (`#8478 <https://github.com/pylint-dev/pylint/issues/8478>`_) |
| |
| |
| |
| Performance Improvements |
| ------------------------ |
| |
| - ``pylint`` runs (at least) ~5% faster after improvements to ``astroid`` |
| that make better use of the inference cache. |
| |
| Refs pylint-dev/astroid#529 (`#529 <https://github.com/pylint-dev/pylint/issues/529>`_) |
| |
| - - Optimize ``is_trailing_comma()``. |
| - Cache ``class_is_abstract()``. |
| |
| Refs #1954 (`#1954 <https://github.com/pylint-dev/pylint/issues/1954>`_) |
| |
| - Exit immediately if all messages are disabled. |
| |
| Closes #8715 (`#8715 <https://github.com/pylint-dev/pylint/issues/8715>`_) |