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

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

[elpa] externals/yasnippet d7f55c7501: (yas--all-parents): Fix stale cac


From: ELPA Syncer
Subject: [elpa] externals/yasnippet d7f55c7501: (yas--all-parents): Fix stale cache issue #1180
Date: Mon, 8 Jan 2024 12:59:39 -0500 (EST)

branch: externals/yasnippet
commit d7f55c7501a67a27f45154a6d4bdc50c2c235623
Author: Stefan Monnier <monnier@iro.umontreal.ca>
Commit: Stefan Monnier <monnier@iro.umontreal.ca>

    (yas--all-parents): Fix stale cache issue #1180
    
    * yasnippet.el (yas--all-parents): Record children in `yas--all-children`.
    (yas--define-parents): Use it to flush the caches of the affected modes.
---
 yasnippet.el | 47 ++++++++++++++++++++++++++---------------------
 1 file changed, 26 insertions(+), 21 deletions(-)

diff --git a/yasnippet.el b/yasnippet.el
index f5210d5197..26b8ba9f25 100644
--- a/yasnippet.el
+++ b/yasnippet.el
@@ -819,28 +819,31 @@ which decides on the snippet to expand.")
   (or (get mode 'yas--all-parents) ;; FIXME: Use `with-memoization'?
       (progn
         (put mode 'yas--all-parents (list mode)) ;; Stop inf-loop with cycles.
-        (put mode 'yas--all-parents
-             (if (fboundp 'derived-mode-all-parents)
-                 (let* ((ap (derived-mode-all-parents mode))
-                        (extras
-                         (mapcar (lambda (parent)
-                                   (yas--merge-ordered-lists
-                                    (mapcar #'yas--all-parents
-                                            (gethash parent yas--parents))))
-                                 ap)))
-                   (yas--merge-ordered-lists
-                    (cons (append ap '(fundamental-mode)) extras)))
-               (cons mode
+        (let ((all-parents
+               (if (fboundp 'derived-mode-all-parents)
+                   (let* ((ap (derived-mode-all-parents mode))
+                          (extras
+                           (mapcar (lambda (parent)
+                                     (yas--merge-ordered-lists
+                                      (mapcar #'yas--all-parents
+                                              (gethash parent yas--parents))))
+                                   ap)))
                      (yas--merge-ordered-lists
-                      (mapcar #'yas--all-parents
-                              (remq nil
-                                    `(,(or (get mode 'derived-mode-parent)
-                                           ;; Consider `fundamental-mode'
-                                           ;; as ultimate ancestor.
-                                           'fundamental-mode)
-                                      ,(let ((alias (symbol-function mode)))
-                                         (when (symbolp alias) alias))
-                                      ,@(gethash mode yas--parents)))))))))))
+                      (cons (append ap '(fundamental-mode)) extras)))
+                 (cons mode
+                       (yas--merge-ordered-lists
+                        (mapcar #'yas--all-parents
+                                (remq nil
+                                      `(,(or (get mode 'derived-mode-parent)
+                                             ;; Consider `fundamental-mode'
+                                             ;; as ultimate ancestor.
+                                             'fundamental-mode)
+                                        ,(let ((alias (symbol-function mode)))
+                                           (when (symbolp alias) alias))
+                                        ,@(gethash mode yas--parents)))))))))
+          (dolist (parent all-parents)
+            (cl-pushnew mode (get parent 'yas--all-children)))
+          (put mode 'yas--all-parents all-parents)))))
 
 (defun yas--modes-to-activate (&optional mode)
   "Compute list of mode symbols that are active for `yas-expand' and friends."
@@ -1854,6 +1857,8 @@ the current buffers contents."
 
 (defun yas--define-parents (mode parents)
   "Add PARENTS to the list of MODE's parents."
+  (dolist (child (get mode 'yas--all-children))
+    (put child 'yas--all-parents nil))  ;Flush the cache for all children.
   (puthash mode (cl-remove-duplicates
                  (append parents
                          (gethash mode yas--parents)))



reply via email to

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