Stop creating closure function in global scope by using partials instead

This commit is contained in:
w0rp
2018-08-15 00:20:47 +01:00
parent 5323f000aa
commit 9cdd8b67b2
4 changed files with 170 additions and 141 deletions

View File

@@ -92,7 +92,45 @@ function! ale#hover#HandleLSPResponse(conn_id, response) abort
endif
endfunction
function! s:ShowDetails(linter, buffer, line, column, opt) abort
function! s:OnReady(linter, lsp_details, line, column, opt, ...) abort
let l:buffer = a:lsp_details.buffer
let l:id = a:lsp_details.connection_id
let l:root = a:lsp_details.project_root
let l:Callback = a:linter.lsp is# 'tsserver'
\ ? function('ale#hover#HandleTSServerResponse')
\ : function('ale#hover#HandleLSPResponse')
call ale#lsp#RegisterCallback(l:id, l:Callback)
if a:linter.lsp is# 'tsserver'
let l:column = a:column
let l:message = ale#lsp#tsserver_message#Quickinfo(
\ l:buffer,
\ a:line,
\ l:column
\)
else
" Send a message saying the buffer has changed first, or the
" hover position probably won't make sense.
call ale#lsp#NotifyForChanges(l:id, l:root, l:buffer)
let l:column = min([a:column, len(getbufline(l:buffer, a:line)[0])])
let l:message = ale#lsp#message#Hover(l:buffer, a:line, l:column)
endif
let l:request_id = ale#lsp#Send(l:id, l:message, l:root)
let s:hover_map[l:request_id] = {
\ 'buffer': l:buffer,
\ 'line': a:line,
\ 'column': l:column,
\ 'hover_from_balloonexpr': get(a:opt, 'called_from_balloonexpr', 0),
\}
endfunction
function! s:ShowDetails(linter, buffer, line, column, opt, ...) abort
let l:lsp_details = ale#lsp_linter#StartLSP(a:buffer, a:linter)
if empty(l:lsp_details)
@@ -101,43 +139,12 @@ function! s:ShowDetails(linter, buffer, line, column, opt) abort
let l:id = l:lsp_details.connection_id
let l:root = l:lsp_details.project_root
let l:language_id = l:lsp_details.language_id
function! OnReady(...) abort closure
let l:Callback = a:linter.lsp is# 'tsserver'
\ ? function('ale#hover#HandleTSServerResponse')
\ : function('ale#hover#HandleLSPResponse')
call ale#lsp#RegisterCallback(l:id, l:Callback)
let l:OnReady = function('s:OnReady', [
\ a:linter, l:lsp_details, a:line, a:column, a:opt
\])
if a:linter.lsp is# 'tsserver'
let l:column = a:column
let l:message = ale#lsp#tsserver_message#Quickinfo(
\ a:buffer,
\ a:line,
\ l:column
\)
else
" Send a message saying the buffer has changed first, or the
" hover position probably won't make sense.
call ale#lsp#NotifyForChanges(l:id, l:root, a:buffer)
let l:column = min([a:column, len(getbufline(a:buffer, a:line)[0])])
let l:message = ale#lsp#message#Hover(a:buffer, a:line, l:column)
endif
let l:request_id = ale#lsp#Send(l:id, l:message, l:lsp_details.project_root)
let s:hover_map[l:request_id] = {
\ 'buffer': a:buffer,
\ 'line': a:line,
\ 'column': l:column,
\ 'hover_from_balloonexpr': get(a:opt, 'called_from_balloonexpr', 0),
\}
endfunction
call ale#lsp#WaitForCapability(l:id, l:root, 'hover', function('OnReady'))
call ale#lsp#WaitForCapability(l:id, l:root, 'hover', l:OnReady)
endfunction
" Obtain Hover information for the specified position