[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] master a7d40ed 003/177: Closes #318: correctly implement YAS--MOD
From: |
João Távora |
Subject: |
[elpa] master a7d40ed 003/177: Closes #318: correctly implement YAS--MODES-TO-ACTIVATE |
Date: |
Sat, 28 Mar 2015 15:40:24 +0000 |
branch: master
commit a7d40ed14a8fe8fea4dc028086ac43bdfeb0d341
Author: João Távora <address@hidden>
Commit: João Távora <address@hidden>
Closes #318: correctly implement YAS--MODES-TO-ACTIVATE
- simpler and got rid of YAS--ALL-PARENTS
- also got rid of YAS/MODE-SYMBOL backward compatibility hack
---
yasnippet-tests.el | 24 +++++++++++++++++-----
yasnippet.el | 53 ++++++++++++---------------------------------------
2 files changed, 31 insertions(+), 46 deletions(-)
diff --git a/yasnippet-tests.el b/yasnippet-tests.el
index ff14702..7349d6f 100644
--- a/yasnippet-tests.el
+++ b/yasnippet-tests.el
@@ -308,6 +308,7 @@ TODO: correct this bug!"
(funcall ,saved-sym))))
,@body))))
+
(defmacro yas-with-some-interesting-snippet-dirs (&rest body)
`(yas-saving-variables
(yas-with-overriden-buffer-list
@@ -327,6 +328,7 @@ TODO: correct this bug!"
("lisp-interaction-mode" ("sc" . "brother from another mother"))))
,@body))))
+
(ert-deftest basic-jit-loading ()
"Test basic loading and expansion of snippets"
(yas-with-some-interesting-snippet-dirs
@@ -351,14 +353,24 @@ TODO: correct this bug!"
("c-mode"
(".yas-parents" . "cc-mode"))
("cc-mode"
- (".yas-parents" . "yet-another-c-mode"))
+ (".yas-parents" . "yet-another-c-mode
and-that-one"))
("yet-another-c-mode"
- (".yas-parents" . "c-mode"))))
+ (".yas-parents" . "c-mode and-also-this-one
lisp-interaction-mode"))))
(yas-reload-all)
- (condition-case nil
- (yas--all-parents 'c-mode)
- (error
- (ert-fail "cyclic parenthood test failed"))))))
+ (with-temp-buffer
+ (let* ((major-mode 'c-mode)
+ (expected '(c-mode
+ cc-mode
+ yet-another-c-mode
+ and-also-this-one
+ and-that-one
+ prog-mode
+ emacs-lisp-mode
+ lisp-interaction-mode))
+ (observed (yas--modes-to-activate)))
+ (should (null (cl-set-exclusive-or expected observed)))
+ (should (= (length expected)
+ (length observed))))))))
(defun yas--basic-jit-loading-1 ()
(with-temp-buffer
diff --git a/yasnippet.el b/yasnippet.el
index aa3e312..dab6b55 100644
--- a/yasnippet.el
+++ b/yasnippet.el
@@ -56,9 +56,6 @@
;; `yas-snippet-dirs' and is used for deciding which
;; snippets to consider for the active buffer.
;;
-;; Deprecated `yas/mode-symbol' aliases this variable for
-;; backward-compatibility.
-;;
;; Major commands are:
;;
;; M-x yas-expand
@@ -674,11 +671,6 @@ There might be additional parenting information stored in
the
`derived-mode-parent' property of some mode symbols, but that is
not recorded here.")
-(defvar yas--ancestors (make-hash-table)
- "A hash table of mode symbols do lists of all parent mode symbols.
-
-A cache managed by `yas--all-parents'")
-
(defvar yas--direct-keymaps (list)
"Keymap alist supporting direct snippet keybindings.
@@ -704,17 +696,19 @@ defined direct keybindings to the command
(defun yas--modes-to-activate ()
"Compute list of mode symbols that are active for `yas-expand'
and friends."
- (let ((modes-to-activate (list major-mode))
- (mode major-mode))
- (while (setq mode (get mode 'derived-mode-parent))
- (push mode modes-to-activate))
- (dolist (mode (yas-extra-modes))
- (push mode modes-to-activate))
- (remove-duplicates
- (append modes-to-activate
- (mapcan #'(lambda (mode)
- (yas--all-parents mode))
- modes-to-activate)))))
+ (cl-labels
+ ((dfs (mode &optional explored)
+ (push mode explored)
+ (cons mode
+ (loop for neighbour
+ in (remove nil (cons (get mode
+ 'derived-mode-parent)
+ (gethash mode yas--parents)))
+
+ unless (memq neighbour explored)
+ append (dfs neighbour explored)))))
+ (remove-duplicates (append yas-extra-modes
+ (dfs major-mode)))))
(defvar yas-minor-mode-hook nil
"Hook run when `yas-minor-mode' is turned on.")
@@ -1162,24 +1156,6 @@ conditions to filter out potential expansions."
(t
(eq requirement result)))))
-(defun yas--all-parents (mode)
- "Return a list of all parent modes of MODE."
- (or (gethash mode yas--ancestors)
- (let ((seen '()))
- (labels ((yas--all-parents-1
- (m)
- (cond ((memq m seen)
- (yas--message 1
- "Cyclic parenthood: mode %s has already
seen as a parent of mode %s"
- m mode)
- nil)
- (t
- (let* ((parents (gethash m yas--parents)))
- (setq seen (append seen parents))
- (append parents (mapcan #'yas--all-parents-1
parents)))))))
- (puthash mode (yas--all-parents-1 mode)
- yas--ancestors)))))
-
(defun yas--table-templates (table)
(when table
(let ((acc (list)))
@@ -1301,9 +1277,6 @@ Can be a symbol or a list of symbols.
This variable probably makes more sense as buffer-local, so
ensure your use `make-local-variable' when you set it.")
-(defun yas-extra-modes ()
- (if (listp yas-extra-modes) yas-extra-modes (list yas-extra-modes)))
-(defvaralias 'yas/mode-symbol 'yas-extra-modes)
(defun yas--table-get-create (mode)
"Get or create the snippet table corresponding to MODE."
- [elpa] master updated (da45e68 -> 39a27b6), João Távora, 2015/03/28
- [elpa] master 6ce6b24 001/177: fix: replace 'text' in 'yas-text' in bundled snippets, João Távora, 2015/03/28
- [elpa] master ddaf9a9 002/177: Fix: cleanup yasnippet-tests.el, João Távora, 2015/03/28
- [elpa] master ce50b3d 004/177: Closes #318: Don't use CL-LABELS for backward compatibility with older emacsen, João Távora, 2015/03/28
- [elpa] master a7d40ed 003/177: Closes #318: correctly implement YAS--MODES-TO-ACTIVATE,
João Távora <=
- [elpa] master 78c52fd 005/177: fix: shoosh warning with LETREC instead of LET, João Távora, 2015/03/28
- [elpa] master 3ec62ab 006/177: fix: please older emacsen, don't use LETREC after all, João Távora, 2015/03/28
- [elpa] master 1aac5fc 008/177: Merge pull request #407 from dongxiong/patch-1, João Távora, 2015/03/28
- [elpa] master 79f3656 011/177: fix font-lock-keywords syntax, João Távora, 2015/03/28
- [elpa] master 13cfdbc 009/177: fix: remove references to dropdown-list.el in Rakefile, João Távora, 2015/03/28
- [elpa] master 8853127 007/177: Update manual.mdown, João Távora, 2015/03/28
- [elpa] master d963c41 010/177: Closes #406: correct docstring for yas-extra-modes, João Távora, 2015/03/28
- [elpa] master f21ddd1 012/177: remove redundant font-lock-keywords, João Távora, 2015/03/28
- [elpa] master 90d4cae 013/177: inhibit change hooks during (insert content), João Távora, 2015/03/28
- [elpa] master 7849ffc 015/177: fix: don't use universal-argument-num-events, João Távora, 2015/03/28