mirror of
https://github.com/astral-sh/ruff.git
synced 2025-10-02 22:55:08 +00:00

## Summary While I was here, I also updated the rule to use `function_type::classify` rather than hard-coding `staticmethod` and friends. Per Carl: > Enum instances are already referred to by the class, forming a cycle that won't get collected until the class itself does. At which point the `lru_cache` itself would be collected, too. Closes https://github.com/astral-sh/ruff/issues/9912.
120 lines
2.1 KiB
Python
120 lines
2.1 KiB
Python
"""
|
|
Should emit:
|
|
B019 - on lines 73, 77, 81, 85, 89, 93, 97, 101
|
|
"""
|
|
import functools
|
|
from functools import cache, cached_property, lru_cache
|
|
|
|
|
|
def some_other_cache():
|
|
...
|
|
|
|
|
|
@functools.cache
|
|
def compute_func(self, y):
|
|
...
|
|
|
|
|
|
class Foo:
|
|
def __init__(self, x):
|
|
self.x = x
|
|
|
|
def compute_method(self, y):
|
|
...
|
|
|
|
@some_other_cache
|
|
def user_cached_instance_method(self, y):
|
|
...
|
|
|
|
@classmethod
|
|
@functools.cache
|
|
def cached_classmethod(cls, y):
|
|
...
|
|
|
|
@classmethod
|
|
@cache
|
|
def other_cached_classmethod(cls, y):
|
|
...
|
|
|
|
@classmethod
|
|
@functools.lru_cache
|
|
def lru_cached_classmethod(cls, y):
|
|
...
|
|
|
|
@classmethod
|
|
@lru_cache
|
|
def other_lru_cached_classmethod(cls, y):
|
|
...
|
|
|
|
@staticmethod
|
|
@functools.cache
|
|
def cached_staticmethod(y):
|
|
...
|
|
|
|
@staticmethod
|
|
@cache
|
|
def other_cached_staticmethod(y):
|
|
...
|
|
|
|
@staticmethod
|
|
@functools.lru_cache
|
|
def lru_cached_staticmethod(y):
|
|
...
|
|
|
|
@staticmethod
|
|
@lru_cache
|
|
def other_lru_cached_staticmethod(y):
|
|
...
|
|
|
|
@functools.cached_property
|
|
def some_cached_property(self):
|
|
...
|
|
|
|
@cached_property
|
|
def some_other_cached_property(self):
|
|
...
|
|
|
|
# Remaining methods should emit B019
|
|
@functools.cache
|
|
def cached_instance_method(self, y):
|
|
...
|
|
|
|
@cache
|
|
def another_cached_instance_method(self, y):
|
|
...
|
|
|
|
@functools.cache()
|
|
def called_cached_instance_method(self, y):
|
|
...
|
|
|
|
@cache()
|
|
def another_called_cached_instance_method(self, y):
|
|
...
|
|
|
|
@functools.lru_cache
|
|
def lru_cached_instance_method(self, y):
|
|
...
|
|
|
|
@lru_cache
|
|
def another_lru_cached_instance_method(self, y):
|
|
...
|
|
|
|
@functools.lru_cache()
|
|
def called_lru_cached_instance_method(self, y):
|
|
...
|
|
|
|
@lru_cache()
|
|
def another_called_lru_cached_instance_method(self, y):
|
|
...
|
|
|
|
|
|
import enum
|
|
|
|
|
|
class Foo(enum.Enum):
|
|
ONE = enum.auto()
|
|
TWO = enum.auto()
|
|
|
|
@functools.cache
|
|
def bar(self, arg: str) -> str:
|
|
return f"{self} - {arg}"
|