Commit 4203116
authored
chore(deps): update dependency pylint to v4 (#573)
This PR contains the following updates:
| Package | Change | Age | Confidence |
|---|---|---|---|
| [pylint](https://redirect.github.com/pylint-dev/pylint)
([changelog](https://pylint.readthedocs.io/en/latest/whatsnew/3/)) |
`>=3,<3.4` -> `>=4,<4.1` |
[](https://docs.renovatebot.com/merge-confidence/)
|
[](https://docs.renovatebot.com/merge-confidence/)
|
---
### Release Notes
<details>
<summary>pylint-dev/pylint (pylint)</summary>
###
[`v4.0.0`](https://redirect.github.com/pylint-dev/pylint/releases/tag/v4.0.0)
[Compare
Source](https://redirect.github.com/pylint-dev/pylint/compare/v3.3.9...v4.0.0)
- Pylint now supports Python 3.14.
- Pylint's inference engine (`astroid`) is now much more precise,
understanding implicit booleanness and ternary expressions. (Thanks
[@​zenlyj](https://redirect.github.com/zenlyj)!)
Consider this example:
```python
class Result:
errors: dict | None = None
result = Result()
if result.errors:
result.errors[field_key]
##### inference engine understands result.errors cannot be None
##### pylint no longer raises unsubscriptable-object
```
The required `astroid` version is now 4.0.0. See the [astroid
changelog](https://pylint.readthedocs.io/projects/astroid/en/latest/changelog.html#what-s-new-in-astroid-4-0-0)
for additional fixes, features, and performance improvements applicable
to pylint.
- Handling of `invalid-name` at the module level was patchy. Now,
module-level constants that are reassigned are treated as variables and
checked
against `--variable-rgx` rather than `--const-rgx`. Module-level lists,
sets, and objects can pass against either regex.
Here, `LIMIT` is reassigned, so pylint only uses `--variable-rgx`:
```python
LIMIT = 500 # [invalid-name]
if sometimes:
LIMIT = 1 # [invalid-name]
```
If this is undesired, refactor using *exclusive* assignment so that it
is
evident that this assignment happens only once:
```python
if sometimes:
LIMIT = 1
else:
LIMIT = 500 # exclusive assignment: uses const regex, no warning
```
Lists, sets, and objects still pass against either `const-rgx` or
`variable-rgx`
even if reassigned, but are no longer completely skipped:
```python
MY_LIST = []
my_list = []
My_List = [] # [invalid-name]
```
Remember to adjust the
[regexes](https://pylint.readthedocs.io/en/latest/user_guide/messages/convention/invalid-name.html)
and [allow
lists](https://pylint.readthedocs.io/en/latest/user_guide/configuration/all-options.html#good-names)
to your liking.
## Breaking Changes
- `invalid-name` now distinguishes module-level constants that are
assigned only once
from those that are reassigned and now applies `--variable-rgx` to the
latter. Values
other than literals (lists, sets, objects) can pass against either the
constant or
variable regexes (e.g. "LOGGER" or "logger" but not "LoGgEr").
Remember that `--good-names` or `--good-names-rgxs` can be provided to
explicitly
allow good names.
Closes
[#​3585](https://redirect.github.com/pylint-dev/pylint/issues/3585)
- The unused `pylintrc` argument to `PyLinter.__init__()` is deprecated
and will be removed.
Refs
[#​6052](https://redirect.github.com/pylint-dev/pylint/issues/6052)
- Commented out code blocks such as `# bar() # TODO: remove dead code`
will no longer emit `fixme`.
Refs
[#​9255](https://redirect.github.com/pylint-dev/pylint/issues/9255)
- `pyreverse` `Run` was changed to no longer call `sys.exit()` in its
`__init__`.
You should now call `Run(args).run()` which will return the exit code
instead.
Having a class that always raised a `SystemExit` exception was
considered a bug.
Normal usage of pyreverse through the CLI will not be affected by this
change.
Refs
[#​9689](https://redirect.github.com/pylint-dev/pylint/issues/9689)
- The `suggestion-mode` option was removed, as pylint now always emits
user-friendly hints instead
of false-positive error messages. You should remove it from your conf if
it's defined.
Refs
[#​9962](https://redirect.github.com/pylint-dev/pylint/issues/9962)
- The `async.py` checker module has been renamed to `async_checker.py`
since `async` is a Python keyword
and cannot be imported directly. This allows for better testing and
extensibility of the async checker functionality.
Refs
[#​10071](https://redirect.github.com/pylint-dev/pylint/issues/10071)
- The message-id of `continue-in-finally` was changed from `E0116` to
`W0136`. The warning is
now emitted for every Python version since it will raise a syntax
warning in Python 3.14.
See [PEP 765 - Disallow return/break/continue that exit a finally
block](https://peps.python.org/pep-0765/).
Refs
[#​10480](https://redirect.github.com/pylint-dev/pylint/issues/10480)
- Removed support for `nmp.NaN` alias for `numpy.NaN` being recognized
in ':ref:`nan-comparison`'. Use `np` or `numpy` instead.
Refs
[#​10583](https://redirect.github.com/pylint-dev/pylint/issues/10583)
- Version requirement for `isort` has been bumped to >=5.0.0.
The internal compatibility for older `isort` versions exposed via
`pylint.utils.IsortDriver` has
been removed.
Refs
[#​10637](https://redirect.github.com/pylint-dev/pylint/issues/10637)
## New Features
- `comparison-of-constants` now uses the unicode from the ast instead of
reformatting from
the node's values preventing some bad formatting due to `utf-8`
limitation. The message now uses
`"` instead of `'` to better work with what the python ast returns.
Refs
[#​8736](https://redirect.github.com/pylint-dev/pylint/issues/8736)
- Enhanced pyreverse to properly distinguish between UML relationship
types (association, aggregation, composition) based on object ownership
semantics. Type annotations without assignment are now treated as
associations, parameter assignments as aggregations, and object
instantiation as compositions.
Closes
[#​9045](https://redirect.github.com/pylint-dev/pylint/issues/9045)
Closes
[#​9267](https://redirect.github.com/pylint-dev/pylint/issues/9267)
- The `fixme` check can now search through docstrings as well as
comments, by using
`check-fixme-in-docstring = true` in the `[tool.pylint.miscellaneous]`
section.
Closes
[#​9255](https://redirect.github.com/pylint-dev/pylint/issues/9255)
- The `use-implicit-booleaness-not-x` checks now distinguish between
comparisons
used in boolean contexts and those that are not, enabling them to
provide more accurate refactoring suggestions.
Closes
[#​9353](https://redirect.github.com/pylint-dev/pylint/issues/9353)
- The verbose option now outputs the filenames of the files that have
been checked.
Previously, it only included the number of checked and skipped files.
Closes
[#​9357](https://redirect.github.com/pylint-dev/pylint/issues/9357)
- colorized reporter now colorizes messages/categories that have been
configured as `fail-on` in red inverse.
This makes it easier to quickly find the errors that are causing pylint
CI job failures.
Closes
[#​9898](https://redirect.github.com/pylint-dev/pylint/issues/9898)
- Enhanced support for
[@​property](https://redirect.github.com/property) decorator in
pyreverse to correctly display return types of annotated properties when
generating class diagrams.
Closes
[#​10057](https://redirect.github.com/pylint-dev/pylint/issues/10057)
- Add --max-depth option to pyreverse to control diagram complexity. A
depth of 0 shows only top-level packages, 1 shows one level of
subpackages, etc.
This helps manage visualization of large codebases by limiting the depth
of displayed packages and classes.
Refs
[#​10077](https://redirect.github.com/pylint-dev/pylint/issues/10077)
- Handle deferred evaluation of annotations in Python 3.14.
Closes
[#​10149](https://redirect.github.com/pylint-dev/pylint/issues/10149)
- Enhanced pyreverse to properly detect aggregations for comprehensions
(list, dict, set, generator).
Closes
[#​10236](https://redirect.github.com/pylint-dev/pylint/issues/10236)
- `pyreverse`: add support for colorized output when using output format
`mmd` (MermaidJS) and `html`.
Closes
[#​10242](https://redirect.github.com/pylint-dev/pylint/issues/10242)
- pypy 3.11 is now officially supported.
Refs
[#​10287](https://redirect.github.com/pylint-dev/pylint/issues/10287)
- Add support for Python 3.14.
Refs
[#​10467](https://redirect.github.com/pylint-dev/pylint/issues/10467)
- Add naming styles for `ParamSpec` and `TypeVarTuple` that align with
the `TypeVar` style.
Refs
[#​10541](https://redirect.github.com/pylint-dev/pylint/issues/10541)
## New Checks
- Add `match-statements` checker and the following message:
`bare-name-capture-pattern`.
This will emit an error message when a name capture pattern is used in a
match statement which would make the remaining patterns unreachable.
This code is a SyntaxError at runtime.
Closes
[#​7128](https://redirect.github.com/pylint-dev/pylint/issues/7128)
- Add new check `async-context-manager-with-regular-with` to detect
async context managers used with regular `with` statements instead of
`async with`.
Refs
[#​10408](https://redirect.github.com/pylint-dev/pylint/issues/10408)
- Add `break-in-finally` warning. Using `break` inside the `finally`
clause
will raise a syntax warning in Python 3.14.
See `PEP 765 - Disallow return/break/continue that exit a finally block
<https://peps.python.org/pep-0765/>`\_.
Refs
[#​10480](https://redirect.github.com/pylint-dev/pylint/issues/10480)
- Add new checks for invalid uses of class patterns in :keyword:`match`.
- :ref:`invalid-match-args-definition` is emitted if
:py:data:`object.__match_args__` isn't a tuple of strings.
- :ref:`too-many-positional-sub-patterns` if there are more positional
sub-patterns than specified in :py:data:`object.__match_args__`.
- :ref:`multiple-class-sub-patterns` if there are multiple sub-patterns
for the same attribute.
Refs
[#​10559](https://redirect.github.com/pylint-dev/pylint/issues/10559)
- Add additional checks for suboptimal uses of class patterns in
:keyword:`match`.
- :ref:`match-class-bind-self` is emitted if a name is bound to `self`
instead of
using an `as` pattern.
- :ref:`match-class-positional-attributes` is emitted if a class pattern
has positional
attributes when keywords could be used.
Refs
[#​10586](https://redirect.github.com/pylint-dev/pylint/issues/10586)
- Add a `consider-math-not-float` message. `float("nan")` and
`float("inf")` are slower
than their counterpart `math.inf` and `math.nan` by a factor of 4
(notwithstanding
the initial import of math) and they are also not well typed when using
mypy.
This check also catches typos in float calls as a side effect.
The :ref:`pylint.extensions.code_style` need to be activated for this
check to work.
Refs
[#​10621](https://redirect.github.com/pylint-dev/pylint/issues/10621)
## False Positives Fixed
- Fix a false positive for `used-before-assignment` when a variable
defined under
an `if` and via a named expression (walrus operator) is used later when
guarded
under the same `if` test.
Closes
[#​10061](https://redirect.github.com/pylint-dev/pylint/issues/10061)
- Fix :ref:`no-name-in-module` for members of `concurrent.futures` with
Python 3.14.
Closes
[#​10632](https://redirect.github.com/pylint-dev/pylint/issues/10632)
## False Negatives Fixed
- Fix false negative for `used-before-assignment` when a `TYPE_CHECKING`
import is used as a type annotation prior to erroneous usage.
Refs
[#​8893](https://redirect.github.com/pylint-dev/pylint/issues/8893)
- Match cases are now counted as edges in the McCabe graph and will
increase the complexity accordingly.
Refs
[#​9667](https://redirect.github.com/pylint-dev/pylint/issues/9667)
- Check module-level constants with type annotations for `invalid-name`.
Remember to adjust `const-naming-style` or `const-rgx` to your liking.
Closes
[#​9770](https://redirect.github.com/pylint-dev/pylint/issues/9770)
- Fix false negative where function-redefined (E0102) was not reported
for functions with a leading underscore.
Closes
[#​9894](https://redirect.github.com/pylint-dev/pylint/issues/9894)
- We now raise a `logging-too-few-args` for format string with no
interpolation arguments at all (i.e. for something like
`logging.debug("Awaiting process %s")`
or `logging.debug("Awaiting process {pid}")`). Previously we did not
raise for such case.
Closes
[#​9999](https://redirect.github.com/pylint-dev/pylint/issues/9999)
- Fix false negative for `used-before-assignment` when a function is
defined inside a `TYPE_CHECKING` guard block and used later.
Closes
[#​10028](https://redirect.github.com/pylint-dev/pylint/issues/10028)
- Fix a false negative for `possibly-used-before-assignment` when a
variable is conditionally defined
and later assigned to a type-annotated variable.
Closes
[#​10421](https://redirect.github.com/pylint-dev/pylint/issues/10421)
- Fix false negative for `deprecated-module` when a `__import__` method
is used instead of `import` sentence.
Refs
[#​10453](https://redirect.github.com/pylint-dev/pylint/issues/10453)
- Count match cases for `too-many-branches` check.
Refs
[#​10542](https://redirect.github.com/pylint-dev/pylint/issues/10542)
- Fix false-negative where :ref:`unused-import` was not reported for
names referenced in a preceding `global` statement.
Refs
[#​10633](https://redirect.github.com/pylint-dev/pylint/issues/10633)
## Other Bug Fixes
- When displaying unicode with surrogates (or other potential
`UnicodeEncodeError`),
pylint will now display a '?' character (using `encode(encoding="utf-8",
errors="replace")`)
instead of crashing. The functional tests classes are also updated to
handle this case.
Closes
[#​8736](https://redirect.github.com/pylint-dev/pylint/issues/8736)
- Fixed unidiomatic-typecheck only checking left-hand side.
Closes
[#​10217](https://redirect.github.com/pylint-dev/pylint/issues/10217)
- Fix a crash caused by malformed format strings when using `.format`
with keyword arguments.
Closes
[#​10282](https://redirect.github.com/pylint-dev/pylint/issues/10282)
- Fix false positive `inconsistent-return-statements` when using
`quit()` or `exit()` functions.
Closes
[#​10508](https://redirect.github.com/pylint-dev/pylint/issues/10508)
- Fix a crash in :ref:`nested-min-max` when using `builtins.min` or
`builtins.max`
instead of `min` or `max` directly.
Closes
[#​10626](https://redirect.github.com/pylint-dev/pylint/issues/10626)
- Fixed a crash in :ref:`unnecessary-dict-index-lookup` when the index
of an enumerated list
was deleted inside a for loop.
Closes
[#​10627](https://redirect.github.com/pylint-dev/pylint/issues/10627)
## Other Changes
- Remove support for launching pylint with Python 3.9.
Code that supports Python 3.9 can still be linted with the
`--py-version=3.9` setting.
Refs
[#​10405](https://redirect.github.com/pylint-dev/pylint/issues/10405)
## Internal Changes
- Modified test framework to allow for different test output for
different Python versions.
Refs
[#​10382](https://redirect.github.com/pylint-dev/pylint/issues/10382)
</details>
---
### Configuration
📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box
---
This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/hetznercloud/hcloud-python).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS4xNDMuMSIsInVwZGF0ZWRJblZlciI6IjQxLjE0My4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>1 parent 8fba599 commit 4203116
1 file changed
+1
-1
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
47 | 47 | | |
48 | 48 | | |
49 | 49 | | |
50 | | - | |
| 50 | + | |
51 | 51 | | |
52 | 52 | | |
53 | 53 | | |
| |||
0 commit comments