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.
This commit is contained in:
parent
5286111ea1
commit
e3be0dbf85
1 changed files with 12 additions and 8 deletions
|
@ -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))
|
||||
|
|
Loading…
Add table
Reference in a new issue