All Articles

Ale + Deoplete + LanguageClient vs CoC

Recently I have migrated from Ale + Deoplete + LanguageClient to CoC. I have used first combo for about 6-12 months.

Overall I found CoC to be slightly better. I develop mainly using Typescript so this might not necessary apply to your case.

Here a little things CoC is doing better:

  • I like how CoC shows error. Including the fact that I can press Ctrl-W W to get into error window to copy it (e.g. for Google search).

  • CoC shows not only errors but hints as well from tsserver. Ale is showing only errors (here is pull request for Ale to do this https://github.com/dense-analysis/ale/pull/3362). LanguageClient-neovim shows hints but you can’t navigate them (like in errors/warning in Ale or everything like in CoC).

  • CoC shows colors in CSS by their hex code.

  • CoC offers to fix imports in files on file rename (typescript).

  • Lighter config. It is easier to config CoC only than 3 other plugins.

  • I have not checked this but it is probably that both Ale and LanguageClient launched its own tsserver. That means two runnings servers.

  • I have found CoC plugins quite useful and you can add CoC plugins into your .vimrc. E.g like this:

    let g:coc_global_extensions = [
    \ 'coc-css',
    \ 'coc-emoji',
    \ 'coc-eslint',
    \ 'coc-html',
    \ 'coc-json',
    \ 'coc-prettier',
    \ 'coc-python',
    \ 'coc-tsserver',
    \ 'coc-explorer',
    \ 'coc-markdownlint',
    \ 'coc-vimlsp',
    \ 'coc-word'
    \ ]
  • I have not missed any functionality by migrating to CoC.

So overall CoC looks like very good option. Some people complain that it is slower but I have not experienced that.

Alternatively it is possible to use neovim’s default language servers support but I will leave this for the future.