[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
scratch/icomplete-lazy-highlight-no-string-props 19defe0 2/3: should be
From: |
João Távora |
Subject: |
scratch/icomplete-lazy-highlight-no-string-props 19defe0 2/3: should be faster |
Date: |
Mon, 16 Aug 2021 14:18:43 -0400 (EDT) |
branch: scratch/icomplete-lazy-highlight-no-string-props
commit 19defe091d46002431ca37f5218cdc0521fff506
Author: João Távora <joaotavora@gmail.com>
Commit: João Távora <joaotavora@gmail.com>
should be faster
* lisp/minibuffer.el (completion--get-lazy-hilit-re):
(completion--flex-get-completion-score): New functions.
(completion--flex-adjust-metadata): Use
completion--flex-get-completion-score.
(completion-lazy-hilit): Use completion--get-lazy-hilit-re.
---
lisp/minibuffer.el | 26 +++++++++-----------------
1 file changed, 9 insertions(+), 17 deletions(-)
diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el
index b61620d..2660c9d 100644
--- a/lisp/minibuffer.el
+++ b/lisp/minibuffer.el
@@ -3541,21 +3541,19 @@ and useless hint. To author a completion style that
takes
advantage of this, look in the source of
`completion-pcm--hilit-commonality' for ideas.")
-(defvar completion--get-lazy-highlight-cache
+(defvar completion--lazy-highlight-cache
(make-hash-table :weakness 'key))
+(defvar completion--score-map (make-hash-table :size (obarray-size obarray)))
+
(defun completion--get-lazy-hilit-re ()
"Helper for `completion-lazy-hilit'."
- (let* ((data (gethash completion-lazy-hilit
completion--get-lazy-highlight-cache))
- (re (car data)))
- re))
+ (gethash completion-lazy-hilit completion--lazy-highlight-cache))
(defun completion--flex-get-completion-score (str)
"Get the Flex completion score of STR"
(if completion-lazy-hilit
- (let* ((data (gethash completion-lazy-hilit
completion--get-lazy-highlight-cache))
- (score-ht (and data (cdr data))))
- (or (gethash str score-ht) 0))
+ (gethash str completion--score-map)
(get-text-property 0 'completion-score str)))
(defun completion-lazy-hilit (str)
@@ -3563,7 +3561,7 @@ advantage of this, look in the source of
See documentation for variable `completion-lazy-hilit' for more
details."
(let* ((str (copy-sequence str))
- (re (and completion-lazy-hilit (completion--get-lazy-hilit-re)))
+ (re (completion--get-lazy-hilit-re))
(md (and re (string-match re str) (cddr (match-data t))))
(me (and md (match-end 0)))
(from 0))
@@ -3574,8 +3572,6 @@ details."
(add-face-text-property from me 'completions-common-part nil str))
str))
-
-
(defun completion-pcm--hilit-commonality (pattern completions)
"Show where and how well PATTERN matches COMPLETIONS.
PATTERN, a list of symbols and strings as seen
@@ -3588,14 +3584,11 @@ between 0 and 1, and with faces
`completions-common-part',
(let* ((re (completion-pcm--pattern->regex pattern 'group))
(point-idx (completion-pcm--pattern-point-idx pattern))
(case-fold-search completion-ignore-case)
- score-ht
last-md)
(when completion-lazy-hilit
(puthash completion-lazy-hilit
- (cons re (setq score-ht
- (make-hash-table
- :size (length completions))))
- completion--get-lazy-highlight-cache))
+ re
+ completion--lazy-highlight-cache))
(mapcar
(lambda (str)
(unless completion-lazy-hilit
@@ -3683,8 +3676,7 @@ between 0 and 1, and with faces `completions-common-part',
nil str))
(let ((score (/ score-numerator (* end (1+ score-denominator))
1.0)))
(unless (zerop (length str))
- (if completion-lazy-hilit
- (puthash str score score-ht)
+ (if completion-lazy-hilit (puthash str score
completion--score-map)
(put-text-property 0 1 'completion-score score str)))))
str)
completions))))