" COC - the Conquerer of Completion

let g:coc_node_path = '/Users/christoomey/.asdf/shims/node'

Plug 'neoclide/coc.nvim', {'branch': 'release'}
let g:coc_global_extensions = [
  \ 'coc-css',
  \ 'coc-json',
  \ 'coc-tsserver',
  \ 'coc-tailwindcss',
  \ 'coc-elixir',
  \ 'coc-svelte',
  \ 'coc-html',
  \ 'coc-yaml',
  \ 'coc-vimlsp',
  \ 'coc-svg',
  \ 'coc-lists',
  \ 'coc-json',
  \ 'coc-yank',
  \ 'coc-highlight',
  \ 'coc-solargraph',
  \ ]

" autocmd FileType * let b:coc_suggest_disable = 1
" inoremap <silent><expr> <c-j> coc#refresh()

nmap <leader>rn <Plug>(coc-rename)

inoremap <silent><expr> <TAB>
      \ coc#pum#visible() ? coc#pum#next(1) :
      \ CheckBackspace() ? "\<Tab>" :
      \ coc#refresh()

" \ 'coc-actions',

if isdirectory('./node_modules') && isdirectory('./node_modules/prettier')
  let g:coc_global_extensions += ['coc-prettier']
endif

if isdirectory('./node_modules') && isdirectory('./node_modules/eslint')
  let g:coc_global_extensions += ['coc-eslint']
endif

if isdirectory('./node_modules') && isdirectory('./node_modules/stylelint')
  let g:coc_global_extensions += ['coc-stylelintplus']
endif

function! s:check_eslint()
  if !isdirectory('./node_modules') || !isdirectory('./node_modules/eslint')
    call coc#config('eslint', {
    \ 'enable': v:false,
    \ })
  endif
endfunction

autocmd BufEnter *.{js,jsx,ts,tsx} :call <SID>check_eslint()

function! s:RestartCoc() abort
  silent! CocRestart
  echohl String | echom 'Restarting COC...' | echohl None
endfunction
command! RestartCoc call s:RestartCoc()
nnoremap <leader>re :RestartCoc<cr>

inoremap <silent><expr> <CR> coc#pum#visible() ? coc#pum#confirm() : "\<CR>"
inoremap <silent><expr> <Tab> coc#pum#visible() ? "\<C-n>" : "\<Tab>"

" hi! CocMenuSel ctermbg=8

nmap <silent> <C-]> <Plug>(coc-definition)
nmap <leader>do <Plug>(coc-codeaction)

" Jump to next / previous error
nmap <silent> [r <Plug>(coc-diagnostic-prev)
nmap <silent> ]r <Plug>(coc-diagnostic-next)

" show documentation
function! s:show_documentation()
  if (index(['vim','help'], &filetype) >= 0)
    execute 'h '.expand('<cword>')
  else
    call CocAction('doHover')
  endif
endfunction
nnoremap <silent> K :call <SID>show_documentation()<CR>

" show error, otherwise documentation, on hold
function! ShowDocIfNoDiagnostic(timer_id)
  " if (coc#util#has_float() == 0)
  silent call CocActionAsync('doHover')
  " endif
endfunction
function! s:show_hover_doc()
  call timer_start(200, 'ShowDocIfNoDiagnostic')
endfunction
nnoremap <leader>k :call <SID>show_hover_doc()<cr>

" vim:ft=vim