mirror of
https://github.com/davidhalter/jedi.git
synced 2025-12-08 06:44:46 +08:00
Make imports stuff in API classes work. Now goto on imports follows even aliases.
This commit is contained in:
@@ -67,7 +67,7 @@ class BaseDefinition(object):
|
|||||||
"""
|
"""
|
||||||
An instance of :class:`jedi.parser.reprsentation.Name` subclass.
|
An instance of :class:`jedi.parser.reprsentation.Name` subclass.
|
||||||
"""
|
"""
|
||||||
self._definition = self._name.get_definition()
|
self._definition = er.wrap(evaluator, self._name.get_definition())
|
||||||
self.is_keyword = isinstance(self._definition, keywords.Keyword)
|
self.is_keyword = isinstance(self._definition, keywords.Keyword)
|
||||||
|
|
||||||
# generate a path to the definition
|
# generate a path to the definition
|
||||||
@@ -162,7 +162,6 @@ class BaseDefinition(object):
|
|||||||
return 'import'
|
return 'import'
|
||||||
|
|
||||||
string = type(stripped).__name__.lower().replace('wrapper', '')
|
string = type(stripped).__name__.lower().replace('wrapper', '')
|
||||||
print(stripped, string)
|
|
||||||
if string == 'exprstmt':
|
if string == 'exprstmt':
|
||||||
return 'statement'
|
return 'statement'
|
||||||
else:
|
else:
|
||||||
@@ -485,7 +484,7 @@ class Completion(BaseDefinition):
|
|||||||
"""
|
"""
|
||||||
definition = self._definition
|
definition = self._definition
|
||||||
if isinstance(definition, pr.Import):
|
if isinstance(definition, pr.Import):
|
||||||
i = imports.ImportWrapper(self._evaluator, definition)
|
i = imports.ImportWrapper(self._evaluator, self._name)
|
||||||
if len(i.import_path) > 1 or not fast:
|
if len(i.import_path) > 1 or not fast:
|
||||||
followed = self._follow_statements_imports()
|
followed = self._follow_statements_imports()
|
||||||
if followed:
|
if followed:
|
||||||
@@ -504,7 +503,7 @@ class Completion(BaseDefinition):
|
|||||||
description, look at :attr:`jedi.api.classes.BaseDefinition.type`.
|
description, look at :attr:`jedi.api.classes.BaseDefinition.type`.
|
||||||
"""
|
"""
|
||||||
if isinstance(self._definition, pr.Import):
|
if isinstance(self._definition, pr.Import):
|
||||||
i = imports.ImportWrapper(self._evaluator, self._definition)
|
i = imports.ImportWrapper(self._evaluator, self._name)
|
||||||
if len(i.import_path) <= 1:
|
if len(i.import_path) <= 1:
|
||||||
return 'module'
|
return 'module'
|
||||||
|
|
||||||
@@ -521,14 +520,9 @@ class Completion(BaseDefinition):
|
|||||||
# imports completion is very complicated and needs to be treated
|
# imports completion is very complicated and needs to be treated
|
||||||
# separately in Completion.
|
# separately in Completion.
|
||||||
definition = self._definition
|
definition = self._definition
|
||||||
if definition.isinstance(pr.Import) and definition.alias is None:
|
if definition.isinstance(pr.Import):
|
||||||
i = imports.ImportWrapper(self._evaluator, definition, True)
|
i = imports.ImportWrapper(self._evaluator, self._name)
|
||||||
import_path = i.import_path + (unicode(self._name),)
|
return i.follow()
|
||||||
try:
|
|
||||||
return imports.get_importer(self._evaluator, import_path,
|
|
||||||
i._importer.module).follow(self._evaluator)
|
|
||||||
except imports.ModuleNotFound:
|
|
||||||
pass
|
|
||||||
return super(Completion, self)._follow_statements_imports()
|
return super(Completion, self)._follow_statements_imports()
|
||||||
|
|
||||||
@memoize_default()
|
@memoize_default()
|
||||||
|
|||||||
@@ -29,7 +29,6 @@ from jedi.common import source_to_unicode
|
|||||||
from jedi.evaluate import compiled
|
from jedi.evaluate import compiled
|
||||||
from jedi.evaluate import analysis
|
from jedi.evaluate import analysis
|
||||||
from jedi.evaluate.cache import memoize_default, NO_DEFAULT
|
from jedi.evaluate.cache import memoize_default, NO_DEFAULT
|
||||||
from jedi.evaluate.helpers import FakeSubModule
|
|
||||||
|
|
||||||
|
|
||||||
class ModuleNotFound(Exception):
|
class ModuleNotFound(Exception):
|
||||||
@@ -599,7 +598,7 @@ class _Importer(object):
|
|||||||
return _load_module(self._evaluator, name=path, sys_path=sys_path), rest
|
return _load_module(self._evaluator, name=path, sys_path=sys_path), rest
|
||||||
|
|
||||||
def _generate_name(self, name):
|
def _generate_name(self, name):
|
||||||
return helpers.FakeName(name, parent=FakeSubModule)
|
return helpers.FakeName(name, parent=self.module)
|
||||||
|
|
||||||
def _get_module_names(self, search_path=None):
|
def _get_module_names(self, search_path=None):
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ def test_function_call_signature_in_doc():
|
|||||||
pass
|
pass
|
||||||
f""").goto_definitions()
|
f""").goto_definitions()
|
||||||
doc = defs[0].doc
|
doc = defs[0].doc
|
||||||
assert "f(x, y = 1, z = 'a')" in str(doc)
|
assert "f(x, y=1, z='a')" in str(doc)
|
||||||
|
|
||||||
|
|
||||||
def test_class_call_signature():
|
def test_class_call_signature():
|
||||||
@@ -308,4 +308,7 @@ class TestGotoAssignments(TestCase):
|
|||||||
|
|
||||||
assert nms[1].name == 'foo'
|
assert nms[1].name == 'foo'
|
||||||
assert nms[1].type == 'import'
|
assert nms[1].type == 'import'
|
||||||
assert [nms[1]] == nms[1].goto_assignments()
|
ass = nms[1].goto_assignments()
|
||||||
|
assert len(ass) == 1
|
||||||
|
assert ass[0].name == 'json'
|
||||||
|
assert ass[0].type == 'module'
|
||||||
|
|||||||
Reference in New Issue
Block a user