]> Sergey Matveev's repositories - vim-lsp.git/commitdiff
Add support for a 'documentFormatting' language server
authorAndreas Louv <andreas@louv.dk>
Wed, 12 Apr 2023 08:08:59 +0000 (10:08 +0200)
committerAndreas Louv <andreas@louv.dk>
Thu, 13 Apr 2023 21:58:31 +0000 (23:58 +0200)
autoload/lsp/buffer.vim
autoload/lsp/lsp.vim
doc/lsp.txt

index fbe0ec3e464e0c9f8f1312cebb081d8ebc14a2e2..68304a5bb84cb8f43b92b1bc997f5ee5d28b1979 100644 (file)
@@ -46,6 +46,7 @@ export def BufLspServerGet(bnr: number, domain: string = null_string): dict<any>
   endif
 
   var SupportedCheckFns = {
+    'documentFormatting': (lspserver) => lspserver.isDocumentFormattingProvider,
   }
 
   if !SupportedCheckFns->has_key(domain)
index 27674f983857e08e010ce41e0241cb0db4205555..d8bf5575b09a53c5b82b610079fa1f632a8563a5 100644 (file)
@@ -831,7 +831,7 @@ export def TextDocFormat(range_args: number, line1: number, line2: number)
     return
   endif
 
-  var lspserver: dict<any> = buf.CurbufGetServerChecked()
+  var lspserver: dict<any> = buf.CurbufGetServerChecked('documentFormatting')
   if lspserver->empty()
     return
   endif
@@ -1055,7 +1055,7 @@ enddef
 
 # Function to use with the 'formatexpr' option.
 export def FormatExpr(): number
-  var lspserver: dict<any> = buf.CurbufGetServerChecked()
+  var lspserver: dict<any> = buf.CurbufGetServerChecked('documentFormatting')
   if lspserver->empty()
     return 1
   endif
index 73adf21050236b5195f9272e20117a0c4c36acda..2ce8a1a589a55532d4d35f1d38ae6eb48cc2a41f 100644 (file)
@@ -1364,6 +1364,38 @@ 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
 >
 #{
+       documentFormatting: true
 }
 <
+
+As shown above the order of when the language servers are being defined is taken
+into account for a given method.  However sometimes the language server that you
+want to use for formatting also reports that it supports other features, in such
+a case you can change the order of language servers, and specify that a given
+language server should be used for a given method.
+
+For example, if you want to use the efm-langserver for formatting, but the
+typescript-language-server for everything else:
+
+       vim9script
+
+       g:LspAddServer([
+               # this language server will be used by default, as it's defined
+               # as the first LSP for 'javascript' and 'typescript'
+               {
+                       filetype: ['javascript', 'typescript'],
+                       path: '/usr/local/bin/typescript-language-server',
+                       args: ['--stdio']
+               },
+               # this language server will be used for documentFormatting
+               {
+                       filetype: ['efm-langserver'],
+                       path: '/usr/local/bin/efm-langserver',
+                       args: [],
+                       features: {
+                               documentFormatting: true
+                       }
+               }
+       ])
+<
 vim:tw=78:ts=8:noet:ft=help:norl: