emacs-lisp source:(provide 'cce/company)
Code Completion is an incredible tool to have at your disposal when done nicely. When done nicely, I should be able to hit <TAB> to get a dropdown under my cursor with a list of options. Those options are popuplated by programming language tooling or by matching against a list of entries. Completion should be ubiquitous and useful, and should provide as much context as possible. In particular, programming language auto-completion should provide as much data about the completion target, what module it is, or what its type signature is, or the inline documentation if it's short enough. Given a language with a strong enough type system like Rust, it should be possible to intuit even templated types.
My current completion system is far from this, and so I am going back to the first-party recommended configuration for much of this, designed to integrate with Evil Mode and the Company completion framework. By default, company supports auto-completion for Emacs Lisp, etags and gtags, Clang, etc, and it can also be extended by languages, and the Emacs Modes themselves using Completion at Point Functions.
But what I care about is this:
Emoji
Ruby Ruby and Rails in Emacs]
Dabbreviations -
company-dabbrev-code company-dabbrev
These require no work so I include them by default.
Completion at Point Functions
Keyword Matching
Ispell
Emacs Lisp
These four combined give me basic completion in all buffers, based on words in those buffers (and the dictionary in text-mode), as well as Emacs Lisp. Everything else is defined in those files linked above.
#+beginsrc emacs-lisp (use-package company :diminish :config (setq company-backends '(company-capf company-files company-ispell company-elisp company-keywords)) (setq-default completion-at-point-functions nil) (global-company-mode) :bind (:map prog-mode-map ("<tab>" . company-complete)) :bind ("C-<tab>" . company-complete)) (use-package company-prescient :init (company-prescient-mode +1)) #+ENDSRC