diff options
| author | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2021-07-29 13:53:39 (GMT) |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-07-29 13:53:39 (GMT) |
| commit | acaf3b959492e7a84dcc9d46101ed6dc313768c8 (patch) | |
| tree | 03b9e9ce581b9c337043f7086fd7df95c30f2bef /Lib/rlcompleter.py | |
| parent | 12fc0d28fcdeca32314d0755d3b30c7d96907440 (diff) | |
| download | cpython-acaf3b959492e7a84dcc9d46101ed6dc313768c8.zip cpython-acaf3b959492e7a84dcc9d46101ed6dc313768c8.tar.gz cpython-acaf3b959492e7a84dcc9d46101ed6dc313768c8.tar.bz2 | |
bpo-44752: Make rlcompleter not call `@property` methods (GH-27401) (#27445)
* rlcompleter was calling these methods to identify whether to add
parenthesis to the completion, based on if the attribute is callable.
* for property objects, completion with parenthesis are never desirable.
* property methods with print statements behaved very strangely, which
was especially unfriendly to language newcomers. <tab> could suddenly
produce output unexpectedly.
(cherry picked from commit 50de8f74f8e92b20e76438c22b6a8f91afd6df75)
Co-authored-by: Jack DeVries <58614260+jdevries3133@users.noreply.github.com>
Diffstat (limited to 'Lib/rlcompleter.py')
| -rw-r--r-- | Lib/rlcompleter.py | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/Lib/rlcompleter.py b/Lib/rlcompleter.py index bca4a7b..f620dcf 100644 --- a/Lib/rlcompleter.py +++ b/Lib/rlcompleter.py @@ -169,6 +169,16 @@ class Completer: if (word[:n] == attr and not (noprefix and word[:n+1] == noprefix)): match = "%s.%s" % (expr, word) + if isinstance(getattr(type(thisobject), word, None), + property): + # bpo-44752: thisobject.word is a method decorated by + # `@property`. What follows applies a postfix if + # thisobject.word is callable, but know we know that + # this is not callable (because it is a property). + # Also, getattr(thisobject, word) will evaluate the + # property method, which is not desirable. + matches.append(match) + continue try: val = getattr(thisobject, word) except Exception: |
