mirror of
https://github.com/dense-analysis/ale.git
synced 2026-01-09 13:02:28 +08:00
Add textDocument/typeDefinition for LSP (#2226)
* Add textDocument/typeDefinition for LSP Doc to spec https://microsoft.github.io/language-server-protocol/specification#textDocument_typeDefinition This works like textDocument/definition but resolves a location of a type of an expression under the cursor. I'm not sure what to do with tsserver though. * Fix passing column to LSP * test_go_to_definition: wording * Add tests for textDocument/typeDefinition * Add docs for textDocument/typeDefinition
This commit is contained in:
@@ -146,6 +146,20 @@ Execute(ale#lsp#message#Definition() should return correct messages):
|
||||
\ ],
|
||||
\ ale#lsp#message#Definition(bufnr(''), 12, 34)
|
||||
|
||||
Execute(ale#lsp#message#TypeDefinition() should return correct messages):
|
||||
AssertEqual
|
||||
\ [
|
||||
\ 0,
|
||||
\ 'textDocument/typeDefinition',
|
||||
\ {
|
||||
\ 'textDocument': {
|
||||
\ 'uri': ale#path#ToURI(g:dir . '/foo/bar.ts'),
|
||||
\ },
|
||||
\ 'position': {'line': 11, 'character': 33},
|
||||
\ }
|
||||
\ ],
|
||||
\ ale#lsp#message#TypeDefinition(bufnr(''), 12, 34)
|
||||
|
||||
Execute(ale#lsp#message#References() should return correct messages):
|
||||
AssertEqual
|
||||
\ [
|
||||
|
||||
@@ -196,7 +196,7 @@ Execute(Other files should be jumped to for definition responses in vsplits too)
|
||||
AssertEqual [3, 7], getpos('.')[1:2]
|
||||
AssertEqual {}, ale#definition#GetMap()
|
||||
|
||||
Execute(tsserver completion requests should be sent):
|
||||
Execute(tsserver definition requests should be sent):
|
||||
runtime ale_linters/typescript/tsserver.vim
|
||||
call setpos('.', [bufnr(''), 2, 5, 0])
|
||||
|
||||
@@ -217,7 +217,7 @@ Execute(tsserver completion requests should be sent):
|
||||
\ g:message_list
|
||||
AssertEqual {'42': {'open_in': 'current-buffer'}}, ale#definition#GetMap()
|
||||
|
||||
Execute(tsserver tab completion requests should be sent):
|
||||
Execute(tsserver tab definition requests should be sent):
|
||||
runtime ale_linters/typescript/tsserver.vim
|
||||
call setpos('.', [bufnr(''), 2, 5, 0])
|
||||
|
||||
@@ -348,7 +348,7 @@ Execute(Definition responses with null response should be handled):
|
||||
|
||||
AssertEqual [], g:expr_list
|
||||
|
||||
Execute(LSP completion requests should be sent):
|
||||
Execute(LSP definition requests should be sent):
|
||||
runtime ale_linters/python/pyls.vim
|
||||
let b:ale_linters = ['pyls']
|
||||
call setpos('.', [bufnr(''), 1, 5, 0])
|
||||
@@ -384,7 +384,43 @@ Execute(LSP completion requests should be sent):
|
||||
|
||||
AssertEqual {'42': {'open_in': 'current-buffer'}}, ale#definition#GetMap()
|
||||
|
||||
Execute(LSP tab completion requests should be sent):
|
||||
Execute(LSP type definition requests should be sent):
|
||||
runtime ale_linters/python/pyls.vim
|
||||
let b:ale_linters = ['pyls']
|
||||
call setpos('.', [bufnr(''), 1, 5, 0])
|
||||
|
||||
ALEGoToTypeDefinition
|
||||
|
||||
" We shouldn't register the callback yet.
|
||||
AssertEqual '''''', string(g:Callback)
|
||||
|
||||
AssertEqual type(function('type')), type(g:WaitCallback)
|
||||
AssertEqual 'typeDefinition', g:capability_checked
|
||||
call call(g:WaitCallback, [g:conn_id, '/foo/bar'])
|
||||
|
||||
AssertEqual
|
||||
\ 'function(''ale#definition#HandleLSPResponse'')',
|
||||
\ string(g:Callback)
|
||||
|
||||
AssertEqual
|
||||
\ [
|
||||
\ [1, 'textDocument/didChange', {
|
||||
\ 'textDocument': {
|
||||
\ 'uri': ale#path#ToURI(expand('%:p')),
|
||||
\ 'version': g:ale_lsp_next_version_id - 1,
|
||||
\ },
|
||||
\ 'contentChanges': [{'text': join(getline(1, '$'), "\n") . "\n"}]
|
||||
\ }],
|
||||
\ [0, 'textDocument/typeDefinition', {
|
||||
\ 'textDocument': {'uri': ale#path#ToURI(expand('%:p'))},
|
||||
\ 'position': {'line': 0, 'character': 2},
|
||||
\ }],
|
||||
\ ],
|
||||
\ g:message_list
|
||||
|
||||
AssertEqual {'42': {'open_in': 'current-buffer'}}, ale#definition#GetMap()
|
||||
|
||||
Execute(LSP tab definition requests should be sent):
|
||||
runtime ale_linters/python/pyls.vim
|
||||
let b:ale_linters = ['pyls']
|
||||
call setpos('.', [bufnr(''), 1, 5, 0])
|
||||
@@ -419,3 +455,39 @@ Execute(LSP tab completion requests should be sent):
|
||||
\ g:message_list
|
||||
|
||||
AssertEqual {'42': {'open_in': 'tab'}}, ale#definition#GetMap()
|
||||
|
||||
Execute(LSP tab type definition requests should be sent):
|
||||
runtime ale_linters/python/pyls.vim
|
||||
let b:ale_linters = ['pyls']
|
||||
call setpos('.', [bufnr(''), 1, 5, 0])
|
||||
|
||||
ALEGoToTypeDefinitionInTab
|
||||
|
||||
" We shouldn't register the callback yet.
|
||||
AssertEqual '''''', string(g:Callback)
|
||||
|
||||
AssertEqual type(function('type')), type(g:WaitCallback)
|
||||
AssertEqual 'typeDefinition', g:capability_checked
|
||||
call call(g:WaitCallback, [g:conn_id, '/foo/bar'])
|
||||
|
||||
AssertEqual
|
||||
\ 'function(''ale#definition#HandleLSPResponse'')',
|
||||
\ string(g:Callback)
|
||||
|
||||
AssertEqual
|
||||
\ [
|
||||
\ [1, 'textDocument/didChange', {
|
||||
\ 'textDocument': {
|
||||
\ 'uri': ale#path#ToURI(expand('%:p')),
|
||||
\ 'version': g:ale_lsp_next_version_id - 1,
|
||||
\ },
|
||||
\ 'contentChanges': [{'text': join(getline(1, '$'), "\n") . "\n"}]
|
||||
\ }],
|
||||
\ [0, 'textDocument/typeDefinition', {
|
||||
\ 'textDocument': {'uri': ale#path#ToURI(expand('%:p'))},
|
||||
\ 'position': {'line': 0, 'character': 2},
|
||||
\ }],
|
||||
\ ],
|
||||
\ g:message_list
|
||||
|
||||
AssertEqual {'42': {'open_in': 'tab'}}, ale#definition#GetMap()
|
||||
|
||||
Reference in New Issue
Block a user