Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

FZF support #211

Closed
wants to merge 21 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 40 additions & 11 deletions autoload/lsp.vim
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
let s:enabled = 0
let s:already_setup = 0
let s:code_lens_tmr = 0
let s:servers = {} " { lsp_id, server_info, init_callbacks, init_result, buffers: { path: { changed_tick } }


let s:notification_callbacks = [] " { name, callback }

" do nothing, place it here only to avoid the message
Expand Down Expand Up @@ -65,22 +67,22 @@ endfunction

function! s:server_status(server_name) abort
if !has_key(s:servers, a:server_name)
return "unknown server"
return 'unknown server'
endif
let l:server = s:servers[a:server_name]
if has_key(l:server, 'exited')
return "exited"
return 'exited'
endif
if has_key(l:server, 'init_callbacks')
return "starting"
return 'starting'
endif
if has_key(l:server, 'failed')
return "failed"
return 'failed'
endif
if has_key(l:server, 'init_result')
return "running"
return 'running'
endif
return "not running"
return 'not running'
endfunction

" Returns the current status of all servers (if called with no arguments) or
Expand Down Expand Up @@ -135,7 +137,7 @@ function! s:register_events() abort
autocmd BufReadPost * call s:on_text_document_did_open()
autocmd BufWritePost * call s:on_text_document_did_save()
autocmd BufWinLeave * call s:on_text_document_did_close()
autocmd InsertLeave * call s:on_text_document_did_change()
autocmd InsertLeave,TextChanged * call s:on_text_document_did_change()
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

would need to debounce TextChanged as it could slow down vim due to did change. When we implement incremental change it would be easier. But there is a PR currently for it at #188

autocmd CursorMoved * call s:on_cursor_moved()
augroup END
call s:on_text_document_did_open()
Expand All @@ -148,28 +150,55 @@ function! s:unregister_events() abort
doautocmd User lsp_unregister_server
endfunction

function! s:on_update(...)
call lsp#ui#vim#code_lens_clear()
call lsp#ui#vim#code_lens()
endfunction

function! s:update_code_lens(time)
if !get(g:, 'lsp_auto_show_codelens')
return
endif
if !empty(timer_info(s:code_lens_tmr))
call timer_stop(s:code_lens_tmr)
endif
let s:code_lens_tmr = timer_start(a:time, function('s:on_update'))
endfunction

function! s:on_text_document_did_open() abort
let l:buf = bufnr('%')
call lsp#log('s:on_text_document_did_open()', l:buf, &filetype, getcwd(), lsp#utils#get_buffer_uri(l:buf))
for l:server_name in lsp#get_whitelisted_servers()
let l:servers = lsp#get_whitelisted_servers()
for l:server_name in l:servers
call s:ensure_flush(l:buf, l:server_name, function('s:Noop'))
endfor
call s:update_code_lens(200)
endfunction

function! s:on_text_document_did_save() abort
call lsp#log('s:on_text_document_did_save()', bufnr('%'))
let l:buf = bufnr('%')
for l:server_name in lsp#get_whitelisted_servers()
let l:servers = lsp#get_whitelisted_servers()
for l:server_name in l:servers
call s:ensure_flush(bufnr('%'), l:server_name, {result->s:call_did_save(l:buf, l:server_name, result, function('s:Noop'))})
endfor
if empty(filter(l:servers, 'lsp#capabilities#has_code_lens_provider(v:val)'))
return
endif
call s:update_code_lens(500)
endfunction

function! s:on_text_document_did_change() abort
call lsp#log('s:on_text_document_did_change()', bufnr('%'))
let l:buf = bufnr('%')
for l:server_name in lsp#get_whitelisted_servers()
let l:servers = lsp#get_whitelisted_servers()
for l:server_name in l:servers
call s:ensure_flush(bufnr('%'), l:server_name, function('s:Noop'))
endfor
if empty(filter(l:servers, 'lsp#capabilities#has_code_lens_provider(v:val)'))
return
endif
call s:update_code_lens(500)
endfunction

function! s:on_cursor_moved() abort
Expand Down Expand Up @@ -621,7 +650,7 @@ function! lsp#get_text_document_identifier(...) abort
return { 'uri': lsp#utils#get_buffer_uri(l:buf) }
endfunction

function! lsp#get_position(...) abort
function! lsp#get_position() abort
return { 'line': line('.') - 1, 'character': col('.') -1 }
endfunction

Expand Down
63 changes: 63 additions & 0 deletions autoload/lsp/capabilities.vim
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,16 @@ function! s:has_bool_provider(server_name, provider) abort
return !empty(l:capabilities) && has_key(l:capabilities, a:provider) && l:capabilities[a:provider] == v:true
endfunction

function! s:has_command_provider(server_name, command) abort
let l:capabilities = lsp#get_server_capabilities(a:server_name)
return !empty(l:capabilities) &&
\ has_key(l:capabilities, 'executeCommandProvider') &&
\ type(l:capabilities['executeCommandProvider']) == type({}) &&
\ has_key(l:capabilities['executeCommandProvider'], 'commands') &&
\ type(l:capabilities['executeCommandProvider']['commands']) == type([]) &&
\ index(l:capabilities['executeCommandProvider']['commands'], a:command) != -1
endfunction

function! lsp#capabilities#has_definition_provider(server_name) abort
return s:has_bool_provider(a:server_name, 'definitionProvider')
endfunction
Expand Down Expand Up @@ -47,6 +57,59 @@ function! lsp#capabilities#has_type_definition_provider(server_name) abort
return s:has_bool_provider(a:server_name, 'typeDefinitionProvider')
endfunction

function! lsp#capabilities#has_document_highlight_provider(server_name) abort
return s:has_bool_provider(a:server_name, 'documentHighlightProvider')
endfunction

function! lsp#capabilities#has_signature_help_provider(server_name) abort
let l:capabilities = lsp#get_server_capabilities(a:server_name)
try
return !empty(l:capabilities['signatureHelpProvider']['triggerCharacters'])
catch
return 0
endtry
endfunction

function! lsp#capabilities#has_code_lens_provider(server_name) abort
let l:capabilities = lsp#get_server_capabilities(a:server_name)
try
return has_key(l:capabilities, 'codeLensProvider')
catch
return 0
endtry
endfunction

function! lsp#capabilities#has_code_lens_resolve_provider(server_name) abort
let l:capabilities = lsp#get_server_capabilities(a:server_name)
try
return l:capabilities['codeLensProvider']['resolveProvider'] == v:true
catch
return 0
endtry
endfunction

function! lsp#capabilities#has_document_link_provider(server_name) abort
let l:capabilities = lsp#get_server_capabilities(a:server_name)
try
return has_key(l:capabilities, 'documentLinkProvider')
catch
return 0
endtry
endfunction

function! lsp#capabilities#has_document_link_resolve_provider(server_name) abort
let l:capabilities = lsp#get_server_capabilities(a:server_name)
try
return l:capabilities['documentLinkProvider']['resolveProvider'] == v:true
catch
return 0
endtry
endfunction

function! lsp#capabilities#has_execute_command_provider(server_name, command) abort
return s:has_command_provider(a:server_name, a:command)
endfunction

" [supports_did_save (boolean), { 'includeText': boolean }]
function! lsp#capabilities#get_text_document_save_registration_options(server_name) abort
let l:capabilities = lsp#get_server_capabilities(a:server_name)
Expand Down
Loading