1
0
forked from VimPlug/jedi

Fix issues with itemgetter

This commit is contained in:
Dave Halter
2018-11-03 13:57:15 +01:00
parent 8fa3f093a1
commit 1eb8658922
2 changed files with 14 additions and 8 deletions

View File

@@ -62,6 +62,12 @@ class _BaseTypingContext(Context):
yield EmptyFilter() yield EmptyFilter()
def py__class__(self):
# TODO this is obviously not correct, but at least gives us a class if
# we have none. Some of these objects don't really have a base class in
# typeshed.
return builtin_from_name(self.evaluator, u'object')
@property @property
def name(self): def name(self):
return ContextName(self, self._tree_name) return ContextName(self, self._tree_name)

View File

@@ -459,10 +459,9 @@ def _random_choice(sequences):
) )
class ItemGetterCallable(object): class ItemGetterCallable(ContextWrapper):
def __init__(self, evaluator, args_context_set): def __init__(self, instance, args_context_set):
# TODO this context is totally incomplete and will raise exceptions. super(ItemGetterCallable, self).__init__(instance)
self.evaluator = evaluator
self._args_context_set = args_context_set self._args_context_set = args_context_set
@repack_with_argument_clinic('item, /') @repack_with_argument_clinic('item, /')
@@ -475,7 +474,7 @@ class ItemGetterCallable(object):
context_set |= item_context_set.get_item(lazy_contexts[0].infer(), None) context_set |= item_context_set.get_item(lazy_contexts[0].infer(), None)
else: else:
context_set |= ContextSet([iterable.FakeSequence( context_set |= ContextSet([iterable.FakeSequence(
self.evaluator, self._wrapped_context.evaluator,
'list', 'list',
[ [
LazyKnownContexts(item_context_set.get_item(lazy_context.infer(), None)) LazyKnownContexts(item_context_set.get_item(lazy_context.infer(), None))
@@ -487,9 +486,10 @@ class ItemGetterCallable(object):
@argument_clinic('*args, /', want_obj=True, want_arguments=True) @argument_clinic('*args, /', want_obj=True, want_arguments=True)
def _operator_itemgetter(args_context_set, obj, arguments): def _operator_itemgetter(args_context_set, obj, arguments):
# final = obj.py__call__(arguments) return ContextSet([
# TODO use this as a context wrapper ItemGetterCallable(instance, args_context_set)
return ContextSet([ItemGetterCallable(obj.evaluator, args_context_set)]) for instance in obj.py__call__(arguments)
])
_implemented = { _implemented = {