mirror of
https://github.com/davidhalter/jedi.git
synced 2026-05-17 22:09:37 +08:00
imports that are not in sys.path - as a second option to those in sys.path
This commit is contained in:
+24
-12
@@ -271,6 +271,28 @@ class ImportPath(pr.Base):
|
|||||||
return []
|
return []
|
||||||
|
|
||||||
def _follow_file_system(self):
|
def _follow_file_system(self):
|
||||||
|
if self.file_path:
|
||||||
|
sys_path_mod = list(self._sys_path_with_modifications())
|
||||||
|
module = self.import_stmt.get_parent_until()
|
||||||
|
if not module.has_explicit_absolute_import:
|
||||||
|
# If the module explicitly asks for absolute imports,
|
||||||
|
# there's probably a bogus local one.
|
||||||
|
sys_path_mod.insert(0, self.file_path)
|
||||||
|
|
||||||
|
# First the sys path is searched normally and if that doesn't
|
||||||
|
# succeed, try to search the parent directories, because sometimes
|
||||||
|
# Jedi doesn't recognize sys.path modifications (like py.test
|
||||||
|
# stuff).
|
||||||
|
old_path, temp_path = self.file_path, os.path.dirname(self.file_path)
|
||||||
|
while old_path != temp_path:
|
||||||
|
sys_path_mod.append(temp_path)
|
||||||
|
old_path, temp_path = temp_path, os.path.dirname(temp_path)
|
||||||
|
else:
|
||||||
|
sys_path_mod = list(modules.get_sys_path())
|
||||||
|
|
||||||
|
return self._follow_sys_path(sys_path_mod)
|
||||||
|
|
||||||
|
def _follow_sys_path(self, sys_path):
|
||||||
"""
|
"""
|
||||||
Find a module with a path (of the module, like usb.backend.libusb10).
|
Find a module with a path (of the module, like usb.backend.libusb10).
|
||||||
"""
|
"""
|
||||||
@@ -290,7 +312,7 @@ class ImportPath(pr.Base):
|
|||||||
debug.dbg('search_module', string, self.file_path)
|
debug.dbg('search_module', string, self.file_path)
|
||||||
# Override the sys.path. It works only good that way.
|
# Override the sys.path. It works only good that way.
|
||||||
# Injecting the path directly into `find_module` did not work.
|
# Injecting the path directly into `find_module` did not work.
|
||||||
sys.path, temp = sys_path_mod, sys.path
|
sys.path, temp = sys_path, sys.path
|
||||||
try:
|
try:
|
||||||
importing = find_module(string)
|
importing = find_module(string)
|
||||||
finally:
|
finally:
|
||||||
@@ -298,16 +320,6 @@ class ImportPath(pr.Base):
|
|||||||
|
|
||||||
return importing
|
return importing
|
||||||
|
|
||||||
if self.file_path:
|
|
||||||
sys_path_mod = list(self._sys_path_with_modifications())
|
|
||||||
module = self.import_stmt.get_parent_until()
|
|
||||||
if not module.has_explicit_absolute_import:
|
|
||||||
# If the module explicitly asks for absolute imports,
|
|
||||||
# there's probably a bogus local one.
|
|
||||||
sys_path_mod.insert(0, self.file_path)
|
|
||||||
else:
|
|
||||||
sys_path_mod = list(modules.get_sys_path())
|
|
||||||
|
|
||||||
current_namespace = (None, None, None)
|
current_namespace = (None, None, None)
|
||||||
# now execute those paths
|
# now execute those paths
|
||||||
rest = []
|
rest = []
|
||||||
@@ -339,7 +351,7 @@ class ImportPath(pr.Base):
|
|||||||
else:
|
else:
|
||||||
raise ModuleNotFound('The module you searched has not been found')
|
raise ModuleNotFound('The module you searched has not been found')
|
||||||
|
|
||||||
sys_path_mod.pop(0) # TODO why is this here?
|
sys_path.pop(0) # TODO why is this here?
|
||||||
path = current_namespace[1]
|
path = current_namespace[1]
|
||||||
is_package_directory = current_namespace[2]
|
is_package_directory = current_namespace[2]
|
||||||
|
|
||||||
|
|||||||
@@ -17,6 +17,5 @@ def test_import_not_in_sys_path():
|
|||||||
"""
|
"""
|
||||||
non-direct imports (not in sys.path)
|
non-direct imports (not in sys.path)
|
||||||
"""
|
"""
|
||||||
jedi.set_debug_function()
|
|
||||||
a = jedi.Script(path='module.py', line=3).goto_definitions()
|
a = jedi.Script(path='module.py', line=3).goto_definitions()
|
||||||
assert a[0].name == 'int'
|
assert a[0].name == 'int'
|
||||||
|
|||||||
Reference in New Issue
Block a user