diff --git a/test/completion/basic.py b/test/completion/basic.py index 9dfbb131..97155bcc 100644 --- a/test/completion/basic.py +++ b/test/completion/basic.py @@ -119,131 +119,6 @@ for i in range(10): #? int() i -# ----------------- -# list comprehensions -# ----------------- - -# basics: - -a = ['' for a in [1]] -#? str() -a[0] -#? ['insert'] -a.insert - -a = [a for a in [1]] -#? int() -a[0] - -y = 1.0 -# Should not leak. -[y for y in [3]] -#? float() -y - -a = [a for a in (1, 2)] -#? int() -a[0] - -a = [a for a,b in [(1,'')]] -#? int() -a[0] - -arr = [1,''] -a = [a for a in arr] -#? int() str() -a[0] - -a = [a if 1.0 else '' for a in [1] if [1.0]] -#? int() str() -a[0] - -# name resolve should be correct -left, right = 'a', 'b' -left, right = [x for x in (left, right)] -#? str() -left - -# with a dict literal -#? str() -[a for a in {1:'x'}][0] - -##? str() -{a-1:b for a,b in {1:'a', 3:1.0}.items()}[0] - -# list comprehensions should also work in combination with functions -def listen(arg): - for x in arg: - #? str() - x - -listen(['' for x in [1]]) -#? str -([str for x in []])[0] - - -# ----------------- -# nested list comprehensions -# ----------------- - -b = [a for arr in [[1]] for a in arr] -#? int() -b[0] - -b = [a for arr in [[1]] if '' for a in arr if ''] -#? int() -b[0] - -b = [b for arr in [[[1.0]]] for a in arr for b in a] -#? float() -b[0] - -# jedi issue #26 -#? list() -a = [[int(v) for v in line.strip().split() if v] for line in ["123", "123", "123"] if line] -#? list() -a[0] -#? int() -a[0][0] - -# ----------------- -# generator comprehensions -# ----------------- - -left, right = (i for i in (1, '')) - -#? int() -left - -gen = (i for i in (1,)) - -#? int() -next(gen) -#? -gen[0] - -gen = (a for arr in [[1.0]] for a in arr) -#? float() -next(gen) - -#? int() -(i for i in (1,)).send() - -# issues with different formats -left, right = (i for i in - ('1', '2')) -#? str() -left - -# ----------------- -# name resolution in comprehensions. -# ----------------- - -def x(): - #? 22 - [a for a in h if hio] - if hio: pass - # ----------------- # ternary operator # ----------------- diff --git a/test/completion/comprehensions.py b/test/completion/comprehensions.py new file mode 100644 index 00000000..3eca2eef --- /dev/null +++ b/test/completion/comprehensions.py @@ -0,0 +1,125 @@ +# ----------------- +# list comprehensions +# ----------------- + +# basics: + +a = ['' for a in [1]] +#? str() +a[0] +#? ['insert'] +a.insert + +a = [a for a in [1]] +#? int() +a[0] + +y = 1.0 +# Should not leak. +[y for y in [3]] +#? float() +y + +a = [a for a in (1, 2)] +#? int() +a[0] + +a = [a for a,b in [(1,'')]] +#? int() +a[0] + +arr = [1,''] +a = [a for a in arr] +#? int() str() +a[0] + +a = [a if 1.0 else '' for a in [1] if [1.0]] +#? int() str() +a[0] + +# name resolve should be correct +left, right = 'a', 'b' +left, right = [x for x in (left, right)] +#? str() +left + +# with a dict literal +#? str() +[a for a in {1:'x'}][0] + +##? str() +{a-1:b for a,b in {1:'a', 3:1.0}.items()}[0] + +# list comprehensions should also work in combination with functions +def listen(arg): + for x in arg: + #? str() + x + +listen(['' for x in [1]]) +#? str +([str for x in []])[0] + + +# ----------------- +# nested list comprehensions +# ----------------- + +b = [a for arr in [[1]] for a in arr] +#? int() +b[0] + +b = [a for arr in [[1]] if '' for a in arr if ''] +#? int() +b[0] + +b = [b for arr in [[[1.0]]] for a in arr for b in a] +#? float() +b[0] + +# jedi issue #26 +#? list() +a = [[int(v) for v in line.strip().split() if v] for line in ["123", "123", "123"] if line] +#? list() +a[0] +#? int() +a[0][0] + +# ----------------- +# generator comprehensions +# ----------------- + +left, right = (i for i in (1, '')) + +#? int() +left + +gen = (i for i in (1,)) + +#? int() +next(gen) +#? +gen[0] + +gen = (a for arr in [[1.0]] for a in arr) +#? float() +next(gen) + +#? int() +(i for i in (1,)).send() + +# issues with different formats +left, right = (i for i in + ('1', '2')) +#? str() +left + +# ----------------- +# name resolution in comprehensions. +# ----------------- + +def x(): + #? 22 + [a for a in h if hio] + if hio: pass +