diff --git a/jedi/evaluate/compiled/fake/builtins.pym b/jedi/evaluate/compiled/fake/builtins.pym index 1225929c..46ec619f 100644 --- a/jedi/evaluate/compiled/fake/builtins.pym +++ b/jedi/evaluate/compiled/fake/builtins.pym @@ -201,10 +201,13 @@ class dict(): # has a strange docstr pass + def __getitem__(self, obj): + return self.__elements[obj] + def get(self, k, d=None): # TODO implement try: - #return self.__elements[k] + return self.__elements[k] pass except KeyError: return d diff --git a/jedi/evaluate/context/iterable.py b/jedi/evaluate/context/iterable.py index f145aa3a..598a8301 100644 --- a/jedi/evaluate/context/iterable.py +++ b/jedi/evaluate/context/iterable.py @@ -470,7 +470,7 @@ class FakeDict(_FakeArray): def _values(self): return ContextSet(FakeSequence( self.evaluator, 'tuple', - [LazyKnownContext(v) for v in self.dict_values()] + [LazyKnownContexts(self.dict_values())] )) def dict_values(self): diff --git a/test/completion/arrays.py b/test/completion/arrays.py index e44a0671..7a1f22da 100644 --- a/test/completion/arrays.py +++ b/test/completion/arrays.py @@ -204,6 +204,9 @@ g dic2 = {'asdf': 3, 'b': 'str'} #? int() dic2['asdf'] +# TODO for now get doesn't work properly when used with a literal. +#? None +dic2.get('asdf') # string literal #? int() @@ -256,6 +259,17 @@ for x in {1: 3.0, '': 1j}: #? int() str() x +#? ['__iter__'] +dict().values().__iter__ + +d = dict(a=3, b='') +#? int() str() +d.values()[0] +#? int() +d['a'] +#? int() None +d.get('a') + # ----------------- # with variable as index # ----------------- diff --git a/test/completion/stdlib.py b/test/completion/stdlib.py index 058294cc..30d7ce07 100644 --- a/test/completion/stdlib.py +++ b/test/completion/stdlib.py @@ -35,12 +35,6 @@ next(open('')) #? ['__itemsize__'] tuple.__itemsize__ -#? ['__iter__'] -dict().values().__iter__ - -#? int() -dict(a=3).values()[0] - # ----------------- # type() calls with one parameter # -----------------