[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
emacs-29 e3be0dbf85c: Eglot: display completion label when safe
From: |
João Távora |
Subject: |
emacs-29 e3be0dbf85c: Eglot: display completion label when safe |
Date: |
Thu, 23 Feb 2023 08:57:20 -0500 (EST) |
branch: emacs-29
commit e3be0dbf85c729447776d361ba56ada6b92f0149
Author: João Távora <joaotavora@gmail.com>
Commit: João Távora <joaotavora@gmail.com>
Eglot: display completion label when safe
Originally reported in
https://github.com/joaotavora/eglot/discussions/1141 by "Mintsoup".
Eglot doesn't always show the LSP :label property of a CompletionItem
in the completion candidates. That is because label is sometimes not
what should be inserted in the buffer in the end, the :insertText
property supercedes it.
But the label is usually more suitable for display nevertheless and if
the LSP CompletionItem contains either a snippet or a textEdit, it's
safe to display the label, since :exit-function will guarantee that a
suitable buffer insertion is performed.
This change reflects that awareness that when a textEdit is available,
it's acceptable to show the label.
* lisp/progmodes/eglot.el (eglot-completion-at-point): Adjust.
---
lisp/progmodes/eglot.el | 20 ++++++++++++--------
1 file changed, 12 insertions(+), 8 deletions(-)
diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el
index df755dfa43a..7d61f6ad78e 100644
--- a/lisp/progmodes/eglot.el
+++ b/lisp/progmodes/eglot.el
@@ -2824,16 +2824,20 @@ for which LSP on-type-formatting should be requested."
(mapcar
(jsonrpc-lambda
(&rest item &key label insertText insertTextFormat
- &allow-other-keys)
+ textEdit &allow-other-keys)
(let ((proxy
- (cond ((and (eql insertTextFormat 2)
- (eglot--snippet-expansion-fn))
+ ;; Snippet or textEdit, it's safe to
+ ;; display/insert the label since
+ ;; it'll be adjusted. If no usable
+ ;; insertText at all, label is best,
+ ;; too.
+ (cond ((or (and (eql insertTextFormat 2)
+ (eglot--snippet-expansion-fn))
+ textEdit
+ (null insertText)
+ (string-empty-p insertText))
(string-trim-left label))
- ((and insertText
- (not (string-empty-p insertText)))
- insertText)
- (t
- (string-trim-left label)))))
+ (t insertText))))
(unless (zerop (length proxy))
(put-text-property 0 1 'eglot--lsp-item item
proxy))
proxy))
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- emacs-29 e3be0dbf85c: Eglot: display completion label when safe,
João Távora <=