forked from VimPlug/jedi
Dict.values is working now on dict literals.
This commit is contained in:
@@ -202,6 +202,9 @@ class dict():
|
|||||||
except KeyError:
|
except KeyError:
|
||||||
return d
|
return d
|
||||||
|
|
||||||
|
def values(self):
|
||||||
|
return self.__elements.values()
|
||||||
|
|
||||||
def setdefault(self, k, d):
|
def setdefault(self, k, d):
|
||||||
# TODO maybe also return the content
|
# TODO maybe also return the content
|
||||||
return d
|
return d
|
||||||
|
|||||||
@@ -36,17 +36,23 @@ class IterableWrapper(tree.Base):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
@memoize_default()
|
@memoize_default()
|
||||||
def _get_names_dict(self, obj):
|
def _get_names_dict(self, names_dict):
|
||||||
|
try:
|
||||||
|
builtin_methods = self._builtin_methods
|
||||||
|
except AttributeError:
|
||||||
|
return names_dict
|
||||||
|
|
||||||
dct = {}
|
dct = {}
|
||||||
for names in obj.names_dict.values():
|
for names in names_dict.values():
|
||||||
for name in names:
|
for name in names:
|
||||||
name_str = name.value
|
name_str = name.value
|
||||||
try:
|
try:
|
||||||
method = self._builtin_methods[name_str, self.type]
|
method = builtin_methods[name_str, self.type]
|
||||||
parent = BuiltinMethod(self, method, name.parent)
|
|
||||||
dct[name_str] = [helpers.FakeName(name.name, parent, is_definition=True)]
|
|
||||||
except KeyError:
|
except KeyError:
|
||||||
dct[name.value] = [name]
|
dct[name_str] = [name]
|
||||||
|
else:
|
||||||
|
parent = BuiltinMethod(self, method, name.parent)
|
||||||
|
dct[name_str] = [helpers.FakeName(name_str, parent, is_definition=True)]
|
||||||
return dct
|
return dct
|
||||||
|
|
||||||
|
|
||||||
@@ -96,7 +102,7 @@ class GeneratorMixin(object):
|
|||||||
@memoize_default()
|
@memoize_default()
|
||||||
def names_dicts(self, search_global=False): # is always False
|
def names_dicts(self, search_global=False): # is always False
|
||||||
gen_obj = compiled.get_special_object(self._evaluator, 'GENERATOR_OBJECT')
|
gen_obj = compiled.get_special_object(self._evaluator, 'GENERATOR_OBJECT')
|
||||||
yield self._get_names_dict(gen_obj)
|
yield self._get_names_dict(gen_obj.names_dict)
|
||||||
|
|
||||||
def py__bool__(self):
|
def py__bool__(self):
|
||||||
return True
|
return True
|
||||||
@@ -206,7 +212,9 @@ class ArrayMixin(object):
|
|||||||
scope = compiled.builtin_from_name(self._evaluator, self.type)
|
scope = compiled.builtin_from_name(self._evaluator, self.type)
|
||||||
# builtins only have one class -> [0]
|
# builtins only have one class -> [0]
|
||||||
scopes = self._evaluator.execute_evaluated(scope, self)
|
scopes = self._evaluator.execute_evaluated(scope, self)
|
||||||
return list(scopes)[0].names_dicts(search_global)
|
names_dicts = list(scopes)[0].names_dicts(search_global)
|
||||||
|
yield names_dicts[0]
|
||||||
|
yield self._get_names_dict(names_dicts[1])
|
||||||
|
|
||||||
def py__bool__(self):
|
def py__bool__(self):
|
||||||
return None # We don't know the length, because of appends.
|
return None # We don't know the length, because of appends.
|
||||||
@@ -246,6 +254,7 @@ class GeneratorComprehension(Comprehension, GeneratorMixin):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
@has_builtin_methods
|
||||||
class Array(IterableWrapper, ArrayMixin):
|
class Array(IterableWrapper, ArrayMixin):
|
||||||
mapping = {'(': 'tuple',
|
mapping = {'(': 'tuple',
|
||||||
'[': 'list',
|
'[': 'list',
|
||||||
@@ -268,11 +277,14 @@ class Array(IterableWrapper, ArrayMixin):
|
|||||||
def name(self):
|
def name(self):
|
||||||
return helpers.FakeName(self.type, parent=self)
|
return helpers.FakeName(self.type, parent=self)
|
||||||
|
|
||||||
#@register_builtin_method('values', type='dict'):
|
|
||||||
@memoize_default()
|
@memoize_default()
|
||||||
def dict_values(self):
|
def dict_values(self):
|
||||||
return unite(self._evaluator.eval_element(v) for v in self._values())
|
return unite(self._evaluator.eval_element(v) for v in self._values())
|
||||||
|
|
||||||
|
@register_builtin_method('values', type='dict')
|
||||||
|
def py_values(self):
|
||||||
|
return set([FakeSequence(self._evaluator, [AlreadyEvaluated(self.dict_values())], 'tuple')])
|
||||||
|
|
||||||
def py__getitem__(self, index):
|
def py__getitem__(self, index):
|
||||||
"""Here the index is an int/str. Raises IndexError/KeyError."""
|
"""Here the index is an int/str. Raises IndexError/KeyError."""
|
||||||
if self.type == 'dict':
|
if self.type == 'dict':
|
||||||
|
|||||||
@@ -79,6 +79,13 @@ dic2.popitem
|
|||||||
#? int()
|
#? int()
|
||||||
dic2['asdf']
|
dic2['asdf']
|
||||||
|
|
||||||
|
d = {'a': 3, 1.0: list}
|
||||||
|
|
||||||
|
#? int() list
|
||||||
|
d.values()[0]
|
||||||
|
##? int() list
|
||||||
|
dict(d).values()[0]
|
||||||
|
|
||||||
# -----------------
|
# -----------------
|
||||||
# set
|
# set
|
||||||
# -----------------
|
# -----------------
|
||||||
|
|||||||
Reference in New Issue
Block a user