diff --git a/jedi/evaluate/jedi_typing.py b/jedi/evaluate/jedi_typing.py index 14c74570..8d66258f 100644 --- a/jedi/evaluate/jedi_typing.py +++ b/jedi/evaluate/jedi_typing.py @@ -7,7 +7,19 @@ from collections import abc def factory(typing_name, indextype): - class Sequence(abc.Sequence): + class Iterable(abc.Iterable): + def __iter__(self): + yield indextype() + + class Iterator(Iterable, abc.Iterator): + def next(self): + """ needed for python 2 """ + return self.__next__() + + def __next__(self): + return indextype() + + class Sequence(Iterable, abc.Sequence): def __getitem__(self, index: int): return indextype() @@ -15,12 +27,29 @@ def factory(typing_name, indextype): def __setitem__(self, index: int, value: indextype): pass + def __delitem__(self, index: int, value: indextype): + pass + class List(MutableSequence, list): + pass + + class AbstractSet(Iterable, abc.Set): + pass + + class MutableSet(AbstractSet, abc.MutableSet): + def add(item: indextype): + pass + + def discard(item: indextype): pass dct = { "Sequence": Sequence, "MutableSequence": MutableSequence, "List": List, + "Iterable": Iterable, + "Iterator": Iterator, + "AbstractSet": AbstractSet, + "MutableSet": MutableSet, } return dct[typing_name] diff --git a/test/completion/pep0484.py b/test/completion/pep0484.py index 75742846..f5c2f93d 100644 --- a/test/completion/pep0484.py +++ b/test/completion/pep0484.py @@ -192,3 +192,35 @@ def we_can_has_sequence( u.a #? float() u[1] + +def iterators( + ps: typing.Iterable[int], + qs: typing.Iterator[str], + rs: typing.Sequence["B"], + ts: typing.AbstractSet["float"]): + for p in ps: + #? int() + p + #? + next(ps) + for q in qs: + #? str() + q + #? str() + next(qs) + for r in rs: + #? B() + r + #? + next(rs) + for t in ts: + #? float() + t + +def sets( + p: typing.AbstractSet[int], + q: typing.MutableSet[float]): + #? [] + p.a + #? ["add"] + q.a