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/filerename.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 Assert get(a:options, 'should_save')
63 call add(g:code_actions, a:code_action)
66 function! ale#util#Input(message, value, completion) abort
70 call ale#filerename#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#filerename#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/filerename.vim
102 runtime autoload/ale/code_action.vim
104 Execute(Other messages for the tsserver handler should be ignored):
105 call ale#filerename#HandleTSServerResponse(1, {'command': 'foo'})
106 AssertEqual g:handle_code_action_called, 0
108 Execute(Failed file rename responses should be handled correctly):
109 call ale#filerename#SetMap({3: {'old_name': 'oldName', 'new_name': 'a-test'}})
110 call ale#filerename#HandleTSServerResponse(
112 \ {'command': 'getEditsForFileRename', '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#filerename#HandleTSServerResponse(1, {
123 \ 'command': 'getEditsForFileRename',
126 \ 'type': 'response',
130 \ 'fileName': '/foo/bar/file1.tsx',
133 \ 'end': {'offset': 55, 'line': 22},
134 \ 'newText': './file2',
135 \ 'start': {'offset': 34, 'line': 22},
145 \ 'description': 'filerename',
148 \ 'fileName': '/foo/bar/file1.tsx',
151 \ 'end': {'offset': 55, 'line': 22},
152 \ 'newText': './file2',
153 \ 'start': {'offset': 34, 'line': 22},
162 Execute(HandleTSServerResponse does nothing when no data in filerename_map):
163 call ale#filerename#HandleTSServerResponse(1, {
164 \ 'command': 'getEditsForFileRename',
170 AssertEqual g:handle_code_action_called, 0
172 Execute(Prints a tsserver error message when unsuccessful):
173 call ale#filerename#HandleTSServerResponse(1, {
174 \ 'command': 'getEditsForFileRename',
176 \ 'success': v:false,
177 \ 'message': 'This file cannot be renamed',
180 AssertEqual g:handle_code_action_called, 0
181 AssertEqual ['echom ''Error renaming file "oldName" to "aNewName". ' .
182 \ 'Reason: This file cannot be renamed'''], g:expr_list
184 Execute(Does nothing when no changes):
185 call ale#filerename#HandleTSServerResponse(1, {
186 \ 'command': 'getEditsForFileRename',
192 AssertEqual g:handle_code_action_called, 0
193 AssertEqual ['echom ''No changes while renaming "oldName" to "aNewName"'''], g:expr_list
195 Execute(tsserver file rename requests should be sent):
196 call ale#filerename#SetMap({})
197 call ale#linter#Reset()
199 runtime ale_linters/typescript/tsserver.vim
200 call setpos('.', [bufnr(''), 2, 5, 0])
204 " We shouldn't register the callback yet.
205 AssertEqual '''''', string(g:Callback)
207 AssertEqual type(function('type')), type(g:InitCallback)
208 call g:InitCallback()
210 AssertEqual 'filerename', g:capability_checked
212 \ 'function(''ale#filerename#HandleTSServerResponse'')',
216 \ ale#lsp#tsserver_message#Change(bufnr('')),
217 \ [0, 'ts@getEditsForFileRename', {
218 \ 'oldFilePath': expand('%:p'),
219 \ 'newFilePath': 'a-new-name',
223 AssertEqual {'42': {'old_name': expand('%:p'), 'new_name': 'a-new-name'}},
224 \ ale#filerename#GetMap()