mirror of
https://github.com/davidhalter/jedi.git
synced 2025-12-08 14:54:47 +08:00
Fix remaining issues with FakeDict.
This commit is contained in:
@@ -168,7 +168,7 @@ class Comprehension(IterableWrapper):
|
||||
|
||||
evaluator = self._evaluator
|
||||
comp_fors = list(self._get_comp_for().get_comp_fors())
|
||||
input_node = comp_fors[0].children[-1]
|
||||
input_node = comp_fors[0].children[3]
|
||||
input_types = evaluator.eval_element(input_node)
|
||||
for result in nested(input_types, comp_fors, input_node):
|
||||
yield result
|
||||
@@ -206,6 +206,10 @@ class ListComprehension(Comprehension, ArrayMixin):
|
||||
def iter_content(self):
|
||||
return self._evaluator.eval_element(self.eval_node())
|
||||
|
||||
def py__getitem__(self, index):
|
||||
all_types = list(self.py__iter__())
|
||||
return all_types[index]
|
||||
|
||||
@property
|
||||
def name(self):
|
||||
return FakeSequence(self._evaluator, [], 'list').name
|
||||
@@ -272,7 +276,9 @@ class Array(IterableWrapper, ArrayMixin):
|
||||
"""Here the index is an int/str. Raises IndexError/KeyError."""
|
||||
if self.type == 'dict':
|
||||
for key, values in self._items():
|
||||
if index == key:
|
||||
for k in self._evaluator.eval_element(key):
|
||||
if isinstance(k, compiled.CompiledObject) \
|
||||
and index == k.obj:
|
||||
for value in values:
|
||||
return self._evaluator.eval_element(value)
|
||||
raise KeyError('No key found in dictionary %s.' % self)
|
||||
@@ -406,7 +412,10 @@ class FakeDict(_FakeArray):
|
||||
super(FakeDict, self).__init__(evaluator, dct, 'dict')
|
||||
self._dct = dct
|
||||
|
||||
def get_exact_index_types(self, index):
|
||||
def py__iter__(self):
|
||||
yield set(compiled.create(self._evaluator, key) for key in self._dct)
|
||||
|
||||
def py__getitem__(self, index):
|
||||
return unite(self._evaluator.eval_element(v) for v in self._dct[index])
|
||||
|
||||
def _items(self):
|
||||
|
||||
@@ -30,8 +30,12 @@ a[0]
|
||||
|
||||
arr = [1,'']
|
||||
a = [a for a in arr]
|
||||
#? int() str()
|
||||
#? int()
|
||||
a[0]
|
||||
#? str()
|
||||
a[1]
|
||||
#? int() str()
|
||||
a[2]
|
||||
|
||||
a = [a if 1.0 else '' for a in [1] if [1.0]]
|
||||
#? int() str()
|
||||
@@ -54,7 +58,7 @@ def listen(arg):
|
||||
x
|
||||
|
||||
listen(['' for x in [1]])
|
||||
#? str
|
||||
#?
|
||||
([str for x in []])[0]
|
||||
|
||||
|
||||
|
||||
@@ -327,6 +327,15 @@ exe[3]
|
||||
#? set
|
||||
exe[3]['c']
|
||||
|
||||
|
||||
def kwargs_iteration(**kwargs):
|
||||
return kwargs
|
||||
|
||||
for x in kwargs_iteration(d=3):
|
||||
#? float()
|
||||
{'d': 1.0, 'c': '1'}[x]
|
||||
|
||||
|
||||
# -----------------
|
||||
# nested *args
|
||||
# -----------------
|
||||
|
||||
Reference in New Issue
Block a user