[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/company bbe0bc031a 13/30: company--multi-backend-adapte
From: |
ELPA Syncer |
Subject: |
[elpa] externals/company bbe0bc031a 13/30: company--multi-backend-adapter: Support suffix and `adjust-boundaries` |
Date: |
Sat, 13 Jul 2024 00:57:51 -0400 (EDT) |
branch: externals/company
commit bbe0bc031aa210d822f37d37bfe724cf53ef98f3
Author: Dmitry Gutov <dmitry@gutov.dev>
Commit: Dmitry Gutov <dmitry@gutov.dev>
company--multi-backend-adapter: Support suffix and `adjust-boundaries`
#1106 #340 #426
---
company.el | 71 ++++++++++++++++++++++++++++++------------------------
test/core-tests.el | 53 ++++++++++++++++++++++++++++++++++++++++
2 files changed, 92 insertions(+), 32 deletions(-)
diff --git a/company.el b/company.el
index acc8be01ca..f84b085e17 100644
--- a/company.el
+++ b/company.el
@@ -1318,7 +1318,6 @@ be recomputed when this value changes."
(`candidates
(company--multi-backend-adapter-candidates backends
(car args)
- (cadr args)
(or
company--multi-min-prefix 0)
separate))
(`set-min-prefix (setq company--multi-min-prefix (car args)))
@@ -1356,48 +1355,56 @@ be recomputed when this value changes."
(when (> (length arg) 0)
(let ((backend (or (get-text-property 0 'company-backend arg)
(car backends))))
+ (when (eq command 'adjust-boundaries)
+ (let ((entity (company--force-sync backend '(prefix) backend)))
+ (setq args (list arg
+ (company--prefix-str entity)
+ (company--suffix-str entity)))))
(apply backend command args))))))))
(defun company--multi-prefix (backends)
- (let (str len)
+ (let (res len)
(dolist (backend backends)
(let* ((prefix (company--force-sync backend '(prefix) backend))
- (prefix-len (cdr-safe prefix)))
+ (prefix-len (company--prefix-len prefix)))
(when (stringp (company--prefix-str prefix))
(cond
- ((not str)
- (setq str (company--prefix-str prefix)
- len (cdr-safe prefix)))
+ ((not res)
+ (setq res prefix
+ len (company--prefix-len prefix)))
((and prefix-len
(not (eq len t))
- (equal str (company--prefix-str prefix))
+ (equal (company--prefix-str res)
+ (company--prefix-str prefix))
(or (eq prefix-len t)
- (> prefix-len (or len (length str)))))
- (setq len prefix-len))))))
- (if (and str len)
- (cons str len)
- str)))
+ (> prefix-len (or len (length (company--prefix-str
prefix))))))
+ (setq len prefix-len
+ res prefix))))))
+ res))
-(defun company--multi-backend-adapter-candidates (backends prefix suffix
min-length separate)
- (let ((pairs (cl-loop for backend in backends
- when (let ((bp (let ((company-backend backend))
- (company-call-backend 'prefix))))
- (and
- ;; It's important that the lengths match.
- (equal (company--prefix-str bp) prefix)
- ;; One might override min-length, another not.
- (if (company--good-prefix-p bp min-length)
- t
- (push backend
company--multi-uncached-backends)
- nil)))
- collect (cons (funcall backend 'candidates prefix
suffix)
- (company--multi-candidates-mapper
- backend
- separate
- ;; Small perf optimization: don't tag
the
- ;; candidates received from the first
- ;; backend in the group.
- (not (eq backend (car backends))))))))
+(defun company--multi-backend-adapter-candidates (backends prefix min-length
separate)
+ (let* (backend-prefix suffix
+ (pairs (cl-loop for backend in backends
+ when (let ((bp (let ((company-backend backend))
+ (company-call-backend 'prefix))))
+ (and
+ ;; It's important that the lengths match.
+ (equal (company--prefix-str bp) prefix)
+ ;; One might override min-length, another not.
+ (if (company--good-prefix-p bp min-length)
+ (setq backend-prefix (company--prefix-str
bp)
+ suffix (company--suffix-str bp))
+ t
+ (push backend
company--multi-uncached-backends)
+ nil)))
+ collect (cons (funcall backend 'candidates
backend-prefix suffix)
+ (company--multi-candidates-mapper
+ backend
+ separate
+ ;; Small perf optimization: don't tag
the
+ ;; candidates received from the first
+ ;; backend in the group.
+ (not (eq backend (car backends))))))))
(company--merge-async pairs (lambda (values) (apply #'append values)))))
(defun company--multi-candidates-mapper (backend separate tag)
diff --git a/test/core-tests.el b/test/core-tests.el
index 09c44650f2..0fc661edf9 100644
--- a/test/core-tests.el
+++ b/test/core-tests.el
@@ -298,6 +298,59 @@
"aa"
(company-call-backend 'prefix))))))
+(ert-deftest company-multi-backend-supports-different-suffixes ()
+ (let* ((one (lambda (command &rest args)
+ (cl-case command
+ (prefix '("a" "b"))
+ (candidates
+ (should (equal args '("a" "b")))
+ '("a1b")))))
+ (two (lambda (command &rest args)
+ (cl-case command
+ (prefix "a")
+ (candidates
+ (should (equal args '("a" "")))
+ '("a2")))))
+ (tri (lambda (command &rest args)
+ (cl-case command
+ (prefix '("a" ""))
+ (candidates
+ (should (equal args '("a" "")))
+ '("a3")))))
+ (company-backend (list one two tri)))
+ (should
+ (equal '("a" "b")
+ (company-call-backend 'prefix)))
+ (should
+ (equal '("a1b" "a2" "a3")
+ (company-call-backend 'candidates "a" "b")))))
+
+(ert-deftest company-multi-backend-dispatches-adjust-boundaries ()
+ (let* ((one (lambda (command &rest args)
+ (cl-case command
+ (prefix '("a" ""))
+ (candidates
+ '("a1b")))))
+ (tri (lambda (command &rest args)
+ (cl-case command
+ (prefix '("a" "bcd"))
+ (adjust-boundaries
+ (should (equal args
+ '("a3" "a" "bcd")))
+ (cons "a" "bc"))
+ (candidates
+ '("a3")))))
+ (company-backend (list one tri))
+ (candidates (company-call-backend 'candidates "a" "")))
+ (should
+ (equal '("a" "")
+ (company-call-backend 'prefix)))
+ (should
+ (equal (cons "a" "bc")
+ (company-call-backend 'adjust-boundaries
+ (car (member "a3" candidates))
+ "a" "")))))
+
(ert-deftest company-begin-backend-failure-doesnt-break-company-backends ()
(with-temp-buffer
(insert "a")
- [elpa] externals/company 10fcb21d46 09/30: Remove suffix after completion by company-dabbrev-code too, (continued)
- [elpa] externals/company 10fcb21d46 09/30: Remove suffix after completion by company-dabbrev-code too, ELPA Syncer, 2024/07/13
- [elpa] externals/company 2fefdc7ce3 02/30: Fix test failures, ELPA Syncer, 2024/07/13
- [elpa] externals/company 436b0d6247 10/30: New backend command `adjust-boundaries`, ELPA Syncer, 2024/07/13
- [elpa] externals/company 477799b362 18/30: Make suffix matching use "proper suffix" logic by default, ELPA Syncer, 2024/07/13
- [elpa] externals/company a011dbd892 27/30: Update company-files tests, ELPA Syncer, 2024/07/13
- [elpa] externals/company 277640481a 19/30: Render the "preview" overlay over the matching suffix text, ELPA Syncer, 2024/07/13
- [elpa] externals/company 54b0148ce4 16/30: Fix bytecomp warnings, ELPA Syncer, 2024/07/13
- [elpa] externals/company d4e01ed948 21/30: #1474 change the reference in NEWS, ELPA Syncer, 2024/07/13
- [elpa] externals/company 31f7ad52e4 30/30: Merge pull request #1474 from company-mode/completion_inside_symbol, ELPA Syncer, 2024/07/13
- [elpa] externals/company a253fa5505 25/30: company-files--prefix: Capture suffix as well, ELPA Syncer, 2024/07/13
- [elpa] externals/company bbe0bc031a 13/30: company--multi-backend-adapter: Support suffix and `adjust-boundaries`,
ELPA Syncer <=
- [elpa] externals/company c8a06ff3bf 11/30: Support completion styles in company-etags too, ELPA Syncer, 2024/07/13
- [elpa] externals/company a986091380 20/30: Fix test failures, ELPA Syncer, 2024/07/13
- [elpa] externals/company 0503adea94 22/30: company-dabbrev: Also support completion inside a word, ELPA Syncer, 2024/07/13
- [elpa] externals/company 6f54897015 15/30: Fix remaining failure, ELPA Syncer, 2024/07/13
- [elpa] externals/company c987a27148 24/30: company-files: Use the `adjust-boundaries` action, ELPA Syncer, 2024/07/13
- [elpa] externals/company bc52a6136e 17/30: Strip the matching suffix in preview too, ELPA Syncer, 2024/07/13
- [elpa] externals/company ec587719e3 12/30: company-etags: CAPF match highlighting, ELPA Syncer, 2024/07/13
- [elpa] externals/company 92ebedd921 28/30: Better summary, fixed url, ELPA Syncer, 2024/07/13
- [elpa] externals/company 21bfd9cbc7 29/30: Fix "sneaky refresh" when boundaries are used, ELPA Syncer, 2024/07/13
- [elpa] externals/company 0de16299dc 26/30: Make sure to redraw popup when boundaries change, ELPA Syncer, 2024/07/13