Skip to content

Commit 6e61308

Browse files
committed
cache adjusted documentation
1 parent e79506f commit 6e61308

File tree

1 file changed

+57
-46
lines changed

1 file changed

+57
-46
lines changed

lsp-completion.el

Lines changed: 57 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -458,52 +458,63 @@ The MARKERS and PREFIX value will be attached to each candidate."
458458

459459
(defun lsp-completion--get-documentation (item)
460460
"Get doc comment for completion ITEM."
461-
(-let* ((resolved (get-text-property 0 'lsp-completion-resolved item))
462-
(item (get-text-property
463-
0
464-
(if resolved
465-
'lsp-completion-item
466-
'lsp-completion-unresolved-item)
467-
item))
468-
((&CompletionItem :detail?
469-
:documentation?)
470-
item))
471-
472-
(unless (or resolved (and detail? documentation?))
473-
(setq item (lsp-completion--resolve item)
474-
resolved t))
475-
476-
(setq detail? (lsp:completion-item-detail? item)
477-
documentation? (lsp:completion-item-documentation? item))
478-
479-
(when (and detail? documentation?)
480-
(cond ((lsp-markup-content? documentation?)
481-
(-let (((&MarkupContent :kind :value) documentation?))
482-
(cond ((and (equal kind "plaintext")
483-
(not (string-match-p (regexp-quote detail?) value)))
484-
(lsp:set-markup-content-value
485-
documentation?
486-
(concat detail?
487-
(if (bound-and-true-p page-break-lines-mode)
488-
"\n \n"
489-
"\n\n")
490-
value)))
491-
((and (equal kind "markdown")
492-
(not (string-match-p (regexp-quote detail?) value)))
493-
(lsp:set-markup-content-value
494-
documentation?
495-
(concat "```\n" detail? "\n```\n---\n" value))))))
496-
497-
((and (stringp documentation?)
498-
(not (string-match-p (regexp-quote detail?) documentation?)))
499-
(setq documentation?
500-
(concat detail?
501-
(if (bound-and-true-p page-break-lines-mode)
502-
"\n \n"
503-
"\n\n")
504-
documentation?)))))
505-
506-
(lsp--render-element documentation?)))
461+
(or (get-text-property 0 'lsp-completion-item-doc item)
462+
(-let* ((unresolved-item (get-text-property 0 'lsp-completion-unresolved-item item))
463+
(has-unresolved-detail (lsp:completion-item-detail? unresolved-item))
464+
(resolved (get-text-property 0 'lsp-completion-resolved item))
465+
(completion-item (if resolved
466+
(get-text-property 0 'lsp-completion-item item)
467+
unresolved-item))
468+
((&CompletionItem :detail?
469+
:documentation?)
470+
completion-item))
471+
472+
(unless (or resolved (and detail? documentation?))
473+
(setq completion-item (get-text-property 0 'lsp-completion-item (lsp-completion--resolve item))
474+
resolved t))
475+
476+
(setq detail? (lsp:completion-item-detail? completion-item)
477+
documentation? (lsp:completion-item-documentation? completion-item))
478+
479+
(let ((doc
480+
(if (and (null has-unresolved-detail) detail? documentation?)
481+
;; detail was resolved, that means the candidate list has no
482+
;; detail, so we may need to prepend it to the documentation
483+
(cond ((lsp-markup-content? documentation?)
484+
(-let (((&MarkupContent :kind :value) documentation?))
485+
(cond ((and (equal kind "plaintext")
486+
(not (string-match-p (regexp-quote detail?) value)))
487+
488+
(lsp--render-string
489+
(concat detail?
490+
(if (bound-and-true-p page-break-lines-mode)
491+
"\n \n"
492+
"\n\n")
493+
value)
494+
kind))
495+
496+
((and (equal kind "markdown")
497+
(not (string-match-p (regexp-quote detail?) value)))
498+
499+
(lsp--render-string
500+
(concat "```\n" detail? "\n```\n---\n" value)
501+
kind)))))
502+
503+
((and (stringp documentation?)
504+
(not (string-match-p (regexp-quote detail?) documentation?)))
505+
506+
(lsp--render-string
507+
(concat detail?
508+
(if (bound-and-true-p page-break-lines-mode)
509+
"\n \n"
510+
"\n\n")
511+
documentation?)
512+
"plaintext")))
513+
514+
(lsp--render-element documentation?))))
515+
516+
(put-text-property 0 (length item) 'lsp-completion-item-doc doc item)
517+
doc))))
507518

508519
(defun lsp-completion--get-context (trigger-characters same-session?)
509520
"Get completion context with provided TRIGGER-CHARACTERS and SAME-SESSION?."

0 commit comments

Comments
 (0)