forked from VimPlug/jedi
Merge branch 'master' into typeshed
There were quite a few conflicts, because there were two rewrites of the path to dotted function.
This commit is contained in:
@@ -32,7 +32,7 @@ from jedi.evaluate import imports
|
||||
from jedi.evaluate import usages
|
||||
from jedi.evaluate.arguments import try_iter_content
|
||||
from jedi.evaluate.helpers import get_module_names, evaluate_call_of_leaf
|
||||
from jedi.evaluate.sys_path import calculate_dotted_path_from_sys_path
|
||||
from jedi.evaluate.sys_path import transform_path_to_dotted
|
||||
from jedi.evaluate.filters import TreeNameDefinition, ParamName
|
||||
from jedi.evaluate.syntax_tree import tree_name_to_contexts
|
||||
from jedi.evaluate.context import ModuleContext
|
||||
@@ -108,7 +108,6 @@ class Script(object):
|
||||
self._evaluator = Evaluator(
|
||||
project, environment=environment, script_path=self.path
|
||||
)
|
||||
self._project = project
|
||||
debug.speed('init')
|
||||
self._module_node, source = self._evaluator.parse_and_get_code(
|
||||
code=source,
|
||||
@@ -149,10 +148,7 @@ class Script(object):
|
||||
def _get_module(self):
|
||||
names = ('__main__',)
|
||||
if self.path is not None:
|
||||
import_names = calculate_dotted_path_from_sys_path(
|
||||
self._evaluator.get_sys_path(),
|
||||
self.path
|
||||
)
|
||||
import_names = transform_path_to_dotted(self._evaluator.get_sys_path(), self.path)
|
||||
if import_names is not None:
|
||||
names = import_names
|
||||
|
||||
|
||||
@@ -522,7 +522,7 @@ def get_modules_containing_name(evaluator, modules, name):
|
||||
if base_names:
|
||||
import_names = base_names + (module_name,)
|
||||
else:
|
||||
import_names = sys_path.calculate_dotted_path_from_sys_path(e_sys_path, path)
|
||||
import_names = sys_path.transform_path_to_dotted(e_sys_path, path)
|
||||
|
||||
module = _load_module(
|
||||
evaluator, path, code,
|
||||
|
||||
@@ -197,38 +197,40 @@ def _get_buildout_script_paths(search_path):
|
||||
continue
|
||||
|
||||
|
||||
def calculate_dotted_path_from_sys_path(sys_path, module_path):
|
||||
def transform_path_to_dotted(sys_path, module_path):
|
||||
"""
|
||||
Returns the dotted path inside a sys.path as a list of names.
|
||||
Returns the dotted path inside a sys.path as a list of names. e.g.
|
||||
|
||||
This function is supposed to be a backup plan in case there's no idea where
|
||||
a file is lying.
|
||||
>>> transform_path_to_dotted(["/foo"], '/foo/bar/baz.py')
|
||||
('bar', 'baz')
|
||||
|
||||
Returns None if the path doesn't really resolve to anything.
|
||||
"""
|
||||
# First remove the suffix.
|
||||
for suffix in all_suffixes():
|
||||
if module_path.endswith(suffix):
|
||||
module_path = module_path[:-len(suffix)]
|
||||
break
|
||||
else:
|
||||
# There should always be a suffix in a valid Python file on the path.
|
||||
return None
|
||||
# Once the suffix was removed we are using the files as we know them. This
|
||||
# means that if someone uses an ending like .vim for a Python file, .vim
|
||||
# will be part of the returned dotted part.
|
||||
|
||||
if module_path.endswith('__init__'):
|
||||
if module_path.endswith(os.path.sep + '__init__'):
|
||||
# -1 to remove the separator
|
||||
module_path = module_path[:-len('__init__') - 1]
|
||||
|
||||
if module_path.endswith(os.path.sep):
|
||||
# The paths in sys.path may end with a slash.
|
||||
module_path = module_path[:-1]
|
||||
|
||||
for p in sys_path:
|
||||
if module_path.startswith(p):
|
||||
rest = module_path[len(p):]
|
||||
# On Windows a path can also use a slash.
|
||||
if rest.startswith(os.path.sep) or rest.startswith('/'):
|
||||
# Remove a slash in cases it's still there.
|
||||
rest = rest[1:]
|
||||
|
||||
if rest:
|
||||
split = rest.split(os.path.sep)
|
||||
for string in split:
|
||||
if not string or '.' in string:
|
||||
if not string:
|
||||
return None
|
||||
return tuple(split)
|
||||
return None
|
||||
|
||||
Reference in New Issue
Block a user