Title: Smarter rl complete: hide private and special names
Type: enhancement Stage: resolved
Components: Library (Lib) Versions: Python 3.6
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: serhiy.storchaka Nosy List: pitrou, python-dev, r.david.murray, serhiy.storchaka, twouters
Priority: normal Keywords: patch

Created on 2015-09-05 21:29 by serhiy.storchaka, last changed 2015-09-27 16:04 by berker.peksag. This issue is now closed.

File name Uploaded Description Edit
rlcomplete_filter_private.patch serhiy.storchaka, 2015-09-05 21:29 review
rlcomplete_filter_private_2.patch serhiy.storchaka, 2015-09-08 03:07 review
Messages (6)
msg249928 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2015-09-05 21:29
When press tabulation just after the dot, the output is too long. It contains all attributes, most of them are dunder names.

>>> int.
int.__abs__(            int.__doc__             int.__int__(            int.__pos__(            int.__round__(          int.__truediv__(
int.__add__(            int.__eq__(             int.__invert__(         int.__pow__(            int.__rpow__(           int.__trunc__(
int.__and__(            int.__flags__           int.__itemsize__        int.__prepare__(        int.__rrshift__(        int.__weakrefoffset__
int.__base__(           int.__float__(          int.__le__(             int.__qualname__        int.__rshift__(         int.__xor__(
int.__bases__           int.__floor__(          int.__lshift__(         int.__radd__(           int.__rsub__(           int.bit_length(
int.__basicsize__       int.__floordiv__(       int.__lt__(             int.__rand__(           int.__rtruediv__(       int.conjugate(
int.__bool__(           int.__format__(         int.__mod__(            int.__rdivmod__(        int.__rxor__(           int.denominator
int.__call__(           int.__ge__(             int.__module__          int.__reduce__(         int.__setattr__(        int.from_bytes(
int.__ceil__(           int.__getattribute__(   int.__mro__             int.__reduce_ex__(      int.__sizeof__(         int.imag
int.__class__(          int.__getnewargs__(     int.__mul__(            int.__repr__(           int.__str__(            int.mro(
int.__delattr__(        int.__gt__(             int.__name__            int.__rfloordiv__(      int.__sub__(            int.numerator
int.__dict__            int.__hash__(           int.__ne__(             int.__rlshift__(        int.__subclasscheck__(  int.real
int.__dictoffset__      int.__index__(          int.__neg__(            int.__rmod__(           int.__subclasses__(     int.to_bytes(
int.__dir__(            int.__init__(           int.__new__(            int.__rmul__(           int.__subclasshook__(   
int.__divmod__(         int.__instancecheck__(  int.__or__(             int.__ror__(            int.__text_signature__  

Proposed patch hides underscored names and show dunder names only if a prefix starts with '__', and private members only if a prefix starts with '_'.

>>> int.
int.bit_length(  int.conjugate(   int.denominator  int.from_bytes(  int.imag         int.mro(         int.numerator    int.real         int.to_bytes(
>>> int.__
int.__abs__(            int.__divmod__(         int.__init__(           int.__neg__(            int.__rlshift__(        int.__sub__(
int.__add__(            int.__doc__             int.__instancecheck__(  int.__new__(            int.__rmod__(           int.__subclasscheck__(
int.__and__(            int.__eq__(             int.__int__(            int.__or__(             int.__rmul__(           int.__subclasses__(
int.__base__(           int.__flags__           int.__invert__(         int.__pos__(            int.__ror__(            int.__subclasshook__(
int.__bases__           int.__float__(          int.__itemsize__        int.__pow__(            int.__round__(          int.__text_signature__
int.__basicsize__       int.__floor__(          int.__le__(             int.__prepare__(        int.__rpow__(           int.__truediv__(
int.__bool__(           int.__floordiv__(       int.__lshift__(         int.__qualname__        int.__rrshift__(        int.__trunc__(
int.__call__(           int.__format__(         int.__lt__(             int.__radd__(           int.__rshift__(         int.__weakrefoffset__
int.__ceil__(           int.__ge__(             int.__mod__(            int.__rand__(           int.__rsub__(           int.__xor__(
int.__class__(          int.__getattribute__(   int.__module__          int.__rdivmod__(        int.__rtruediv__(       
int.__delattr__(        int.__getnewargs__(     int.__mro__             int.__reduce__(         int.__rxor__(           
int.__dict__            int.__gt__(             int.__mul__(            int.__reduce_ex__(      int.__setattr__(        
int.__dictoffset__      int.__hash__(           int.__name__            int.__repr__(           int.__sizeof__(         
int.__dir__(            int.__index__(          int.__ne__(             int.__rfloordiv__(      int.__str__(            

(The completion of int._ returns nothing because int has no private members).
msg250025 - (view) Author: Antoine Pitrou (pitrou) * (Python committer) Date: 2015-09-06 22:07
I like the idea, though some people may object to breaking their worflow (tm). Nosy'ing David just in case ;-)
msg250134 - (view) Author: R. David Murray (r.david.murray) * (Python committer) Date: 2015-09-07 22:27
Sounds good to me, especially the __ part.

I don't actually use completions, though :)
msg250147 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2015-09-08 03:07
Here is improved patch. The completion of empty prefix now returns the list of private names if there are no public names. The completion of empty prefix or prefix '_' now returns the list of dunder names if there are no non-dunder names. For example try "None.".

In addition attr_matches() no longer returns duplicated names.
msg251064 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2015-09-19 08:10
If no one has objections, I'll commit the patch.
msg251699 - (view) Author: Roundup Robot (python-dev) Date: 2015-09-27 10:44
New changeset 4dbb315fe667 by Serhiy Storchaka in branch 'default':
Issue #25011: rlcomplete now omits private and special attribute names unless
Date User Action Args
2015-09-27 16:04:05berker.peksagsetstage: patch review -> resolved
2015-09-27 10:48:14serhiy.storchakasetstatus: open -> closed
resolution: fixed
2015-09-27 10:44:55python-devsetnosy: + python-dev
messages: + msg251699
2015-09-19 08:10:00serhiy.storchakasetassignee: serhiy.storchaka
messages: + msg251064
2015-09-08 03:07:43serhiy.storchakasetfiles: + rlcomplete_filter_private_2.patch

messages: + msg250147
2015-09-07 22:27:55r.david.murraysetmessages: + msg250134
2015-09-06 22:07:28pitrousetnosy: + r.david.murray
messages: + msg250025
2015-09-05 21:29:27serhiy.storchakacreate