Issue 10351: Add autocompletion for keys in dictionaries (original) (raw)

Created on 2010-11-08 09:22 by Valery.Khamenya, last changed 2022-04-11 14:57 by admin.

Files
File name Uploaded Description Edit
rlcompleter-dict-keys-autocompletion.tar.gz Valery.Khamenya,2010-11-08 09:22 patch, rlcomeplter.py -- full, test_rlcompleter -- full
patch.diff Valery.Khamenya,2010-11-09 10:26
Messages (7)
msg120721 - (view) Author: Valery Khamenya (Valery.Khamenya) Date: 2010-11-08 09:22
1. The patch introduces autocompletion for keys in dictionaries (patch attached) 2. The patched rlcompleter as such works OK for unicode dictionary keys as well. All tests pass OK. HOWEVER, readline's completion mechanism seem to be confused with unicode strings -- see comments to Completer.dict_key_matches(). So, perhaps, one day some changes should be applied to readline code too. 3. rlcompleter.py has no tests in trunk -- I spawn a separate issue for it. Meanwhile I took test_rlcompleter.py from 2.7 and extended it. 4. The following usual lines in .pythonstartup: import readline import rlcompleter readline.parse_and_bind('tab: complete') readline.parse_and_bind('Control-Space: complete') should be extended by this one: readline.set_completer_delims(re.compile(r'[\'"\\[]').sub('', readline.get_completer_delims()))
msg120753 - (view) Author: Éric Araujo (eric.araujo) * (Python committer) Date: 2010-11-08 15:14
Thank you for the report and patch. This is a new feature, thus targetting the py3k branch (future 3.2). If your patch is not against this branch, can you refresh it? Also, please attach it as text file(s), and generally follow guidelines outlined at http://www.python.org/dev/patches/ Thanks again!
msg120855 - (view) Author: Valery Khamenya (Valery.Khamenya) Date: 2010-11-09 10:26
Hi Éric, thanks for guiding. So, attached is the concatenation of two forward unified diffs for rlcompleter.py and test_rlcompleter.py -- both as of py3k trunk. Tested against Python 3.1.2 though. P.S. hm, py3k code appeared to be surprisingly nicer -- no unicode troubles and work-arounds at all... regards Valery
msg121451 - (view) Author: Valery Khamenya (Valery.Khamenya) Date: 2010-11-18 10:21
Guys, do you expect anythig else from me in respect to this issue? Let me know it before my non-stopable garbage collector wipes all the details from my brain away :)
msg121631 - (view) Author: Éric Araujo (eric.araujo) * (Python committer) Date: 2010-11-20 13:12
I will review your patch later today.
msg122125 - (view) Author: Éric Araujo (eric.araujo) * (Python committer) Date: 2010-11-22 14:10
Review time! + elif "[" in text: + self.matches = self.dict_key_matches(text) Does this complete only dicts? What about other mappings? What about other sequences implementing __getitem__? One of the function name and the function docstring (“Compute matches when text contains a [”) is wrong. I’m not familiar with rlcompleter’s internals, so I’d like a few comments sprinkled in the code. Please wrap your lines at 79 columns, and follow other advice given at http://www.python.org/dev/patches/ for the next version of your patch. + The evaluation of the part before the '[' could be enhanced. This belongs in a comment or a test, not the docstring. + 'DictCompleteMe[\'öh, вау!\']', I find it more readable to avoid escaped quotes whenever possible. Here I would use "DictCompleteMe['öh, вау!']".
msg256042 - (view) Author: Martin Panter (martin.panter) * (Python committer) Date: 2015-12-07 02:13
Some thoughts and observations from trying this patch out: * It supports single and double quotes, but triple-quoted strings get trashed * It supports Python 2’s u". . ." syntax, but not r". . .", b". . .", etc * It supports integer keys, but not indexes of lists * It does not seem to support multi-level dictionaries (e.g. config parser): d[key1][key2] * Control codes in strings are awkward * Escape codes in strings don’t seem to be parsed or generated properly * The module doc string would sort of become out of date: “indexing operations are *not* evaluated” It works for custom dictionaries, so it can invoke custom code to list the keys. Maybe this is okay; I wouldn’t expect listing an object’s keys to have a serious effect. But you could add a Mapping (and Sequence) ABC check in case the object implements keys() but is not really a dictionary. It would be nice for this to work by default, because Tab completion is now enabled by default. But I worry if changing the default completer delimiters globally will be a compatibility problem. There is a mega ugly regular expression in the patch. Is there another way to do whatever it is doing? Failing that, you could add comments, group names, etc to make it more understandable.
History
Date User Action Args
2022-04-11 14:57:08 admin set github: 54560
2015-12-07 10:05:22 serhiy.storchaka set nosy: + serhiy.storchakaversions: + Python 3.6, - Python 3.5
2015-12-07 02:13:09 martin.panter set messages: +
2015-02-12 05:08:45 rhettinger set versions: + Python 3.5, - Python 3.2
2015-02-11 10:58:28 martin.panter set nosy: + martin.panter
2010-11-22 14:10:37 eric.araujo set nosy: - docs@pythonmessages: + assignee: docs@python -> components: - Documentation
2010-11-21 13:25:30 rbp set nosy: + rbp
2010-11-20 13:12:06 eric.araujo set messages: +
2010-11-18 10:40:18 pitrou set nosy: + georg.brandl, facundobatista
2010-11-18 10:21:52 Valery.Khamenya set messages: +
2010-11-12 23:44:10 ezio.melotti set nosy: + ezio.melotti
2010-11-09 23:55:00 Trundle set nosy: + Trundle
2010-11-09 10:26:05 Valery.Khamenya set files: + patch.diffassignee: docs@pythoncomponents: + Documentationkeywords: + patchnosy: + docs@pythonmessages: +
2010-11-08 15:14:57 eric.araujo set versions: - Python 2.6, Python 3.1, Python 2.7, Python 3.3type: behavior -> enhancementnosy: + eric.araujotitle: to introduce autocompletion for keys in dictionaries (patch attached) -> Add autocompletion for keys in dictionariesmessages: + stage: patch review
2010-11-08 09:22:36 Valery.Khamenya create