For people using neovim, I've been impressed by this completion engine:
https://github.com/neoclide/coc.nvim
It uses Language Server Protocol and goes quite deep pulling completions, and can, eg, render function documentation into floating windows (not yet merged into neovim)