UPDATE: Check “Typescript and ALE” how I have returned to ALE.
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.