1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-02-03 09:50:04 +08:00
SpaceVim/bundle/deoplete.nvim/autoload/deoplete/init.vim
2022-10-30 22:29:26 +08:00

302 lines
8.7 KiB
VimL
Vendored

"=============================================================================
" FILE: init.vim
" AUTHOR: Shougo Matsushita <Shougo.Matsu at gmail.com>
" License: MIT license
"=============================================================================
if !exists('s:is_handler_enabled')
let s:is_handler_enabled = 0
endif
function! deoplete#init#_is_handler_enabled() abort
return s:is_handler_enabled
endfunction
function! deoplete#init#_initialize() abort
if exists('g:deoplete#_initialized')
return 1
endif
let g:deoplete#_initialized = v:false
call deoplete#init#_custom_variables()
call deoplete#custom#_update_cache()
call s:init_internal_variables()
" For context_filetype check
silent! call context_filetype#get()
if deoplete#init#_channel()
return 1
endif
call deoplete#mapping#_init()
endfunction
function! deoplete#init#_channel() abort
if !exists('g:deoplete#_serveraddr')
return 1
endif
let python3 = expand(get(g:, 'python3_host_prog', 'python3'), 1)
if !executable(python3)
call deoplete#util#print_error(
\ string(python3) . ' is not executable.')
call deoplete#util#print_error(
\ 'You need to set g:python3_host_prog.')
endif
if has('nvim') && !has('nvim-0.3.0')
call deoplete#util#print_error('deoplete requires nvim 0.3.0+.')
return 1
endif
if !has('nvim') && !has('patch-8.2.1978')
call deoplete#util#print_error('deoplete requires Vim 8.2.1978+.')
return 1
endif
try
if deoplete#util#has_yarp()
let g:deoplete#_yarp = yarp#py3('deoplete')
call g:deoplete#_yarp.notify('deoplete_init')
else
" rplugin.vim may not be loaded on VimEnter
if !exists('g:loaded_remote_plugins')
runtime! plugin/rplugin.vim
endif
call _deoplete_init()
endif
catch
call deoplete#util#print_error(v:exception)
call deoplete#util#print_error(v:throwpoint)
if !has('python3')
call deoplete#util#print_error(
\ 'deoplete requires Python3 support("+python3").')
endif
if deoplete#init#_python_version_check()
call deoplete#util#print_error('deoplete requires Python 3.6.1+.')
endif
if deoplete#util#has_yarp()
if !exists('*yarp#py3')
call deoplete#util#print_error(
\ 'deoplete requires nvim-yarp plugin.')
endif
else
call deoplete#util#print_error(
\ 'deoplete failed to load. '
\ .'Try the :UpdateRemotePlugins command and restart Neovim. '
\ .'See also :checkhealth.')
endif
return 1
endtry
endfunction
function! deoplete#init#_channel_initialized() abort
return get(g:, 'deoplete#_initialized', v:false)
endfunction
function! deoplete#init#_enable_handler() abort
call deoplete#handler#_init()
let s:is_handler_enabled = 1
endfunction
function! deoplete#init#_disable_handler() abort
augroup deoplete
autocmd!
augroup END
let s:is_handler_enabled = 0
endfunction
function! s:init_internal_variables() abort
call deoplete#init#_prev_completion()
let g:deoplete#_context = {}
let g:deoplete#_recently_used = []
if !exists('g:deoplete#_logging')
let g:deoplete#_logging = {}
endif
unlet! g:deoplete#_initialized
try
let g:deoplete#_serveraddr =
\ deoplete#util#has_yarp() ?
\ neovim_rpc#serveraddr() : v:servername
if g:deoplete#_serveraddr ==# ''
" Use NVIM_LISTEN_ADDRESS
let g:deoplete#_serveraddr = $NVIM_LISTEN_ADDRESS
endif
catch
call deoplete#util#print_error(v:exception)
call deoplete#util#print_error(v:throwpoint)
if !has('python3')
call deoplete#util#print_error(
\ 'deoplete requires Python3 support("+python3").')
endif
if deoplete#util#has_yarp()
" Dummy call is needed to check exists()
silent! call neovim_rpc#serveraddr()
if !exists('*neovim_rpc#serveraddr')
call deoplete#util#print_error(
\ 'deoplete requires vim-hug-neovim-rpc plugin in Vim.')
endif
endif
endtry
endfunction
function! deoplete#init#_custom_variables() abort
if get(g:, 'deoplete#disable_auto_complete', v:false)
call deoplete#custom#option('auto_complete', v:false)
endif
call s:check_custom_option(
\ 'g:deoplete#auto_complete_delay',
\ 'auto_complete_delay')
call s:check_custom_option(
\ 'g:deoplete#auto_refresh_delay',
\ 'auto_refresh_delay')
call s:check_custom_option(
\ 'g:deoplete#camel_case',
\ 'camel_case')
call s:check_custom_option(
\ 'g:deoplete#ignore_case',
\ 'ignore_case')
call s:check_custom_option(
\ 'g:deoplete#ignore_sources',
\ 'ignore_sources')
call s:check_custom_option(
\ 'g:deoplete#keyword_patterns',
\ 'keyword_patterns')
call s:check_custom_option(
\ 'g:deoplete#max_list',
\ 'max_list')
call s:check_custom_option(
\ 'g:deoplete#num_processes',
\ 'num_processes')
call s:check_custom_option(
\ 'g:deoplete#auto_complete_start_length',
\ 'min_pattern_length')
call s:check_custom_option(
\ 'g:deoplete#enable_on_insert_enter',
\ 'on_insert_enter')
call s:check_custom_option(
\ 'g:deoplete#enable_profile',
\ 'profile')
call s:check_custom_option(
\ 'g:deoplete#enable_refresh_always',
\ 'refresh_always')
call s:check_custom_option(
\ 'g:deoplete#skip_chars',
\ 'skip_chars')
call s:check_custom_option(
\ 'g:deoplete#sources',
\ 'sources')
call s:check_custom_option(
\ 'g:deoplete#enable_smart_case',
\ 'smart_case')
call s:check_custom_option(
\ 'g:deoplete#enable_complete_suffix',
\ 'complete_suffix')
call s:check_custom_option(
\ 'g:deoplete#enable_yarp',
\ 'yarp')
" Source variables
call s:check_custom_var('file',
\ 'g:deoplete#file#enable_buffer_path',
\ 'enable_buffer_path')
call s:check_custom_var('omni',
\ 'g:deoplete#omni#input_patterns',
\ 'input_patterns')
call s:check_custom_var('omni',
\ 'g:deoplete#omni#functions',
\ 'functions')
endfunction
function! s:check_custom_var(source_name, old_var, new_var) abort
if !exists(a:old_var)
return
endif
call deoplete#util#print_error(
\ printf('%s is deprecated variable. '.
\ 'Please use deoplete#custom#var("%s", "%s", {value}) instead.',
\ a:old_var, a:source_name, a:new_var))
call deoplete#custom#var(a:source_name, a:new_var, eval(a:old_var))
endfunction
function! s:check_custom_option(old_var, new_var) abort
if !exists(a:old_var)
return
endif
call deoplete#util#print_error(
\ printf('%s is deprecated variable. '.
\ 'Please use deoplete#custom#option("%s", {value}) instead.',
\ a:old_var, a:new_var))
call deoplete#custom#option(a:new_var, eval(a:old_var))
endfunction
function! deoplete#init#_option() abort
return {
\ 'auto_complete': v:true,
\ 'auto_complete_delay': 0,
\ 'auto_complete_popup': 'auto',
\ 'auto_refresh_delay': 20,
\ 'candidate_marks': [],
\ 'overwrite_completeopt': v:true,
\ 'check_stderr': v:true,
\ 'complete_suffix': v:true,
\ 'ignore_sources': {},
\ 'keyword_patterns': {'_': '[a-zA-Z_]\k*'},
\ 'max_list': 500,
\ 'min_pattern_length': 2,
\ 'num_processes': 1,
\ 'nofile_complete_filetypes': ['denite-filter'],
\ 'omni_patterns': {},
\ 'on_insert_enter': v:true,
\ 'on_text_changed_i': v:true,
\ 'prev_completion_mode': 'filter',
\ 'profile': v:false,
\ 'refresh_always': v:true,
\ 'refresh_backspace': v:true,
\ 'skip_chars': ['(', ')'],
\ 'skip_multibyte': v:false,
\ 'sources': {},
\ 'trigger_key': v:char,
\ 'yarp': v:false,
\ }
endfunction
function! deoplete#init#_prev_completion() abort
let g:deoplete#_prev_completion = {
\ 'event': '',
\ 'input': '',
\ 'linenr': -1,
\ 'candidates': [],
\ 'complete_position': -1,
\ 'time': reltime(),
\ }
endfunction
function! deoplete#init#_python_version_check() abort
python3 << EOF
import vim
import sys
vim.vars['deoplete#_python_version_check'] = (
sys.version_info.major,
sys.version_info.minor,
sys.version_info.micro) < (3, 6, 1)
EOF
return get(g:, 'deoplete#_python_version_check', 0)
endfunction
function! deoplete#init#_msgpack_version_check() abort
python3 << EOF
import vim
import msgpack
vim.vars['deoplete#_msgpack_version'] = msgpack.version
vim.vars['deoplete#_msgpack_version_check'] = msgpack.version < (1, 0, 0)
EOF
return get(g:, 'deoplete#_msgpack_version_check', 0)
endfunction