1
0
forked from VimPlug/jedi

replace propery with safe_property in some evaluate cases. fixes #249

This commit is contained in:
Dave Halter
2014-01-15 15:07:06 +01:00
parent 99882724da
commit d5aa36cc69
4 changed files with 13 additions and 13 deletions

View File

@@ -13,7 +13,6 @@ class MultiLevelStopIteration(Exception):
""" """
StopIteration's get catched pretty easy by for loops, let errors propagate. StopIteration's get catched pretty easy by for loops, let errors propagate.
""" """
pass
class UncaughtAttributeError(Exception): class UncaughtAttributeError(Exception):
@@ -29,7 +28,11 @@ class UncaughtAttributeError(Exception):
""" """
def rethrow_uncaught(func): def safe_property(func):
return property(reraise_uncaught(func))
def reraise_uncaught(func):
""" """
Re-throw uncaught `AttributeError`. Re-throw uncaught `AttributeError`.

View File

@@ -219,7 +219,6 @@ class Evaluator(object):
result = new_result result = new_result
return set(result) return set(result)
@common.rethrow_uncaught
def eval_expression_list(self, expression_list, follow_array=False): def eval_expression_list(self, expression_list, follow_array=False):
""" """
`expression_list` can be either `pr.Array` or `list of list`. `expression_list` can be either `pr.Array` or `list of list`.

View File

@@ -125,7 +125,7 @@ class Array(use_metaclass(CachedMetaClass, pr.Base)):
names = scope.get_defined_names() names = scope.get_defined_names()
return [ArrayMethod(n) for n in names] return [ArrayMethod(n) for n in names]
@property @common.safe_property
def parent(self): def parent(self):
return compiled.builtin return compiled.builtin

View File

@@ -37,7 +37,7 @@ class Executable(pr.IsScope):
def get_parent_until(self, *args, **kwargs): def get_parent_until(self, *args, **kwargs):
return self.base.get_parent_until(*args, **kwargs) return self.base.get_parent_until(*args, **kwargs)
@property @common.safe_property
def parent(self): def parent(self):
return self.base.parent return self.base.parent
@@ -193,7 +193,7 @@ class InstanceElement(use_metaclass(CachedMetaClass, pr.Base)):
self.var = var self.var = var
self.is_class_var = is_class_var self.is_class_var = is_class_var
@property @common.safe_property
@memoize_default(None) @memoize_default(None)
def parent(self): def parent(self):
par = self.var.parent par = self.var.parent
@@ -297,7 +297,7 @@ class Class(use_metaclass(CachedMetaClass, pr.IsScope)):
return sub return sub
raise KeyError("Couldn't find subscope.") raise KeyError("Couldn't find subscope.")
@property @common.safe_property
def name(self): def name(self):
return self.base.name return self.base.name
@@ -434,7 +434,6 @@ class FunctionExecution(Executable):
get_set_vars = get_defined_names get_set_vars = get_defined_names
@common.rethrow_uncaught
def _copy_properties(self, prop): def _copy_properties(self, prop):
""" """
Literally copies a property of a Function. Copying is very expensive, Literally copies a property of a Function. Copying is very expensive,
@@ -462,7 +461,6 @@ class FunctionExecution(Executable):
return getattr(self.base, name) return getattr(self.base, name)
@memoize_default(None) @memoize_default(None)
@common.rethrow_uncaught
def _scope_copy(self, scope): def _scope_copy(self, scope):
""" Copies a scope (e.g. if) in an execution """ """ Copies a scope (e.g. if) in an execution """
# TODO method uses different scopes than the subscopes property. # TODO method uses different scopes than the subscopes property.
@@ -476,22 +474,22 @@ class FunctionExecution(Executable):
copied.parent = self._scope_copy(copied.parent) copied.parent = self._scope_copy(copied.parent)
return copied return copied
@property @common.safe_property
@memoize_default([]) @memoize_default([])
def returns(self): def returns(self):
return self._copy_properties('returns') return self._copy_properties('returns')
@property @common.safe_property
@memoize_default([]) @memoize_default([])
def asserts(self): def asserts(self):
return self._copy_properties('asserts') return self._copy_properties('asserts')
@property @common.safe_property
@memoize_default([]) @memoize_default([])
def statements(self): def statements(self):
return self._copy_properties('statements') return self._copy_properties('statements')
@property @common.safe_property
@memoize_default([]) @memoize_default([])
def subscopes(self): def subscopes(self):
return self._copy_properties('subscopes') return self._copy_properties('subscopes')