@@ -1168,13 +1168,18 @@ def test_completions(self):
11681168 ("import importlib.resources.\t \t a\t \n " , "import importlib.resources.abc" ),
11691169 ("import foo, impo\t \n " , "import foo, importlib" ),
11701170 ("import foo as bar, impo\t \n " , "import foo as bar, importlib" ),
1171- ("from impo\t \n " , "from importlib" ),
1172- ("from importlib.res\t \n " , "from importlib.resources" ),
1173- ("from importlib.\t \t res\t \n " , "from importlib.resources" ),
1174- ("from importlib.resources.ab\t \n " , "from importlib.resources.abc" ),
1171+ ("from impo\t \n " , "from importlib " ),
1172+ ("from impo\t \t \n " , "from importlib import " ),
1173+ ("from impo \t \n " , "from impo import " ),
1174+ ("from importlib.res\t \n " , "from importlib.resources " ),
1175+ ("from importlib.\t \t res\t \n " , "from importlib.resources " ),
1176+ ("from importlib.res\t \t \n " , "from importlib.resources import " ),
1177+ ("from importlib.res \t \n " , "from importlib.res import " ),
1178+ ("from importlib.resources.ab\t \n " , "from importlib.resources.abc " ),
11751179 ("from importlib import mac\t \n " , "from importlib import machinery" ),
11761180 ("from importlib import res\t \n " , "from importlib import resources" ),
1177- ("from importlib.res\t import a\t \n " , "from importlib.resources import abc" ),
1181+ ("from importlib.res\t import a\t \n " , "from importlib.resources import abc" ),
1182+ ("from importlib.res\t \t a\t \n " , "from importlib.resources import abc" ),
11781183 ("from __phello__ import s\t \n " , "from __phello__ import spam" ), # frozen module
11791184 )
11801185 for code , expected in cases :
@@ -1191,10 +1196,10 @@ def test_private_completions(self):
11911196 cases = (
11921197 # Return public methods by default
11931198 ("import \t \n " , "import public" ),
1194- ("from \t \n " , "from public" ),
1199+ ("from \t \n " , "from public " ),
11951200 # Return private methods if explicitly specified
11961201 ("import _\t \n " , "import _private" ),
1197- ("from _\t \n " , "from _private" ),
1202+ ("from _\t \n " , "from _private " ),
11981203 )
11991204 for code , expected in cases :
12001205 with self .subTest (code = code ):
@@ -1227,7 +1232,7 @@ def test_sub_module_private_completions(self):
12271232 def test_builtin_completion_top_level (self ):
12281233 cases = (
12291234 ("import bui\t \n " , "import builtins" ),
1230- ("from bui\t \n " , "from builtins" ),
1235+ ("from bui\t \n " , "from builtins " ),
12311236 )
12321237 for code , expected in cases :
12331238 with self .subTest (code = code ):
@@ -1240,11 +1245,11 @@ def test_relative_completions(self):
12401245 cases = (
12411246 (None , "from .readl\t \n " , "from .readl" ),
12421247 (None , "from . import readl\t \n " , "from . import readl" ),
1243- ("_pyrepl" , "from .readl\t \n " , "from .readline" ),
1248+ ("_pyrepl" , "from .readl\t \n " , "from .readline " ),
12441249 ("_pyrepl" , "from . import readl\t \n " , "from . import readline" ),
12451250 ("_pyrepl" , "from .readline import mul\t \n " , "from .readline import multiline_input" ),
12461251 ("_pyrepl" , "from .. import toodeep\t \n " , "from .. import toodeep" ),
1247- ("concurrent" , "from .futures.i\t \n " , "from .futures.interpreter" ),
1252+ ("concurrent" , "from .futures.i\t \n " , "from .futures.interpreter " ),
12481253 )
12491254 for package , code , expected in cases :
12501255 with self .subTest (code = code ):
@@ -1545,41 +1550,43 @@ def test_get_path_and_prefix(self):
15451550
15461551 def test_parse (self ):
15471552 cases = (
1548- ('import ' , (None , '' )),
1549- ('import foo' , (None , 'foo' )),
1550- ('import foo,' , (None , '' )),
1551- ('import foo, ' , (None , '' )),
1552- ('import foo, bar' , (None , 'bar' )),
1553- ('import foo, bar, baz' , (None , 'baz' )),
1554- ('import foo as bar,' , (None , '' )),
1555- ('import foo as bar, ' , (None , '' )),
1556- ('import foo as bar, baz' , (None , 'baz' )),
1557- ('import a.' , (None , 'a.' )),
1558- ('import a.b' , (None , 'a.b' )),
1559- ('import a.b.' , (None , 'a.b.' )),
1560- ('import a.b.c' , (None , 'a.b.c' )),
1561- ('import a.b.c, foo' , (None , 'foo' )),
1562- ('import a.b.c, foo.bar' , (None , 'foo.bar' )),
1563- ('import a.b.c, foo.bar,' , (None , '' )),
1564- ('import a.b.c, foo.bar, ' , (None , '' )),
1565- ('from foo' , ('foo' , None )),
1566- ('from a.' , ('a.' , None )),
1567- ('from a.b' , ('a.b' , None )),
1568- ('from a.b.' , ('a.b.' , None )),
1569- ('from a.b.c' , ('a.b.c' , None )),
1570- ('from foo import ' , ('foo' , '' )),
1571- ('from foo import a' , ('foo' , 'a' )),
1572- ('from ' , ('' , None )),
1573- ('from . import a' , ('.' , 'a' )),
1574- ('from .foo import a' , ('.foo' , 'a' )),
1575- ('from ..foo import a' , ('..foo' , 'a' )),
1576- ('from foo import (' , ('foo' , '' )),
1577- ('from foo import ( ' , ('foo' , '' )),
1578- ('from foo import (a' , ('foo' , 'a' )),
1579- ('from foo import (a,' , ('foo' , '' )),
1580- ('from foo import (a, ' , ('foo' , '' )),
1581- ('from foo import (a, c' , ('foo' , 'c' )),
1582- ('from foo import (a as b, c' , ('foo' , 'c' )),
1553+ ('import ' , (None , '' , True )),
1554+ ('import foo' , (None , 'foo' , False )),
1555+ ('import foo,' , (None , '' , False )),
1556+ ('import foo, ' , (None , '' , True )),
1557+ ('import foo, bar' , (None , 'bar' , False )),
1558+ ('import foo, bar, baz' , (None , 'baz' , False )),
1559+ ('import foo as bar,' , (None , '' , False )),
1560+ ('import foo as bar, ' , (None , '' , True )),
1561+ ('import foo as bar, baz' , (None , 'baz' , False )),
1562+ ('import a.' , (None , 'a.' , False )),
1563+ ('import a.b' , (None , 'a.b' , False )),
1564+ ('import a.b.' , (None , 'a.b.' , False )),
1565+ ('import a.b.c' , (None , 'a.b.c' , False )),
1566+ ('import a.b.c, foo' , (None , 'foo' , False )),
1567+ ('import a.b.c, foo.bar' , (None , 'foo.bar' , False )),
1568+ ('import a.b.c, foo.bar,' , (None , '' , False )),
1569+ ('import a.b.c, foo.bar, ' , (None , '' , True )),
1570+ ('from foo' , ('foo' , None , False )),
1571+ ('from foo ' , ('foo' , None , True )),
1572+ ('from a.' , ('a.' , None , False )),
1573+ ('from a.b' , ('a.b' , None , False )),
1574+ ('from a.b.' , ('a.b.' , None , False )),
1575+ ('from a.b ' , ('a.b' , None , True )),
1576+ ('from a.b.c' , ('a.b.c' , None , False )),
1577+ ('from foo import ' , ('foo' , '' , True )),
1578+ ('from foo import a' , ('foo' , 'a' , False )),
1579+ ('from ' , ('' , None , True )),
1580+ ('from . import a' , ('.' , 'a' , False )),
1581+ ('from .foo import a' , ('.foo' , 'a' , False )),
1582+ ('from ..foo import a' , ('..foo' , 'a' , False )),
1583+ ('from foo import (' , ('foo' , '' , False )),
1584+ ('from foo import ( ' , ('foo' , '' , True )),
1585+ ('from foo import (a' , ('foo' , 'a' , False )),
1586+ ('from foo import (a,' , ('foo' , '' , False )),
1587+ ('from foo import (a, ' , ('foo' , '' , True )),
1588+ ('from foo import (a, c' , ('foo' , 'c' , False )),
1589+ ('from foo import (a as b, c' , ('foo' , 'c' , False )),
15831590 )
15841591 for code , parsed in cases :
15851592 parser = ImportParser (code )
@@ -1603,12 +1610,9 @@ def test_parse_error(self):
16031610 cases = (
16041611 '' ,
16051612 'import foo ' ,
1606- 'from foo ' ,
16071613 'import foo. ' ,
16081614 'import foo.bar ' ,
1609- 'from foo ' ,
16101615 'from foo. ' ,
1611- 'from foo.bar ' ,
16121616 'from foo import bar ' ,
16131617 'from foo import (bar ' ,
16141618 'from foo import bar, baz ' ,
@@ -1647,9 +1651,9 @@ def test_parse_error(self):
16471651 'if 1:\n pass\n \t pass' , # _tokenize TabError -> tokenize TabError
16481652 )
16491653 for code in cases :
1650- parser = ImportParser (code )
1651- actual = parser .parse ()
16521654 with self .subTest (code = code ):
1655+ parser = ImportParser (code )
1656+ actual = parser .parse ()
16531657 self .assertEqual (actual , None )
16541658
16551659 @patch .dict (sys .modules )
0 commit comments