from abc import ABCMeta


class Class:
    def bad_method(this):
        pass

    if False:

        def extra_bad_method(this):
            pass

    def good_method(self):
        pass

    @classmethod
    def class_method(cls):
        pass

    @staticmethod
    def static_method(x):
        return x

    def __init__(self):
        ...

    def __new__(cls, *args, **kwargs):
        ...

    def __init_subclass__(self, default_name, **kwargs):
        ...

    @classmethod
    def class_method_with_positional_only_argument(cls, x, /, other):
        ...

    @classmethod
    def bad_class_method_with_positional_only_argument(self, x, /, other):
        ...


class MetaClass(ABCMeta):
    def bad_method(self):
        pass

    def good_method(cls):
        pass

    @staticmethod
    def static_method(not_cls) -> bool:
        return False

class ClsInArgsClass(ABCMeta):
    def cls_as_argument(this, cls):
        pass

    def cls_as_pos_only_argument(this, cls, /):
        pass

    def cls_as_kw_only_argument(this, *, cls):
        pass

    def cls_as_varargs(this, *cls):
        pass

    def cls_as_kwargs(this, **cls):
        pass

class RenamingInMethodBodyClass(ABCMeta):
    def bad_method(this):
        this = this
        this

    def bad_method(this):
        self = this

def func(x):
    return x

foo = {}
class Bar(type(foo)):
    def foo_method(self):
        pass

# https://github.com/astral-sh/ruff/issues/18459
class Example:
    @classmethod
    def function(this):
        cls = 1234
