| from typing import Optional, Callable | |
| from mypy.plugin import Plugin, MethodContext, FunctionContext | |
| from mypy.types import Type | |
| class ArgKindsPlugin(Plugin): | |
| def get_function_hook(self, fullname: str | |
| ) -> Optional[Callable[[FunctionContext], Type]]: | |
| if 'func' in fullname: | |
| return extract_arg_kinds_from_function | |
| return None | |
| def get_method_hook(self, fullname: str | |
| ) -> Optional[Callable[[MethodContext], Type]]: | |
| if 'Class.method' in fullname: | |
| return extract_arg_kinds_from_method | |
| return None | |
| def extract_arg_kinds_from_function(ctx: FunctionContext) -> Type: | |
| ctx.api.fail(str([[x.value for x in y] for y in ctx.arg_kinds]), ctx.context) | |
| return ctx.default_return_type | |
| def extract_arg_kinds_from_method(ctx: MethodContext) -> Type: | |
| ctx.api.fail(str([[x.value for x in y] for y in ctx.arg_kinds]), ctx.context) | |
| return ctx.default_return_type | |
| def plugin(version): | |
| return ArgKindsPlugin |