diff --git a/jedi/evaluate/iterable.py b/jedi/evaluate/iterable.py index fe8f587e..c6aafc91 100644 --- a/jedi/evaluate/iterable.py +++ b/jedi/evaluate/iterable.py @@ -37,9 +37,14 @@ class IterableWrapper(tree.Base): @memoize_default() def _get_names_dict(self, names_dict): - try: - builtin_methods = self.builtin_methods - except AttributeError: + builtin_methods = {} + for cls in type(self).mro(): + try: + builtin_methods = dict(builtin_methods, **cls.builtin_methods) + except AttributeError: + pass + + if not builtin_methods: return names_dict dct = {} @@ -276,6 +281,10 @@ class DictComprehension(Comprehension, ArrayMixin): def _get_comp_for(self): return self._get_comprehension().children[3] + def py__iter__(self): + for keys, values in self._iterate(): + yield keys + def py__getitem__(self, index): for keys, values in self._iterate(): for k in keys: diff --git a/test/completion/comprehensions.py b/test/completion/comprehensions.py index 83dba5da..78e4f4b3 100644 --- a/test/completion/comprehensions.py +++ b/test/completion/comprehensions.py @@ -132,7 +132,7 @@ list({a - 1: 3 for a in [1]})[0] d = {a - 1: b for a, b in {1: 'a', 3: 1.0}.items()} #? int() list(d)[0] -#? str() +#? str() float() d.values()[0] #? str() d[0] diff --git a/test/completion/types.py b/test/completion/types.py index 9c3125f0..768b6602 100644 --- a/test/completion/types.py +++ b/test/completion/types.py @@ -86,9 +86,9 @@ d.values()[0] ##? int() list dict(d).values()[0] -#? str() float() +#? str() d.items()[0][0] -#? int() list +#? int() d.items()[0][1] # -----------------