add s:get_active_sources_for_buffer()

This commit is contained in:
Prabir Shrestha
2019-02-10 18:11:30 -08:00
parent d01f7845d5
commit 8451a8353b

View File

@@ -22,27 +22,33 @@ endfunction
function! s:setup_if_required() abort
if !s:already_setup
" register asyncomplete manager
call asyncomplete#log('initializing asyncomplete manager', g:asyncomplete_manager)
call asyncomplete#log('core', 'initializing asyncomplete manager', g:asyncomplete_manager)
execute 'let s:manager = function("'. g:asyncomplete_manager .'")()'
call asyncomplete#log('initializing asyncomplete manager complete', s:manager['name'])
call asyncomplete#log('core', 'initializing asyncomplete manager complete', s:manager['name'])
" register asyncomplete change manager
for l:change_manager in g:asyncomplete_change_manager
call asyncomplete#log('initializing asyncomplete change manager', l:change_manager)
call asyncomplete#log('core', 'initializing asyncomplete change manager', l:change_manager)
if type(l:change_manager) == type('')
execute 'let s:on_change_manager = function("'. l:change_manager .'")()'
else
let s:on_change_manager = l:change_manager()
endif
if has_key(s:on_change_manager, 'error')
call asyncomplete#log('initializing asyncomplete change manager failed', s:on_change_manager['name'], s:on_change_manager['error'])
call asyncomplete#log('core', 'initializing asyncomplete change manager failed', s:on_change_manager['name'], s:on_change_manager['error'])
else
call s:on_change_manager.register(function('s:on_change'))
call asyncomplete#log('initializing asyncomplete change manager complete', s:on_change_manager['name'])
call asyncomplete#log('core', 'initializing asyncomplete change manager complete', s:on_change_manager['name'])
break
endif
endfor
augroup asyncomplete
autocmd!
autocmd InsertEnter * call s:on_insert_enter()
autocmd InsertLeave * call s:on_insert_leave()
augroup END
doautocmd User asyncomplete_setup
let s:already_setup = 1
endif
@@ -59,7 +65,7 @@ endfunction
function! asyncomplete#register_source(info) abort
if has_key(s:sources, a:info['name'])
call asyncomplete#log('duplicate asyncomplete#register_source', a:info['name'])
call asyncomplete#log('core', 'duplicate asyncomplete#register_source', a:info['name'])
return -1
else
let s:sources[a:info['name']] = a:info
@@ -85,6 +91,57 @@ function! asyncomplete#unregister_source(info_or_server_name) abort
endif
endfunction
function! s:on_change() abort
call asyncomplete#log('on_change', getline('.'), getcurpos())
function! s:on_insert_enter() abort
call s:get_active_sources_for_buffer() " call to cache
endfunction
function! s:on_insert_leave() abort
let s:active_source_names = []
endfunction
function! s:on_change() abort
if mode() isnot# 'i'
return
endif
call asyncomplete#log('core', 'on_change', getline('.'), getcurpos())
endfunction
function! s:get_active_sources_for_buffer() abort
if exists('b:asyncomplete_active_sources')
" active sources were cached for buffer
return b:asyncomplete_active_sources
endif
call asyncomplete#log('core', 'computing active sources for buffer', bufnr('%'))
let b:asyncomplete_active_sources = []
for [l:name, l:info] in items(s:sources)
let l:blacklisted = 0
if has_key(l:info, 'blacklist')
for l:filetype in l:info['blacklist']
if l:filetype == &filetype || l:filetype is# '*'
let l:blacklisted = 1
break
endif
endfor
endif
if l:blacklisted
continue
endif
if has_key(l:info, 'whitelist')
for l:filetype in l:info['whitelist']
if l:filetype == &filetype || l:filetype is# '*'
let b:asyncomplete_active_sources += [l:name]
break
endif
endfor
endif
endfor
call asyncomplete#log('core', 'active source for buffer', bufnr('%'), b:asyncomplete_active_sources)
return b:asyncomplete_active_sources
endfunction