[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] master 7779820 092/173: Remove completions without annotations wh
From: |
Dmitry Gutov |
Subject: |
[elpa] master 7779820 092/173: Remove completions without annotations when considering duplicates |
Date: |
Thu, 23 Jun 2016 00:28:41 +0000 (UTC) |
branch: master
commit 777982049314af306a020b7de2ca6cb00b428822
Author: Dmitry Gutov <address@hidden>
Commit: Dmitry Gutov <address@hidden>
Remove completions without annotations when considering duplicates
Closes #432.
---
NEWS.md | 3 +++
company.el | 54 +++++++++++++++++++++++++++++++---------------------
test/core-tests.el | 14 ++++++++------
3 files changed, 43 insertions(+), 28 deletions(-)
diff --git a/NEWS.md b/NEWS.md
index b3ab123..a32bade 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -2,6 +2,9 @@
## Next
+* When duplicates are removed, completions without annotations are also removed
+ in favor of completions with equal names that have annotations (experimental
+ change) ([#432](https://github.com/company-mode/company-mode/issues/432)).
* New user option `company-etags-everywhere`.
* `company-yasnippet` supports `yas-key-syntaxes` better. But we use them in
the
reverse order, preferring the longest key prefix that matches anything. And
we
diff --git a/company.el b/company.el
index 48f41d4..8d416de 100644
--- a/company.el
+++ b/company.el
@@ -1199,7 +1199,7 @@ can retrieve meta-data for them."
(unless (company-call-backend 'sorted)
(setq candidates (sort candidates 'string<)))
(when (company-call-backend 'duplicates)
- (company--strip-duplicates candidates))
+ (setq candidates (company--strip-duplicates candidates)))
candidates)
(defun company--postprocess-candidates (candidates)
@@ -1210,27 +1210,37 @@ can retrieve meta-data for them."
(company--transform-candidates candidates))
(defun company--strip-duplicates (candidates)
- (let ((c2 candidates)
- (annos 'unk))
- (while c2
- (setcdr c2
- (let ((str (pop c2)))
- (while (let ((str2 (car c2)))
- (if (not (equal str str2))
- (progn
- (setq annos 'unk)
- nil)
- (when (eq annos 'unk)
- (setq annos (list (company-call-backend
- 'annotation str))))
- (let ((anno2 (company-call-backend
- 'annotation str2)))
- (if (member anno2 annos)
- t
- (push anno2 annos)
- nil))))
- (pop c2))
- c2)))))
+ (let* ((annos 'unk)
+ (str (car candidates))
+ (ref (cdr candidates))
+ res str2 anno2)
+ (while ref
+ (setq str2 (pop ref))
+ (if (not (equal str str2))
+ (progn
+ (push str res)
+ (setq str str2)
+ (setq annos 'unk))
+ (setq anno2 (company-call-backend
+ 'annotation str2))
+ (cond
+ ((null anno2)) ; Skip it.
+ ((when (eq annos 'unk)
+ (let ((ann1 (company-call-backend 'annotation str)))
+ (if (null ann1)
+ ;; No annotation on the earlier element, drop it.
+ t
+ (setq annos (list ann1))
+ nil)))
+ (setq annos (list anno2))
+ (setq str str2))
+ ((member anno2 annos)) ; Also skip.
+ (t
+ (push anno2 annos)
+ (push str res) ; Maintain ordering.
+ (setq str str2)))))
+ (push str res)
+ (nreverse res)))
(defun company--transform-candidates (candidates)
(let ((c candidates))
diff --git a/test/core-tests.el b/test/core-tests.el
index 13e547e..dcadfd3 100644
--- a/test/core-tests.el
+++ b/test/core-tests.el
@@ -405,9 +405,11 @@
("a" . "b")
("a" . "c")
("a" . "b")
- ("b" . "c")
("b" . nil)
- ("a" . "b")))
+ ("b" . "c")
+ ("a" . "b")
+ ("c" . nil)
+ ("c" . nil)))
(fn (lambda (kvs)
(mapcar (lambda (kv) (propertize (car kv) 'ann (cdr kv)))
kvs)))
@@ -419,18 +421,18 @@
(`duplicates t)
(`annotation (get-text-property 0 'ann arg)))))
(reference '(("a" . "b")
- ("a" . nil)
("a" . "c")
("b" . "c")
- ("b" . nil)
- ("a" . "b"))))
+ ("a" . "b")
+ ("c" . nil))))
(let ((ct-sorted t))
(should (ct-equal-including-properties
(company--preprocess-candidates (funcall fn kvs))
(funcall fn reference))))
(should (ct-equal-including-properties
(company--preprocess-candidates (funcall fn kvs))
- (funcall fn (butlast reference))))))
+ (funcall fn (append (butlast reference 2)
+ (last reference)))))))
;;; Row and column
- [elpa] master 46d4455 071/173: Merge pull request #402 from vspinu/sorted, (continued)
- [elpa] master 46d4455 071/173: Merge pull request #402 from vspinu/sorted, Dmitry Gutov, 2016/06/22
- [elpa] master 050c0c1 070/173: Improvements of the `company-backends` docstring, Dmitry Gutov, 2016/06/22
- [elpa] master 4646d35 078/173: Allow advising company-dabbrev(-code)? regex generation, Dmitry Gutov, 2016/06/22
- [elpa] master ed3e711 084/173: company-yasnippet: Disable cache (#422), Dmitry Gutov, 2016/06/22
- [elpa] master 7d14350 051/173: company-eclim-executable: Pick up the value of eclim-executable, if present, Dmitry Gutov, 2016/06/22
- [elpa] master 9e66366 067/173: Fix #404 by blanking out line-prefix again, Dmitry Gutov, 2016/06/22
- [elpa] master 433ae92 072/173: Retouch the docstring further, Dmitry Gutov, 2016/06/22
- [elpa] master 02d0e74 074/173: Modernize the Commentary a bit, Dmitry Gutov, 2016/06/22
- [elpa] master 7d005c4 080/173: Document some company-grab- functions, Dmitry Gutov, 2016/06/22
- [elpa] master 07a4e9e 094/173: Travis: Try to fix the "held broken packages", Dmitry Gutov, 2016/06/22
- [elpa] master 7779820 092/173: Remove completions without annotations when considering duplicates,
Dmitry Gutov <=
- [elpa] master f1ca92f 042/173: Update NEWS [ci skip], Dmitry Gutov, 2016/06/22
- [elpa] master f45b11e 033/173: Don't replace the default argument values with `argN` anymore, Dmitry Gutov, 2016/06/22
- [elpa] master 35f4178 043/173: Allow including window-start in the doc-buffer return value, Dmitry Gutov, 2016/06/22
- [elpa] master b0a946d 052/173: company-clang--start-process: Only erase buffer when there's no existing process, Dmitry Gutov, 2016/06/22
- [elpa] master 5e29e41 003/173: company-files--grab-existing-name: Check if the file is remote, Dmitry Gutov, 2016/06/22
- [elpa] master 7579ced 055/173: Fix a bug reference, Dmitry Gutov, 2016/06/22
- [elpa] master 05987e6 056/173: Fix #362 (arbitrary jumping of point), Dmitry Gutov, 2016/06/22
- [elpa] master 679846a 065/173: Makefile: allow package and elpa targets to run without git, Dmitry Gutov, 2016/06/22
- [elpa] master 33f7bbc 077/173: Fix some compilation warnings, Dmitry Gutov, 2016/06/22
- [elpa] master d39b956 059/173: Introduce company-indent-or-complete-common, Dmitry Gutov, 2016/06/22