|
33 | 33 | from mypy.tvar_scope import TypeVarLikeScope
|
34 | 34 | from mypy.exprtotype import expr_to_unanalyzed_type, TypeTranslationError
|
35 | 35 | from mypy.plugin import Plugin, TypeAnalyzerPluginInterface, AnalyzeTypeContext
|
36 |
| -from mypy.semanal_shared import SemanticAnalyzerCoreInterface |
| 36 | +from mypy.semanal_shared import SemanticAnalyzerCoreInterface, paramspec_args, paramspec_kwargs |
37 | 37 | from mypy.errorcodes import ErrorCode
|
38 | 38 | from mypy import nodes, message_registry, errorcodes as codes
|
39 | 39 |
|
@@ -711,13 +711,13 @@ def anal_star_arg_type(self, t: Type, kind: ArgKind, nested: bool) -> Type:
|
711 | 711 | tvar_def = self.tvar_scope.get_binding(sym)
|
712 | 712 | if isinstance(tvar_def, ParamSpecType):
|
713 | 713 | if kind == ARG_STAR:
|
714 |
| - flavor = ParamSpecFlavor.ARGS |
| 714 | + make_paramspec = paramspec_args |
715 | 715 | elif kind == ARG_STAR2:
|
716 |
| - flavor = ParamSpecFlavor.KWARGS |
| 716 | + make_paramspec = paramspec_kwargs |
717 | 717 | else:
|
718 | 718 | assert False, kind
|
719 |
| - return ParamSpecType(tvar_def.name, tvar_def.fullname, tvar_def.id, flavor, |
720 |
| - upper_bound=self.named_type('builtins.object'), |
| 719 | + return make_paramspec(tvar_def.name, tvar_def.fullname, tvar_def.id, |
| 720 | + named_type_func=self.named_type, |
721 | 721 | line=t.line, column=t.column)
|
722 | 722 | return self.anal_type(t, nested=nested)
|
723 | 723 |
|
@@ -855,13 +855,11 @@ def analyze_callable_args_for_paramspec(
|
855 | 855 | if not isinstance(tvar_def, ParamSpecType):
|
856 | 856 | return None
|
857 | 857 |
|
858 |
| - # TODO: Use tuple[...] or Mapping[..] instead? |
859 |
| - obj = self.named_type('builtins.object') |
860 | 858 | return CallableType(
|
861 |
| - [ParamSpecType(tvar_def.name, tvar_def.fullname, tvar_def.id, ParamSpecFlavor.ARGS, |
862 |
| - upper_bound=obj), |
863 |
| - ParamSpecType(tvar_def.name, tvar_def.fullname, tvar_def.id, ParamSpecFlavor.KWARGS, |
864 |
| - upper_bound=obj)], |
| 859 | + [paramspec_args(tvar_def.name, tvar_def.fullname, tvar_def.id, |
| 860 | + named_type_func=self.named_type), |
| 861 | + paramspec_kwargs(tvar_def.name, tvar_def.fullname, tvar_def.id, |
| 862 | + named_type_func=self.named_type)], |
865 | 863 | [nodes.ARG_STAR, nodes.ARG_STAR2],
|
866 | 864 | [None, None],
|
867 | 865 | ret_type=ret_type,
|
@@ -891,18 +889,16 @@ def analyze_callable_args_for_concatenate(
|
891 | 889 | if not isinstance(tvar_def, ParamSpecType):
|
892 | 890 | return None
|
893 | 891 |
|
894 |
| - # TODO: Use tuple[...] or Mapping[..] instead? |
895 |
| - obj = self.named_type('builtins.object') |
896 | 892 | # ick, CallableType should take ParamSpecType
|
897 | 893 | prefix = tvar_def.prefix
|
898 | 894 | # we don't set the prefix here as generic arguments will get updated at some point
|
899 | 895 | # in the future. CallableType.param_spec() accounts for this.
|
900 | 896 | return CallableType(
|
901 | 897 | [*prefix.arg_types,
|
902 |
| - ParamSpecType(tvar_def.name, tvar_def.fullname, tvar_def.id, ParamSpecFlavor.ARGS, |
903 |
| - upper_bound=obj), |
904 |
| - ParamSpecType(tvar_def.name, tvar_def.fullname, tvar_def.id, ParamSpecFlavor.KWARGS, |
905 |
| - upper_bound=obj)], |
| 898 | + paramspec_args(tvar_def.name, tvar_def.fullname, tvar_def.id, |
| 899 | + named_type_func=self.named_type), |
| 900 | + paramspec_kwargs(tvar_def.name, tvar_def.fullname, tvar_def.id, |
| 901 | + named_type_func=self.named_type)], |
906 | 902 | [*prefix.arg_kinds, nodes.ARG_STAR, nodes.ARG_STAR2],
|
907 | 903 | [*prefix.arg_names, None, None],
|
908 | 904 | ret_type=ret_type,
|
|
0 commit comments