| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- from __future__ import annotations
- from typing 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__",
- "__oct__",
- "__pos__",
- "__repr__",
- "__reversed__",
- "__setattr__",
- "__setitem__",
- "__str__",
- }
- MAGIC_METHODS_ALLOWING_KWARGS: Final = {
- "__init__",
- "__init_subclass__",
- "__new__",
- "__call__",
- "__setattr__",
- }
- BINARY_MAGIC_METHODS: Final = {
- "__add__",
- "__and__",
- "__divmod__",
- "__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: str | None) -> bool:
- return name is not None and name.startswith("__") and not name.endswith("__")
|