1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-11-25 07:28:20 +00:00

; Optimize 'completion-preview--try-table'

* lisp/completion-preview.el (completion-preview-completion-styles):
New variable.  Default to only include the 'basic' completion style.
(completion-preview--try-table): Let-bind 'completion-styles' when
calling 'completion-all-completions'.  With the default value of
'completion-preview-completion-styles', this yields a significant
performance improvement (up to 4 times faster compared to the
'substring' style when tested with 'elisp-completion-at-point').

Suggested by Ergus <spacibba@aol.com>
This commit is contained in:
Eshel Yaron 2024-04-11 19:16:26 +02:00
parent a69890eea9
commit 4ff852a558
No known key found for this signature in database
GPG Key ID: EF3EE9CA35D78618

View File

@ -206,6 +206,15 @@ Completion Preview mode adds this function to
#'completion-preview--window-selection-change t)
(completion-preview-hide)))
(defvar completion-preview-completion-styles '(basic)
"List of completion styles that Completion Preview mode uses.
Since Completion Preview mode shows prefix completion candidates, this
list should normally only include completion styles that perform prefix
completion, but other candidates are filtered out and cause no harm.
See also `completion-styles'.")
(defun completion-preview--try-table (table beg end props)
"Check TABLE for a completion matching the text between BEG and END.
@ -228,7 +237,11 @@ non-nil, return nil instead."
(sort-fn (or (completion-metadata-get md 'cycle-sort-function)
(completion-metadata-get md 'display-sort-function)
completion-preview-sort-function))
(all (let ((completion-lazy-hilit t))
(all (let ((completion-lazy-hilit t)
;; FIXME: This does not override styles prescribed
;; by the completion category via
;; e.g. `completion-category-defaults'.
(completion-styles completion-preview-completion-styles))
(completion-all-completions string table pred
(- (point) beg) md)))
(last (last all))