scriptencoding utf-8 if exists('g:did_coc_loaded') || v:version < 800 finish endif function! s:checkVersion() abort let l:unsupported = 0 if get(g:, 'coc_disable_startup_warning', 0) != 1 if has('nvim') let l:unsupported = !has('nvim-0.4.0') else let l:unsupported = !has('patch-8.1.1719') endif if l:unsupported == 1 echohl Error echom "coc.nvim requires at least Vim 8.1.1719 or Neovim 0.4.0, but you're using an older version." echom "Please upgrade your (neo)vim." echom "You can add this to your vimrc to avoid this message:" echom " let g:coc_disable_startup_warning = 1" echom "Note that some features may error out or behave incorrectly." echom "Please do not report bugs unless you're using at least Vim 8.1.1719 or Neovim 0.4.0." echohl None sleep 2 else if !has('nvim-0.5.0') && !has('patch-8.2.0750') echohl WarningMsg echom "coc.nvim works best on vim >= 8.2.0750 and neovim >= 0.5.0, consider upgrade your vim." echom "You can add this to your vimrc to avoid this message:" echom " let g:coc_disable_startup_warning = 1" echom "Note that some features may behave incorrectly." echohl None sleep 2 elseif !has('nvim') && (!has('job') || !has('popupwin') || !has('textprop')) echohl WarningMsg echom "coc.nvim requires job, popupwin and textprop features of vim, consider recompile your vim." echom "You can add this to your vimrc to avoid this message:" echom " let g:coc_disable_startup_warning = 1" echom "Note that some features may behave incorrectly." echohl None sleep 2 endif endif endif endfunction call s:checkVersion() let g:did_coc_loaded = 1 let g:coc_service_initialized = 0 let s:root = expand(':h:h') let s:is_vim = !has('nvim') let s:is_gvim = s:is_vim && has("gui_running") if get(g:, 'coc_start_at_startup', 1) && !s:is_gvim call coc#rpc#start_server() endif function! CocTagFunc(pattern, flags, info) abort if a:flags !=# 'c' " use standard tag search return v:null endif return coc#rpc#request('getTagList', []) endfunction " Used by popup prompt on vim function! CocPopupCallback(bufnr, arglist) abort if len(a:arglist) == 2 if a:arglist[0] == 'confirm' call coc#rpc#notify('PromptInsert', [a:arglist[1], a:bufnr]) elseif a:arglist[0] == 'exit' execute 'silent! bd! '.a:bufnr "call coc#rpc#notify('PromptUpdate', [a:arglist[1]]) elseif a:arglist[0] == 'change' let text = a:arglist[1] let current = getbufvar(a:bufnr, 'current', '') if text !=# current call setbufvar(a:bufnr, 'current', text) let cursor = term_getcursor(a:bufnr) let info = { \ 'lnum': cursor[0], \ 'col': cursor[1], \ 'line': text, \ 'changedtick': 0 \ } call coc#rpc#notify('CocAutocmd', ['TextChangedI', a:bufnr, info]) endif elseif a:arglist[0] == 'send' call coc#rpc#notify('PromptKeyPress', [a:bufnr, a:arglist[1]]) endif endif endfunction function! CocAction(name, ...) abort if !get(g:, 'coc_service_initialized', 0) throw 'coc.nvim not ready when invoke CocAction "'.a:name.'"' endif return coc#rpc#request(a:name, a:000) endfunction function! CocHasProvider(name) abort return coc#rpc#request('hasProvider', [a:name]) endfunction function! CocActionAsync(name, ...) abort return s:AsyncRequest(a:name, a:000) endfunction function! CocRequest(...) abort return coc#rpc#request('sendRequest', a:000) endfunction function! CocNotify(...) abort return coc#rpc#request('sendNotification', a:000) endfunction function! CocRegisterNotification(id, method, cb) abort call coc#on_notify(a:id, a:method, a:cb) endfunction " Deprecated, use CocRegisterNotification instead function! CocRegistNotification(id, method, cb) abort call coc#on_notify(a:id, a:method, a:cb) endfunction function! CocLocations(id, method, ...) abort let args = [a:id, a:method] + copy(a:000) return coc#rpc#request('findLocations', args) endfunction function! CocLocationsAsync(id, method, ...) abort let args = [a:id, a:method] + copy(a:000) return s:AsyncRequest('findLocations', args) endfunction function! CocRequestAsync(...) return s:AsyncRequest('sendRequest', a:000) endfunction function! s:AsyncRequest(name, args) abort let Cb = empty(a:args)? v:null : a:args[len(a:args) - 1] if type(Cb) == 2 if !coc#rpc#ready() call Cb('service not started', v:null) else call coc#rpc#request_async(a:name, a:args[0:-2], Cb) endif return '' endif call coc#rpc#notify(a:name, a:args) return '' endfunction function! s:CommandList(...) abort let list = coc#rpc#request('commandList', a:000) return join(list, "\n") endfunction function! s:ExtensionList(...) abort let stats = CocAction('extensionStats') call filter(stats, 'v:val["isLocal"] == v:false') let list = map(stats, 'v:val["id"]') return join(list, "\n") endfunction function! s:SearchOptions(...) abort let list = ['-e', '--regexp', '-F', '--fixed-strings', '-L', '--follow', \ '-g', '--glob', '--hidden', '--no-hidden', '--no-ignore-vcs', \ '--word-regexp', '-w', '--smart-case', '-S', '--no-config', \ '--line-regexp', '--no-ignore', '-x'] return join(list, "\n") endfunction function! s:LoadedExtensions(...) abort let list = CocAction('loadedExtensions') return join(list, "\n") endfunction function! s:InstallOptions(...)abort let list = ['-terminal', '-sync'] return join(list, "\n") endfunction function! s:OpenConfig() let home = coc#util#get_config_home() if !isdirectory(home) echohl MoreMsg echom 'Config directory "'.home.'" does not exist, create? (y/n)' echohl None let confirm = nr2char(getchar()) redraw! if !(confirm ==? "y" || confirm ==? "\r") return else call mkdir(home, 'p') end endif execute 'edit '.fnameescape(home.'/coc-settings.json') call coc#rpc#notify('checkJsonExtension', []) endfunction function! s:get_color(item, fallback) abort let t = type(a:item) if t == 1 return a:item endif if t == 4 let item = get(a:item, 'gui', {}) let color = get(item, &background, a:fallback) return type(color) == 1 ? color : a:fallback endif return a:fallback endfunction function! s:AddAnsiGroups() abort let color_map = {} let colors = ['#282828', '#cc241d', '#98971a', '#d79921', '#458588', '#b16286', '#689d6a', '#a89984', '#928374'] let names = ['black', 'red', 'green', 'yellow', 'blue', 'magenta', 'cyan', 'white', 'grey'] for i in range(0, len(names) - 1) let name = names[i] if exists('g:terminal_ansi_colors') let color_map[name] = s:get_color(get(g:terminal_ansi_colors, i, colors[i]), colors[i]) else let color_map[name] = get(g:, 'terminal_color_'.i, colors[i]) endif endfor try for name in keys(color_map) let foreground = toupper(name[0]).name[1:] let foregroundColor = color_map[name] for key in keys(color_map) let background = toupper(key[0]).key[1:] let backgroundColor = color_map[key] exe 'hi default CocList'.foreground.background.' guifg='.foregroundColor.' guibg='.backgroundColor endfor exe 'hi default CocListFg'.foreground. ' guifg='.foregroundColor. ' ctermfg='.foreground exe 'hi default CocListBg'.foreground. ' guibg='.foregroundColor. ' ctermbg='.foreground endfor catch /.*/ " ignore invalid color endtry endfunction function! s:CreateHighlight(group, fg, bg) abort let cmd = coc#highlight#compose(a:fg, a:bg) if !empty(trim(cmd)) exe 'hi default '.a:group.' '.cmd else exe 'hi default link '.a:group.' '.a:fg endif endfunction function! s:OpenDiagnostics(...) abort let height = get(a:, 1, 0) call coc#rpc#request('fillDiagnostics', [bufnr('%')]) if height execute ':lopen '.height else lopen endif endfunction function! s:Disable() abort if get(g:, 'coc_enabled', 0) == 0 return endif autocmd! coc_nvim call coc#rpc#request('detach', []) echohl MoreMsg echom '[coc.nvim] Event disabled' echohl None let g:coc_enabled = 0 endfunction function! s:Autocmd(...) abort if !get(g:, 'coc_workspace_initialized', 0) return endif call coc#rpc#notify('CocAutocmd', a:000) endfunction function! s:HandleCharInsert(char, bufnr) abort if get(g:, 'coc_feeding_keys', 0) return endif if get(g:, 'coc_disable_space_report', 0) let g:coc_disable_space_report = 0 if a:char ==# ' ' return endif endif call s:Autocmd('InsertCharPre', a:char, a:bufnr) endfunction function! s:HandleTextChangedI(bufnr) abort if get(g:, 'coc_feeding_keys', 0) unlet g:coc_feeding_keys endif call s:Autocmd('TextChangedI', a:bufnr, coc#util#change_info()) endfunction function! s:HandleInsertLeave(bufnr) abort call coc#pum#close() call s:Autocmd('InsertLeave', a:bufnr) endfunction function! s:HandleWinScrolled(winid) abort if getwinvar(a:winid, 'float', 0) call coc#float#nvim_scrollbar(a:winid) endif call s:Autocmd('WinScrolled', a:winid) endfunction function! s:HandleWinClosed(winid) abort call coc#float#on_close(a:winid) call coc#notify#on_close(a:winid) call s:Autocmd('WinClosed', a:winid) endfunction function! s:SyncAutocmd(...) if !get(g:, 'coc_workspace_initialized', 0) return endif call coc#rpc#request('CocAutocmd', a:000) endfunction function! s:VimLeavePre() abort let g:coc_vim_leaving = 1 call s:Autocmd('VimLeavePre') if s:is_vim && exists('$COC_NVIM_REMOTE_ADDRESS') " Helps to avoid connection error. call coc#rpc#close_connection() return endif if get(g:, 'coc_node_env', '') ==# 'test' return endif if s:is_vim call timer_start(1, { -> coc#client#kill('coc')}) endif endfunction function! s:VimEnter() abort if coc#rpc#started() if !exists('$COC_NVIM_REMOTE_ADDRESS') call coc#rpc#notify('VimEnter', [coc#util#path_replace_patterns(), join(globpath(&runtimepath, "", 0, 1), ",")]) endif elseif get(g:, 'coc_start_at_startup', 1) call coc#rpc#start_server() endif call s:Highlight() endfunction function! s:Enable(initialize) if get(g:, 'coc_enabled', 0) == 1 return endif let g:coc_enabled = 1 sign define CocCurrentLine linehl=CocMenuSel sign define CocListCurrent linehl=CocListLine sign define CocTreeSelected linehl=CocTreeSelected if s:is_vim call coc#api#tabpage_ids() endif augroup coc_nvim autocmd! if !v:vim_did_enter autocmd VimEnter * call s:VimEnter() else call s:Highlight() endif if s:is_vim if exists('##DirChanged') autocmd DirChanged * call s:Autocmd('DirChanged', getcwd()) endif if exists('##TerminalOpen') autocmd TerminalOpen * call s:Autocmd('TermOpen', +expand('')) endif autocmd CursorMoved list:///* call coc#list#select(bufnr('%'), line('.')) autocmd TabNew * call coc#api#tabpage_ids() else autocmd DirChanged * call s:Autocmd('DirChanged', get(v:event, 'cwd', '')) autocmd TermOpen * call s:Autocmd('TermOpen', +expand('')) autocmd WinEnter * call coc#float#nvim_win_enter(win_getid()) endif if exists('##CompleteChanged') autocmd CompleteChanged * call timer_start(1, { -> coc#pum#close()}) endif autocmd CursorHold * call coc#float#check_related() if exists('##WinClosed') autocmd WinClosed * call s:HandleWinClosed(+expand('')) elseif exists('##TabEnter') autocmd TabEnter * call coc#notify#reflow() endif if exists('##WinScrolled') autocmd WinScrolled * call s:HandleWinScrolled(+expand('')) endif autocmd TabNew * call s:Autocmd('TabNew', coc#util#tabnr_id(tabpagenr())) autocmd TabClosed * call s:Autocmd('TabClosed', coc#util#tabpages()) autocmd WinLeave * call s:Autocmd('WinLeave', win_getid()) autocmd WinEnter * call s:Autocmd('WinEnter', win_getid()) autocmd BufWinLeave * call s:Autocmd('BufWinLeave', +expand(''), bufwinid(+expand(''))) autocmd BufWinEnter * call s:Autocmd('BufWinEnter', +expand(''), win_getid()) autocmd FileType * call s:Autocmd('FileType', expand(''), +expand('')) autocmd InsertCharPre * call s:HandleCharInsert(v:char, bufnr('%')) if exists('##TextChangedP') autocmd TextChangedP * call s:Autocmd('TextChangedP', +expand(''), coc#util#change_info()) endif autocmd TextChangedI * call s:HandleTextChangedI(+expand('')) autocmd InsertLeave * call s:HandleInsertLeave(+expand('')) autocmd InsertEnter * call s:Autocmd('InsertEnter', +expand('')) autocmd BufHidden * call s:Autocmd('BufHidden', +expand('')) autocmd BufEnter * call s:Autocmd('BufEnter', +expand('')) autocmd TextChanged * call s:Autocmd('TextChanged', +expand(''), getbufvar(+expand(''), 'changedtick')) autocmd BufWritePost * call s:Autocmd('BufWritePost', +expand(''), getbufvar(+expand(''), 'changedtick')) autocmd CursorMoved * call s:Autocmd('CursorMoved', +expand(''), [line('.'), col('.')]) autocmd CursorMovedI * call s:Autocmd('CursorMovedI', +expand(''), [line('.'), col('.')]) autocmd CursorHold * call s:Autocmd('CursorHold', +expand(''), [line('.'), col('.')]) autocmd CursorHoldI * call s:Autocmd('CursorHoldI', +expand(''), [line('.'), col('.')]) autocmd BufNewFile,BufReadPost * call s:Autocmd('BufCreate', +expand('')) autocmd BufUnload * call s:Autocmd('BufUnload', +expand('')) autocmd BufWritePre * call s:SyncAutocmd('BufWritePre', +expand(''), bufname(+expand('')), getbufvar(+expand(''), 'changedtick')) autocmd FocusGained * if mode() !~# '^c' | call s:Autocmd('FocusGained') | endif autocmd FocusLost * call s:Autocmd('FocusLost') autocmd VimResized * call s:Autocmd('VimResized', &columns, &lines) autocmd VimLeavePre * call s:VimLeavePre() autocmd BufReadCmd,FileReadCmd,SourceCmd list://* call coc#list#setup(expand('')) autocmd BufWriteCmd __coc_refactor__* :call coc#rpc#notify('saveRefactor', [+expand('')]) autocmd ColorScheme * call s:Highlight() | call s:Autocmd('ColorScheme') augroup end if a:initialize == 0 call coc#rpc#request('attach', []) echohl MoreMsg echom '[coc.nvim] Event enabled' echohl None endif endfunction function! s:Highlight() abort hi default CocSelectedText ctermfg=Red guifg=#fb4934 guibg=NONE hi default CocCodeLens ctermfg=Gray guifg=#999999 guibg=NONE hi default CocUnderline term=underline cterm=underline gui=underline guisp=#ebdbb2 hi default CocBold term=bold cterm=bold gui=bold hi default CocItalic term=italic cterm=italic gui=italic hi default CocStrikeThrough term=strikethrough cterm=strikethrough gui=strikethrough hi default CocMarkdownLink ctermfg=Blue guifg=#15aabf guibg=NONE hi default CocDisabled guifg=#999999 ctermfg=gray hi default CocSearch ctermfg=Blue guifg=#15aabf guibg=NONE hi default CocLink term=underline cterm=underline gui=underline guisp=#15aabf if coc#highlight#get_contrast('Normal', has('nvim') ? 'NormalFloat' : 'Pmenu') > 2.0 exe 'hi default CocFloating '.coc#highlight#create_bg_command('Normal', &background ==# 'dark' ? -30 : 30) exe 'hi default CocMenuSel '.coc#highlight#create_bg_command('CocFloating', &background ==# 'dark' ? -20 : 20) exe 'hi default CocFloatThumb '.coc#highlight#create_bg_command('CocFloating', &background ==# 'dark' ? -40 : 40) hi default link CocFloatSbar CocFloating else exe 'hi default link CocFloating '.(has('nvim') ? 'NormalFloat' : 'Pmenu') if coc#highlight#get_contrast('CocFloating', 'PmenuSel') > 2.0 exe 'hi default CocMenuSel '.coc#highlight#create_bg_command('CocFloating', &background ==# 'dark' ? -30 : 30) else exe 'hi default CocMenuSel '.coc#highlight#get_hl_command(synIDtrans(hlID('PmenuSel')), 'bg', '237', '#13354A') endif hi default link CocFloatThumb PmenuThumb hi default link CocFloatSbar PmenuSbar endif if coc#highlight#get_contrast('Normal', 'CursorLine') < 1.3 " Avoid color too close exe 'hi default CocListLine '.coc#highlight#create_bg_command('Normal', &background ==# 'dark' ? -20 : 20) else hi default link CocListLine CursorLine endif hi default link CocFloatActive CocSearch hi default link CocFadeOut Conceal hi default link CocMarkdownCode markdownCode hi default link CocMarkdownHeader markdownH1 hi default link CocDeprecatedHighlight CocStrikeThrough hi default link CocUnusedHighlight CocFadeOut hi default link CocListSearch CocSearch hi default link CocListMode ModeMsg hi default link CocListPath Comment hi default link CocHighlightText CursorColumn hi default link CocHoverRange Search hi default link CocCursorRange Search hi default link CocLinkedEditing CocCursorRange hi default link CocHighlightRead CocHighlightText hi default link CocHighlightWrite CocHighlightText " Notification hi default CocNotificationProgress ctermfg=Blue guifg=#15aabf guibg=NONE hi default link CocNotificationButton CocUnderline hi default link CocNotificationError CocErrorFloat hi default link CocNotificationWarning CocWarningFloat hi default link CocNotificationInfo CocInfoFloat " Snippet hi default link CocSnippetVisual Visual " Tree view highlights hi default link CocTreeTitle Title hi default link CocTreeDescription Comment hi default link CocTreeOpenClose CocBold hi default link CocTreeSelected CursorLine hi default link CocSelectedRange CocHighlightText " Symbol highlights hi default link CocSymbolDefault MoreMsg "Pum hi default link CocPumSearch CocSearch hi default link CocPumDetail Comment hi default link CocPumMenu CocFloating hi default link CocPumShortcut Comment hi default link CocPumDeprecated CocStrikeThrough hi default CocVirtualText ctermfg=12 guifg=#504945 hi default link CocPumVirtualText CocVirtualText hi default link CocInputBoxVirtualText CocVirtualText hi default link CocFloatDividingLine CocVirtualText if has('nvim-0.5.0') hi default CocCursorTransparent gui=strikethrough blend=100 endif let sign_colors = { \ 'Error': ['Red', '#ff0000'], \ 'Warn': ['Brown', '#ff922b'], \ 'Info': ['Yellow', '#fab005'], \ 'Hint': ['Blue', '#15aabf'] \ } for name in ['Error', 'Warning', 'Info', 'Hint'] let suffix = name ==# 'Warning' ? 'Warn' : name if hlexists('DiagnosticUnderline'.suffix) exe 'hi default link Coc'.name.'Highlight DiagnosticUnderline'.suffix else exe 'hi default link Coc'.name.'Highlight CocUnderline' endif if hlexists('DiagnosticSign'.suffix) exe 'hi default link Coc'.name.'Sign DiagnosticSign'.suffix else exe 'hi default Coc'.name.'Sign ctermfg='.sign_colors[suffix][0].' guifg='.sign_colors[suffix][1] endif if hlexists('DiagnosticVirtualText'.suffix) exe 'hi default link Coc'.name.'VirtualText DiagnosticVirtualText'.suffix else call s:CreateHighlight('Coc'.name.'VirtualText', 'Coc'.name.'Sign', 'Normal') endif if hlexists('Diagnostic'.suffix) exe 'hi default link Coc'.name.'Float Diagnostic'.suffix else call s:CreateHighlight('Coc'.name.'Float', 'Coc'.name.'Sign', 'CocFloating') endif endfor call s:CreateHighlight('CocInlayHint', 'CocHintSign', 'SignColumn') for name in ['Parameter', 'Type'] exe 'hi default link CocInlayHint'.name.' CocInlayHint' endfor call s:AddAnsiGroups() if get(g:, 'coc_default_semantic_highlight_groups', 1) let hlMap = { \ 'Namespace': ['@namespace', 'Include'], \ 'Type': ['@type', 'Type'], \ 'Class': ['@constructor', 'Special'], \ 'Enum': ['@type', 'Type'], \ 'Interface': ['@type', 'Type'], \ 'Struct': ['@structure', 'Identifier'], \ 'TypeParameter': ['@parameter', 'Identifier'], \ 'Parameter': ['@parameter', 'Identifier'], \ 'Variable': ['@variable', 'Identifier'], \ 'Property': ['@property', 'Identifier'], \ 'EnumMember': ['@property', 'Constant'], \ 'Event': ['@keyword', 'Keyword'], \ 'Function': ['@function', 'Function'], \ 'Method': ['@method', 'Function'], \ 'Macro': ['@constant.macro', 'Define'], \ 'Keyword': ['@keyword', 'Keyword'], \ 'Modifier': ['@storageclass', 'StorageClass'], \ 'Comment': ['@comment', 'Comment'], \ 'String': ['@string', 'String'], \ 'Number': ['@number', 'Number'], \ 'Boolean': ['@boolean', 'Boolean'], \ 'Regexp': ['@string.regex', 'String'], \ 'Operator': ['@operator', 'Operator'], \ 'Decorator': ['@symbol', 'Identifier'], \ 'Deprecated': ['@text.strike', 'CocDeprecatedHighlight'] \ } for [key, value] in items(hlMap) let ts = get(value, 0, '') let fallback = get(value, 1, '') execute 'hi default link CocSem'.key.' '.(coc#highlight#valid(ts) ? ts : fallback) endfor endif let symbolMap = { \ 'Keyword': ['@keyword', 'Keyword'], \ 'Namespace': ['@namespace', 'Include'], \ 'Class': ['@constructor', 'Special'], \ 'Method': ['@method', 'Function'], \ 'Property': ['@property', 'Identifier'], \ 'Text': ['@text', 'CocSymbolDefault'], \ 'Unit': ['@unit', 'CocSymbolDefault'], \ 'Value': ['@value', 'CocSymbolDefault'], \ 'Snippet': ['@snippet', 'CocSymbolDefault'], \ 'Color': ['@color', 'Float'], \ 'Reference': ['@text.reference', 'Constant'], \ 'Folder': ['@folder', 'CocSymbolDefault'], \ 'File': ['@file', 'Statement'], \ 'Module': ['@module', 'Statement'], \ 'Package': ['@package', 'Statement'], \ 'Field': ['@field', 'Identifier'], \ 'Constructor': ['@constructor', 'Special'], \ 'Enum': ['@type', 'CocSymbolDefault'], \ 'Interface': ['@type', 'CocSymbolDefault'], \ 'Function': ['@function', 'Function'], \ 'Variable': ['@variable.builtin', 'Special'], \ 'Constant': ['@constant', 'Constant'], \ 'String': ['@string', 'String'], \ 'Number': ['@number', 'Number'], \ 'Boolean': ['@boolean', 'Boolean'], \ 'Array': ['@array', 'CocSymbolDefault'], \ 'Object': ['@object', 'CocSymbolDefault'], \ 'Key': ['@key', 'Identifier'], \ 'Null': ['@null', 'Type'], \ 'EnumMember': ['@property', 'Identifier'], \ 'Struct': ['@structure', 'Keyword'], \ 'Event': ['@constant', 'Constant'], \ 'Operator': ['@operator', 'Operator'], \ 'TypeParameter': ['@parameter', 'Identifier'], \ } for [key, value] in items(symbolMap) let hlGroup = coc#highlight#valid(value[0]) ? value[0] : get(value, 1, 'CocSymbolDefault') if hlexists(hlGroup) execute 'hi default CocSymbol'.key.' '.coc#highlight#get_hl_command(synIDtrans(hlID(hlGroup)), 'fg', '223', '#ebdbb2') endif endfor endfunction function! s:ShowInfo() if coc#rpc#ready() call coc#rpc#notify('showInfo', []) else let lines = [] echomsg 'coc.nvim service not started, checking environment...' let node = get(g:, 'coc_node_path', $COC_NODE_PATH == '' ? 'node' : $COC_NODE_PATH) if !executable(node) call add(lines, 'Error: '.node.' is not executable!') else let output = trim(system(node . ' --version')) let ms = matchlist(output, 'v\(\d\+\).\(\d\+\).\(\d\+\)') if empty(ms) || str2nr(ms[1]) < 14 || (str2nr(ms[1]) == 14 && str2nr(ms[2]) < 14) call add(lines, 'Error: Node version '.output.' < 14.14.0, please upgrade node.js') endif endif " check bundle let file = s:root.'/build/index.js' if !filereadable(file) call add(lines, 'Error: javascript bundle not found, please compile code of coc.nvim by esbuild.') endif if !empty(lines) botright vnew setl filetype=nofile call setline(1, lines) else if get(g:, 'coc_start_at_startup',1) echohl MoreMsg | echon 'Service stopped for some unknown reason, try :CocStart' | echohl None else echohl MoreMsg | echon 'Start on startup is disabled, try :CocStart' | echohl None endif endif endif endfunction function! s:CursorRangeFromSelected(type, ...) abort " add range by operator call coc#rpc#request('cursorsSelect', [bufnr('%'), 'operator', a:type]) endfunction function! s:FormatFromSelected(type) call CocActionAsync('formatSelected', a:type) endfunction function! s:CodeActionFromSelected(type) call CocActionAsync('codeAction', a:type) endfunction function! s:CodeActionRefactorFromSelected(type) call CocActionAsync('codeAction', a:type, ['refactor'] ,v:true) endfunction command! -nargs=0 CocOutline :call coc#rpc#notify('showOutline', []) command! -nargs=? CocDiagnostics :call s:OpenDiagnostics() command! -nargs=0 CocInfo :call s:ShowInfo() command! -nargs=0 CocOpenLog :call coc#rpc#notify('openLog', []) command! -nargs=0 CocDisable :call s:Disable() command! -nargs=0 CocEnable :call s:Enable(0) command! -nargs=0 CocConfig :call s:OpenConfig() command! -nargs=0 CocLocalConfig :call coc#rpc#notify('openLocalConfig', []) command! -nargs=0 CocRestart :call coc#rpc#restart() command! -nargs=0 CocStart :call coc#rpc#start_server() command! -nargs=0 CocPrintErrors :call coc#rpc#show_errors() command! -nargs=1 -complete=custom,s:LoadedExtensions CocWatch :call coc#rpc#notify('watchExtension', []) command! -nargs=+ -complete=custom,s:SearchOptions CocSearch :call coc#rpc#notify('search', []) command! -nargs=+ -complete=custom,s:ExtensionList CocUninstall :call CocActionAsync('uninstallExtension', ) command! -nargs=* -complete=custom,s:CommandList -range CocCommand :call coc#rpc#notify('runCommand', []) command! -nargs=* -complete=custom,coc#list#options CocList :call coc#rpc#notify('openList', []) command! -nargs=? -complete=custom,coc#list#names CocListResume :call coc#rpc#notify('listResume', []) command! -nargs=? -complete=custom,coc#list#names CocListCancel :call coc#rpc#notify('listCancel', []) command! -nargs=? -complete=custom,coc#list#names CocPrev :call coc#rpc#notify('listPrev', []) command! -nargs=? -complete=custom,coc#list#names CocNext :call coc#rpc#notify('listNext', []) command! -nargs=? -complete=custom,coc#list#names CocFirst :call coc#rpc#notify('listFirst', []) command! -nargs=? -complete=custom,coc#list#names CocLast :call coc#rpc#notify('listLast', []) command! -nargs=0 CocUpdate :call coc#util#update_extensions(1) command! -nargs=0 -bar CocUpdateSync :call coc#util#update_extensions() command! -nargs=* -bar -complete=custom,s:InstallOptions CocInstall :call coc#util#install_extension([]) call s:Enable(1) augroup coc_dynamic_autocmd augroup END augroup coc_dynamic_content augroup END augroup coc_dynamic_option augroup END " Default key-mappings for completion if empty(mapcheck('', 'i')) inoremap coc#pum#visible() ? coc#pum#next(1) : "\" endif if empty(mapcheck('', 'i')) inoremap coc#pum#visible() ? coc#pum#prev(1) : "\" endif if empty(mapcheck('', 'i')) inoremap coc#pum#visible() ? coc#pum#next(0) : "\" endif if empty(mapcheck('', 'i')) inoremap coc#pum#visible() ? coc#pum#prev(0) : "\" endif if empty(mapcheck('', 'i')) inoremap coc#pum#visible() ? coc#pum#cancel() : "\" endif if empty(mapcheck('', 'i')) inoremap coc#pum#visible() ? coc#pum#confirm() : "\" endif if empty(mapcheck('', 'i')) inoremap coc#pum#visible() ? coc#pum#scroll(1) : "\" endif if empty(mapcheck('', 'i')) inoremap coc#pum#visible() ? coc#pum#scroll(0) : "\" endif vnoremap (coc-range-select) :call CocActionAsync('rangeSelect', visualmode(), v:true) vnoremap (coc-range-select-backward) :call CocActionAsync('rangeSelect', visualmode(), v:false) nnoremap (coc-range-select) :call CocActionAsync('rangeSelect', '', v:true) nnoremap (coc-codelens-action) :call CocActionAsync('codeLensAction') vnoremap (coc-format-selected) :call CocActionAsync('formatSelected', visualmode()) vnoremap (coc-codeaction-selected) :call CocActionAsync('codeAction', visualmode()) vnoremap (coc-codeaction-refactor-selected) :call CocActionAsync('codeAction', visualmode(), ['refactor'], v:true) nnoremap (coc-codeaction-selected) :set operatorfunc=CodeActionFromSelectedg@ nnoremap (coc-codeaction-refactor-selected) :set operatorfunc=CodeActionRefactorFromSelectedg@ nnoremap (coc-codeaction) :call CocActionAsync('codeAction', '') nnoremap (coc-codeaction-line) :call CocActionAsync('codeAction', 'currline') nnoremap (coc-codeaction-cursor) :call CocActionAsync('codeAction', 'cursor') nnoremap (coc-codeaction-refactor) :call CocActionAsync('codeAction', 'cursor', ['refactor'], v:true) nnoremap (coc-codeaction-source) :call CocActionAsync('codeAction', '', ['source'], v:true) nnoremap (coc-rename) :call CocActionAsync('rename') nnoremap (coc-format-selected) :set operatorfunc=FormatFromSelectedg@ nnoremap (coc-format) :call CocActionAsync('format') nnoremap (coc-diagnostic-info) :call CocActionAsync('diagnosticInfo') nnoremap (coc-diagnostic-next) :call CocActionAsync('diagnosticNext') nnoremap (coc-diagnostic-prev) :call CocActionAsync('diagnosticPrevious') nnoremap (coc-diagnostic-next-error) :call CocActionAsync('diagnosticNext', 'error') nnoremap (coc-diagnostic-prev-error) :call CocActionAsync('diagnosticPrevious', 'error') nnoremap (coc-definition) :call CocActionAsync('jumpDefinition') nnoremap (coc-declaration) :call CocActionAsync('jumpDeclaration') nnoremap (coc-implementation) :call CocActionAsync('jumpImplementation') nnoremap (coc-type-definition) :call CocActionAsync('jumpTypeDefinition') nnoremap (coc-references) :call CocActionAsync('jumpReferences') nnoremap (coc-references-used) :call CocActionAsync('jumpUsed') nnoremap (coc-openlink) :call CocActionAsync('openLink') nnoremap (coc-fix-current) :call CocActionAsync('doQuickfix') nnoremap (coc-float-hide) :call coc#float#close_all() nnoremap (coc-float-jump) :call coc#float#jump() nnoremap (coc-command-repeat) :call CocAction('repeatCommand') nnoremap (coc-refactor) :call CocActionAsync('refactor') nnoremap (coc-cursors-operator) :set operatorfunc=CursorRangeFromSelectedg@ vnoremap (coc-cursors-range) :call CocAction('cursorsSelect', bufnr('%'), 'range', visualmode()) nnoremap (coc-cursors-word) :call CocAction('cursorsSelect', bufnr('%'), 'word', 'n') nnoremap (coc-cursors-position) :call CocAction('cursorsSelect', bufnr('%'), 'position', 'n') vnoremap (coc-funcobj-i) :call CocAction('selectSymbolRange', v:true, visualmode(), ['Method', 'Function']) vnoremap (coc-funcobj-a) :call CocAction('selectSymbolRange', v:false, visualmode(), ['Method', 'Function']) onoremap (coc-funcobj-i) :call CocAction('selectSymbolRange', v:true, '', ['Method', 'Function']) onoremap (coc-funcobj-a) :call CocAction('selectSymbolRange', v:false, '', ['Method', 'Function']) vnoremap (coc-classobj-i) :call CocAction('selectSymbolRange', v:true, visualmode(), ['Interface', 'Struct', 'Class']) vnoremap (coc-classobj-a) :call CocAction('selectSymbolRange', v:false, visualmode(), ['Interface', 'Struct', 'Class']) onoremap (coc-classobj-i) :call CocAction('selectSymbolRange', v:true, '', ['Interface', 'Struct', 'Class']) onoremap (coc-classobj-a) :call CocAction('selectSymbolRange', v:false, '', ['Interface', 'Struct', 'Class'])