Re:Bpython is a fancy interface to the Python interpreter
by xtacy on Sunday May 20, 2012 @08:05PM
(#4000640)
I really like the "instant" auto-completion. Can someone throw light on how it was done?
[ Parent
| on HN ]
Re:Bpython is a fancy interface to the Python interpreter
by btn on Sunday May 20, 2012 @11:19PM
(#4001102)
The code that generates the completions [1] and displays them [2] is fairly simple. It uses a mix of scanning for a function's docstring, Python's built-in rlcompleter module [3] to generate the possible identifiers and keywords, its own module scanner for imports [4].
[1] https://bitbucket.org/bobf/bpython/src/2b3fb2cb6500/bpython/...
[2] https://bitbucket.org/bobf/bpython/src/2b3fb2cb6500/bpython/...
[3] http://docs.python.org/library/rlcompleter.html
[4] https://bitbucket.org/bobf/bpython/src/2b3fb2cb6500/bpython/...
Re:Bpython is a fancy interface to the Python interpreter
by xtacy on Monday May 21, 2012 @01:18AM
(#4001401)
That's very useful. I wish shells like bash/zsh had this instant auto-completion!
Re:Bpython is a fancy interface to the Python interpreter
by bobfarrell on Tuesday May 22, 2012 @08:38AM
(#4007492)
Hi. It's done using ncurses for the display (if you've ever worked with curses you can imagine how much of a headache the whole thing was). The introspection is done using the `inspect` module for the arg spec/doc string, and either inspect.getmembers or just dir() to get the attributes (it's been a while since I wrote it). We had to do some pretty weird stuff to get the attribute inspection to not trigger __getattribute__ for objects that implement it (i.e. to introspect without side-effects) but it seems to work pretty well.