From c26b57bef6f2ce961ff3f15db5a49973ac1121c5 Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Wed, 2 Apr 2014 10:41:47 +0200 Subject: [PATCH] generalize Completion.follow_definition to Definition._follow_statements_imports --- jedi/api/classes.py | 40 +++++++++++++++------------------------- 1 file changed, 15 insertions(+), 25 deletions(-) diff --git a/jedi/api/classes.py b/jedi/api/classes.py index 164da43b..b285d547 100644 --- a/jedi/api/classes.py +++ b/jedi/api/classes.py @@ -303,19 +303,11 @@ class BaseDefinition(object): @memoize_default() def _follow_statements_imports(self): if self._definition.isinstance(pr.Statement): - defs = self._evaluator.eval_statement(self._definition) + return self._evaluator.eval_statement(self._definition) elif self._definition.isinstance(pr.Import): - if self._definition.alias is None: - i = imports.ImportPath(self._evaluator, self._definition, True) - defs = imports.Importer(i.import_path + [unicode(self._name)], - i._importer.module).follow(self._evaluator) - else: - defs = imports.strip_imports(self._evaluator, [self._definition]) + return imports.strip_imports(self._evaluator, [self._definition]) else: - return [self] - - defs = [BaseDefinition(self._evaluator, d, d.start_pos) for d in defs] - return defs + return [self._definition] @property @memoize_default() @@ -482,6 +474,16 @@ class Completion(BaseDefinition): return followed[0].type return super(Completion, self).type + @memoize_default() + def _follow_statements_imports(self): + # imports completion is very complicated and needs to be treated + # separately in Completion. + if self._definition.isinstance(pr.Import) and self._definition.alias is None: + i = imports.ImportPath(self._evaluator, self._definition, True) + return imports.Importer(i.import_path + [unicode(self._name)], + i._importer.module).follow(self._evaluator) + return super(Completion, self)._follow_statements_imports() + @memoize_default() def follow_definition(self): """ @@ -492,20 +494,8 @@ class Completion(BaseDefinition): follows all results. This means with 1000 completions (e.g. numpy), it's just PITA-slow. """ - if self._definition.isinstance(pr.Statement): - defs = self._evaluator.eval_statement(self._definition) - elif self._definition.isinstance(pr.Import): - if self._definition.alias is None: - i = imports.ImportPath(self._evaluator, self._definition, True) - defs = imports.Importer(i.import_path + [unicode(self._name)], - i._importer.module).follow(self._evaluator) - else: - defs = imports.strip_imports(self._evaluator, [self._definition]) - else: - return [self] - - defs = [BaseDefinition(self._evaluator, d, d.start_pos) for d in defs] - return defs + defs = self._follow_statements_imports() + return [Definition(self._evaluator, d) for d in defs] class Definition(BaseDefinition):