From 4c39ace3533a31eccdb9afb2e8efef94e3a3bb81 Mon Sep 17 00:00:00 2001
From: Andreas Louv <andreas@louv.dk>
Date: Wed, 12 Apr 2023 10:22:22 +0200
Subject: [PATCH] Add support for a 'completion' language server

---
 autoload/lsp/buffer.vim     | 1 +
 autoload/lsp/completion.vim | 8 ++++----
 doc/lsp.txt                 | 1 +
 3 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/autoload/lsp/buffer.vim b/autoload/lsp/buffer.vim
index 68304a5..8618286 100644
--- a/autoload/lsp/buffer.vim
+++ b/autoload/lsp/buffer.vim
@@ -46,6 +46,7 @@ export def BufLspServerGet(bnr: number, domain: string = null_string): dict<any>
   endif
 
   var SupportedCheckFns = {
+    'completion': (lspserver) => lspserver.isCompletionProvider,
     'documentFormatting': (lspserver) => lspserver.isDocumentFormattingProvider,
   }
 
diff --git a/autoload/lsp/completion.vim b/autoload/lsp/completion.vim
index 5e7848e..b487cb5 100644
--- a/autoload/lsp/completion.vim
+++ b/autoload/lsp/completion.vim
@@ -369,7 +369,7 @@ enddef
 
 # omni complete handler
 def g:LspOmniFunc(findstart: number, base: string): any
-  var lspserver: dict<any> = buf.CurbufGetServerChecked()
+  var lspserver: dict<any> = buf.CurbufGetServerChecked('completion')
   if lspserver->empty()
     return -2
   endif
@@ -428,7 +428,7 @@ enddef
 # Insert mode completion handler. Used when 24x7 completion is enabled
 # (default).
 def LspComplete()
-  var lspserver: dict<any> = buf.CurbufGetServer()
+  var lspserver: dict<any> = buf.CurbufGetServer('completion')
   if lspserver->empty() || !lspserver.running || !lspserver.ready
     return
   endif
@@ -466,7 +466,7 @@ enddef
 
 # Lazy complete documentation handler
 def LspResolve()
-  var lspserver: dict<any> = buf.CurbufGetServerChecked()
+  var lspserver: dict<any> = buf.CurbufGetServerChecked('completion')
   if lspserver->empty()
     return
   endif
@@ -505,7 +505,7 @@ enddef
 
 # complete done handler (LSP server-initiated actions after completion)
 def LspCompleteDone()
-  var lspserver: dict<any> = buf.CurbufGetServerChecked()
+  var lspserver: dict<any> = buf.CurbufGetServerChecked('completion')
   if lspserver->empty()
     return
   endif
diff --git a/doc/lsp.txt b/doc/lsp.txt
index 2ce8a1a..4f373ba 100644
--- a/doc/lsp.txt
+++ b/doc/lsp.txt
@@ -1364,6 +1364,7 @@ By proving the configuration |lsp-cfg-features| it's possible specify which
 servers should be used for a given method.  The following flags are supported
 >
 #{
+	completion: true,
 	documentFormatting: true
 }
 <
-- 
2.51.0