From 8d63e6f6e71caca42bb4b6f541e03af733c0d06d Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Tue, 1 Jul 2014 15:10:32 +0200 Subject: [PATCH] somehow temporary solution to enable completion of __file__ --- jedi/api/__init__.py | 14 ++++++++++---- jedi/evaluate/representation.py | 4 ++++ test/completion/basic.py | 10 ++++++++++ test/test_cache.py | 3 +-- 4 files changed, 25 insertions(+), 6 deletions(-) diff --git a/jedi/api/__init__.py b/jedi/api/__init__.py index 699adb89..14f6252c 100644 --- a/jedi/api/__init__.py +++ b/jedi/api/__init__.py @@ -205,9 +205,11 @@ class Script(object): scopes = list(self._prepare_goto(path, True)) except NotFoundError: scopes = [] - scope_names_generator = get_names_of_scope(self._evaluator, - self._parser.user_scope(), - self._pos) + scope = self._parser.user_scope() + if isinstance(scope, pr.Module) \ + and not isinstance(scope, interpreter.InterpreterNamespace): + scope = er.ModuleWrapper(self._evaluator, scope) + scope_names_generator = get_names_of_scope(self._evaluator, scope, self._pos) completions = [] for scope, name_list in scope_names_generator: for c in name_list: @@ -286,7 +288,11 @@ class Script(object): stmt.start_pos = self._pos else: stmt.start_pos = user_stmt.start_pos - stmt.parent = self._parser.user_scope() + scope = self._parser.user_scope() + if isinstance(scope, pr.Module) \ + and not isinstance(scope, interpreter.InterpreterNamespace): + scope = er.ModuleWrapper(self._evaluator, scope) + stmt.parent = scope return stmt def complete(self): diff --git a/jedi/evaluate/representation.py b/jedi/evaluate/representation.py index 9be55b3c..e2a2c5b9 100644 --- a/jedi/evaluate/representation.py +++ b/jedi/evaluate/representation.py @@ -554,6 +554,10 @@ class ModuleWrapper(use_metaclass(CachedMetaClass, pr.Module)): @memoize_default() def _sub_modules(self): + """ + Lists modules in the directory of this module (if this module is a + package). + """ path = self._module.path names = [] if path.endswith(os.path.sep + '__init__.py'): diff --git a/test/completion/basic.py b/test/completion/basic.py index 44d8b3ea..ee561a56 100644 --- a/test/completion/basic.py +++ b/test/completion/basic.py @@ -365,3 +365,13 @@ if foo is not None: foo = ''.join(foo) #? str() foo + +# ----------------- +# module attributes +# ----------------- + +# Don't move this to imports.py, because there's a star import. +#? str() +__file__ +#? ['__file__'] +__file__ diff --git a/test/test_cache.py b/test/test_cache.py index 4ad437b0..5e621ea7 100644 --- a/test/test_cache.py +++ b/test/test_cache.py @@ -75,9 +75,8 @@ def test_star_import_cache_duration(): # reset values jedi.settings.star_import_cache_validity = old - length = len(cache._star_import_cache) + assert len(cache._star_import_cache) == 1 cache._star_import_cache = {} - assert length == 1 def test_cache_call_signatures():