[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] master bfe14f1 10/36: Test and fix problem with mirror+autofill
From: |
Noam Postavsky |
Subject: |
[elpa] master bfe14f1 10/36: Test and fix problem with mirror+autofill |
Date: |
Sat, 11 Jun 2016 19:21:10 +0000 (UTC) |
branch: master
commit bfe14f19ac8f015b0b79b9222cb0059a9a01a7e5
Author: Noam Postavsky <address@hidden>
Commit: Noam Postavsky <address@hidden>
Test and fix problem with mirror+autofill
cc-mode fill paragraph narrows to the paragraph being filled. This
causes problems if there is a mirror needing to be updated outside of
the current paragraph.
* yasnippet-tests.el: New test.
* yasnippet.el (yas--update-mirrors): Widen while updating the mirrors.
---
yasnippet-tests.el | 20 ++++++++++++++
yasnippet.el | 74 +++++++++++++++++++++++++++-------------------------
2 files changed, 58 insertions(+), 36 deletions(-)
diff --git a/yasnippet-tests.el b/yasnippet-tests.el
index 844cd94..e5c72df 100644
--- a/yasnippet-tests.el
+++ b/yasnippet-tests.el
@@ -68,6 +68,26 @@
(should (string= (yas--buffer-contents)
"bla from another BLA"))))
+(ert-deftest mirror-with-transformation-and-autofill ()
+ "Test interaction of autofill with mirror transforms"
+ (let ((words "one two three four five")
+ filled-words)
+ (with-temp-buffer
+ (c-mode) ; In `c-mode' filling comments works by narrowing.
+ (yas-minor-mode +1)
+ (setq fill-column 10)
+ (auto-fill-mode +1)
+ (yas-expand-snippet "/* $0\n */")
+ (yas-mock-insert words)
+ (setq filled-words (delete-and-extract-region (point-min) (point-max)))
+ (yas-expand-snippet "/* $1\n */\n$2$2")
+ (should (string= (yas--buffer-contents)
+ "/* \n */\n"))
+ (yas-mock-insert words)
+ (should (string= (yas--buffer-contents)
+ (concat filled-words "\n"))))))
+
+
(ert-deftest primary-field-transformation ()
(with-temp-buffer
(yas-minor-mode 1)
diff --git a/yasnippet.el b/yasnippet.el
index 24cb653..93b21f5 100644
--- a/yasnippet.el
+++ b/yasnippet.el
@@ -4192,42 +4192,44 @@ When multiple expressions are found, only the last one
counts."
(defun yas--update-mirrors (snippet)
"Update all the mirrors of SNIPPET."
- (save-excursion
- (dolist (field-and-mirror
- (sort
- ;; make a list of ((F1 . M1) (F1 . M2) (F2 . M3) (F2 . M4) ...)
- ;; where F is the field that M is mirroring
- ;;
- (cl-mapcan #'(lambda (field)
- (mapcar #'(lambda (mirror)
- (cons field mirror))
- (yas--field-mirrors field)))
- (yas--snippet-fields snippet))
- ;; then sort this list so that entries with mirrors with parent
- ;; fields appear before. This was important for fixing #290, and
- ;; luckily also handles the case where a mirror in a field causes
- ;; another mirror to need reupdating
- ;;
- #'(lambda (field-and-mirror1 field-and-mirror2)
- (> (yas--calculate-mirror-depth (cdr field-and-mirror1))
- (yas--calculate-mirror-depth (cdr field-and-mirror2))))))
- (let* ((field (car field-and-mirror))
- (mirror (cdr field-and-mirror))
- (parent-field (yas--mirror-parent-field mirror)))
- ;; before updating a mirror with a parent-field, maybe advance
- ;; its start (#290)
- ;;
- (when parent-field
- (yas--advance-start-maybe mirror (yas--fom-start parent-field)))
- ;; update this mirror
- ;;
- (yas--mirror-update-display mirror field)
- ;; `yas--place-overlays' is needed if the active field and
- ;; protected overlays have been changed because of insertions
- ;; in `yas--mirror-update-display'
- ;;
- (when (eq field (yas--snippet-active-field snippet))
- (yas--place-overlays snippet field))))))
+ (save-restriction
+ (widen)
+ (save-excursion
+ (dolist (field-and-mirror
+ (sort
+ ;; make a list of ((F1 . M1) (F1 . M2) (F2 . M3) (F2 . M4) ...)
+ ;; where F is the field that M is mirroring
+ ;;
+ (cl-mapcan #'(lambda (field)
+ (mapcar #'(lambda (mirror)
+ (cons field mirror))
+ (yas--field-mirrors field)))
+ (yas--snippet-fields snippet))
+ ;; then sort this list so that entries with mirrors with parent
+ ;; fields appear before. This was important for fixing #290, and
+ ;; luckily also handles the case where a mirror in a field
causes
+ ;; another mirror to need reupdating
+ ;;
+ #'(lambda (field-and-mirror1 field-and-mirror2)
+ (> (yas--calculate-mirror-depth (cdr field-and-mirror1))
+ (yas--calculate-mirror-depth (cdr field-and-mirror2))))))
+ (let* ((field (car field-and-mirror))
+ (mirror (cdr field-and-mirror))
+ (parent-field (yas--mirror-parent-field mirror)))
+ ;; before updating a mirror with a parent-field, maybe advance
+ ;; its start (#290)
+ ;;
+ (when parent-field
+ (yas--advance-start-maybe mirror (yas--fom-start parent-field)))
+ ;; update this mirror
+ ;;
+ (yas--mirror-update-display mirror field)
+ ;; `yas--place-overlays' is needed if the active field and
+ ;; protected overlays have been changed because of insertions
+ ;; in `yas--mirror-update-display'
+ ;;
+ (when (eq field (yas--snippet-active-field snippet))
+ (yas--place-overlays snippet field)))))))
(defun yas--mirror-update-display (mirror field)
"Update MIRROR according to FIELD (and mirror transform)."
- [elpa] master beb2ba4 21/36: Fix fields following $0 + region insertion, (continued)
- [elpa] master beb2ba4 21/36: Fix fields following $0 + region insertion, Noam Postavsky, 2016/06/11
- [elpa] master eeb4b62 14/36: Add new tests for multi-line mirror indentation, Noam Postavsky, 2016/06/11
- [elpa] master 78fe979 22/36: Support htmlize.el in Rakefile doc target, Noam Postavsky, 2016/06/11
- [elpa] master 7f03a23 07/36: Change Emacs installation method for Travis CI, Noam Postavsky, 2016/06/11
- [elpa] master 0d79e69 30/36: Extra measures to prevent premature yas-minor-mode, Noam Postavsky, 2016/06/11
- [elpa] master 497867c 32/36: Rename yas-backport-obsolete-alias, Noam Postavsky, 2016/06/11
- [elpa] master e23a053 34/36: Avoid bug in insert-file-contents with REPLACE=t, Noam Postavsky, 2016/06/11
- [elpa] master 567ada0 06/36: Decide field clearing based on command's effect, Noam Postavsky, 2016/06/11
- [elpa] master bdfab67 24/36: Make yasnippet less chatty, Noam Postavsky, 2016/06/11
- [elpa] master bbfa1f0 31/36: Add yas-backport-obsolete-alias option, Noam Postavsky, 2016/06/11
- [elpa] master bfe14f1 10/36: Test and fix problem with mirror+autofill,
Noam Postavsky <=
- [elpa] master df229b9 23/36: Fix some doc formatting, Noam Postavsky, 2016/06/11
- [elpa] master 1b8f5b7 29/36: Don't use major-mode syntax-propertize-function, Noam Postavsky, 2016/06/11
- [elpa] master 47dbe93 33/36: Fix broken links in README.mdown, Noam Postavsky, 2016/06/11
- [elpa] master dc3e4ca 35/36: Release 0.10.0, Noam Postavsky, 2016/06/11
- [elpa] master ccc9adc 16/36: Add register option for yas-wrap-around-region, Noam Postavsky, 2016/06/11
- [elpa] master eca2f99 15/36: Indent multi-line output from mirrors, Noam Postavsky, 2016/06/11
- [elpa] master 438f5db 36/36: packages/yasnippet: pull from external (0.10.0), Noam Postavsky, 2016/06/11