[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)))