mirror of
https://github.com/dense-analysis/ale.git
synced 2025-12-06 12:44:23 +08:00
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.
224 lines
5.8 KiB
Plaintext
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
|