diff --git a/autoload/ale/completion.vim b/autoload/ale/completion.vim index 157cac36..9baf29fd 100644 --- a/autoload/ale/completion.vim +++ b/autoload/ale/completion.vim @@ -480,7 +480,7 @@ function! s:OnReady(linter, lsp_details, ...) abort \ b:ale_completion_info.line, \ min([ \ b:ale_completion_info.line_length, - \ b:ale_completion_info.column, + \ b:ale_completion_info.column + 1, \ ]), \ ale#completion#GetTriggerCharacter(&filetype, b:ale_completion_info.prefix), \) diff --git a/autoload/ale/lsp/message.vim b/autoload/ale/lsp/message.vim index 9fffb83a..a9921478 100644 --- a/autoload/ale/lsp/message.vim +++ b/autoload/ale/lsp/message.vim @@ -3,6 +3,10 @@ " " Messages in this movie will be returned in the format " [is_notification, method_name, params?] +" +" All functions which accept line and column arguments expect them to be 1-based +" (the same format as being returned by getcurpos() and friends), those then +" will be converted to 0-based as specified by LSP. let g:ale_lsp_next_version_id = 1 " The LSP protocols demands that we send every change to a document, including @@ -98,7 +102,7 @@ function! ale#lsp#message#Completion(buffer, line, column, trigger_character) ab \ 'textDocument': { \ 'uri': ale#path#ToURI(expand('#' . a:buffer . ':p')), \ }, - \ 'position': {'line': a:line - 1, 'character': a:column}, + \ 'position': {'line': a:line - 1, 'character': a:column - 1}, \}] if !empty(a:trigger_character) @@ -116,7 +120,7 @@ function! ale#lsp#message#Definition(buffer, line, column) abort \ 'textDocument': { \ 'uri': ale#path#ToURI(expand('#' . a:buffer . ':p')), \ }, - \ 'position': {'line': a:line - 1, 'character': a:column}, + \ 'position': {'line': a:line - 1, 'character': a:column - 1}, \}] endfunction @@ -125,7 +129,7 @@ function! ale#lsp#message#References(buffer, line, column) abort \ 'textDocument': { \ 'uri': ale#path#ToURI(expand('#' . a:buffer . ':p')), \ }, - \ 'position': {'line': a:line - 1, 'character': a:column}, + \ 'position': {'line': a:line - 1, 'character': a:column - 1}, \ 'context': {'includeDeclaration': v:false}, \}] endfunction @@ -141,7 +145,7 @@ function! ale#lsp#message#Hover(buffer, line, column) abort \ 'textDocument': { \ 'uri': ale#path#ToURI(expand('#' . a:buffer . ':p')), \ }, - \ 'position': {'line': a:line - 1, 'character': a:column}, + \ 'position': {'line': a:line - 1, 'character': a:column - 1}, \}] endfunction diff --git a/test/completion/test_lsp_completion_messages.vader b/test/completion/test_lsp_completion_messages.vader index 130f31b9..f670e186 100644 --- a/test/completion/test_lsp_completion_messages.vader +++ b/test/completion/test_lsp_completion_messages.vader @@ -215,7 +215,7 @@ Execute(The right message should be sent for the initial LSP request): \ }], \ [0, 'textDocument/completion', { \ 'textDocument': {'uri': ale#path#ToURI(expand('%:p'))}, - \ 'position': {'line': 0, 'character': 3}, + \ 'position': {'line': 0, 'character': 2}, \ }], \ ], \ g:message_list @@ -274,7 +274,7 @@ Execute(Two completion requests shouldn't be sent in a row): \ }], \ [0, 'textDocument/completion', { \ 'textDocument': {'uri': ale#path#ToURI(expand('%:p'))}, - \ 'position': {'line': 0, 'character': 3}, + \ 'position': {'line': 0, 'character': 2}, \ }], \ ], \ g:message_list diff --git a/test/lsp/test_lsp_client_messages.vader b/test/lsp/test_lsp_client_messages.vader index 71768ce5..91efb41b 100644 --- a/test/lsp/test_lsp_client_messages.vader +++ b/test/lsp/test_lsp_client_messages.vader @@ -112,7 +112,7 @@ Execute(ale#lsp#message#Completion() should return correct messages): \ 'textDocument': { \ 'uri': ale#path#ToURI(g:dir . '/foo/bar.ts'), \ }, - \ 'position': {'line': 11, 'character': 34}, + \ 'position': {'line': 11, 'character': 33}, \ } \ ], \ ale#lsp#message#Completion(bufnr(''), 12, 34, '') @@ -126,7 +126,7 @@ Execute(ale#lsp#message#Completion() should return correct messages with a trigg \ 'textDocument': { \ 'uri': ale#path#ToURI(g:dir . '/foo/bar.ts'), \ }, - \ 'position': {'line': 11, 'character': 34}, + \ 'position': {'line': 11, 'character': 33}, \ 'context': {'triggerKind': 2, 'triggerCharacter': '.'}, \ } \ ], @@ -141,7 +141,7 @@ Execute(ale#lsp#message#Definition() should return correct messages): \ 'textDocument': { \ 'uri': ale#path#ToURI(g:dir . '/foo/bar.ts'), \ }, - \ 'position': {'line': 11, 'character': 34}, + \ 'position': {'line': 11, 'character': 33}, \ } \ ], \ ale#lsp#message#Definition(bufnr(''), 12, 34) @@ -155,7 +155,7 @@ Execute(ale#lsp#message#References() should return correct messages): \ 'textDocument': { \ 'uri': ale#path#ToURI(g:dir . '/foo/bar.ts'), \ }, - \ 'position': {'line': 11, 'character': 34}, + \ 'position': {'line': 11, 'character': 33}, \ 'context': {'includeDeclaration': v:false}, \ } \ ], @@ -181,7 +181,7 @@ Execute(ale#lsp#message#Hover() should return correct messages): \ 'textDocument': { \ 'uri': ale#path#ToURI(g:dir . '/foo/bar.ts'), \ }, - \ 'position': {'line': 11, 'character': 34}, + \ 'position': {'line': 11, 'character': 33}, \ } \ ], \ ale#lsp#message#Hover(bufnr(''), 12, 34) diff --git a/test/test_find_references.vader b/test/test_find_references.vader index 14b5e37b..a8233ef0 100644 --- a/test/test_find_references.vader +++ b/test/test_find_references.vader @@ -270,7 +270,7 @@ Execute(LSP reference requests should be sent): \ }], \ [0, 'textDocument/references', { \ 'textDocument': {'uri': ale#path#ToURI(expand('%:p'))}, - \ 'position': {'line': 0, 'character': 3}, + \ 'position': {'line': 0, 'character': 2}, \ 'context': {'includeDeclaration': v:false}, \ }], \ ], diff --git a/test/test_go_to_definition.vader b/test/test_go_to_definition.vader index 4e4e2552..62dbc599 100644 --- a/test/test_go_to_definition.vader +++ b/test/test_go_to_definition.vader @@ -377,7 +377,7 @@ Execute(LSP completion requests should be sent): \ }], \ [0, 'textDocument/definition', { \ 'textDocument': {'uri': ale#path#ToURI(expand('%:p'))}, - \ 'position': {'line': 0, 'character': 3}, + \ 'position': {'line': 0, 'character': 2}, \ }], \ ], \ g:message_list @@ -413,7 +413,7 @@ Execute(LSP tab completion requests should be sent): \ }], \ [0, 'textDocument/definition', { \ 'textDocument': {'uri': ale#path#ToURI(expand('%:p'))}, - \ 'position': {'line': 0, 'character': 3}, + \ 'position': {'line': 0, 'character': 2}, \ }], \ ], \ g:message_list