Consider more stdlib decorators to be property-like (#12583)

This commit is contained in:
Alex Waygood 2024-07-30 18:18:23 +01:00 committed by GitHub
parent 4738135801
commit 90db361199
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 70 additions and 1 deletions

View file

@ -27,3 +27,25 @@ class BaseCache2:
def prop(self) -> None:
print("Property not found")
return None
import abc
import enum
import types
class Baz:
@abc.abstractproperty
def prop2(self) -> None:
print("Override me")
return None
@types.DynamicClassAttribute
def prop3(self) -> None:
print("Gotta make this a multiline function for it to be a meaningful test")
return None
@enum.property
def prop4(self) -> None:
print("I've run out of things to say")
return None

View file

@ -47,3 +47,22 @@ class Cached:
@cached_property
def cached_prop(self, value): # [property-with-parameters]
...
import abc
import enum
import types
class Baz:
@abc.abstractproperty
def prop2(self, param) -> None: # [property-with-parameters]
return None
@types.DynamicClassAttribute
def prop3(self, param) -> None: # [property-with-parameters]
return None
@enum.property
def prop4(self, param) -> None: # [property-with-parameters]
return None

View file

@ -51,3 +51,28 @@ property_with_parameters.py:48:9: PLR0206 Cannot have defined parameters for pro
| ^^^^^^^^^^^ PLR0206
49 | ...
|
property_with_parameters.py:59:9: PLR0206 Cannot have defined parameters for properties
|
57 | class Baz:
58 | @abc.abstractproperty
59 | def prop2(self, param) -> None: # [property-with-parameters]
| ^^^^^ PLR0206
60 | return None
|
property_with_parameters.py:63:9: PLR0206 Cannot have defined parameters for properties
|
62 | @types.DynamicClassAttribute
63 | def prop3(self, param) -> None: # [property-with-parameters]
| ^^^^^ PLR0206
64 | return None
|
property_with_parameters.py:67:9: PLR0206 Cannot have defined parameters for properties
|
66 | @enum.property
67 | def prop4(self, param) -> None: # [property-with-parameters]
| ^^^^^ PLR0206
68 | return None
|

View file

@ -74,7 +74,10 @@ pub fn is_property(
.is_some_and(|qualified_name| {
matches!(
qualified_name.segments(),
["" | "builtins", "property"] | ["functools", "cached_property"]
["" | "builtins" | "enum", "property"]
| ["functools", "cached_property"]
| ["abc", "abstractproperty"]
| ["types", "DynamicClassAttribute"]
) || extra_properties
.iter()
.any(|extra_property| extra_property.segments() == qualified_name.segments())