Files
ale/test/lsp/test_other_initialize_message_handling.vader
w0rp f90e72ae1f Close #3600 - Implement pull diagnostics in VimL
Implement pull diagnostics in the VimL implementation so ALE is able
to track when servers are busy checking files. Only servers that
support this feature will return diagnostics these ways.
2025-03-27 12:40:11 +00:00

224 lines
5.8 KiB
Plaintext

Before:
runtime autoload/ale/lsp.vim
let g:message_list = []
" Register a fake connection and get it for tests.
call ale#lsp#Register('ale-fake-lsp-server', '/code', '', {})
let b:conn = ale#lsp#GetConnections()['ale-fake-lsp-server:/code']
function! ale#lsp#Send(conn_id, message) abort
call add(g:message_list, a:message)
return 42
endfunction
After:
" Remove the connection with the ID.
call ale#lsp#RemoveConnectionWithID(b:conn.id)
unlet! b:conn
unlet! g:message_list
runtime autoload/ale/lsp.vim
Execute(Messages with no method and capabilities should initialize projects):
call ale#lsp#HandleInitResponse(b:conn, {
\ 'result': {'capabilities': {}},
\})
AssertEqual 1, b:conn.initialized
AssertEqual [[1, 'initialized', {}]], g:message_list
Execute(Other messages should not initialize projects):
call ale#lsp#HandleInitResponse(b:conn, {'method': 'lolwat'})
AssertEqual 0, b:conn.initialized
AssertEqual [], g:message_list
call ale#lsp#HandleInitResponse(b:conn, {'result': {'x': {}}})
AssertEqual 0, b:conn.initialized
AssertEqual [], g:message_list
Execute(Capabilities should be set up correctly):
call ale#lsp#HandleInitResponse(b:conn, {
\ 'jsonrpc': '2.0',
\ 'id': 1,
\ 'result': {
\ 'capabilities': {
\ 'renameProvider': v:true,
\ 'executeCommandProvider': {
\ 'commands': [],
\ },
\ 'hoverProvider': v:true,
\ 'documentSymbolProvider': v:true,
\ 'documentRangeFormattingProvider': v:true,
\ 'codeLensProvider': {
\ 'resolveProvider': v:false
\ },
\ 'referencesProvider': v:true,
\ 'textDocumentSync': 2,
\ 'documentFormattingProvider': v:true,
\ 'codeActionProvider': v:true,
\ 'signatureHelpProvider': {
\ 'triggerCharacters': ['(', ','],
\ },
\ 'completionProvider': {
\ 'triggerCharacters': ['.'],
\ 'resolveProvider': v:false
\ },
\ 'definitionProvider': v:true,
\ 'experimental': {},
\ 'documentHighlightProvider': v:true,
\ 'workspaceSymbolProvider': v:true
\ },
\ },
\})
AssertEqual 1, b:conn.initialized
AssertEqual
\ {
\ 'code_actions': 1,
\ 'completion': 1,
\ 'completion_trigger_characters': ['.'],
\ 'definition': 1,
\ 'did_save': 0,
\ 'filerename': 0,
\ 'hover': 1,
\ 'implementation': 0,
\ 'includeText': 0,
\ 'references': 1,
\ 'rename': 1,
\ 'pull_model': 0,
\ 'symbol_search': 1,
\ 'typeDefinition': 0,
\ },
\ b:conn.capabilities
AssertEqual [[1, 'initialized', {}]], g:message_list
Execute(Disabled capabilities should be recognised correctly):
call ale#lsp#HandleInitResponse(b:conn, {
\ 'jsonrpc': '2.0',
\ 'id': 1,
\ 'result': {
\ 'capabilities': {
\ 'renameProvider': v:false,
\ 'executeCommandProvider': {
\ 'commands': [],
\ },
\ 'hoverProvider': v:false,
\ 'documentSymbolProvider': v:true,
\ 'documentRangeFormattingProvider': v:true,
\ 'codeLensProvider': {
\ 'resolveProvider': v:false
\ },
\ 'referencesProvider': v:false,
\ 'textDocumentSync': 2,
\ 'documentFormattingProvider': v:true,
\ 'codeActionProvider': v:false,
\ 'signatureHelpProvider': {
\ 'triggerCharacters': ['(', ','],
\ },
\ 'definitionProvider': v:false,
\ 'experimental': {},
\ 'documentHighlightProvider': v:true,
\ 'diagnosticProvider': {},
\ },
\ },
\})
AssertEqual 1, b:conn.initialized
AssertEqual
\ {
\ 'code_actions': 0,
\ 'completion': 0,
\ 'completion_trigger_characters': [],
\ 'definition': 0,
\ 'did_save': 0,
\ 'filerename': 0,
\ 'hover': 0,
\ 'implementation': 0,
\ 'includeText': 0,
\ 'references': 0,
\ 'rename': 0,
\ 'pull_model': 0,
\ 'symbol_search': 0,
\ 'typeDefinition': 0,
\ },
\ b:conn.capabilities
AssertEqual [[1, 'initialized', {}]], g:message_list
Execute(Capabilities should be enabled when sent as Dictionaries):
call ale#lsp#HandleInitResponse(b:conn, {
\ 'jsonrpc': '2.0',
\ 'id': 1,
\ 'result': {
\ 'capabilities': {
\ 'renameProvider': {},
\ 'executeCommandProvider': {
\ 'commands': [],
\ },
\ 'hoverProvider': {},
\ 'documentSymbolProvider': v:true,
\ 'documentRangeFormattingProvider': v:true,
\ 'codeLensProvider': {
\ 'resolveProvider': v:false
\ },
\ 'completionProvider': {
\ 'triggerCharacters': ['.'],
\ 'resolveProvider': v:false
\ },
\ 'referencesProvider': {},
\ 'textDocumentSync': {
\ 'save': {
\ 'includeText': v:true
\ }
\ },
\ 'documentFormattingProvider': v:true,
\ 'codeActionProvider': v:true,
\ 'signatureHelpProvider': {
\ 'triggerCharacters': ['(', ','],
\ },
\ 'definitionProvider': {},
\ 'typeDefinitionProvider': {},
\ 'implementationProvider': {},
\ 'experimental': {},
\ 'documentHighlightProvider': v:true,
\ 'diagnosticProvider': {
\ 'interFileDependencies': v:false,
\ },
\ 'workspaceSymbolProvider': {}
\ },
\ },
\})
AssertEqual 1, b:conn.initialized
AssertEqual
\ {
\ 'code_actions': 1,
\ 'completion': 1,
\ 'completion_trigger_characters': ['.'],
\ 'definition': 1,
\ 'did_save': 1,
\ 'filerename': 0,
\ 'hover': 1,
\ 'implementation': 1,
\ 'includeText': 1,
\ 'references': 1,
\ 'rename': 1,
\ 'pull_model': 1,
\ 'symbol_search': 1,
\ 'typeDefinition': 1,
\ },
\ b:conn.capabilities
AssertEqual [[1, 'initialized', {}]], g:message_list
Execute(Results that are not dictionaries should be handled correctly):
call ale#lsp#HandleInitResponse(b:conn, {
\ 'jsonrpc': '2.0',
\ 'id': 1,
\ 'result': v:null,
\})
AssertEqual [], g:message_list