1
0
forked from VimPlug/jedi

Fix import names from sys path generation

This commit is contained in:
Dave Halter
2019-04-08 19:35:58 +02:00
parent 85fc799d62
commit 8c9ac923c6
4 changed files with 20 additions and 12 deletions

View File

@@ -155,7 +155,7 @@ class Script(object):
is_package = False
if self.path is not None:
import_names, is_p = transform_path_to_dotted(
self._evaluator.get_sys_path(),
self._evaluator.get_sys_path(add_parent_paths=False),
self.path
)
if import_names is not None:

View File

@@ -77,7 +77,8 @@ class Project(object):
py2_comp(path, **kwargs)
def _get_base_sys_path(self, environment=None):
@evaluator_as_method_param_cache()
def _get_base_sys_path(self, evaluator, environment=None):
if self._sys_path is not None:
return self._sys_path
@@ -93,7 +94,7 @@ class Project(object):
return sys_path
@evaluator_as_method_param_cache()
def _get_sys_path(self, evaluator, environment=None):
def _get_sys_path(self, evaluator, environment=None, add_parent_paths=True):
"""
Keep this method private for all users of jedi. However internally this
one is used like a public method.
@@ -101,19 +102,20 @@ class Project(object):
suffixed = []
prefixed = []
sys_path = list(self._get_base_sys_path(environment))
sys_path = list(self._get_base_sys_path(evaluator, environment))
if self._smart_sys_path:
prefixed.append(self._path)
if evaluator.script_path is not None:
suffixed += discover_buildout_paths(evaluator, evaluator.script_path)
traversed = list(traverse_parents(evaluator.script_path))
if add_parent_paths:
traversed = list(traverse_parents(evaluator.script_path))
# AFAIK some libraries have imports like `foo.foo.bar`, which
# leads to the conclusion to by default prefer longer paths
# rather than shorter ones by default.
suffixed += reversed(traversed)
# AFAIK some libraries have imports like `foo.foo.bar`, which
# leads to the conclusion to by default prefer longer paths
# rather than shorter ones by default.
suffixed += reversed(traversed)
if self._django:
prefixed.append(self._path)

View File

@@ -172,9 +172,9 @@ class Evaluator(object):
self.recursion_detector = recursion.RecursionDetector()
self.execution_recursion_detector = recursion.ExecutionRecursionDetector(self)
def get_sys_path(self):
def get_sys_path(self, **kwargs):
"""Convenience function"""
return self.project._get_sys_path(self, environment=self.environment)
return self.project._get_sys_path(self, environment=self.environment, **kwargs)
def eval_element(self, context, element):
if not self.infer_enabled:

View File

@@ -12,7 +12,7 @@ from jedi._compatibility import find_module_py33, find_module
from jedi.evaluate import compiled
from jedi.evaluate import imports
from jedi.api.project import Project
from ..helpers import cwd_at, get_example_dir
from ..helpers import cwd_at, get_example_dir, test_dir
THIS_DIR = os.path.dirname(__file__)
@@ -396,3 +396,9 @@ def test_relative_import_out_of_file_system(Script):
)
def test_level_to_import_path(level, directory, project_path, result):
assert imports._level_to_base_import_path(project_path, directory, level) == result
def test_import_name_calculation(Script):
s = Script(path=os.path.join(test_dir, 'completion', 'isinstance.py'))
m = s._get_module()
assert m.string_names == ('test', 'completion', 'isinstance')