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.
Here are some examples:
Go to definition:
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.
npm install -g typescript). It comes with
tsserver included, which is the default engine in ALE for JS.
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