emacs-diffs
[Top][All Lists]
Advanced

[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))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]