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.
"""
aggregated = set()
sets = list(sets)
for set_ in sets:
if isinstance(set_, ContextSet):
aggregated |= set_._set

View File

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

View File

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

View File

@@ -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]

View File

@@ -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]

View File

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