From 5b42108e8acc2af2aa64d3fe36fb93757724b812 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Mon, 12 Dec 2022 16:39:50 +0100 Subject: Merging upstream version 3.0.22. Signed-off-by: Daniel Baumann --- ptpython/completer.py | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) (limited to 'ptpython/completer.py') diff --git a/ptpython/completer.py b/ptpython/completer.py index 2b6795d..9252106 100644 --- a/ptpython/completer.py +++ b/ptpython/completer.py @@ -476,14 +476,22 @@ class DictionaryCompleter(Completer): Complete dictionary keys. """ - def abbr_meta(text: str) -> str: + def meta_repr(value: object) -> Callable[[], str]: "Abbreviate meta text, make sure it fits on one line." - # Take first line, if multiple lines. - if len(text) > 20: - text = text[:20] + "..." - if "\n" in text: - text = text.split("\n", 1)[0] + "..." - return text + # We return a function, so that it gets computed when it's needed. + # When there are many completions, that improves the performance + # quite a bit (for the multi-column completion menu, we only need + # to display one meta text). + def get_value_repr() -> str: + text = self._do_repr(value) + + # Take first line, if multiple lines. + if "\n" in text: + text = text.split("\n", 1)[0] + "..." + + return text + + return get_value_repr match = self.item_lookup_pattern.search(document.text_before_cursor) if match is not None: @@ -512,12 +520,8 @@ class DictionaryCompleter(Completer): k_repr + "]", -len(key), display=f"[{k_repr}]", - display_meta=abbr_meta(self._do_repr(v)), + display_meta=meta_repr(v), ) - except KeyError: - # `result[k]` lookup failed. Trying to complete - # broken object. - pass except ReprFailedError: pass @@ -532,7 +536,7 @@ class DictionaryCompleter(Completer): k_repr + "]", -len(key), display=f"[{k_repr}]", - display_meta=abbr_meta(self._do_repr(result[k])), + display_meta=meta_repr(result[k]), ) except KeyError: # `result[k]` lookup failed. Trying to complete -- cgit v1.2.3