[Top][All Lists]

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

Getting rid of low-level assumptions in yasnippet

From: Stefan Monnier
Subject: Getting rid of low-level assumptions in yasnippet
Date: Thu, 19 Mar 2015 15:49:59 -0400
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/25.0.50 (gnu/linux)

Hi João,

Could you double check the patch below, to make sure it does the right thing?
The main thrust is to get rid of the use of the `cl-struct-slots'
property which doesn't exist in Emacs-25 any more.

This is against the elpa.git version of the code, which IIUC is still
not up-to-date, right?


diff --git a/packages/yasnippet/yasnippet.el b/packages/yasnippet/yasnippet.el
index aa3e312..7b4c429 100644
--- a/packages/yasnippet/yasnippet.el
+++ b/packages/yasnippet/yasnippet.el
@@ -1,6 +1,6 @@
 ;;; yasnippet.el --- Yet another snippet extension for Emacs.
-;; Copyright (C) 2008-2013 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2013, 2015 Free Software Foundation, Inc.
 ;; Authors: pluskid <address@hidden>,  João Távora <address@hidden>
 ;; Maintainer: João Távora <address@hidden>
 ;; Version: 0.8.0
@@ -856,7 +856,7 @@ Honour `yas-dont-activate', which see."

 ;;; Internal structs for template management
-(defstruct (yas--template (:constructor yas--make-blank-template))
+(defstruct (yas--template (:constructor yas--make-template))
   "A template for a snippet."
@@ -872,16 +872,6 @@ Honour `yas-dont-activate', which see."
-(defun yas--populate-template (template &rest args)
-  "Helper function to populate TEMPLATE with properties."
-  (while args
-    (aset template
-          (position (intern (substring (symbol-name (car args)) 1))
-                    (mapcar #'car (get 'yas--template 'cl-struct-slots)))
-          (second args))
-    (setq args (cddr args)))
-  template)
 (defstruct (yas--table (:constructor yas--make-snippet-table (name)))
   "A table to store snippets for a particular mode.
@@ -1668,20 +1658,19 @@ Optional PROMPT sets the prompt to use."
          (uuid (or (ninth snippet)
          (template (or (gethash uuid (yas--table-uuidhash snippet-table))
-                       (yas--make-blank-template))))
+                       (yas--make-template :uuid uuid
+                                           :table snippet-table))))
     ;; X) populate the template object
-    (yas--populate-template template
-                           :table       snippet-table
-                           :key         key
-                           :content     (second snippet)
-                           :name        (or name key)
-                           :group       group
-                           :condition   condition
-                           :expand-env  (sixth snippet)
-                           :file        (seventh snippet)
-                           :keybinding  keybinding
-                           :uuid         uuid)
+    (setf (yas--template-key template)        key)
+    (setf (yas--template-content template)    (second snippet))
+    (setf (yas--template-name template)       (or name key))
+    (setf (yas--template-group template)      group)
+    (setf (yas--template-condition template)  condition)
+    (setf (yas--template-expand-env template) (sixth snippet))
+    (setf (yas--template-file template)       (seventh snippet))
+    (setf (yas--template-keybinding template) keybinding)
     ;; X) Update this template in the appropriate table. This step
     ;;    also will take care of adding the key indicators in the
     ;;    templates menu entry, if any
@@ -2113,11 +2102,10 @@ This function does nothing if `yas-use-menu' is nil."
       (dolist (uuid omit-items)
         (let ((template (or (gethash uuid hash)
-                            (yas--populate-template (puthash uuid
-                                                             hash)
-                                                    :table table
-                                                    :uuid uuid))))
+                            (puthash uuid
+                                     (yas--make-template :table table
+                                                         :uuid uuid)
+                                     hash))))
           (setf (yas--template-menu-binding-pair template) (cons nil 
 (defun yas--define-menu-1 (table menu-keymap menu uuidhash &optional 
@@ -2125,12 +2113,12 @@ This function does nothing if `yas-use-menu' is nil."
   (dolist (e (reverse menu))
     (cond ((eq (first e) 'yas-item)
            (let ((template (or (gethash (second e) uuidhash)
-                               (yas--populate-template (puthash (second e)
-                                                               uuidhash)
-                                                      :table table
-                                                      :perm-group group-list
-                                                      :uuid (second e)))))
+                               (puthash (second e)
+                                        (yas--make-template
+                                         :table table
+                                         :perm-group group-list
+                                         :uuid (second e))
+                                        uuidhash))))
              (define-key menu-keymap (vector (gensym))
                (car (yas--template-menu-binding-pair-get-create template 
           ((eq (first e) 'yas-submenu)
@@ -2622,12 +2610,11 @@ whether (and where) to save the snippet, then quit the 
           (and parsed
                (fboundp test-mode)
-               (yas--populate-template (yas--make-blank-template)
-                                      :table       nil ;; no tables for 
ephemeral snippets
-                                      :key         (first parsed)
-                                      :content     (second parsed)
-                                      :name        (third parsed)
-                                      :expand-env  (sixth parsed)))))
+               (yas--make-template :table       nil ;; no tables for ephemeral 
+                                   :key         (first parsed)
+                                   :content     (second parsed)
+                                   :name        (third parsed)
+                                   :expand-env  (sixth parsed)))))
     (cond (yas--current-template
            (let ((buffer-name (format "*testing snippet: %s*" 
(yas--template-name yas--current-template))))
              (kill-buffer (get-buffer-create buffer-name))

reply via email to

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