Skip to content

Commit 47b512c

Browse files
committed
Remove completion with no labels and filterText
1 parent ac71048 commit 47b512c

File tree

1 file changed

+67
-69
lines changed

1 file changed

+67
-69
lines changed

Diff for: lsp-completion.el

+67-69
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,7 @@ Returns unresolved completion item detail."
287287

288288
(defvar lsp-completion--cache nil
289289
"Cached candidates for completion at point function.
290-
In the form of plist (prefix-pos items :lsp-items :prefix ...).
290+
In the form of plist (prefix-pos items :prefix ...).
291291
When the completion is incomplete, `items' contains value of :incomplete.")
292292

293293
(defvar lsp-completion--last-result nil
@@ -334,62 +334,49 @@ Return `nil' when fails to guess prefix."
334334

335335
(defun lsp-completion--to-internal (items)
336336
"Convert ITEMS into internal form."
337-
(--> items
338-
(-map (-lambda ((item &as &CompletionItem
339-
:label
340-
:filter-text?
341-
:_emacsStartPoint start-point
342-
:score?))
343-
`( :label ,(or (unless (lsp-falsy? filter-text?) filter-text?) label)
344-
:item ,item
345-
:start-point ,start-point
346-
:score ,score?))
347-
it)))
348-
349-
(cl-defun lsp-completion--filter-candidates (items &key
350-
lsp-items
351-
markers
352-
prefix
353-
&allow-other-keys)
354-
"List all possible completions in cached ITEMS with their prefixes.
355-
We can pass LSP-ITEMS, which will be used when there's no cache.
356-
The MARKERS and PREFIX value will be attached to each candidate."
337+
(-map (-lambda ((item &as &CompletionItem
338+
:label
339+
:filter-text?
340+
:_emacsStartPoint start-point
341+
:score?))
342+
`( :label ,(or filter-text? label)
343+
:item ,item
344+
:start-point ,start-point
345+
:score ,score?))
346+
items))
347+
348+
(defun lsp-completion--filter-candidates (items)
349+
"List all possible completions in cached ITEMS with their prefixes."
357350
(lsp--while-no-input
358-
(->>
359-
(if items
360-
(--> (let (queries fuz-queries)
361-
(-keep (-lambda ((cand &as &plist :label :start-point :score))
362-
(let* ((query (or (plist-get queries start-point)
363-
(let ((s (buffer-substring-no-properties
364-
start-point (point))))
365-
(setq queries (plist-put queries start-point s))
366-
s)))
367-
(fuz-query (or (plist-get fuz-queries start-point)
368-
(let ((s (lsp-completion--regex-fuz query)))
369-
(setq fuz-queries
370-
(plist-put fuz-queries start-point s))
371-
s)))
372-
(label-len (length label))
373-
(case-fold-search completion-ignore-case))
374-
(when (string-match fuz-query label)
375-
(put-text-property 0 label-len 'match-data (match-data) label)
376-
(plist-put cand
377-
:sort-score
378-
(* (or (lsp-completion--fuz-score query label) 1e-05)
379-
(or score 0.001)))
380-
cand)))
381-
items))
382-
(if lsp-completion--no-reordering
383-
it
384-
(sort it (lambda (o1 o2)
385-
(> (plist-get o1 :sort-score)
386-
(plist-get o2 :sort-score)))))
387-
;; TODO: pass additional function to sort the candidates
388-
(-map (-rpartial #'plist-get :item) it))
389-
lsp-items)
390-
(-map (lambda (item) (lsp-completion--make-item item
391-
:markers markers
392-
:prefix prefix))))))
351+
(--> (let (queries fuz-queries)
352+
(-keep (-lambda ((cand &as &plist :label :start-point :score))
353+
(let* ((query (or (plist-get queries start-point)
354+
(let ((s (buffer-substring-no-properties
355+
start-point (point))))
356+
(setq queries (plist-put queries start-point s))
357+
s)))
358+
(fuz-query (or (plist-get fuz-queries start-point)
359+
(let ((s (lsp-completion--regex-fuz query)))
360+
(setq fuz-queries
361+
(plist-put fuz-queries start-point s))
362+
s)))
363+
(label-len (length label))
364+
(case-fold-search completion-ignore-case))
365+
(when (string-match fuz-query label)
366+
(put-text-property 0 label-len 'match-data (match-data) label)
367+
(plist-put cand
368+
:sort-score
369+
(* (or (lsp-completion--fuz-score query label) 1e-05)
370+
(or score 0.001)))
371+
cand)))
372+
items))
373+
(if lsp-completion--no-reordering
374+
it
375+
(sort it (lambda (o1 o2)
376+
(> (plist-get o1 :sort-score)
377+
(plist-get o2 :sort-score)))))
378+
;; TODO: pass additional function to sort the candidates
379+
(-map (-rpartial #'plist-get :item) it))))
393380

394381
(defconst lsp-completion--kind->symbol
395382
'((1 . text)
@@ -561,6 +548,16 @@ Returns resolved completion item details."
561548
(string-lessp label-left label-right)
562549
(string-lessp sort-text-left sort-text-right)))))
563550

551+
(defun lsp-completion--make-items (items markers prefix)
552+
"Make completion candidates for CAPF.
553+
554+
ITEMS are raw LSP CompletionItems, MARKERS are buffer boundary positions
555+
of the PREFIX string."
556+
(-map
557+
(lambda (item)
558+
(lsp-completion--make-item item :markers markers :prefix prefix))
559+
(lsp-completion--filter-candidates items)))
560+
564561
;;;###autoload
565562
(defun lsp-completion-at-point ()
566563
"Get lsp completions."
@@ -589,9 +586,9 @@ Returns resolved completion item details."
589586
((or done? result) result)
590587
((and (not lsp-completion-no-cache)
591588
same-session?
592-
(listp (cl-second lsp-completion--cache)))
593-
(setf result (apply #'lsp-completion--filter-candidates
594-
(cdr lsp-completion--cache))))
589+
(cl-second lsp-completion--cache))
590+
(setf result (pcase-let* ((`(,_ ,items ,markers ,prefix) (cdr lsp-completion--cache)))
591+
(lsp-completion--make-items items markers prefix))))
595592
(t
596593
(-let* ((resp (lsp-request-while-no-input
597594
"textDocument/completion"
@@ -614,7 +611,12 @@ Returns resolved completion item details."
614611
:_emacsStartPoint
615612
(or (lsp-completion--guess-prefix item)
616613
bounds-start)))
617-
it))))
614+
it)
615+
;; remove items with no label or filterText
616+
(-remove
617+
(-lambda ((&CompletionItem :filter-text? :label))
618+
(and (lsp-falsy? filter-text?) (lsp-falsy? label)))
619+
it))))
618620
(markers (list bounds-start (copy-marker (point) t)))
619621
(prefix (buffer-substring-no-properties bounds-start (point)))
620622
(lsp-completion--no-reordering (not lsp-completion-sort-initial-results)))
@@ -625,17 +627,13 @@ Returns resolved completion item details."
625627
((and done? (not (seq-empty-p items)))
626628
(lsp-completion--to-internal items))
627629
((not done?) :incomplete))
628-
:lsp-items nil
629630
:markers markers
630631
:prefix prefix)
631-
result (lsp-completion--filter-candidates
632-
(cond (done?
633-
(cl-second lsp-completion--cache))
634-
(lsp-completion-filter-on-incomplete
635-
(lsp-completion--to-internal items)))
636-
:lsp-items items
637-
:markers markers
638-
:prefix prefix))))))
632+
result (when-let ((items
633+
(or (and done? (cl-second lsp-completion--cache))
634+
(and lsp-completion-filter-on-incomplete
635+
(lsp-completion--to-internal items)))))
636+
(lsp-completion--make-items items markers prefix)))))))
639637
(:interrupted lsp-completion--last-result)
640638
(`,res (setq lsp-completion--last-result res))))))
641639
(list

0 commit comments

Comments
 (0)