Incorrect documentation (and possibly implementation) for rlcompleter.Completer?
The documentation at http://docs.python.org/library/rlcompleter.html claims that
Completer.complete(text, state)¶
Return the state*th completion for *text.
If called for text that doesn’t include a period character ('.'), it will complete from names currently defined in __main__, __builtin__ and keywords (as defined by the keyword module).
If called for a dotted name, it will try to evaluate anything without obvious side-effects (functions will not be evaluated, but it can generate calls to __getattr__()) up to the last part, and find matches for the rest via the dir() function. Any exception raised during the evaluation of the expression is caught, silenced and None is returned.
class B(object): ... def __dir__(self): return dir(u"") #Makes B objects look like strings ... b = B() dir(b) ['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_formatter_field_name_split', '_formatter_parser', 'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit', 'islower', 'isnumeric', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill'] c = rlcompleter.Completer() c.complete("b.", 0) #Notice that it does NOT return __add__ u'b.__class__(' c.matches #Notice that this list is completely different from the
In other words, it claims to use dir(obj) as part of the tab completion process. This is not true (using Python 2.6.1 on OS X): list given by dir(b) [u'b.__class__(', u'b.__delattr__(', u'b.__doc__', u'b.__format__(', u'b.__getattribute__(', u'b.__hash__(', u'b.__init__(', u'b.__new__(', u'b.__reduce__(', u'b.__reduce_ex__(', u'b.__repr__(', u'b.__setattr__(', u'b.__sizeof__(', u'b.__str__(', u'b.__subclasshook__(', u'b.__class__(', u'b.__class__(', u'b.__delattr__(', u'b.__dict__', u'b.__dir__(', u'b.__doc__', u'b.__format__(', u'b.__getattribute__(', u'b.__hash__(', u'b.__init__(', u'b.__module__', u'b.__new__(', u'b.__reduce__(', u'b.__reduce_ex__(', u'b.__repr__(', u'b.__setattr__(', u'b.__sizeof__(', u'b.__str__(', u'b.__subclasshook__(', u'b.__weakref__', u'b.__class__(', u'b.__delattr__(', u'b.__doc__', u'b.__format__(', u'b.__getattribute__(', u'b.__hash__(', u'b.__init__(', u'b.__new__(', u'b.__reduce__(', u'b.__reduce_ex__(', u'b.__repr__(', u'b.__setattr__(', u'b.__sizeof__(', u'b.__str__(', u'b.__subclasshook__('] As I see it, there are two ways to fix the problem: Change the documentation or change rlcompleter.Complete. I think the latter option is preferable (although it might have to wait for Python 2.7/3.1), but I thought I would ask other people if I'm missing something and if not which fix is preferred. If other people agree that it's a bug, I'll file it. -- Carl Johnson
Carl Johnson wrote:
As I see it, there are two ways to fix the problem: Change the documentation or change rlcompleter.Complete. I think the latter option is preferable (although it might have to wait for Python 2.7/3.1), but I thought I would ask other people if I'm missing something and if not which fix is preferred. If other people agree that it's a bug, I'll file it.
It needs to go on the tracker regardless of whether the problem is in the documentation or in the implementation, so file away. Given that rlcompleter already evaluates the expression preceding the last "." when asked to perform a completion, you're probably right that actually invoking dir() on the result as the documentation claims is the way to go. Cheers, Nick. -- Nick Coghlan | ncoghlan@gmail.com | Brisbane, Australia ---------------------------------------------------------------
On 2009/01/25, at 3:22 pm, Nick Coghlan wrote:
It needs to go on the tracker regardless of whether the problem is in the documentation or in the implementation, so file away.
Issue #5062: http://bugs.python.org/issue5062 -- Carl Johnson
participants (2)
-
Carl Johnson
-
Nick Coghlan