From 62df944c472d339eb7a30e8b279a1258d0ab9b4b Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Mon, 17 Sep 2018 02:10:27 +0200 Subject: [PATCH] Fix a few issues with the newly defined CompiledValue --- jedi/evaluate/base_context.py | 12 +++++++----- jedi/evaluate/compiled/__init__.py | 6 ++++-- jedi/evaluate/context/typing.py | 2 +- jedi/evaluate/helpers.py | 4 ++-- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/jedi/evaluate/base_context.py b/jedi/evaluate/base_context.py index 808be703..055a62a8 100644 --- a/jedi/evaluate/base_context.py +++ b/jedi/evaluate/base_context.py @@ -250,11 +250,13 @@ def _getitem(context, index_contexts, contextualized_node): index = index_context if isinstance(index_context, Slice): index = index.obj - if isinstance(index, CompiledObject): - try: - index = index.get_safe_value() - except ValueError: - pass + + try: + method = index.get_safe_value + except AttributeError: + pass + else: + index = method(default=None) if type(index) in (float, int, str, unicode, slice, bytes): try: diff --git a/jedi/evaluate/compiled/__init__.py b/jedi/evaluate/compiled/__init__.py index ab751450..69514c12 100644 --- a/jedi/evaluate/compiled/__init__.py +++ b/jedi/evaluate/compiled/__init__.py @@ -19,8 +19,10 @@ class CompiledValue(ContextWrapper): super(CompiledValue, self).__init__(instance) self._compiled_obj = compiled_obj - def get_safe_value(self, *args, **kwargs): - return self._compiled_obj.get_safe_value(*args, **kwargs) + def __getattribute__(self, name): + if name in ('get_safe_value', 'execute_operation'): + return getattr(self._compiled_obj, name) + return super(CompiledValue, self).__getattribute__(name) def __repr__(self): return '<%s: %s>' % (self.__class__.__name__, self._compiled_obj) diff --git a/jedi/evaluate/context/typing.py b/jedi/evaluate/context/typing.py index 2ceed4b5..0522bc9e 100644 --- a/jedi/evaluate/context/typing.py +++ b/jedi/evaluate/context/typing.py @@ -309,7 +309,7 @@ class Tuple(_ContainerBase): for i in range(self._index_context.py__len__()): yield LazyKnownContexts(self._get_getitem_contexts(i).execute_annotation()) - def py__getitem__(self): + def py__getitem__(self, index_context_set, contextualized_node): if self._is_homogenous(): return self._get_getitem_contexts(0).execute_annotation() diff --git a/jedi/evaluate/helpers.py b/jedi/evaluate/helpers.py index bee06dcd..3986fd30 100644 --- a/jedi/evaluate/helpers.py +++ b/jedi/evaluate/helpers.py @@ -187,8 +187,8 @@ def predefine_names(context, flow_scope, dct): def is_compiled(context): - from jedi.evaluate.compiled import CompiledObject - return isinstance(context, CompiledObject) + from jedi.evaluate.compiled import CompiledObject, CompiledValue + return isinstance(context, (CompiledObject, CompiledValue)) def is_string(context):