@@ -346,36 +346,35 @@ Return `nil' when fails to guess prefix."
346346
347347(defun lsp-completion--filter-candidates (items )
348348 " List all possible completions in cached ITEMS with their prefixes."
349- (lsp--while-no-input
350- (--> (let (queries fuz-queries)
351- (-keep (-lambda ((cand &as &plist :label :start-point :score ))
352- (let* ((query (or (plist-get queries start-point)
353- (let ((s (buffer-substring-no-properties
354- start-point (point ))))
355- (setq queries (plist-put queries start-point s))
356- s)))
357- (fuz-query (or (plist-get fuz-queries start-point)
358- (let ((s (lsp-completion--regex-fuz query)))
359- (setq fuz-queries
360- (plist-put fuz-queries start-point s))
361- s)))
362- (label-len (length label))
363- (case-fold-search completion-ignore-case))
364- (when (string-match fuz-query label)
365- (put-text-property 0 label-len 'match-data (match-data ) label)
366- (plist-put cand
367- :sort-score
368- (* (or (lsp-completion--fuz-score query label) 1e-05 )
369- (or score 0.001 )))
370- cand)))
371- items))
372- (if lsp-completion--no-reordering
373- it
374- (sort it (lambda (o1 o2 )
375- (> (plist-get o1 :sort-score )
376- (plist-get o2 :sort-score )))))
377- ; ; TODO: pass additional function to sort the candidates
378- (-map (-rpartial #'plist-get :item ) it))))
349+ (--> (let (queries fuz-queries)
350+ (-keep (-lambda ((cand &as &plist :label :start-point :score ))
351+ (let* ((query (or (plist-get queries start-point)
352+ (let ((s (buffer-substring-no-properties
353+ start-point (point ))))
354+ (setq queries (plist-put queries start-point s))
355+ s)))
356+ (fuz-query (or (plist-get fuz-queries start-point)
357+ (let ((s (lsp-completion--regex-fuz query)))
358+ (setq fuz-queries
359+ (plist-put fuz-queries start-point s))
360+ s)))
361+ (label-len (length label))
362+ (case-fold-search completion-ignore-case))
363+ (when (string-match fuz-query label)
364+ (put-text-property 0 label-len 'match-data (match-data ) label)
365+ (plist-put cand
366+ :sort-score
367+ (* (or (lsp-completion--fuz-score query label) 1e-05 )
368+ (or score 0.001 )))
369+ cand)))
370+ items))
371+ (if lsp-completion--no-reordering
372+ it
373+ (sort it (lambda (o1 o2 )
374+ (> (plist-get o1 :sort-score )
375+ (plist-get o2 :sort-score )))))
376+ ; ; TODO: pass additional function to sort the candidates
377+ (-map (-rpartial #'plist-get :item ) it)))
379378
380379(defconst lsp-completion--kind->symbol
381380 '((1 . text)
@@ -580,7 +579,8 @@ Returns resolved completion item details."
580579 (-map
581580 (lambda (item )
582581 (lsp-completion--make-item item :markers markers :prefix prefix))
583- (lsp-completion--filter-candidates items)))))
582+ (lsp--while-no-input
583+ (lsp-completion--filter-candidates items))))))
584584 (t
585585 (-let* ((resp (lsp-request-while-no-input
586586 " textDocument/completion"
@@ -621,15 +621,16 @@ Returns resolved completion item details."
621621 ((not done?) :incomplete ))
622622 :markers markers
623623 :prefix prefix)
624- result (when-let ((items
625- (or (and done? (cl-second lsp-completion--cache))
624+ result (-map
625+ (lambda (item )
626+ (lsp-completion--make-item item :markers markers :prefix prefix))
627+ ; ; Prevent company from flickering. See #2148.
628+ (lsp--while-no-input
629+ (->> (if (or (and done? (cl-second lsp-completion--cache))
626630 (and lsp-completion-filter-on-incomplete
627- (lsp-completion--to-internal items))
628- items)))
629- (-map
630- (lambda (item )
631- (lsp-completion--make-item item :markers markers :prefix prefix))
632- (lsp-completion--filter-candidates items))))))))
631+ (lsp-completion--to-internal items)))
632+ (lsp-completion--filter-candidates items)
633+ items)))))))))
633634 (:interrupted lsp-completion--last-result)
634635 (`, res (setq lsp-completion--last-result res))))))
635636 (list
0 commit comments