]> Sergey Matveev's repositories - vim-lsp.git/commitdiff
Sort complete items based on `sortText`
authorPeter Lithammer <peter.lithammer@gmail.com>
Thu, 20 Apr 2023 15:13:36 +0000 (17:13 +0200)
committerPeter Lithammer <peter.lithammer@gmail.com>
Thu, 20 Apr 2023 21:30:47 +0000 (23:30 +0200)
With this, complete items should be sorted in the same way as Visual
Studio Code (more or less). Unless the fuzzy matcher is enabled.

Fixes #281

autoload/lsp/completion.vim

index 938e55aa4298c8f58e24497ace8df5b34fe88f69..93a2ad58187e028033bbb1be110cd3d51b766c98 100644 (file)
@@ -255,10 +255,22 @@ export def CompletionReply(lspserver: dict<any>, cItems: any)
       endif
     endif
 
+    # Score is used for sorting.
+    d.score = item->get('sortText')
+    if d.score->empty()
+      d.score = item->get('label', '')
+    endif
+
     d.user_data = item
     completeItems->add(d)
   endfor
 
+  if opt.lspOptions.completionMatcher != 'fuzzy'
+    # Lexographical sort (case-insensitive).
+    completeItems->sort((a, b) =>
+      a.score ==# b.score ? 0 : a.score >? b.score ? 1 : -1)
+  endif
+
   if opt.lspOptions.autoComplete && !lspserver.omniCompletePending
     if completeItems->empty()
       # no matches