1
0
forked from VimPlug/jedi

Refactor the ClassName to allow inheritance in different modules. Fixes #884.

This commit is contained in:
Dave Halter
2017-04-04 20:10:47 +02:00
parent d41e036427
commit 947d91f792
3 changed files with 37 additions and 6 deletions

View File

@@ -75,8 +75,19 @@ def apply_py__get__(context, base_context):
class ClassName(TreeNameDefinition):
def __init__(self, parent_context, tree_name, name_context):
super(ClassName, self).__init__(parent_context, tree_name)
self._name_context = name_context
def infer(self):
for result_context in super(ClassName, self).infer():
# TODO this _name_to_types might get refactored and be a part of the
# parent class. Once it is, we can probably just overwrite method to
# achieve this.
from jedi.evaluate.finder import _name_to_types
inferred = _name_to_types(
self.parent_context.evaluator, self._name_context, self.tree_name)
for result_context in inferred:
for c in apply_py__get__(result_context, self.parent_context):
yield c
@@ -84,6 +95,10 @@ class ClassName(TreeNameDefinition):
class ClassFilter(ParserTreeFilter):
name_class = ClassName
def _convert_names(self, names):
return [self.name_class(self.context, name, self._node_context)
for name in names]
class ClassContext(use_metaclass(CachedMetaClass, context.TreeContext)):
"""
@@ -162,13 +177,13 @@ class ClassContext(use_metaclass(CachedMetaClass, context.TreeContext)):
origin_scope=origin_scope
)
else:
for scope in self.py__mro__():
if isinstance(scope, compiled.CompiledObject):
for filter in scope.get_filters(is_instance=is_instance):
for cls in self.py__mro__():
if isinstance(cls, compiled.CompiledObject):
for filter in cls.get_filters(is_instance=is_instance):
yield filter
else:
yield ClassFilter(
self.evaluator, self, node_context=scope,
self.evaluator, self, node_context=cls,
origin_scope=origin_scope)
def is_class(self):

View File

@@ -493,3 +493,19 @@ B().a
B.b
#? int()
B().b
# -----------------
# With import
# -----------------
from import_tree.classes import Config2, BaseClass
class Config(BaseClass):
"""#884"""
#? Config2()
Config.mode
#? int()
Config.mode2

View File

@@ -69,7 +69,7 @@ from import_tree.pkg.mod1 import not_existant, # whitespace before
from import_tree.pkg.mod1 import not_existant,
#? 22 ['mod1']
from import_tree.pkg. import mod1
#? 17 ['mod1', 'mod2', 'random', 'pkg', 'rename1', 'rename2', 'recurse_class1', 'recurse_class2', 'invisible_pkg', 'flow_import']
#? 17 ['mod1', 'mod2', 'random', 'pkg', 'rename1', 'rename2', 'classes', 'recurse_class1', 'recurse_class2', 'invisible_pkg', 'flow_import']
from import_tree. import pkg
#? 18 ['pkg']