All patches and comments are welcome. Please squash your changes to logical
commits before using git-format-patch and git-send-email to
patches@git.madduck.net.
If you'd read over the Git project's submission guidelines and adhered to them,
I'd be especially grateful.
2 call ale#test#SetDirectory('/testplugin/test')
3 call ale#test#SetFilename('dummy.txt')
5 let g:old_filename = expand('%:p')
8 let g:message_list = []
9 let g:handle_code_action_called = 0
10 let g:code_actions = []
12 let g:capability_checked = ''
13 let g:conn_id = v:null
14 let g:InitCallback = v:null
16 runtime autoload/ale/lsp_linter.vim
17 runtime autoload/ale/lsp.vim
18 runtime autoload/ale/util.vim
19 runtime autoload/ale/rename.vim
20 runtime autoload/ale/code_action.vim
22 function! ale#lsp_linter#StartLSP(buffer, linter, Callback) abort
23 let g:conn_id = ale#lsp#Register('executable', '/foo/bar', '', {})
24 call ale#lsp#MarkDocumentAsOpen(g:conn_id, a:buffer)
26 if a:linter.lsp is# 'tsserver'
27 call ale#lsp#MarkConnectionAsTsserver(g:conn_id)
31 \ 'command': 'foobar',
33 \ 'connection_id': g:conn_id,
34 \ 'project_root': '/foo/bar',
37 let g:InitCallback = {-> ale#lsp_linter#OnInit(a:linter, l:details, a:Callback)}
40 function! ale#lsp#HasCapability(conn_id, capability) abort
41 let g:capability_checked = a:capability
46 function! ale#lsp#RegisterCallback(conn_id, callback) abort
47 let g:Callback = a:callback
50 function! ale#lsp#Send(conn_id, message) abort
51 call add(g:message_list, a:message)
56 function! ale#util#Execute(expr) abort
57 call add(g:expr_list, a:expr)
60 function! ale#code_action#HandleCodeAction(code_action, options) abort
61 let g:handle_code_action_called = 1
62 AssertEqual g:ale_save_hidden || !&hidden, get(a:options, 'should_save', 0)
63 call add(g:code_actions, a:code_action)
66 function! ale#util#Input(message, value) abort
70 call ale#rename#SetMap({
72 \ 'old_name': 'oldName',
73 \ 'new_name': 'aNewName',
78 if g:conn_id isnot v:null
79 call ale#lsp#RemoveConnectionWithID(g:conn_id)
82 call ale#rename#SetMap({})
83 call ale#test#RestoreDirectory()
84 call ale#linter#Reset()
86 unlet! g:capability_checked
96 unlet! g:handle_code_action_called
98 runtime autoload/ale/lsp_linter.vim
99 runtime autoload/ale/lsp.vim
100 runtime autoload/ale/util.vim
101 runtime autoload/ale/rename.vim
102 runtime autoload/ale/code_action.vim
104 Execute(Other messages for the tsserver handler should be ignored):
105 call ale#rename#HandleTSServerResponse(1, {'command': 'foo'})
106 AssertEqual g:handle_code_action_called, 0
108 Execute(Failed rename responses should be handled correctly):
109 call ale#rename#SetMap({3: {'old_name': 'oldName', 'new_name': 'a-test'}})
110 call ale#rename#HandleTSServerResponse(
112 \ {'command': 'rename', 'request_seq': 3}
114 AssertEqual g:handle_code_action_called, 0
116 Given typescript(Some typescript file):
121 Execute(Code actions from tsserver should be handled):
122 call ale#rename#HandleTSServerResponse(1, {
123 \ 'command': 'rename',
129 \ 'file': '/foo/bar/file1.ts',
144 \ 'file': '/foo/bar/file2.ts',
165 \ 'description': 'rename',
168 \ 'fileName': '/foo/bar/file1.ts',
179 \ 'newText': 'aNewName',
184 \ 'fileName': '/foo/bar/file2.ts',
195 \ 'newText': 'aNewName',
204 Execute(Prints a tsserver error message when unsuccessful):
205 call ale#rename#HandleTSServerResponse(1, {
206 \ 'command': 'rename',
208 \ 'success': v:false,
209 \ 'message': 'This symbol cannot be renamed',
212 AssertEqual g:handle_code_action_called, 0
213 AssertEqual ['echom ''Error renaming "oldName" to: "aNewName". ' .
214 \ 'Reason: This symbol cannot be renamed'''], g:expr_list
216 Execute(HandleTSServerResponse does nothing when no changes):
217 call ale#rename#HandleTSServerResponse(1, {
218 \ 'command': 'rename',
226 AssertEqual g:handle_code_action_called, 0
227 AssertEqual ['echom ''Error renaming "oldName" to: "aNewName"'''], g:expr_list
229 Execute(tsserver rename requests should be sent):
230 call ale#rename#SetMap({})
231 call ale#linter#Reset()
233 runtime ale_linters/typescript/tsserver.vim
234 call setpos('.', [bufnr(''), 2, 5, 0])
238 " We shouldn't register the callback yet.
239 AssertEqual '''''', string(g:Callback)
241 AssertEqual type(function('type')), type(g:InitCallback)
242 call g:InitCallback()
244 AssertEqual 'rename', g:capability_checked
246 \ 'function(''ale#rename#HandleTSServerResponse'')',
250 \ ale#lsp#tsserver_message#Change(bufnr('')),
252 \ 'file': expand('%:p'),
256 \ 'findInComments': g:ale_rename_tsserver_find_in_comments,
257 \ 'findInStrings': g:ale_rename_tsserver_find_in_strings,
262 AssertEqual {'42': {'old_name': 'somelongerline', 'new_name': 'a-new-name'}},
263 \ ale#rename#GetMap()
265 Given python(Some Python file):
270 Execute(Code actions from LSP should be handled):
271 call ale#rename#HandleLSPResponse(1, {
275 \ 'file:///foo/bar/file1.ts': [
287 \ 'newText': 'bla123'
297 \ 'description': 'rename',
300 \ 'fileName': '/foo/bar/file1.ts',
311 \ 'newText': 'bla123',
320 Execute(DocumentChanges from LSP should be handled):
321 call ale#rename#HandleLSPResponse(1, {
324 \ 'documentChanges': [
328 \ 'uri': 'file:///foo/bar/file1.ts',
342 \ 'newText': 'bla123',
353 \ 'description': 'rename',
356 \ 'fileName': '/foo/bar/file1.ts',
367 \ 'newText': 'bla123',
376 Execute(Single DocumentChange from LSP should be handled):
377 call ale#rename#HandleLSPResponse(1, {
380 \ 'documentChanges': {
383 \ 'uri': 'file:///foo/bar/file1.ts',
397 \ 'newText': 'bla123',
407 \ 'description': 'rename',
410 \ 'fileName': '/foo/bar/file1.ts',
421 \ 'newText': 'bla123',
429 Execute(LSP should perform no action when no result):
430 call ale#rename#HandleLSPResponse(1, {
434 AssertEqual g:handle_code_action_called, 0
435 AssertEqual ['echom ''No rename result received from server'''], g:expr_list
437 Execute(LSP should perform no action when no changes):
438 call ale#rename#HandleLSPResponse(1, {
443 AssertEqual g:handle_code_action_called, 0
444 AssertEqual ['echom ''No changes received from server'''], g:expr_list
446 Execute(LSP should perform no action when changes is empty):
447 call ale#rename#HandleLSPResponse(1, {
454 AssertEqual g:handle_code_action_called, 0
455 AssertEqual ['echom ''No changes received from server'''], g:expr_list
457 Execute(LSP rename requests should be sent):
458 call ale#rename#SetMap({})
459 runtime ale_linters/python/pylsp.vim
460 let b:ale_linters = ['pylsp']
461 call setpos('.', [bufnr(''), 1, 5, 0])
465 " We shouldn't register the callback yet.
466 AssertEqual '''''', string(g:Callback)
468 AssertEqual type(function('type')), type(g:InitCallback)
469 call g:InitCallback()
471 AssertEqual 'rename', g:capability_checked
473 \ 'function(''ale#rename#HandleLSPResponse'')',
478 \ [1, 'textDocument/didChange', {
480 \ 'uri': ale#path#ToFileURI(expand('%:p')),
481 \ 'version': g:ale_lsp_next_version_id - 1,
483 \ 'contentChanges': [{'text': join(getline(1, '$'), "\n") . "\n"}]
485 \ [0, 'textDocument/rename', {
486 \ 'textDocument': {'uri': ale#path#ToFileURI(expand('%:p'))},
487 \ 'position': {'line': 0, 'character': 2},
488 \ 'newName': 'a-new-name',
493 AssertEqual {'42': {'old_name': 'foo', 'new_name': 'a-new-name'}},
494 \ ale#rename#GetMap()