Fix #2515 - Send client capabilities to LSP servers

This commit is contained in:
w0rp 2019-05-20 09:40:06 +01:00
parent 9d908ecc66
commit 4ee28d3129
No known key found for this signature in database
GPG Key ID: 0FC1ECAA8C81CD83
4 changed files with 126 additions and 7 deletions

View File

@ -321,7 +321,69 @@ endfunction
function! s:SendInitMessage(conn) abort function! s:SendInitMessage(conn) abort
let [l:init_id, l:init_data] = ale#lsp#CreateMessageData( let [l:init_id, l:init_data] = ale#lsp#CreateMessageData(
\ ale#lsp#message#Initialize(a:conn.root, a:conn.init_options), \ ale#lsp#message#Initialize(
\ a:conn.root,
\ a:conn.init_options,
\ {
\ 'workspace': {
\ 'applyEdit': v:false,
\ 'didChangeConfiguration': {
\ 'dynamicRegistration': v:false,
\ },
\ 'symbol': {
\ 'dynamicRegistration': v:false,
\ },
\ 'workspaceFolders': v:false,
\ 'configuration': v:false,
\ },
\ 'textDocument': {
\ 'synchronization': {
\ 'dynamicRegistration': v:false,
\ 'willSave': v:false,
\ 'willSaveWaitUntil': v:false,
\ 'didSave': v:true,
\ },
\ 'completion': {
\ 'dynamicRegistration': v:false,
\ 'completionItem': {
\ 'snippetSupport': v:false,
\ 'commitCharactersSupport': v:false,
\ 'documentationFormat': ['plaintext'],
\ 'deprecatedSupport': v:false,
\ 'preselectSupport': v:false,
\ },
\ 'contextSupport': v:false,
\ },
\ 'hover': {
\ 'dynamicRegistration': v:false,
\ 'contentFormat': ['plaintext'],
\ },
\ 'references': {
\ 'dynamicRegistration': v:false,
\ },
\ 'documentSymbol': {
\ 'dynamicRegistration': v:false,
\ 'hierarchicalDocumentSymbolSupport': v:false,
\ },
\ 'definition': {
\ 'dynamicRegistration': v:false,
\ 'linkSupport': v:false,
\ },
\ 'typeDefinition': {
\ 'dynamicRegistration': v:false,
\ },
\ 'publishDiagnostics': {
\ 'relatedInformation': v:true,
\ },
\ 'codeAction': {
\ 'dynamicRegistration': v:false,
\ },
\ 'rename': {
\ 'dynamicRegistration': v:false,
\ },
\ },
\ },
\ ),
\) \)
let a:conn.init_request_id = l:init_id let a:conn.init_request_id = l:init_id
call s:SendMessageData(a:conn, l:init_data) call s:SendMessageData(a:conn, l:init_data)

View File

@ -28,14 +28,13 @@ function! ale#lsp#message#GetNextVersionID() abort
return l:id return l:id
endfunction endfunction
function! ale#lsp#message#Initialize(root_path, initialization_options) abort function! ale#lsp#message#Initialize(root_path, options, capabilities) abort
" TODO: Define needed capabilities.
" NOTE: rootPath is deprecated in favour of rootUri " NOTE: rootPath is deprecated in favour of rootUri
return [0, 'initialize', { return [0, 'initialize', {
\ 'processId': getpid(), \ 'processId': getpid(),
\ 'rootPath': a:root_path, \ 'rootPath': a:root_path,
\ 'capabilities': {}, \ 'capabilities': a:capabilities,
\ 'initializationOptions': a:initialization_options, \ 'initializationOptions': a:options,
\ 'rootUri': ale#path#ToURI(a:root_path), \ 'rootUri': ale#path#ToURI(a:root_path),
\}] \}]
endfunction endfunction

View File

@ -20,7 +20,7 @@ Execute(ale#lsp#message#Initialize() should return correct messages):
\ 'rootUri': 'file:///foo/bar', \ 'rootUri': 'file:///foo/bar',
\ } \ }
\ ], \ ],
\ ale#lsp#message#Initialize('/foo/bar', {'foo': 'bar'}) \ ale#lsp#message#Initialize('/foo/bar', {'foo': 'bar'}, {})
Execute(ale#lsp#message#Initialized() should return correct messages): Execute(ale#lsp#message#Initialized() should return correct messages):
AssertEqual [1, 'initialized', {}], ale#lsp#message#Initialized() AssertEqual [1, 'initialized', {}], ale#lsp#message#Initialized()

View File

@ -138,9 +138,67 @@ Before:
\ 'params': { \ 'params': {
\ 'initializationOptions': {}, \ 'initializationOptions': {},
\ 'rootUri': ale#path#ToURI(a:root), \ 'rootUri': ale#path#ToURI(a:root),
\ 'capabilities': {},
\ 'rootPath': a:root, \ 'rootPath': a:root,
\ 'processId': getpid(), \ 'processId': getpid(),
\ 'capabilities': {
\ 'workspace': {
\ 'applyEdit': v:false,
\ 'didChangeConfiguration': {
\ 'dynamicRegistration': v:false,
\ },
\ 'symbol': {
\ 'dynamicRegistration': v:false,
\ },
\ 'workspaceFolders': v:false,
\ 'configuration': v:false,
\ },
\ 'textDocument': {
\ 'synchronization': {
\ 'dynamicRegistration': v:false,
\ 'willSave': v:false,
\ 'willSaveWaitUntil': v:false,
\ 'didSave': v:true,
\ },
\ 'completion': {
\ 'dynamicRegistration': v:false,
\ 'completionItem': {
\ 'snippetSupport': v:false,
\ 'commitCharactersSupport': v:false,
\ 'documentationFormat': ['plaintext'],
\ 'deprecatedSupport': v:false,
\ 'preselectSupport': v:false,
\ },
\ 'contextSupport': v:false,
\ },
\ 'hover': {
\ 'dynamicRegistration': v:false,
\ 'contentFormat': ['plaintext'],
\ },
\ 'references': {
\ 'dynamicRegistration': v:false,
\ },
\ 'documentSymbol': {
\ 'dynamicRegistration': v:false,
\ 'hierarchicalDocumentSymbolSupport': v:false,
\ },
\ 'definition': {
\ 'dynamicRegistration': v:false,
\ 'linkSupport': v:false,
\ },
\ 'typeDefinition': {
\ 'dynamicRegistration': v:false,
\ },
\ 'publishDiagnostics': {
\ 'relatedInformation': v:true,
\ },
\ 'codeAction': {
\ 'dynamicRegistration': v:false,
\ },
\ 'rename': {
\ 'dynamicRegistration': v:false,
\ },
\ },
\ },
\ }, \ },
\ }, \ },
\ ], \ ],