From 6b86ad9083f347f458b67c0d40a2e43e08082e84 Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Sat, 1 Dec 2018 15:17:22 +0100 Subject: [PATCH] Move py__mro__ calls to direct calls, because it's defined on ClassMixin --- jedi/evaluate/base_context.py | 3 +-- jedi/evaluate/context/instance.py | 8 ++++---- jedi/evaluate/context/klass.py | 4 ++-- jedi/evaluate/context/typing.py | 6 +++--- jedi/plugins/stdlib.py | 3 +-- 5 files changed, 11 insertions(+), 13 deletions(-) diff --git a/jedi/evaluate/base_context.py b/jedi/evaluate/base_context.py index 6c683469..4b3776f4 100644 --- a/jedi/evaluate/base_context.py +++ b/jedi/evaluate/base_context.py @@ -81,8 +81,7 @@ class HelperContextMixin: return self.py__iter__(contextualized_node) def is_sub_class_of(self, class_context): - from jedi.evaluate.context.klass import py__mro__ - for cls in py__mro__(self): + for cls in self.py__mro__(): if cls.is_same_class(class_context): return True return False diff --git a/jedi/evaluate/context/instance.py b/jedi/evaluate/context/instance.py index 379af680..01584e18 100644 --- a/jedi/evaluate/context/instance.py +++ b/jedi/evaluate/context/instance.py @@ -11,9 +11,9 @@ from jedi.evaluate.cache import evaluator_method_cache from jedi.evaluate.arguments import AnonymousArguments, \ ValuesArguments, TreeArgumentsWrapper from jedi.evaluate.context.function import FunctionExecutionContext, \ - FunctionContext, FunctionMixin, OverloadedFunctionContext, MethodContext + FunctionContext, FunctionMixin, OverloadedFunctionContext from jedi.evaluate.context.klass import ClassContext, apply_py__get__, \ - py__mro__, ClassFilter + ClassFilter from jedi.evaluate.context import iterable from jedi.parser_utils import get_parent_scope @@ -127,7 +127,7 @@ class AbstractInstanceContext(Context): origin_scope=None, include_self_names=True): class_context = self.get_annotated_class_object() if include_self_names: - for cls in py__mro__(class_context): + for cls in class_context.py__mro__(): if not isinstance(cls, compiled.CompiledObject) \ or cls.tree_node is not None: # In this case we're excluding compiled objects that are @@ -135,7 +135,7 @@ class AbstractInstanceContext(Context): # compiled objects to search for self variables. yield SelfAttributeFilter(self.evaluator, self, cls, origin_scope) - for cls in py__mro__(class_context): + for cls in class_context.py__mro__(): if isinstance(cls, compiled.CompiledObject): yield CompiledInstanceClassFilter(self.evaluator, self, cls) else: diff --git a/jedi/evaluate/context/klass.py b/jedi/evaluate/context/klass.py index 7ea7bebe..563d8960 100644 --- a/jedi/evaluate/context/klass.py +++ b/jedi/evaluate/context/klass.py @@ -102,7 +102,7 @@ def py__mro__(context): debug.warning('Super class of %s is not a class: %s', context, cls) else: add(cls) - for cls_new in py__mro__(cls): + for cls_new in cls.py__mro__(): add(cls_new) return tuple(mro) @@ -208,7 +208,7 @@ class ClassMixin(object): origin_scope=origin_scope ) else: - for cls in py__mro__(self): + for cls in self.py__mro__(): if isinstance(cls, compiled.CompiledObject): for filter in cls.get_filters(is_instance=is_instance): yield filter diff --git a/jedi/evaluate/context/typing.py b/jedi/evaluate/context/typing.py index 8c4b30ab..4437ddf4 100644 --- a/jedi/evaluate/context/typing.py +++ b/jedi/evaluate/context/typing.py @@ -17,7 +17,7 @@ from jedi.evaluate.filters import FilterWrapper, NameWrapper, \ AbstractTreeName, AbstractNameDefinition, ContextName from jedi.evaluate.helpers import is_string from jedi.evaluate.imports import Importer -from jedi.evaluate.context.klass import py__mro__, ClassMixin +from jedi.evaluate.context.klass import ClassMixin _PROXY_CLASS_TYPES = 'Tuple Generic Protocol Callable Type'.split() _TYPE_ALIAS_TYPES = { @@ -197,7 +197,7 @@ class TypingContext(_BaseTypingContext): ) -class TypingClassMixin(object): +class TypingClassMixin(ClassMixin): def py__bases__(self): return [LazyKnownContexts( self.evaluator.builtins_module.py__getattribute__('object') @@ -671,7 +671,7 @@ class LazyAnnotatedBaseClass(object): class InstanceWrapper(ContextWrapper): def py__stop_iteration_returns(self): - for cls in py__mro__(self._wrapped_context.class_context): + for cls in self._wrapped_context.class_context.py__mro__(): if cls.py__name__() == 'Generator': given_types = cls.get_given_types() try: diff --git a/jedi/plugins/stdlib.py b/jedi/plugins/stdlib.py index c264c439..40f9b1b2 100644 --- a/jedi/plugins/stdlib.py +++ b/jedi/plugins/stdlib.py @@ -24,7 +24,6 @@ from jedi.evaluate.base_context import ContextualizedNode, \ NO_CONTEXTS, ContextSet, ContextWrapper from jedi.evaluate.context import ClassContext, ModuleContext, \ FunctionExecutionContext -from jedi.evaluate.context.klass import py__mro__ from jedi.evaluate.context import iterable from jedi.evaluate.lazy_context import LazyTreeContext, LazyKnownContext, \ LazyKnownContexts @@ -252,7 +251,7 @@ def builtins_isinstance(objects, types, arguments, evaluator): bool_results = set([True, False]) break - mro = py__mro__(cls) + mro = list(cls.py__mro__()) for cls_or_tup in types: if cls_or_tup.is_class():