mirror of
https://github.com/davidhalter/jedi.git
synced 2025-12-06 14:04:26 +08:00
Fix subscriptlist unpacking in Generics
This commit is contained in:
@@ -220,6 +220,9 @@ class ClassContext(use_metaclass(CachedMetaClass, TreeContext)):
|
||||
def name(self):
|
||||
return ContextName(self, self.tree_node.name)
|
||||
|
||||
def py__name__(self):
|
||||
return self.name.string_name
|
||||
|
||||
def py__getitem__(self, index_context_set, contextualized_node):
|
||||
from jedi.evaluate.context.typing import TypingClassMixin, AnnotatedClass
|
||||
for cls in self.py__mro__():
|
||||
|
||||
@@ -481,12 +481,22 @@ class _AbstractAnnotatedClass(ClassContext):
|
||||
if node.type == 'atom_expr':
|
||||
trailer = node.children[1]
|
||||
if trailer.type == 'trailer' and trailer.children[0] == '[':
|
||||
type_var_set = self.parent_context.eval_node(trailer.children[1])
|
||||
for type_var in type_var_set:
|
||||
if isinstance(type_var, TypeVar) and type_var not in found:
|
||||
found.append(type_var)
|
||||
for subscript_node in self._unpack_subscriptlist(trailer.children[1]):
|
||||
type_var_set = self.parent_context.eval_node(subscript_node)
|
||||
for type_var in type_var_set:
|
||||
if isinstance(type_var, TypeVar) and type_var not in found:
|
||||
found.append(type_var)
|
||||
return found
|
||||
|
||||
def _unpack_subscriptlist(self, subscriptlist):
|
||||
if subscriptlist.type == 'subscriptlist':
|
||||
for subscript in subscriptlist.children[::2]:
|
||||
if subscript.type != 'subscript':
|
||||
yield subscript
|
||||
else:
|
||||
if subscriptlist.type != 'subscript':
|
||||
yield subscriptlist
|
||||
|
||||
def get_given_types(self):
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
@@ -503,7 +503,9 @@ def _eval_comparison_part(evaluator, context, left, operator, right):
|
||||
analysis.add(context, 'type-error-operation', operator,
|
||||
message % (left, right))
|
||||
|
||||
return ContextSet(left, right)
|
||||
result = ContextSet(left, right)
|
||||
debug.dbg('Used operator %s resulting in %s', result)
|
||||
return result
|
||||
|
||||
|
||||
def _remove_statements(evaluator, context, stmt, name):
|
||||
|
||||
@@ -209,7 +209,7 @@ def optional(p):
|
||||
as being of that type. Jedi doesn't do anything with the extra into that
|
||||
it can be None as well
|
||||
"""
|
||||
#? int()
|
||||
#? int() None
|
||||
p
|
||||
|
||||
class ForwardReference:
|
||||
|
||||
Reference in New Issue
Block a user