Add -relative option to ALESymbolSearch (#2255)

* Add `-relative` option to ALESymbolSearch
* Document the `-relative` option for ALEFindReferences and ALESymbolSearch
This commit is contained in:
Alvin Chan
2019-02-08 11:43:04 -08:00
committed by w0rp
parent d21581016e
commit 1fb0de2a8e
3 changed files with 35 additions and 9 deletions

View File

@@ -52,12 +52,12 @@ function! ale#symbol#HandleLSPResponse(conn_id, response) abort
if empty(l:item_list)
call ale#util#Execute('echom ''No symbols found.''')
else
call ale#preview#ShowSelection(l:item_list)
call ale#preview#ShowSelection(l:item_list, l:options)
endif
endif
endfunction
function! s:OnReady(linter, lsp_details, query, ...) abort
function! s:OnReady(linter, lsp_details, query, options, ...) abort
let l:buffer = a:lsp_details.buffer
" If we already made a request, stop here.
@@ -76,34 +76,42 @@ function! s:OnReady(linter, lsp_details, query, ...) abort
call setbufvar(l:buffer, 'ale_symbol_request_made', 1)
let s:symbol_map[l:request_id] = {
\ 'buffer': l:buffer,
\ 'use_relative_paths': has_key(a:options, 'use_relative_paths') ? a:options.use_relative_paths : 0
\}
endfunction
function! s:Search(linter, buffer, query) abort
function! s:Search(linter, buffer, query, options) abort
let l:lsp_details = ale#lsp_linter#StartLSP(a:buffer, a:linter)
if !empty(l:lsp_details)
call ale#lsp#WaitForCapability(
\ l:lsp_details.connection_id,
\ 'symbol_search',
\ function('s:OnReady', [a:linter, l:lsp_details, a:query]),
\ function('s:OnReady', [a:linter, l:lsp_details, a:query, a:options]),
\)
endif
endfunction
function! ale#symbol#Search(query) abort
if type(a:query) isnot v:t_string || empty(a:query)
function! ale#symbol#Search(args) abort
let [l:opts, l:query] = ale#args#Parse(['relative'], a:args)
if empty(l:query)
throw 'A non-empty string must be provided!'
endif
let l:buffer = bufnr('')
let l:options = {}
if has_key(l:opts, 'relative')
let l:options.use_relative_paths = 1
endif
" Set a flag so we only make one request.
call setbufvar(l:buffer, 'ale_symbol_request_made', 0)
for l:linter in ale#linter#Get(getbufvar(l:buffer, '&filetype'))
if !empty(l:linter.lsp) && l:linter.lsp isnot# 'tsserver'
call s:Search(l:linter, l:buffer, a:query)
call s:Search(l:linter, l:buffer, l:query, l:options)
endif
endfor
endfunction