Company is wonderful for Emacs completion.Its API (often just setting company-backends) is great for tuning completion sources per language.