mirror of
https://github.com/astral-sh/ruff.git
synced 2025-09-30 05:45:24 +00:00

## Summary This PR attempts to improve `builtin-attribute-shadowing` (`A003`), a rule which has been repeatedly criticized, but _does_ have value (just not in the current form). Historically, this rule would flag cases like: ```python class Class: id: int ``` This led to an increasing number of exceptions and special-cases to the rule over time to try and improve it's specificity (e.g., ignore `TypedDict`, ignore `@override`). The crux of the issue is that given the above, referencing `id` will never resolve to `Class.id`, so the shadowing is actually fine. There's one exception, however: ```python class Class: id: int def do_thing() -> id: pass ``` Here, `id` actually resolves to the `id` attribute on the class, not the `id` builtin. So this PR completely reworks the rule around this _much_ more targeted case, which will almost always be a mistake: when you reference a class member from within the class, and that member shadows a builtin. Closes https://github.com/astral-sh/ruff/issues/6524. Closes https://github.com/astral-sh/ruff/issues/7806.
21 lines
330 B
Python
21 lines
330 B
Python
class MyClass:
|
|
ImportError = 4
|
|
id: int
|
|
dir = "/"
|
|
|
|
def __init__(self):
|
|
self.float = 5 # is fine
|
|
self.id = 10
|
|
self.dir = "."
|
|
|
|
def int(self):
|
|
pass
|
|
|
|
def str(self):
|
|
pass
|
|
|
|
def method_usage(self) -> str:
|
|
pass
|
|
|
|
def attribute_usage(self) -> id:
|
|
pass
|