From: Andreas Louv Date: Wed, 12 Apr 2023 08:08:59 +0000 (+0200) Subject: Add support for a 'documentFormatting' language server X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=48df013135db793c71cb098569530230553b846c;p=vim-lsp.git Add support for a 'documentFormatting' language server --- diff --git a/autoload/lsp/buffer.vim b/autoload/lsp/buffer.vim index fbe0ec3..68304a5 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 endif var SupportedCheckFns = { + 'documentFormatting': (lspserver) => lspserver.isDocumentFormattingProvider, } if !SupportedCheckFns->has_key(domain) diff --git a/autoload/lsp/lsp.vim b/autoload/lsp/lsp.vim index 27674f9..d8bf557 100644 --- a/autoload/lsp/lsp.vim +++ b/autoload/lsp/lsp.vim @@ -831,7 +831,7 @@ export def TextDocFormat(range_args: number, line1: number, line2: number) return endif - var lspserver: dict = buf.CurbufGetServerChecked() + var lspserver: dict = 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 = buf.CurbufGetServerChecked() + var lspserver: dict = buf.CurbufGetServerChecked('documentFormatting') if lspserver->empty() return 1 endif diff --git a/doc/lsp.txt b/doc/lsp.txt index 73adf21..2ce8a1a 100644 --- a/doc/lsp.txt +++ b/doc/lsp.txt @@ -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: