completion/company: refactor backend resolution

Makes it easier to change company-backends retrospectively (with a hook
or setq-hook!). Also simplifies how backend defaults are stored (no more
of this :derived and :exact business).

Also updates unit tests.
This commit is contained in:
Henrik Lissner 2019-06-29 01:34:10 +02:00
parent 2f268e80bb
commit 281ea56643
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395
2 changed files with 40 additions and 41 deletions

View file

@ -26,7 +26,7 @@
(expect (backends 'text-mode) :to-equal '(a t)))
(it "sets backends for a derived-mode"
(set-company-backend! :derived 'prog-mode 'a)
(set-company-backend! 'prog-mode 'a)
(expect (backends 'prog-mode) :to-equal '(a t))
(expect (backends 'emacs-lisp-mode) :to-equal '(a t)))
@ -35,12 +35,12 @@
(expect (backends 'text-mode) :to-equal (backends 'emacs-lisp-mode)))
(it "sets cumulative backends"
(set-company-backend! :derived 'prog-mode '(a b c))
(set-company-backend! 'prog-mode '(a b c))
(set-company-backend! 'emacs-lisp-mode 'd 'e)
(expect (backends 'emacs-lisp-mode) :to-equal '(d e (a b c) t)))
(it "sets cumulative backends with a minor mode"
(set-company-backend! :derived 'prog-mode '(a b c))
(set-company-backend! 'prog-mode '(a b c))
(set-company-backend! 'emacs-lisp-mode 'd 'e)
(set-company-backend! 'some-minor-mode 'x 'y)
(setq-local some-minor-mode t)
@ -57,19 +57,19 @@
(expect (backends 'text-mode) :to-equal (default-value 'company-backends)))
(it "unsets past parent backends"
(set-company-backend! :derived 'prog-mode 'old)
(set-company-backend! 'prog-mode 'old)
(set-company-backend! 'emacs-lisp-mode 'child)
(set-company-backend! :derived 'prog-mode nil)
(set-company-backend! 'prog-mode nil)
(expect (backends 'emacs-lisp-mode) :to-equal '(child t)))
(it "overwrites past cumulative backends"
(set-company-backend! :derived 'prog-mode 'base)
(set-company-backend! 'prog-mode 'base)
(set-company-backend! 'emacs-lisp-mode 'old)
(set-company-backend! 'emacs-lisp-mode 'new)
(expect (backends 'emacs-lisp-mode) :to-equal '(new base t)))
(it "overwrites past parent backends"
(set-company-backend! :derived 'prog-mode 'base)
(set-company-backend! 'prog-mode 'base)
(set-company-backend! 'emacs-lisp-mode 'child)
(set-company-backend! :derived 'prog-mode 'new)
(set-company-backend! 'prog-mode 'new)
(expect (backends 'emacs-lisp-mode) :to-equal '(child new t)))))