I'm not quite sure how this will behave on windows, and we can't really
create a tempdir (as we don't want to mess with path on home.
One possibility would be to mock/monkeypatch scandir, listdir and
os.path.expanduser or set $HOME in env; but I'm quite unsure we want to
go that route.
Note this is mostly to discuss as if I understood one of your message on
Twitter, this was not possible without fuzzy completion.
I tried with just this patch and that works great.
Note that unlike IPython that right now does :
~/<tab> -> /Full/Path/to/user/home
But with this patch this just complete things correctly without
expanding the tab. And I think not expanding the tab is actually better.
Anyway, open that to better understand the why you were waiting for
fuzzy completion.
On Python 3.5+, we can make use of scandir that not only list the
content of the directory as an iterator but caches some infomations (for
example, `is_dir()`; this avoid extra stats call to the underlying
filesytem and can be – according to pep 471 – 2x to 20 time faster
especially on NFS filesystem where stats call is expensive.
From a quick this is the only place where scandir would make sens, as
most other places only require the name.
Fixes 1381
In particular with the right stacklevel IPython will display the warning
if code is directly entered by the user. Without this info it does not.
Use the opportunity to add in the warning since when things are
deprecated. This leads to one less lookup of information for the user.
avoid a couple of dynamic lookup in the core of the parsing loop.
Performance improvement will be minimal, but adding a little many time
can be consequent.