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.
|
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
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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]
|
||||||
|
|||||||
@@ -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]
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
Reference in New Issue
Block a user