Append default backends to buffer-local backends
This commit is contained in:
parent
e94f1f39f4
commit
533cb13a02
3 changed files with 28 additions and 18 deletions
|
@ -55,14 +55,16 @@ To have BACKENDS apply to any mode that is a parent of MODES, set MODES to
|
||||||
;;
|
;;
|
||||||
|
|
||||||
(defun +company--backends ()
|
(defun +company--backends ()
|
||||||
(or (cl-loop for (mode . rest) in +company-backend-alist
|
(append (cl-loop for (mode . rest) in +company-backend-alist
|
||||||
for type = (car rest)
|
for type = (car rest)
|
||||||
for backends = (cdr rest)
|
for backends = (cdr rest)
|
||||||
if (or (and (eq type :derived) (derived-mode-p mode)) ; parent modes
|
if (or (and (eq type :derived) (derived-mode-p mode)) ; parent modes
|
||||||
(and (eq type :exact) (eq major-mode mode)) ; major modes
|
(and (eq type :exact)
|
||||||
(and (boundp mode) (symbol-value mode))) ; minor modes
|
(or (eq major-mode mode) ; major modes
|
||||||
nconc backends)
|
(and (boundp mode)
|
||||||
(default-value 'company-backends)))
|
(symbol-value mode))))) ; minor modes
|
||||||
|
nconc backends)
|
||||||
|
(default-value 'company-backends)))
|
||||||
|
|
||||||
|
|
||||||
;;
|
;;
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
company-require-match 'never
|
company-require-match 'never
|
||||||
company-global-modes
|
company-global-modes
|
||||||
'(not comint-mode erc-mode message-mode help-mode gud-mode eshell-mode)
|
'(not comint-mode erc-mode message-mode help-mode gud-mode eshell-mode)
|
||||||
|
company-backends '(company-dabbrev)
|
||||||
company-frontends
|
company-frontends
|
||||||
'(company-pseudo-tooltip-frontend
|
'(company-pseudo-tooltip-frontend
|
||||||
company-echo-metadata-frontend)
|
company-echo-metadata-frontend)
|
||||||
|
|
|
@ -23,26 +23,33 @@
|
||||||
;;
|
;;
|
||||||
(it "sets backends for a major mode"
|
(it "sets backends for a major mode"
|
||||||
(set-company-backend! 'text-mode 'a)
|
(set-company-backend! 'text-mode 'a)
|
||||||
(expect (backends 'text-mode) :to-equal '(a)))
|
(expect (backends 'text-mode) :to-equal '(a t)))
|
||||||
|
|
||||||
(it "sets backends for a derived-mode"
|
(it "sets backends for a derived-mode"
|
||||||
(set-company-backend! :derived 'prog-mode 'a)
|
(set-company-backend! :derived 'prog-mode 'a)
|
||||||
(expect (backends 'prog-mode) :to-equal '(a))
|
(expect (backends 'prog-mode) :to-equal '(a t))
|
||||||
(expect (backends 'emacs-lisp-mode) :to-equal '(a)))
|
(expect (backends 'emacs-lisp-mode) :to-equal '(a t)))
|
||||||
|
|
||||||
(it "sets multiple backends for exact major modes"
|
(it "sets multiple backends for exact major modes"
|
||||||
(set-company-backend! '(text-mode emacs-lisp-mode) 'a 'b)
|
(set-company-backend! '(text-mode emacs-lisp-mode) 'a 'b)
|
||||||
(expect (backends 'text-mode) :to-equal (backends 'emacs-lisp-mode)))
|
(expect (backends 'text-mode) :to-equal (backends 'emacs-lisp-mode)))
|
||||||
|
|
||||||
(it "sets cumulative backends"
|
(it "sets cumulative backends"
|
||||||
(set-company-backend! :derived 'prog-mode 'a)
|
(set-company-backend! :derived 'prog-mode '(a b c))
|
||||||
(set-company-backend! 'emacs-lisp-mode 'b)
|
(set-company-backend! 'emacs-lisp-mode 'd 'e)
|
||||||
(expect (backends 'emacs-lisp-mode) :to-equal '(b a)))
|
(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! 'emacs-lisp-mode 'd 'e)
|
||||||
|
(set-company-backend! 'some-minor-mode 'x 'y)
|
||||||
|
(setq-local some-minor-mode t)
|
||||||
|
(expect (backends 'emacs-lisp-mode) :to-equal '(x y d e (a b c) t)))
|
||||||
|
|
||||||
(it "overwrites past backends"
|
(it "overwrites past backends"
|
||||||
(set-company-backend! 'text-mode 'old 'backends)
|
(set-company-backend! 'text-mode 'old 'backends)
|
||||||
(set-company-backend! 'text-mode 'new 'backends)
|
(set-company-backend! 'text-mode 'new 'backends)
|
||||||
(expect (backends 'text-mode) :to-equal '(new backends)))
|
(expect (backends 'text-mode) :to-equal '(new backends t)))
|
||||||
|
|
||||||
(it "unsets past backends"
|
(it "unsets past backends"
|
||||||
(set-company-backend! 'text-mode 'old)
|
(set-company-backend! 'text-mode 'old)
|
||||||
|
@ -53,16 +60,16 @@
|
||||||
(set-company-backend! :derived 'prog-mode 'old)
|
(set-company-backend! :derived 'prog-mode 'old)
|
||||||
(set-company-backend! 'emacs-lisp-mode 'child)
|
(set-company-backend! 'emacs-lisp-mode 'child)
|
||||||
(set-company-backend! :derived 'prog-mode nil)
|
(set-company-backend! :derived 'prog-mode nil)
|
||||||
(expect (backends 'emacs-lisp-mode) :to-equal '(child)))
|
(expect (backends 'emacs-lisp-mode) :to-equal '(child t)))
|
||||||
|
|
||||||
(it "overwrites past cumulative backends"
|
(it "overwrites past cumulative backends"
|
||||||
(set-company-backend! :derived 'prog-mode 'base)
|
(set-company-backend! :derived 'prog-mode 'base)
|
||||||
(set-company-backend! 'emacs-lisp-mode 'old)
|
(set-company-backend! 'emacs-lisp-mode 'old)
|
||||||
(set-company-backend! 'emacs-lisp-mode 'new)
|
(set-company-backend! 'emacs-lisp-mode 'new)
|
||||||
(expect (backends 'emacs-lisp-mode) :to-equal '(new base)))
|
(expect (backends 'emacs-lisp-mode) :to-equal '(new base t)))
|
||||||
|
|
||||||
(it "overwrites past parent backends"
|
(it "overwrites past parent backends"
|
||||||
(set-company-backend! :derived 'prog-mode 'base)
|
(set-company-backend! :derived 'prog-mode 'base)
|
||||||
(set-company-backend! 'emacs-lisp-mode 'child)
|
(set-company-backend! 'emacs-lisp-mode 'child)
|
||||||
(set-company-backend! :derived 'prog-mode 'new)
|
(set-company-backend! :derived 'prog-mode 'new)
|
||||||
(expect (backends 'emacs-lisp-mode) :to-equal '(child new)))))
|
(expect (backends 'emacs-lisp-mode) :to-equal '(child new t)))))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue