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(
{