[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] master e21420a 04/40: Separate parsing from evaluation of backquo
From: |
Noam Postavsky |
Subject: |
[elpa] master e21420a 04/40: Separate parsing from evaluation of backquote lisp |
Date: |
Wed, 26 Oct 2016 23:06:31 +0000 (UTC) |
branch: master
commit e21420a497c1d79edc6b36ffb1f3bf1bb70f6227
Author: Noam Postavsky <address@hidden>
Commit: Noam Postavsky <address@hidden>
Separate parsing from evaluation of backquote lisp
* yasnippet.el (yas--save-backquotes): Parse all backquoted lisp forms
and only then evaluate them.
---
yasnippet.el | 42 ++++++++++++++++++++++++++++--------------
1 file changed, 28 insertions(+), 14 deletions(-)
diff --git a/yasnippet.el b/yasnippet.el
index 8a6258c..5164754 100644
--- a/yasnippet.el
+++ b/yasnippet.el
@@ -4017,20 +4017,34 @@ 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'."
- (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 (match-beginning 0) (match-end 0)))
- (setq transformed (yas--eval-lisp (yas--read-lisp (yas--restore-escapes
current-string '(?`)))))
- (goto-char (match-beginning 0))
- (when transformed
- (let ((marker (make-marker)))
- (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))))))
+ ;; 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
+ (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)))
(defun yas--restore-backquotes ()
"Replace markers in `yas--backquote-markers-and-strings' with their values."
- [elpa] master updated (f06d730 -> 299efcb), Noam Postavsky, 2016/10/26
- [elpa] master bc80f67 01/40: .travis.yml: Don't notify on success, Noam Postavsky, 2016/10/26
- [elpa] master 6b785e1 08/40: Say how to hide the backquote side-effect warning, Noam Postavsky, 2016/10/26
- [elpa] master 1735a28 02/40: Add region contents to new snippet, Noam Postavsky, 2016/10/26
- [elpa] master ee4efdb 05/40: Revert "Separate parsing from evaluation of backquote lisp", Noam Postavsky, 2016/10/26
- [elpa] master 85f39ce 06/40: Warn about backquote exprs modifying the buffer, Noam Postavsky, 2016/10/26
- [elpa] master e21420a 04/40: Separate parsing from evaluation of backquote lisp,
Noam Postavsky <=
- [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, 2016/10/26