mirror of
https://github.com/davidhalter/jedi.git
synced 2025-12-08 14:54:47 +08:00
Fix most dynamic array issues.
This commit is contained in:
@@ -18,6 +18,7 @@ class ContextSet(object):
|
||||
Used to work with an iterable of set.
|
||||
"""
|
||||
aggregated = set()
|
||||
sets = list(sets)
|
||||
for set_ in sets:
|
||||
if isinstance(set_, ContextSet):
|
||||
aggregated |= set_._set
|
||||
|
||||
@@ -279,7 +279,9 @@ class CompiledObject(Context):
|
||||
return [] # Builtins don't have imports
|
||||
|
||||
def dict_values(self):
|
||||
return ContextSet(create(self.evaluator, v) for v in self.obj.values())
|
||||
return ContextSet.from_iterable(
|
||||
create(self.evaluator, v) for v in self.obj.values()
|
||||
)
|
||||
|
||||
|
||||
class CompiledName(AbstractNameDefinition):
|
||||
|
||||
@@ -12,6 +12,7 @@ from jedi.evaluate import imports
|
||||
from jedi.evaluate.context import Context
|
||||
from jedi.evaluate.cache import evaluator_function_cache
|
||||
from jedi.evaluate.compiled.getattr_static import getattr_static
|
||||
from jedi.common import ContextSet
|
||||
|
||||
|
||||
class MixedObject(object):
|
||||
@@ -85,7 +86,9 @@ class MixedName(compiled.CompiledName):
|
||||
# PyQt4.QtGui.QStyleOptionComboBox.currentText
|
||||
# -> just set it to None
|
||||
obj = None
|
||||
return [_create(self._evaluator, obj, parent_context=self.parent_context)]
|
||||
return ContextSet(
|
||||
_create(self._evaluator, obj, parent_context=self.parent_context)
|
||||
)
|
||||
|
||||
@property
|
||||
def api_type(self):
|
||||
|
||||
@@ -28,6 +28,7 @@ from jedi.evaluate import sys_path
|
||||
from jedi.evaluate import helpers
|
||||
from jedi.evaluate import compiled
|
||||
from jedi.evaluate import analysis
|
||||
from jedi.evaluate.utils import unite
|
||||
from jedi.evaluate.cache import evaluator_method_cache
|
||||
from jedi.evaluate.filters import AbstractNameDefinition
|
||||
from jedi.common import ContextSet, NO_CONTEXTS
|
||||
@@ -66,12 +67,17 @@ def infer_import(context, tree_name, is_goto=False):
|
||||
return NO_CONTEXTS
|
||||
|
||||
if from_import_name is not None:
|
||||
types = types.py__getattribute__(
|
||||
from_import_name,
|
||||
name_context=context,
|
||||
is_goto=is_goto,
|
||||
analysis_errors=False
|
||||
types = unite(
|
||||
t.py__getattribute__(
|
||||
from_import_name,
|
||||
name_context=context,
|
||||
is_goto=is_goto,
|
||||
analysis_errors=False
|
||||
)
|
||||
for t in types
|
||||
)
|
||||
if not is_goto:
|
||||
types = ContextSet.from_set(types)
|
||||
|
||||
if not types:
|
||||
path = import_path + [from_import_name]
|
||||
|
||||
@@ -726,17 +726,15 @@ def _check_array_additions(context, sequence):
|
||||
|
||||
def find_additions(context, arglist, add_name):
|
||||
params = list(param.TreeArguments(context.evaluator, context, arglist).unpack())
|
||||
result = ContextSet()
|
||||
result = set()
|
||||
if add_name in ['insert']:
|
||||
params = params[1:]
|
||||
if add_name in ['append', 'add', 'insert']:
|
||||
for key, lazy_context in params:
|
||||
result.add(lazy_context)
|
||||
for key, whatever in params:
|
||||
result.add(whatever)
|
||||
elif add_name in ['extend', 'update']:
|
||||
for key, lazy_context in params:
|
||||
result |= ContextSet.from_iterable(
|
||||
py__iter__(context.evaluator, lazy_context.infer())
|
||||
)
|
||||
result |= set(py__iter__(context.evaluator, lazy_context.infer()))
|
||||
return result
|
||||
|
||||
temp_param_add, settings.dynamic_params_for_other_modules = \
|
||||
@@ -745,7 +743,7 @@ def _check_array_additions(context, sequence):
|
||||
is_list = sequence.name.string_name == 'list'
|
||||
search_names = (['append', 'extend', 'insert'] if is_list else ['add', 'update'])
|
||||
|
||||
added_types = NO_CONTEXTS
|
||||
added_types = set()
|
||||
for add_name in search_names:
|
||||
try:
|
||||
possible_names = module_context.tree_node.get_used_names()[add_name]
|
||||
|
||||
@@ -95,4 +95,4 @@ def test_time_docstring():
|
||||
|
||||
|
||||
def test_dict_values():
|
||||
assert Script('import sys/sys.modules["alshdb;lasdhf"]').goto_definitions()
|
||||
assert Script('import sys\nsys.modules["alshdb;lasdhf"]').goto_definitions()
|
||||
|
||||
Reference in New Issue
Block a user