[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] master bdf6b22 138/173: Fix #474 by filtering dabbrev completions
From: |
Dmitry Gutov |
Subject: |
[elpa] master bdf6b22 138/173: Fix #474 by filtering dabbrev completions at the end |
Date: |
Thu, 23 Jun 2016 00:28:45 +0000 (UTC) |
branch: master
commit bdf6b221c7b404d21e22851f75a6f294e415c641
Author: Dmitry Gutov <address@hidden>
Commit: Dmitry Gutov <address@hidden>
Fix #474 by filtering dabbrev completions at the end
It seems impossible to combine supporting company-dabbrev-char-regexp, with
arbitrary values, with using the "word boundary anchor" (or any of the three
relevant anchors). And without anchors, using the regexp engine without
lookaheads or etc, we must filter completions at the end.
Which is okay, because it can allow us to cache the full list globally and
refresh it less often, as well as implement fuzzy filtering more easily
(#418).
---
company-dabbrev.el | 18 ++++++++++--------
1 file changed, 10 insertions(+), 8 deletions(-)
diff --git a/company-dabbrev.el b/company-dabbrev.el
index 37dcecc..05c9820 100644
--- a/company-dabbrev.el
+++ b/company-dabbrev.el
@@ -1,6 +1,6 @@
;;; company-dabbrev.el --- dabbrev-like company-mode completion backend -*-
lexical-binding: t -*-
-;; Copyright (C) 2009, 2011, 2014, 2015 Free Software Foundation, Inc.
+;; Copyright (C) 2009, 2011, 2014, 2015, 2016 Free Software Foundation, Inc.
;; Author: Nikolaj Schumacher
@@ -91,11 +91,8 @@ This variable affects both `company-dabbrev' and
`company-dabbrev-code'."
(> (float-time (time-since ,start)) ,limit)
(throw 'done 'company-time-out))))))
-(defun company-dabbrev--make-regexp (prefix)
- (concat (if (equal prefix "")
- (concat "\\(?:" company-dabbrev-char-regexp "\\)")
- (regexp-quote prefix))
- "\\(?:" company-dabbrev-char-regexp "\\)*"))
+(defun company-dabbrev--make-regexp ()
+ (concat "\\(?:" company-dabbrev-char-regexp "\\)+"))
(defun company-dabbrev--search-buffer (regexp pos symbols start limit
ignore-comments)
@@ -118,7 +115,7 @@ This variable affects both `company-dabbrev' and
`company-dabbrev-code'."
(save-excursion
;; Before, we used backward search, but it matches non-greedily,
and
;; that forced us to use the "beginning/end of word" anchors in
- ;; `company-dabbrev--make-regexp'.
+ ;; `company-dabbrev--make-regexp'. It's also about 2x slower.
(while (re-search-forward regexp tmp-end t)
(if (and ignore-comments (save-match-data
(company-in-string-or-comment)))
(re-search-forward "\\s>\\|\\s!\\|\\s\"" tmp-end t)
@@ -161,6 +158,10 @@ This variable affects both `company-dabbrev' and
`company-dabbrev-code'."
company-dabbrev-char-regexp)
1)))
+(defun company-dabbrev--filter (prefix candidates)
+ (let ((completion-ignore-case company-dabbrev-ignore-case))
+ (all-completions prefix candidates)))
+
;;;###autoload
(defun company-dabbrev (command &optional arg &rest ignored)
"dabbrev-like `company-mode' completion backend."
@@ -170,7 +171,7 @@ This variable affects both `company-dabbrev' and
`company-dabbrev-code'."
(prefix (company-dabbrev--prefix))
(candidates
(let* ((case-fold-search company-dabbrev-ignore-case)
- (words (company-dabbrev--search (company-dabbrev--make-regexp arg)
+ (words (company-dabbrev--search (company-dabbrev--make-regexp)
company-dabbrev-time-limit
(pcase
company-dabbrev-other-buffers
(`t (list major-mode))
@@ -178,6 +179,7 @@ This variable affects both `company-dabbrev' and
`company-dabbrev-code'."
(downcase-p (if (eq company-dabbrev-downcase 'case-replace)
case-replace
company-dabbrev-downcase)))
+ (setq words (company-dabbrev--filter arg words))
(if downcase-p
(mapcar 'downcase words)
words)))
- [elpa] master 9fb6072 116/173: Reimplement -electric-do using a pre-command-hook, (continued)
- [elpa] master 9fb6072 116/173: Reimplement -electric-do using a pre-command-hook, Dmitry Gutov, 2016/06/22
- [elpa] master c845c43 097/173: Revert "Add support for company-face", Dmitry Gutov, 2016/06/22
- [elpa] master e477eaf 107/173: Bump copyright years, Dmitry Gutov, 2016/06/22
- [elpa] master 7a05d1c 115/173: company-cancel: Call pre/post-completion at the end, Dmitry Gutov, 2016/06/22
- [elpa] master cd69d7b 119/173: Add company-semantic-begin-after-member-access, Dmitry Gutov, 2016/06/22
- [elpa] master 724e6dd 136/173: Delete the cache when async completion aborts, Dmitry Gutov, 2016/06/22
- [elpa] master e251568 137/173: Update test for the latest change, Dmitry Gutov, 2016/06/22
- [elpa] master 7afffbc 068/173: Spell "backend" and "frontend" without hyphens, Dmitry Gutov, 2016/06/22
- [elpa] master 5565541 126/173: Option to have tempo expand tags after completion., Dmitry Gutov, 2016/06/22
- [elpa] master ec9f6c7 127/173: Moved company-tempo-insert call to post-completion, Dmitry Gutov, 2016/06/22
- [elpa] master bdf6b22 138/173: Fix #474 by filtering dabbrev completions at the end,
Dmitry Gutov <=
- [elpa] master e65ab4c 111/173: Merge pull request #453 from jtatarik/bbdb-multiple-recipients, Dmitry Gutov, 2016/06/22
- [elpa] master 077182c 154/173: Add autoload cookies, Dmitry Gutov, 2016/06/22
- [elpa] master a619a93 132/173: Merge pull request #465 from vspinu/files-optim, Dmitry Gutov, 2016/06/22
- [elpa] master e357eb6 164/173: Remove the [return] binding (#530), Dmitry Gutov, 2016/06/22
- [elpa] master b8f8777 161/173: New transformer: company-sort-prefer-same-case-prefix, Dmitry Gutov, 2016/06/22
- [elpa] master 8cc284e 162/173: Merge pull request #531 from juergenhoetzel/master, Dmitry Gutov, 2016/06/22
- [elpa] master 387b4d1 106/173: Fix "obsolete function" warning, Dmitry Gutov, 2016/06/22
- [elpa] master 0a6bfa9 108/173: company-capf: Add :company-prefix-length property function, Dmitry Gutov, 2016/06/22
- [elpa] master 1f5389b 146/173: Merge pull request #483 from stardiviner/add-julia-keywords, Dmitry Gutov, 2016/06/22
- [elpa] master 6c8763a 151/173: Fixed lighter for grouped backends, Dmitry Gutov, 2016/06/22