Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[pylint/pep8-naming] Check __new__ argument name in bad-staticmethod-argument and not invalid-first-argument-name-for-class-method (PLW0211/N804) #16676

Merged
merged 1 commit into from
Mar 13, 2025

Conversation

MichaReiser
Copy link
Member

Summary

This PR stabilizes the behavior changes introduced by #13305 that were gated behind preview.
The change is that __new__ methods are now no longer flagged by invalid-first-argument-name-for-class-method (N804) but instead by
bad-staticmethod-argument (PLW0211)

new methods are technically static methods, with cls as their first argument. However, Ruff currently classifies them as classmethod, which causes two issues:

Test Plan

There have been no new issues or PRs related to N804 or PLW0211 since the behavior change was released in Ruff 0.9.7 (about 3 weeks ago).
This is a somewhat recent change but I don't think it's necessary to leave this in preview for another 2 months. The main reason why it was in preview
is that it is breaking, not because it is a risky change.

@MichaReiser MichaReiser added this to the v0.10 milestone Mar 12, 2025
Copy link

codspeed-hq bot commented Mar 12, 2025

CodSpeed Performance Report

Merging #16676 will degrade performances by 4.61%

Comparing micha/invalid-argument-new-method (597cf2c) with micha/ruff-0.10 (b93f829)

Summary

❌ 1 regressions
✅ 31 untouched benchmarks

⚠️ Please fix the performance issues or acknowledge them on CodSpeed.

Benchmarks breakdown

Benchmark BASE HEAD Change
red_knot_check_file[incremental] 5.2 ms 5.5 ms -4.61%

Copy link
Contributor

github-actions bot commented Mar 12, 2025

ruff-ecosystem results

Linter (stable)

✅ ecosystem check detected no linter changes.

Linter (preview)

✅ ecosystem check detected no linter changes.

@MichaReiser MichaReiser requested a review from ntBre March 12, 2025 13:59
@MichaReiser MichaReiser mentioned this pull request Mar 13, 2025
2 tasks
@MichaReiser MichaReiser added the rule Implementing or modifying a lint rule label Mar 13, 2025
…method-argument` and not `invalid-first-argument-name-for-class-method` (`PLW0211`/`N804`)
@MichaReiser MichaReiser force-pushed the micha/invalid-argument-new-method branch from 831e99f to 597cf2c Compare March 13, 2025 07:53
@MichaReiser MichaReiser merged commit 5a40aee into micha/ruff-0.10 Mar 13, 2025
20 of 21 checks passed
@MichaReiser MichaReiser deleted the micha/invalid-argument-new-method branch March 13, 2025 07:59
MichaReiser added a commit that referenced this pull request Mar 13, 2025
…method-argument` and not `invalid-first-argument-name-for-class-method` (`PLW0211`/`N804`) (#16676)

## Summary

This PR stabilizes the behavior changes introduced by
#13305 that were gated behind
preview.
The change is that `__new__` methods are now no longer flagged by
`invalid-first-argument-name-for-class-method` (`N804`) but instead by
`bad-staticmethod-argument` (`PLW0211`)

> __new__ methods are technically static methods, with cls as their
first argument. However, Ruff currently classifies them as classmethod,
which causes two issues:

## Test Plan

There have been no new issues or PRs related to `N804` or `PLW0211`
since the behavior change was released in Ruff 0.9.7 (about 3 weeks
ago).
This is a somewhat recent change but I don't think it's necessary to
leave this in preview for another 2 months. The main reason why it was
in preview
is that it is breaking, not because it is a risky change.
MichaReiser added a commit that referenced this pull request Mar 13, 2025
…method-argument` and not `invalid-first-argument-name-for-class-method` (`PLW0211`/`N804`) (#16676)

## Summary

This PR stabilizes the behavior changes introduced by
#13305 that were gated behind
preview.
The change is that `__new__` methods are now no longer flagged by
`invalid-first-argument-name-for-class-method` (`N804`) but instead by
`bad-staticmethod-argument` (`PLW0211`)

> __new__ methods are technically static methods, with cls as their
first argument. However, Ruff currently classifies them as classmethod,
which causes two issues:

## Test Plan

There have been no new issues or PRs related to `N804` or `PLW0211`
since the behavior change was released in Ruff 0.9.7 (about 3 weeks
ago).
This is a somewhat recent change but I don't think it's necessary to
leave this in preview for another 2 months. The main reason why it was
in preview
is that it is breaking, not because it is a risky change.
dcreager added a commit that referenced this pull request Mar 14, 2025
* main: (53 commits)
  [syntax-errors] Tuple unpacking in `for` statement iterator clause before Python 3.9 (#16558)
  Ruff v0.10 Release (#16708)
  Add new `noqa` specification to the docs (#16703)
  describe requires-python fallback in docs (#16704)
  [red-knot] handle cycles in MRO/bases resolution (#16693)
  [red-knot] Auto generate statement nodes (#16645)
  [`pylint`] Better inference for `str.strip` (`PLE310`) (#16671)
  [`pylint`] Improve `repeated-equality-comparison` fix to use a `set` when all elements are hashable (`PLR1714`) (#16685)
  [`pylint`/`pep8-naming`] Check `__new__` argument name in `bad-staticmethod-argument` and not `invalid-first-argument-name-for-class-method` (`PLW0211`/`N804`) (#16676)
  [`flake8-pyi`] Stabilize fix for `unused-private-type-var` (`PYI018`) (#16682)
  [`flake8-bandit`] Deprecate `suspicious-xmle-tree-usage` (`S320`) (#16680)
  [`flake8-simplify`] Avoid double negation in fixes (`SIM103`) (#16684)
  [`pyupgrade`]: Improve diagnostic range for `redundant-open-mode` (`UP015`) (#16672)
  Consider all `TYPE_CHECKING` symbols for type-checking blocks (#16669)
  [`pep8-naming`]: Ignore methods decorated with `@typing.override` (`invalid-argument-name`) (#16667)
  Stabilize FURB169 preview behavior (#16666)
  [`pylint`] Detect invalid default value type for `os.environ.get` (`PLW1508`) (#16674)
  [`flake8-pytest-style`] Allow for loops with empty bodies (`PT012`, `PT031`) (#16678)
  [`pyupgrade`]: Deprecate `non-pep604-isinstance` (`UP038`) (#16681)
  [`flake8-type-checking`] Stabilize `runtime-cast-value` (`TC006`) (#16637)
  ...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
rule Implementing or modifying a lint rule
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants