diff --git a/plugin/completion.py b/plugin/completion.py index 7fed22783..87a22dc02 100644 --- a/plugin/completion.py +++ b/plugin/completion.py @@ -74,19 +74,20 @@ def format_completion( # labelDetails.detail is likely a function signature trigger = lsp_label + lsp_label_detail annotation = lsp_label_description or lsp_detail - elif lsp_label.startswith(lsp_filter_text): - trigger = lsp_label - annotation = lsp_detail - if lsp_label_detail: - details.append(html.escape(lsp_label + lsp_label_detail)) - if lsp_label_description: - details.append(html.escape(lsp_label_description)) else: - trigger = lsp_filter_text - annotation = lsp_detail - details.append(html.escape(lsp_label + lsp_label_detail)) + if lsp_label.startswith(lsp_filter_text): + trigger = lsp_label + if lsp_label_detail: + details.append(html.escape(lsp_label + lsp_label_detail)) + else: + trigger = lsp_filter_text + details.append(html.escape(lsp_label + lsp_label_detail)) if lsp_label_description: - details.append(html.escape(lsp_label_description)) + annotation = lsp_label_description + if lsp_detail: + details.append(html.escape(lsp_detail)) + else: + annotation = lsp_detail if item.get('deprecated') or CompletionItemTag.Deprecated in item.get('tags', []): annotation = "DEPRECATED - " + annotation if annotation else "DEPRECATED" text_edit = item.get('textEdit', item_defaults.get('editRange')) diff --git a/tests/test_completion.py b/tests/test_completion.py index 50172d616..06e50f8ca 100644 --- a/tests/test_completion.py +++ b/tests/test_completion.py @@ -708,7 +708,7 @@ def check( ) check( resolve_support=False, - expected_regex=r"^f\(X& x\) \| does things$", + expected_regex=r"^f\(X& x\)$", label="f", label_details={"detail": "(X& x)", "description": "does things"} ) @@ -726,7 +726,7 @@ def check( ) check( resolve_support=True, - expected_regex=r"^More \| f\(X& x\) \| does things$", # noqa: E501 + expected_regex=r"^More \| f\(X& x\)$", # noqa: E501 label="f", label_details={"detail": "(X& x)", "description": "does things"} ) @@ -973,6 +973,37 @@ def test_label_details_3(self) -> None: annotation='NaiveDateTime' ) + def test_label_details_4(self) -> None: + # More relevant "labelDetails.description" ends up in the annotation rather than "detail". + self._verify_completion( + { + "detail": "Auto-import", + "label": "escape", + "labelDetails": { + "description": "html" + }, + }, + trigger='escape', + annotation='html', + details='Auto-import', + ) + + def test_label_details_5(self) -> None: + # filterText overrides label if doesn't match label+labelDetails.detail + self._verify_completion( + { + "detail": "Auto-import", + "filterText": "escapeNew", + "label": "escape", + "labelDetails": { + "detail": "(str)", + }, + }, + trigger='escapeNew', + annotation='Auto-import', + details='escape(str)', + ) + def test_filter_text_1(self) -> None: self._verify_completion( {