1
0
forked from VimPlug/jedi

generalize Completion.follow_definition to Definition._follow_statements_imports

This commit is contained in:
Dave Halter
2014-04-02 10:41:47 +02:00
parent 283a5086f9
commit c26b57bef6

View File

@@ -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):