|
47 | 47 | Var, |
48 | 48 | check_arg_kinds, |
49 | 49 | check_arg_names, |
50 | | -get_nongen_builtins, |
51 | 50 | ) |
52 | 51 | frommypy.optionsimportINLINE_TYPEDDICT,Options |
53 | 52 | frommypy.pluginimportAnalyzeTypeContext,Plugin,TypeAnalyzerPluginInterface |
|
136 | 135 | "mypy_extensions.KwArg":ARG_STAR2, |
137 | 136 | } |
138 | 137 |
|
139 | | -GENERIC_STUB_NOT_AT_RUNTIME_TYPES:Final= { |
140 | | -"queue.Queue", |
141 | | -"builtins._PathLike", |
142 | | -"asyncio.futures.Future", |
143 | | -} |
144 | | - |
145 | 138 | SELF_TYPE_NAMES:Final= {"typing.Self","typing_extensions.Self"} |
146 | 139 |
|
147 | 140 |
|
@@ -186,17 +179,6 @@ def analyze_type_alias( |
186 | 179 | returnres,analyzer.aliases_used |
187 | 180 |
|
188 | 181 |
|
189 | | -defno_subscript_builtin_alias(name:str,propose_alt:bool=True)->str: |
190 | | -class_name=name.split(".")[-1] |
191 | | -msg=f'"{class_name}" is not subscriptable' |
192 | | -# This should never be called if the python_version is 3.9 or newer |
193 | | -nongen_builtins=get_nongen_builtins((3,8)) |
194 | | -replacement=nongen_builtins[name] |
195 | | -ifreplacementandpropose_alt: |
196 | | -msg+=f', use "{replacement}" instead' |
197 | | -returnmsg |
198 | | - |
199 | | - |
200 | 182 | classTypeAnalyser(SyntheticTypeVisitor[Type],TypeAnalyzerPluginInterface): |
201 | 183 | """Semantic analyzer for types. |
202 | 184 |
|
@@ -360,14 +342,6 @@ def visit_unbound_type_nonoptional(self, t: UnboundType, defining_literal: bool) |
360 | 342 | hook=self.plugin.get_type_analyze_hook(fullname) |
361 | 343 | ifhookisnotNone: |
362 | 344 | returnhook(AnalyzeTypeContext(t,t,self)) |
363 | | -if ( |
364 | | -fullnameinget_nongen_builtins(self.options.python_version) |
365 | | -andt.args |
366 | | -andnotself.always_allow_new_syntax |
367 | | - ): |
368 | | -self.fail( |
369 | | -no_subscript_builtin_alias(fullname,propose_alt=notself.defining_alias),t |
370 | | - ) |
371 | 345 | tvar_def=self.tvar_scope.get_binding(sym) |
372 | 346 | ifisinstance(sym.node,ParamSpecExpr): |
373 | 347 | iftvar_defisNone: |
@@ -2033,44 +2007,14 @@ def get_omitted_any( |
2033 | 2007 | unexpanded_type:Type|None=None, |
2034 | 2008 | )->AnyType: |
2035 | 2009 | ifdisallow_any: |
2036 | | -nongen_builtins=get_nongen_builtins(options.python_version) |
2037 | | -iffullnameinnongen_builtins: |
2038 | | -typ=orig_type |
2039 | | -# We use a dedicated error message for builtin generics (as the most common case). |
2040 | | -alternative=nongen_builtins[fullname] |
2041 | | -fail( |
2042 | | -message_registry.IMPLICIT_GENERIC_ANY_BUILTIN.format(alternative), |
2043 | | -typ, |
2044 | | -code=codes.TYPE_ARG, |
2045 | | - ) |
2046 | | -else: |
2047 | | -typ=unexpanded_typeororig_type |
2048 | | -type_str=typ.nameifisinstance(typ,UnboundType)elseformat_type_bare(typ,options) |
| 2010 | +typ=unexpanded_typeororig_type |
| 2011 | +type_str=typ.nameifisinstance(typ,UnboundType)elseformat_type_bare(typ,options) |
2049 | 2012 |
|
2050 | | -fail( |
2051 | | -message_registry.BARE_GENERIC.format(quote_type_string(type_str)), |
2052 | | -typ, |
2053 | | -code=codes.TYPE_ARG, |
2054 | | - ) |
2055 | | -base_type=get_proper_type(orig_type) |
2056 | | -base_fullname= ( |
2057 | | -base_type.type.fullnameifisinstance(base_type,Instance)elsefullname |
2058 | | - ) |
2059 | | -# Ideally, we'd check whether the type is quoted or `from __future__ annotations` |
2060 | | -# is set before issuing this note |
2061 | | -if ( |
2062 | | -options.python_version< (3,9) |
2063 | | -andbase_fullnameinGENERIC_STUB_NOT_AT_RUNTIME_TYPES |
2064 | | - ): |
2065 | | -# Recommend `from __future__ import annotations` or to put type in quotes |
2066 | | -# (string literal escaping) for classes not generic at runtime |
2067 | | -note( |
2068 | | -"Subscripting classes that are not generic at runtime may require " |
2069 | | -"escaping, see https://mypy.readthedocs.io/en/stable/runtime_troubles.html" |
2070 | | -"#not-generic-runtime", |
2071 | | -typ, |
2072 | | -code=codes.TYPE_ARG, |
2073 | | - ) |
| 2013 | +fail( |
| 2014 | +message_registry.BARE_GENERIC.format(quote_type_string(type_str)), |
| 2015 | +typ, |
| 2016 | +code=codes.TYPE_ARG, |
| 2017 | + ) |
2074 | 2018 |
|
2075 | 2019 | any_type=AnyType(TypeOfAny.from_error,line=typ.line,column=typ.column) |
2076 | 2020 | else: |
|