diff --git a/modules/completion/company/autoload.el b/modules/completion/company/autoload.el index ae6fd349b..4981c64d3 100644 --- a/modules/completion/company/autoload.el +++ b/modules/completion/company/autoload.el @@ -55,14 +55,16 @@ To have BACKENDS apply to any mode that is a parent of MODES, set MODES to ;; (defun +company--backends () - (or (cl-loop for (mode . rest) in +company-backend-alist - for type = (car rest) - for backends = (cdr rest) - if (or (and (eq type :derived) (derived-mode-p mode)) ; parent modes - (and (eq type :exact) (eq major-mode mode)) ; major modes - (and (boundp mode) (symbol-value mode))) ; minor modes - nconc backends) - (default-value 'company-backends))) + (append (cl-loop for (mode . rest) in +company-backend-alist + for type = (car rest) + for backends = (cdr rest) + if (or (and (eq type :derived) (derived-mode-p mode)) ; parent modes + (and (eq type :exact) + (or (eq major-mode mode) ; major modes + (and (boundp mode) + (symbol-value mode))))) ; minor modes + nconc backends) + (default-value 'company-backends))) ;; diff --git a/modules/completion/company/config.el b/modules/completion/company/config.el index b43d136b0..f019ff89a 100644 --- a/modules/completion/company/config.el +++ b/modules/completion/company/config.el @@ -12,6 +12,7 @@ company-require-match 'never company-global-modes '(not comint-mode erc-mode message-mode help-mode gud-mode eshell-mode) + company-backends '(company-dabbrev) company-frontends '(company-pseudo-tooltip-frontend company-echo-metadata-frontend) diff --git a/modules/completion/company/test/test-company.el b/modules/completion/company/test/test-company.el index a523479be..ed69404b0 100644 --- a/modules/completion/company/test/test-company.el +++ b/modules/completion/company/test/test-company.el @@ -23,26 +23,33 @@ ;; (it "sets backends for a major mode" (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" (set-company-backend! :derived 'prog-mode 'a) - (expect (backends 'prog-mode) :to-equal '(a)) - (expect (backends 'emacs-lisp-mode) :to-equal '(a))) + (expect (backends 'prog-mode) :to-equal '(a t)) + (expect (backends 'emacs-lisp-mode) :to-equal '(a t))) (it "sets multiple backends for exact major modes" (set-company-backend! '(text-mode emacs-lisp-mode) 'a 'b) (expect (backends 'text-mode) :to-equal (backends 'emacs-lisp-mode))) (it "sets cumulative backends" - (set-company-backend! :derived 'prog-mode 'a) - (set-company-backend! 'emacs-lisp-mode 'b) - (expect (backends 'emacs-lisp-mode) :to-equal '(b a))) + (set-company-backend! :derived '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! '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" (set-company-backend! 'text-mode 'old '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" (set-company-backend! 'text-mode 'old) @@ -53,16 +60,16 @@ (set-company-backend! :derived 'prog-mode 'old) (set-company-backend! 'emacs-lisp-mode 'child) (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" (set-company-backend! :derived '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))) + (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! 'emacs-lisp-mode 'child) (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)))))