diff --git a/jedi/api.py b/jedi/api.py index 654d4bdb..385d032f 100644 --- a/jedi/api.py +++ b/jedi/api.py @@ -198,7 +198,7 @@ class Script(object): :param col: The column to complete in. :type col: int :param source_path: The path in the os, the current module is in. - :type source_path: string + :type source_path: string or None """ def __init__(self, source, line, column, source_path): self.pos = line, column diff --git a/jedi/builtin.py b/jedi/builtin.py index 13cd7da1..b5d9b31b 100644 --- a/jedi/builtin.py +++ b/jedi/builtin.py @@ -50,7 +50,8 @@ class CachedModule(object): self._parser = parsing.PyFuzzyParser(source, self.path or self.name) p_time = None if not self.path else os.path.getmtime(self.path) - self.cache[self.path or self.name] = p_time, self._parser + if self.path or self.name: + self.cache[self.path or self.name] = p_time, self._parser class Parser(CachedModule): diff --git a/jedi/imports.py b/jedi/imports.py index b3391080..deb21ac9 100644 --- a/jedi/imports.py +++ b/jedi/imports.py @@ -37,7 +37,8 @@ class ImportPath(object): self.is_like_search = is_like_search self.direct_resolve = direct_resolve self.is_partial_import = bool(kill_count) - self.file_path = os.path.dirname(import_stmt.get_parent_until().path) + path = import_stmt.get_parent_until().path + self.file_path = os.path.dirname(path) if path is not None else None # rest is import_path resolution self.import_path = [] @@ -198,9 +199,13 @@ class ImportPath(object): sys.path = temp return i - sys_path_mod = self.sys_path_with_modifications() + if self.file_path: + sys_path_mod = self.sys_path_with_modifications() + sys_path_mod.insert(0, self.file_path) + else: + sys_path_mod = builtin.module_find_path + current_namespace = None - sys_path_mod.insert(0, self.file_path) # now execute those paths rest = [] for i, s in enumerate(self.import_path): diff --git a/jedi/modules.py b/jedi/modules.py index 77a192a3..887248b4 100644 --- a/jedi/modules.py +++ b/jedi/modules.py @@ -40,7 +40,7 @@ class ModuleWithCursor(Module): be there. :param source: The source code of the file. - :param path: The module path of the file. + :param path: The module path of the file or None. :param position: The position, the user is currently in. Only important \ for the main file. """ @@ -62,7 +62,8 @@ class ModuleWithCursor(Module): # Also, the position is here important (which will not be used by # default), therefore fill the cache here. self._parser = parsing.PyFuzzyParser(source, path, position) - builtin.CachedModule.cache[self.path] = time.time(), self._parser + if self.path: + builtin.CachedModule.cache[self.path] = time.time(), self._parser def get_path_until_cursor(self): """ Get the path under the cursor. """ diff --git a/jedi/parsing.py b/jedi/parsing.py index 64361653..0c1b9797 100644 --- a/jedi/parsing.py +++ b/jedi/parsing.py @@ -300,7 +300,7 @@ class Module(Scope): return self._name def is_builtin(self): - return not self.path.endswith('.py') + return not (self.path is None or self.path.endswith('.py')) class Class(Scope): diff --git a/test/regression.py b/test/regression.py index 3ba21b8d..8c22a02c 100755 --- a/test/regression.py +++ b/test/regression.py @@ -16,7 +16,7 @@ import api class TestRegression(unittest.TestCase): def get_def(self, src, pos): - script = api.Script(src, pos[0], pos[1], '') + script = api.Script(src, pos[0], pos[1], None) return script.get_definition() def complete(self, src, pos=None):