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

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

[elpa] master ac3fe83 30/60: Merge pull request #621 from npostavs/dfs-e


From: João Távora
Subject: [elpa] master ac3fe83 30/60: Merge pull request #621 from npostavs/dfs-extra-modes2
Date: Thu, 21 Jan 2016 22:35:58 +0000

branch: master
commit ac3fe832471449f432c8cc3054166e94168a5ee2
Merge: 710ea4d fb6ec67
Author: Noam Postavsky <address@hidden>
Commit: Noam Postavsky <address@hidden>

    Merge pull request #621 from npostavs/dfs-extra-modes2
    
    find parents for extra-modes too (v2)
---
 yasnippet-tests.el |   33 +++++++++++++++++++++++++++++----
 yasnippet.el       |   32 ++++++++++++++++----------------
 2 files changed, 45 insertions(+), 20 deletions(-)

diff --git a/yasnippet-tests.el b/yasnippet-tests.el
index fbf79f8..4756571 100644
--- a/yasnippet-tests.el
+++ b/yasnippet-tests.el
@@ -491,15 +491,40 @@ TODO: correct this bug!"
                           yet-another-c-mode
                           and-also-this-one
                           and-that-one
-                          ;; prog-mode doesn't exit in emacs 24.3
+                          ;; prog-mode doesn't exist in emacs 24.3
                           ,@(if (fboundp 'prog-mode)
                                 '(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))))))))
+         (should (equal (sort expected #'string<) (sort observed 
#'string<))))))))
+
+(ert-deftest extra-modes-parenthood ()
+  "Test activation of parents of `yas--extra-modes'."
+  (yas-saving-variables
+   (yas-with-snippet-dirs '((".emacs.d/snippets"
+                             ("c-mode"
+                              (".yas-parents" . "cc-mode"))
+                             ("cc-mode"
+                              (".yas-parents" . "yet-another-c-mode 
and-that-one"))
+                             ("yet-another-c-mode"
+                              (".yas-parents" . "c-mode and-also-this-one 
lisp-interaction-mode"))))
+     (yas-reload-all)
+     (with-temp-buffer
+       (let* ((_ (yas-activate-extra-mode 'c-mode))
+              (expected `(,major-mode
+                          c-mode
+                          cc-mode
+                          yet-another-c-mode
+                          and-also-this-one
+                          and-that-one
+                          ;; prog-mode doesn't exist in emacs 24.3
+                          ,@(if (fboundp 'prog-mode)
+                                '(prog-mode))
+                          emacs-lisp-mode
+                          lisp-interaction-mode))
+              (observed (yas--modes-to-activate)))
+         (should (equal (sort expected #'string<) (sort observed 
#'string<))))))))
 
 (ert-deftest issue-492-and-494 ()
   (defalias 'yas--phony-c-mode 'c-mode)
diff --git a/yasnippet.el b/yasnippet.el
index 1311cd0..a119011 100644
--- a/yasnippet.el
+++ b/yasnippet.el
@@ -728,22 +728,22 @@ defined direct keybindings to the command
 (defun yas--modes-to-activate (&optional mode)
   "Compute list of mode symbols that are active for `yas-expand'
 and friends."
-  (let (dfs)
-    (setq dfs (lambda (mode &optional explored)
-                (push mode explored)
-                (cons mode
-                      (loop for neighbour
-                            in (cl-list* (get mode 'derived-mode-parent)
-                                         (ignore-errors (symbol-function mode))
-                                         (gethash mode yas--parents))
-                            when (and neighbour
-                                      (not (memq neighbour explored))
-                                      (symbolp neighbour))
-                            append (funcall dfs neighbour explored)))))
-    (remove-duplicates (if mode
-                           (funcall dfs mode)
-                         (append yas--extra-modes
-                                 (funcall dfs major-mode))))))
+  (let (dfs explored)
+    (setq dfs (lambda (mode)
+                (unless (memq mode explored)
+                  (push mode explored)
+                  (loop for neighbour
+                        in (cl-list* (get mode 'derived-mode-parent)
+                                     (ignore-errors (symbol-function mode))
+                                     (gethash mode yas--parents))
+                        when (and neighbour
+                                  (not (memq neighbour explored))
+                                  (symbolp neighbour))
+                        do (funcall dfs neighbour)))))
+    (if mode
+        (funcall dfs mode)
+      (mapcar dfs (cons major-mode yas--extra-modes)))
+    explored))
 
 (defvar yas-minor-mode-hook nil
   "Hook run when `yas-minor-mode' is turned on.")



reply via email to

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