[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] master 655bda8 07/40: Merge: restore backquote evaluation behavio
From: |
Noam Postavsky |
Subject: |
[elpa] master 655bda8 07/40: Merge: restore backquote evaluation behaviour |
Date: |
Wed, 26 Oct 2016 23:06:32 +0000 (UTC) |
branch: master
commit 655bda804b11269790c0b8a19aea75d7165ebc3c
Merge: e21420a 85f39ce
Author: Noam Postavsky <address@hidden>
Commit: Noam Postavsky <address@hidden>
Merge: restore backquote evaluation behaviour
But add warnings if snippets use insertion from backquote expressions.
---
yasnippet.el | 53 ++++++++++++++++++++++++++---------------------------
1 file changed, 26 insertions(+), 27 deletions(-)
diff --git a/yasnippet.el b/yasnippet.el
index 5164754..406b514 100644
--- a/yasnippet.el
+++ b/yasnippet.el
@@ -4017,34 +4017,33 @@ With optional string TEXT do it in string instead of
the buffer."
(defun yas--save-backquotes ()
"Save all the \"`(lisp-expression)`\"-style expressions
with their evaluated value into `yas--backquote-markers-and-strings'."
- ;; Gather `(lisp-expression)`s.
- (let ((end (point-max)))
- (save-restriction
- (widen)
- (while (re-search-forward yas--backquote-lisp-expression-regexp end t)
- (let ((expr (yas--read-lisp (yas--restore-escapes
- (match-string-no-properties 1))))
- (marker (make-marker)))
- (delete-region (match-beginning 0) (match-end 0))
- (insert "Y") ;; quite horrendous, I love it :)
- (set-marker marker (point))
- (insert "Y")
- (push (cons marker expr) yas--backquote-markers-and-strings)))))
- ;; Evaluate them.
- (dolist (m-e yas--backquote-markers-and-strings)
- (let* ((marker (car m-e))
- (expr (cdr m-e))
- (result (save-excursion
- (goto-char marker)
- (yas--eval-lisp expr))))
- (setcdr m-e result)
- (unless result
+ (let* ((yas--change-detected nil)
+ (detect-change (lambda (_beg _end) (setq yas--change-detected t))))
+ (while (re-search-forward yas--backquote-lisp-expression-regexp nil t)
+ (let ((current-string (match-string-no-properties 1)) transformed)
(save-restriction (widen)
- (delete-region (1- marker) (1+ marker)))
- (set-marker marker nil))))
- ;; Drop the nil results.
- (setq yas--backquote-markers-and-strings
- (cl-delete-if-not #'cdr yas--backquote-markers-and-strings)))
+ (delete-region (match-beginning 0) (match-end 0)))
+ (let ((before-change-functions
+ (cons detect-change before-change-functions)))
+ (setq transformed (yas--eval-lisp (yas--read-lisp
+ (yas--restore-escapes
+ current-string '(?`))))))
+ (goto-char (match-beginning 0))
+ (when transformed
+ (let ((marker (make-marker))
+ (before-change-functions (cdr before-change-functions)))
+ (save-restriction
+ (widen)
+ (insert "Y") ;; quite horrendous, I love it :)
+ (set-marker marker (point))
+ (insert "Y"))
+ (push (cons marker transformed)
yas--backquote-markers-and-strings)))))
+ (when yas--change-detected
+ (lwarn '(yasnippet backquote-change) :warning
+ "`%s' modified buffer in a backquote expression."
+ (if yas--current-template
+ (yas--template-name yas--current-template)
+ "Snippet")))))
(defun yas--restore-backquotes ()
"Replace markers in `yas--backquote-markers-and-strings' with their values."
- [elpa] master e21420a 04/40: Separate parsing from evaluation of backquote lisp, (continued)
- [elpa] master e21420a 04/40: Separate parsing from evaluation of backquote lisp, Noam Postavsky, 2016/10/26
- [elpa] master c744148 03/40: Make yas-describe-tables easier to use from lisp, Noam Postavsky, 2016/10/26
- [elpa] master d218ed8 11/40: Do indent the first line of mirrors, but in correct order, Noam Postavsky, 2016/10/26
- [elpa] master 0db65ee 20/40: Don't clobber match data in modification hooks, Noam Postavsky, 2016/10/26
- [elpa] master dc098cf 25/40: Fix yas--message verbosity levels, Noam Postavsky, 2016/10/26
- [elpa] master 5af9276 27/40: Support yas/ symbols in yas-define-menu, Noam Postavsky, 2016/10/26
- [elpa] master ea9581f 22/40: Fix some quoting problems in doc strings, Noam Postavsky, 2016/10/26
- [elpa] master ee6e7a9 09/40: Fix some compilation warnings, Noam Postavsky, 2016/10/26
- [elpa] master 7661dc1 19/40: yasnippet.el (yas-escape-text): No error on nil text, Noam Postavsky, 2016/10/26
- [elpa] master 351c1e3 10/40: Don't indent first line of mirrors, Noam Postavsky, 2016/10/26
- [elpa] master 655bda8 07/40: Merge: restore backquote evaluation behaviour,
Noam Postavsky <=
- [elpa] master 8907fd1 14/40: Escape yas-selected-text for new snippet., Noam Postavsky, 2016/10/26
- [elpa] master a4fafc3 16/40: Add test for loading snippet with same uuid, Noam Postavsky, 2016/10/26
- [elpa] master 8ca8c7d 13/40: Merge: a different fix for #712., Noam Postavsky, 2016/10/26
- [elpa] master 85a43ad 35/40: Explain about backquote expressions in doc, Noam Postavsky, 2016/10/26
- [elpa] master 3129040 24/40: Load snippet after saving, Noam Postavsky, 2016/10/26
- [elpa] master 1532e66 33/40: Fix saving of new snippets, Noam Postavsky, 2016/10/26
- [elpa] master 0ee86a2 23/40: Simplify `yas-new-snippet' load&save logic, Noam Postavsky, 2016/10/26
- [elpa] master 00be21c 36/40: Change cl dep to cl-lib for tests too, Noam Postavsky, 2016/10/26
- [elpa] master 9c9952c 12/40: Add test for indentation of single line mirrors, Noam Postavsky, 2016/10/26
- [elpa] master 4296a86 15/40: yasnippet.el (yas--quote-string): Remove., Noam Postavsky, 2016/10/26