Some months ago I wrote about using ALE for navigating through code with help of language servers. That works really well and I was totally satisfied, however I decided to give Neovim a try and in the process I found a plugin that took the game to another level: Coc (Conquer of Completion).

Coc is a completion framework and a language server client. It's fast, responsive and provide full LSP support. I've been using it for a little more than a month and I'm really impressed by its performance.

The only downside I can see so far is the number of dependencies required. Coc requires Node and Yarn to work, besides those I had to install a Neovim python dependency and if you are using Vim it requires a vim-node-rpc plugin as well. In general I don't like plugins with too many external dependencies, however I feel this time it worths the hassle.

Here are some examples of Coc in action:

Completion Coc completion example The completion prompt has been really fast and responsive so far.

Go to definition Coc definition example

Show references Coc list references example Preview pane on references list is very useful.

Rename Coc rename example I was able to rename variables/methods (and their references) effectively, even in JavaScript.

Show buffer's issues in a list Coc diagnostics list example

Check the project repository for a more detailed explanation about the tool as well as some configuration examples.