From 395f846b05fa37be4d00247941a370e6e0b7790e Mon Sep 17 00:00:00 2001 From: Dmitry Gutov Date: Sun, 15 May 2016 03:50:50 +0300 Subject: [PATCH] Revert "Remove completions without annotations when considering duplicates" This reverts commit 777982049314af306a020b7de2ca6cb00b428822. Closes #509. --- NEWS.md | 3 --- company.el | 54 +++++++++++++++++++--------------------------- test/core-tests.el | 14 ++++++------ 3 files changed, 28 insertions(+), 43 deletions(-) diff --git a/NEWS.md b/NEWS.md index 6612ca28e..96e72e8d3 100644 --- a/NEWS.md +++ b/NEWS.md @@ -14,9 +14,6 @@ the selected tooltip line. * `company-clang-objc-templatify` has been renamed to `company-template-objc-templatify`. -* 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 23ed09a30..e35d7e50d 100644 --- a/company.el +++ b/company.el @@ -1205,7 +1205,7 @@ can retrieve meta-data for them." (unless (company-call-backend 'sorted) (setq candidates (sort candidates 'string<))) (when (company-call-backend 'duplicates) - (setq candidates (company--strip-duplicates candidates))) + (company--strip-duplicates candidates)) candidates) (defun company--postprocess-candidates (candidates) @@ -1216,37 +1216,27 @@ can retrieve meta-data for them." (company--transform-candidates candidates)) (defun company--strip-duplicates (candidates) - (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))))) - (when str (push str res)) - (nreverse res))) + (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))))) (defun company--transform-candidates (candidates) (let ((c candidates)) diff --git a/test/core-tests.el b/test/core-tests.el index 46d17093b..666ed80e0 100644 --- a/test/core-tests.el +++ b/test/core-tests.el @@ -408,11 +408,9 @@ ("a" . "b") ("a" . "c") ("a" . "b") - ("b" . nil) ("b" . "c") - ("a" . "b") - ("c" . nil) - ("c" . nil))) + ("b" . nil) + ("a" . "b"))) (fn (lambda (kvs) (mapcar (lambda (kv) (propertize (car kv) 'ann (cdr kv))) kvs))) @@ -424,18 +422,18 @@ (`duplicates t) (`annotation (get-text-property 0 'ann arg))))) (reference '(("a" . "b") + ("a" . nil) ("a" . "c") ("b" . "c") - ("a" . "b") - ("c" . nil)))) + ("b" . nil) + ("a" . "b")))) (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 (append (butlast reference 2) - (last reference))))))) + (funcall fn (butlast reference)))))) ;;; Row and column -- 2.39.2