116 lines
2.1 KiB
Python
116 lines
2.1 KiB
Python
from typing import Optional
|
|
from typing_extensions import Final
|
|
|
|
"""Shared logic between our three mypy parser files."""
|
|
|
|
|
|
_NON_BINARY_MAGIC_METHODS: Final = {
|
|
"__abs__",
|
|
"__call__",
|
|
"__complex__",
|
|
"__contains__",
|
|
"__del__",
|
|
"__delattr__",
|
|
"__delitem__",
|
|
"__enter__",
|
|
"__exit__",
|
|
"__float__",
|
|
"__getattr__",
|
|
"__getattribute__",
|
|
"__getitem__",
|
|
"__hex__",
|
|
"__init__",
|
|
"__init_subclass__",
|
|
"__int__",
|
|
"__invert__",
|
|
"__iter__",
|
|
"__len__",
|
|
"__long__",
|
|
"__neg__",
|
|
"__new__",
|
|
"__nonzero__",
|
|
"__oct__",
|
|
"__pos__",
|
|
"__repr__",
|
|
"__reversed__",
|
|
"__setattr__",
|
|
"__setitem__",
|
|
"__str__",
|
|
"__unicode__",
|
|
}
|
|
|
|
MAGIC_METHODS_ALLOWING_KWARGS: Final = {
|
|
"__init__",
|
|
"__init_subclass__",
|
|
"__new__",
|
|
"__call__",
|
|
"__setattr__",
|
|
}
|
|
|
|
BINARY_MAGIC_METHODS: Final = {
|
|
"__add__",
|
|
"__and__",
|
|
"__cmp__",
|
|
"__divmod__",
|
|
"__div__",
|
|
"__eq__",
|
|
"__floordiv__",
|
|
"__ge__",
|
|
"__gt__",
|
|
"__iadd__",
|
|
"__iand__",
|
|
"__idiv__",
|
|
"__ifloordiv__",
|
|
"__ilshift__",
|
|
"__imatmul__",
|
|
"__imod__",
|
|
"__imul__",
|
|
"__ior__",
|
|
"__ipow__",
|
|
"__irshift__",
|
|
"__isub__",
|
|
"__itruediv__",
|
|
"__ixor__",
|
|
"__le__",
|
|
"__lshift__",
|
|
"__lt__",
|
|
"__matmul__",
|
|
"__mod__",
|
|
"__mul__",
|
|
"__ne__",
|
|
"__or__",
|
|
"__pow__",
|
|
"__radd__",
|
|
"__rand__",
|
|
"__rdiv__",
|
|
"__rfloordiv__",
|
|
"__rlshift__",
|
|
"__rmatmul__",
|
|
"__rmod__",
|
|
"__rmul__",
|
|
"__ror__",
|
|
"__rpow__",
|
|
"__rrshift__",
|
|
"__rshift__",
|
|
"__rsub__",
|
|
"__rtruediv__",
|
|
"__rxor__",
|
|
"__sub__",
|
|
"__truediv__",
|
|
"__xor__",
|
|
}
|
|
|
|
assert not (_NON_BINARY_MAGIC_METHODS & BINARY_MAGIC_METHODS)
|
|
|
|
MAGIC_METHODS: Final = _NON_BINARY_MAGIC_METHODS | BINARY_MAGIC_METHODS
|
|
|
|
MAGIC_METHODS_POS_ARGS_ONLY: Final = MAGIC_METHODS - MAGIC_METHODS_ALLOWING_KWARGS
|
|
|
|
|
|
def special_function_elide_names(name: str) -> bool:
|
|
return name in MAGIC_METHODS_POS_ARGS_ONLY
|
|
|
|
|
|
def argument_elide_name(name: Optional[str]) -> bool:
|
|
return name is not None and name.startswith("__") and not name.endswith("__")
|