Probably you've already heard about ALE, an asyncronous lint engine that analyse buffers in background showing the results without requiring saving files to disk.

Just recently I found out that ALE allows you to use features like "Go to definition", "Find usages" and completion suggestions using the power of LSP (Language Server Protocol) linters.

I've been using it for Rust and JavaScript and it has been working better than CTAGs ever worked for me.

Here are some examples:

Autocompletion:

autocompletion-2

Go to definition:

Configuration

After installing ALE the only required configuration for enabling autocompletion hijacking is let g:ale_completion_enabled = 1.

For Rust you need to install RLS (Rust Language Server). The catch here is that ALE uses Rust Nightly by default. You can choose between installing RLS in the nightly toolchain or change ALE configuration to use stable instead.

For JavaScript I installed typescript globally (npm install -g typescript). It comes with tsserver included, which is the default engine in ALE for JS.

Conclusion

There may be other plugins powered by LSP's that provide same features, but as ALE was something that I was already using and it was so easy to configure I didn't want to spend time looking for alternatives.

Take a look on my VIM dotfile for configuration details.

Suggestions and questions are welcome! :D