I’m a bit surprised that no-one mentioned ALE. If you want to turn vim into an IDE it goes a long way.
Having the compiler warnings/errors inside the buffer is already really useful, but then you can also add LSPs and there isn’t really much missing. I’ve recently developed a Java program entirely in vim using Eclipse’s LSP.