Fix namespace autocompletion error

This commit is contained in:
Maxim Novikov
2018-05-02 23:34:23 +02:00
committed by Dave Halter
parent 3c909a9849
commit fc14aad8f2
2 changed files with 17 additions and 11 deletions

View File

@@ -3,25 +3,19 @@ from itertools import chain
from jedi.evaluate.cache import evaluator_method_cache
from jedi.evaluate import imports
from jedi.evaluate.filters import DictFilter, AbstractNameDefinition
from jedi.evaluate.filters import DictFilter, AbstractNameDefinition, ContextNameMixin
from jedi.evaluate.base_context import TreeContext, ContextSet
class ImplicitNSName(AbstractNameDefinition):
class ImplicitNSName(ContextNameMixin, AbstractNameDefinition):
"""
Accessing names for implicit namespace packages should infer to nothing.
This object will prevent Jedi from raising exceptions
"""
def __init__(self, implicit_ns_context, string_name):
self.parent_context = implicit_ns_context
self._context = implicit_ns_context
self.string_name = string_name
def infer(self):
return ContextSet(self.parent_context)
def get_root_context(self):
return self.parent_context
class ImplicitNamespaceContext(TreeContext):
"""
@@ -56,9 +50,11 @@ class ImplicitNamespaceContext(TreeContext):
"""
return self._fullname
@property
def py__path__(self):
return lambda: [self.paths]
return [self.paths]
def py__name__(self):
return self._fullname
@evaluator_method_cache()
def _sub_modules_dict(self):

View File

@@ -93,3 +93,13 @@ def test_namespace_package_in_multiple_directories_goto_definition(Script):
script = Script(sys_path=sys_path, source=CODE)
result = script.goto_definitions()
assert len(result) == 1
def test_namespace_name_autocompletion_full_name(Script):
CODE = 'from pk'
sys_path = [join(dirname(__file__), d)
for d in ['implicit_namespace_package/ns1', 'implicit_namespace_package/ns2']]
script = Script(sys_path=sys_path, source=CODE)
compl = script.completions()
assert set(c.full_name for c in compl) == set(['pkg'])