]> git.eshelyaron.com Git - emacs.git/commitdiff
; Optimize 'completion-preview--try-table'
authorEshel Yaron <me@eshelyaron.com>
Thu, 11 Apr 2024 17:16:26 +0000 (19:16 +0200)
committerEshel Yaron <me@eshelyaron.com>
Fri, 12 Apr 2024 08:13:09 +0000 (10:13 +0200)
* 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>

lisp/completion-preview.el

index 3d99ade64e7861c8a92c2a1465336f734aef21fc..4637cd7d199bb015780166c13b0e3dd4ca66eaba 100644 (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.
 
@@ -227,7 +236,11 @@ non-nil, return nil instead."
          (md (completion-metadata string table pred))
          (sort-fn (or (completion-metadata-get md '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))