emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/company bc3e0fdc2d 1/2: company-yasnippet: Support yas-


From: ELPA Syncer
Subject: [elpa] externals/company bc3e0fdc2d 1/2: company-yasnippet: Support yas-key-syntaxes better
Date: Wed, 22 Nov 2023 21:57:29 -0500 (EST)

branch: externals/company
commit bc3e0fdc2da330f0d013c4caa8561522ffb7d9ff
Author: Dmitry Gutov <dmitry@gutov.dev>
Commit: Dmitry Gutov <dmitry@gutov.dev>

    company-yasnippet: Support yas-key-syntaxes better
    
    * Use the longest key-prefix internally (while still returning symbol 
prefix)
    that has any matching snippets.  But attach the key-prefix's length.
    * And only return the completions for that key-prefix.
    
    Fixes #1268
---
 NEWS.md              |  2 ++
 company-yasnippet.el | 22 ++++++++++++++++++----
 2 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/NEWS.md b/NEWS.md
index c5964e9057..333d62ab79 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -2,6 +2,8 @@
 
 # Next
 
+* Better support for `yas-key-syntaxes`
+  (#[1268](https://github.com/company-mode/company-mode/issues/1268)).
 * New user option `company-tooltip-scrollbar-width` with default 0.4.
 * The tooltip uses a more complex rendering approach, supporting double
   width/CJK characters, as well as buffer text of different sizes
diff --git a/company-yasnippet.el b/company-yasnippet.el
index d2f56b628c..f5d6d90db4 100644
--- a/company-yasnippet.el
+++ b/company-yasnippet.el
@@ -72,7 +72,7 @@ It has to accept one argument: the snippet's name.")
         (let ((prefix (buffer-substring-no-properties (point) original)))
           (unless (equal prefix (car prefixes))
             (push prefix prefixes))))
-      prefixes)))
+      (nreverse prefixes))))
 
 (defun company-yasnippet--candidates (prefix)
   ;; Process the prefixes in reverse: unlike Yasnippet, we look for prefix
@@ -135,6 +135,22 @@ It has to accept one argument: the snippet's name.")
           (ignore-errors (font-lock-ensure))))
       (current-buffer))))
 
+(defun company-yasnippet--prefix ()
+  ;; We can avoid the prefix length manipulations after GH#426 is fixed.
+  (let* ((prefix (company-grab-symbol))
+         (tables (yas--get-snippet-tables))
+         (key-prefixes (company-yasnippet--key-prefixes))
+         key-prefix)
+    (while (and key-prefixes
+                (setq key-prefix (pop key-prefixes)))
+      (when (company-yasnippet--completions-for-prefix
+             prefix key-prefix tables)
+        ;; Stop iteration.
+        (setq key-prefixes nil)))
+    (if (equal key-prefix prefix)
+        prefix
+      (cons prefix (length key-prefix)))))
+
 ;;;###autoload
 (defun company-yasnippet (command &optional arg &rest _ignore)
   "`company-mode' backend for `yasnippet'.
@@ -163,10 +179,8 @@ shadow backends that come after it.  Recommended usages:
   (cl-case command
     (interactive (company-begin-backend 'company-yasnippet))
     (prefix
-     ;; Should probably use `yas--current-key', but that's bound to be slower.
-     ;; How many trigger keys start with non-symbol characters anyway?
      (and (bound-and-true-p yas-minor-mode)
-          (company-grab-symbol)))
+          (company-yasnippet--prefix)))
     (annotation
      (funcall company-yasnippet-annotation-fn
               (get-text-property 0 'yas-annotation arg)))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]