Fix most dynamic array issues.

This commit is contained in:
Dave Halter
2017-09-26 17:26:33 +02:00
parent 592f2dac95
commit ee52cc7501
6 changed files with 25 additions and 15 deletions

View File

@@ -18,6 +18,7 @@ class ContextSet(object):
Used to work with an iterable of set. Used to work with an iterable of set.
""" """
aggregated = set() aggregated = set()
sets = list(sets)
for set_ in sets: for set_ in sets:
if isinstance(set_, ContextSet): if isinstance(set_, ContextSet):
aggregated |= set_._set aggregated |= set_._set

View File

@@ -279,7 +279,9 @@ class CompiledObject(Context):
return [] # Builtins don't have imports return [] # Builtins don't have imports
def dict_values(self): 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): class CompiledName(AbstractNameDefinition):

View File

@@ -12,6 +12,7 @@ from jedi.evaluate import imports
from jedi.evaluate.context import Context from jedi.evaluate.context import Context
from jedi.evaluate.cache import evaluator_function_cache from jedi.evaluate.cache import evaluator_function_cache
from jedi.evaluate.compiled.getattr_static import getattr_static from jedi.evaluate.compiled.getattr_static import getattr_static
from jedi.common import ContextSet
class MixedObject(object): class MixedObject(object):
@@ -85,7 +86,9 @@ class MixedName(compiled.CompiledName):
# PyQt4.QtGui.QStyleOptionComboBox.currentText # PyQt4.QtGui.QStyleOptionComboBox.currentText
# -> just set it to None # -> just set it to None
obj = 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 @property
def api_type(self): def api_type(self):

View File

@@ -28,6 +28,7 @@ from jedi.evaluate import sys_path
from jedi.evaluate import helpers from jedi.evaluate import helpers
from jedi.evaluate import compiled from jedi.evaluate import compiled
from jedi.evaluate import analysis from jedi.evaluate import analysis
from jedi.evaluate.utils import unite
from jedi.evaluate.cache import evaluator_method_cache from jedi.evaluate.cache import evaluator_method_cache
from jedi.evaluate.filters import AbstractNameDefinition from jedi.evaluate.filters import AbstractNameDefinition
from jedi.common import ContextSet, NO_CONTEXTS from jedi.common import ContextSet, NO_CONTEXTS
@@ -66,12 +67,17 @@ def infer_import(context, tree_name, is_goto=False):
return NO_CONTEXTS return NO_CONTEXTS
if from_import_name is not None: if from_import_name is not None:
types = types.py__getattribute__( types = unite(
from_import_name, t.py__getattribute__(
name_context=context, from_import_name,
is_goto=is_goto, name_context=context,
analysis_errors=False is_goto=is_goto,
analysis_errors=False
)
for t in types
) )
if not is_goto:
types = ContextSet.from_set(types)
if not types: if not types:
path = import_path + [from_import_name] path = import_path + [from_import_name]

View File

@@ -726,17 +726,15 @@ def _check_array_additions(context, sequence):
def find_additions(context, arglist, add_name): def find_additions(context, arglist, add_name):
params = list(param.TreeArguments(context.evaluator, context, arglist).unpack()) params = list(param.TreeArguments(context.evaluator, context, arglist).unpack())
result = ContextSet() result = set()
if add_name in ['insert']: if add_name in ['insert']:
params = params[1:] params = params[1:]
if add_name in ['append', 'add', 'insert']: if add_name in ['append', 'add', 'insert']:
for key, lazy_context in params: for key, whatever in params:
result.add(lazy_context) result.add(whatever)
elif add_name in ['extend', 'update']: elif add_name in ['extend', 'update']:
for key, lazy_context in params: for key, lazy_context in params:
result |= ContextSet.from_iterable( result |= set(py__iter__(context.evaluator, lazy_context.infer()))
py__iter__(context.evaluator, lazy_context.infer())
)
return result return result
temp_param_add, settings.dynamic_params_for_other_modules = \ 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' is_list = sequence.name.string_name == 'list'
search_names = (['append', 'extend', 'insert'] if is_list else ['add', 'update']) search_names = (['append', 'extend', 'insert'] if is_list else ['add', 'update'])
added_types = NO_CONTEXTS added_types = set()
for add_name in search_names: for add_name in search_names:
try: try:
possible_names = module_context.tree_node.get_used_names()[add_name] possible_names = module_context.tree_node.get_used_names()[add_name]

View File

@@ -95,4 +95,4 @@ def test_time_docstring():
def test_dict_values(): def test_dict_values():
assert Script('import sys/sys.modules["alshdb;lasdhf"]').goto_definitions() assert Script('import sys\nsys.modules["alshdb;lasdhf"]').goto_definitions()