From 0e66aef5112ed2220ac357148035c4b01d14d3ac Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Wed, 20 Aug 2014 14:01:41 +0200 Subject: [PATCH] Use IterableWrapper in the iterable module to be able to add methods like is_class quickly. --- jedi/evaluate/iterable.py | 15 ++++++++++----- jedi/evaluate/stdlib.py | 2 +- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/jedi/evaluate/iterable.py b/jedi/evaluate/iterable.py index 66ae1e17..ae0817bc 100644 --- a/jedi/evaluate/iterable.py +++ b/jedi/evaluate/iterable.py @@ -35,7 +35,12 @@ from jedi.cache import underscore_memoization from jedi.evaluate import analysis -class Generator(use_metaclass(CachedMetaClass, pr.Base)): +class IterableWrapper(pr.Base): + def is_class(self): + return False + + +class Generator(use_metaclass(CachedMetaClass, IterableWrapper)): """Handling of `yield` functions.""" def __init__(self, evaluator, func, var_args): super(Generator, self).__init__() @@ -91,7 +96,7 @@ class Generator(use_metaclass(CachedMetaClass, pr.Base)): return "<%s of %s>" % (type(self).__name__, self.func) -class GeneratorMethod(object): +class GeneratorMethod(IterableWrapper): """``__next__`` and ``send`` methods.""" def __init__(self, generator, builtin_func): self._builtin_func = builtin_func @@ -114,7 +119,7 @@ class GeneratorComprehension(Generator): return self._evaluator.eval_statement_element(self.comprehension) -class Array(use_metaclass(CachedMetaClass, pr.Base)): +class Array(use_metaclass(CachedMetaClass, IterableWrapper)): """ Used as a mirror to pr.Array, if needed. It defines some getter methods which are important in this module. @@ -216,7 +221,7 @@ class Array(use_metaclass(CachedMetaClass, pr.Base)): return "" % (type(self).__name__, self._array) -class ArrayMethod(object): +class ArrayMethod(IterableWrapper): """ A name, e.g. `list.append`, it is used to access the original array methods. @@ -423,7 +428,7 @@ def check_array_instances(evaluator, instance): return [ai] -class ArrayInstance(pr.Base): +class ArrayInstance(IterableWrapper): """ Used for the usage of set() and list(). This is definitely a hack, but a good one :-) diff --git a/jedi/evaluate/stdlib.py b/jedi/evaluate/stdlib.py index 2d79d73e..6ca65ff2 100644 --- a/jedi/evaluate/stdlib.py +++ b/jedi/evaluate/stdlib.py @@ -131,7 +131,7 @@ def builtins_isinstance(evaluator, obj, params): classes = [] # Check for tuples. for cls_or_tup in raw_classes: - if isinstance(cls_or_tup, er.Class): + if cls_or_tup.is_class(): classes.append(cls_or_tup) else: classes += iterable.get_iterator_types([cls_or_tup])