forked from VimPlug/jedi
Fix some issues with usages and imports.
This commit is contained in:
@@ -9,15 +9,14 @@ def usages(evaluator, definition_names, mods):
|
|||||||
"""
|
"""
|
||||||
:param definitions: list of Name
|
:param definitions: list of Name
|
||||||
"""
|
"""
|
||||||
def compare_array(definitions):
|
def compare_array(definition_names):
|
||||||
""" `definitions` are being compared by module/start_pos, because
|
""" `definitions` are being compared by module/start_pos, because
|
||||||
sometimes the id's of the objects change (e.g. executions).
|
sometimes the id's of the objects change (e.g. executions).
|
||||||
"""
|
"""
|
||||||
result = []
|
return [
|
||||||
for d in definitions:
|
(d.get_root_context(), d.start_pos)
|
||||||
module = d.get_root_context()
|
for d in definition_names
|
||||||
result.append((module, d.start_pos))
|
]
|
||||||
return result
|
|
||||||
|
|
||||||
search_name = list(definition_names)[0].string_name
|
search_name = list(definition_names)[0].string_name
|
||||||
compare_definitions = compare_array(definition_names)
|
compare_definitions = compare_array(definition_names)
|
||||||
@@ -35,6 +34,7 @@ def usages(evaluator, definition_names, mods):
|
|||||||
# (because goto might return that import name).
|
# (because goto might return that import name).
|
||||||
compare_definitions += compare_array([name])
|
compare_definitions += compare_array([name])
|
||||||
else:
|
else:
|
||||||
|
# compiled objects
|
||||||
definition_names.add(m.name)
|
definition_names.add(m.name)
|
||||||
|
|
||||||
return [classes.Definition(evaluator, n) for n in definition_names]
|
return [classes.Definition(evaluator, n) for n in definition_names]
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ import imp
|
|||||||
import os
|
import os
|
||||||
import pkgutil
|
import pkgutil
|
||||||
import sys
|
import sys
|
||||||
from itertools import chain
|
|
||||||
|
|
||||||
from jedi._compatibility import find_module, unicode
|
from jedi._compatibility import find_module, unicode
|
||||||
from jedi import debug
|
from jedi import debug
|
||||||
@@ -171,30 +170,40 @@ class ImportName(AbstractNameDefinition):
|
|||||||
start_pos = (1, 0)
|
start_pos = (1, 0)
|
||||||
|
|
||||||
def __init__(self, parent_module, string_name):
|
def __init__(self, parent_module, string_name):
|
||||||
self.parent_context = parent_module
|
self.parent_module = parent_module
|
||||||
self.string_name = string_name
|
self.string_name = string_name
|
||||||
|
|
||||||
def infer(self):
|
def infer(self):
|
||||||
return Importer(
|
return Importer(
|
||||||
self.parent_context.evaluator,
|
self.parent_module.evaluator,
|
||||||
[self.string_name],
|
[self.string_name],
|
||||||
self.parent_context,
|
self.parent_module,
|
||||||
).follow()
|
).follow()
|
||||||
|
|
||||||
def get_root_context(self):
|
def get_root_context(self):
|
||||||
# Not sure if this is correct.
|
# Not sure if this is correct.
|
||||||
return self.parent_context.get_root_context()
|
return self.parent_context.get_root_context()
|
||||||
|
|
||||||
|
@property
|
||||||
|
def parent_context(self):
|
||||||
|
return self.parent_module
|
||||||
|
|
||||||
|
|
||||||
class SubModuleName(ImportName):
|
class SubModuleName(ImportName):
|
||||||
def infer(self):
|
def infer(self):
|
||||||
return Importer(
|
return Importer(
|
||||||
self.parent_context.evaluator,
|
self.parent_module.evaluator,
|
||||||
[self.string_name],
|
[self.string_name],
|
||||||
self.parent_context,
|
self.parent_module,
|
||||||
level=1
|
level=1
|
||||||
).follow()
|
).follow()
|
||||||
|
|
||||||
|
@property
|
||||||
|
def parent_context(self):
|
||||||
|
# This is a bit of a special case. But it seems like it's working well.
|
||||||
|
# Since a SubModuleName is basically a lazy name to a module
|
||||||
|
return next(iter(self.infer()))
|
||||||
|
|
||||||
|
|
||||||
class Importer(object):
|
class Importer(object):
|
||||||
def __init__(self, evaluator, import_path, module_context, level=0):
|
def __init__(self, evaluator, import_path, module_context, level=0):
|
||||||
|
|||||||
@@ -486,7 +486,7 @@ class DictLiteralContext(SequenceLiteralContext):
|
|||||||
@register_builtin_method('values')
|
@register_builtin_method('values')
|
||||||
def _imitate_values(self):
|
def _imitate_values(self):
|
||||||
lazy_context = context.LazyKnownContexts(self.dict_values())
|
lazy_context = context.LazyKnownContexts(self.dict_values())
|
||||||
return FakeSequence(self.evaluator, 'list', [lazy_context])
|
return set([FakeSequence(self.evaluator, 'list', [lazy_context])])
|
||||||
|
|
||||||
@register_builtin_method('items')
|
@register_builtin_method('items')
|
||||||
def _imitate_items(self):
|
def _imitate_items(self):
|
||||||
@@ -532,7 +532,7 @@ class FakeSequence(_FakeArray):
|
|||||||
return self._context_list
|
return self._context_list
|
||||||
|
|
||||||
def py__getitem__(self, index):
|
def py__getitem__(self, index):
|
||||||
return self._lazy_context_list[index].infer()
|
return set(self._lazy_context_list[index].infer())
|
||||||
|
|
||||||
def py__iter__(self):
|
def py__iter__(self):
|
||||||
return self._lazy_context_list
|
return self._lazy_context_list
|
||||||
|
|||||||
Reference in New Issue
Block a user