##// END OF EJS Templates
makes dictionary key completion use same delimiters as splitter
Jeff Hussmann -
Show More
@@ -416,7 +416,7 b' def get__all__entries(obj):'
416 416 return [w for w in words if isinstance(w, string_types)]
417 417
418 418
419 def match_dict_keys(keys, prefix):
419 def match_dict_keys(keys, prefix, delims):
420 420 """Used by dict_key_matches, matching the prefix to a list of keys"""
421 421 if not prefix:
422 422 return None, 0, [repr(k) for k in keys
@@ -427,8 +427,9 b' def match_dict_keys(keys, prefix):'
427 427 prefix_str = eval(prefix + quote, {})
428 428 except Exception:
429 429 return None, 0, []
430
431 token_match = re.search(r'\w*$', prefix, re.UNICODE)
430
431 pattern = '[^' + ''.join('\\' + c for c in delims) + ']*$'
432 token_match = re.search(pattern, prefix, re.UNICODE)
432 433 token_start = token_match.start()
433 434 token_prefix = token_match.group()
434 435
@@ -913,7 +914,7 b' class IPCompleter(Completer):'
913 914 keys = get_keys(obj)
914 915 if not keys:
915 916 return keys
916 closing_quote, token_offset, matches = match_dict_keys(keys, prefix)
917 closing_quote, token_offset, matches = match_dict_keys(keys, prefix, self.splitter.delims)
917 918 if not matches:
918 919 return matches
919 920
@@ -490,6 +490,11 b' def test_dict_key_completion_string():'
490 490 _, matches = complete(line_buffer="d[\"a'")
491 491 nt.assert_in("b", matches)
492 492
493 # need to not split at delims that readline won't split at
494 if '-' not in ip.Completer.splitter.delims:
495 ip.user_ns['d'] = {'before-after': None}
496 _, matches = complete(line_buffer="d['before-af")
497 nt.assert_in('before-after', matches)
493 498
494 499 def test_dict_key_completion_contexts():
495 500 """Test expression contexts in which dict key completion occurs"""
General Comments 0
You need to be logged in to leave comments. Login now