branch: master
commit 8b421bc78d56263a2adc128337540e50a1c19c6a
Author: João Távora <[email protected]>
Commit: João Távora <[email protected]>
Reinstate the old debug behaviour for yas-tryout-snippet
During a redesign of the debug facilities, the old shortcut C-u C-t
available and useful in snippet-mode, was lost.
* yasnippet-debug.el (yas-debug-snippets): Add docstring.
Add post-command-hook locally if HOOK is snippet-navigation.
Concisely describe parent field (not just mention it).
* yasnippet.el (yas-tryout-snippet): Call yas-debug-snippets and display
buffer. Tweak docstring.
(yas-debug-snippets): Forward declare function defined in
yasnippet-debug.el
---
yasnippet-debug.el | 19 ++++++++++++++++---
yasnippet.el | 11 +++++++----
2 files changed, 23 insertions(+), 7 deletions(-)
diff --git a/yasnippet-debug.el b/yasnippet-debug.el
index c3d1c7e..97344aa 100644
--- a/yasnippet-debug.el
+++ b/yasnippet-debug.el
@@ -193,7 +193,11 @@
(yas-debug-live-range field)
(buffer-substring-no-properties (yas--field-start field)
(yas--field-end field))
(yas--debug-format-fom-concise (yas--field-next field))
- (if (yas--field-parent-field field) "(has a parent)" "")))
+ (if (yas--field-parent-field field)
+ (format " parent: %s"
+ (yas--debug-format-fom-concise
+ (yas--field-parent-field field)))
+ "")))
(dolist (mirror (yas--field-mirrors field))
(unless (consp (yas--mirror-start mirror))
(printf "\t\tmirror: %s covering \"%s\" next: %s\n"
@@ -224,6 +228,14 @@
(clrhash yas-debug-live-indicators))
(defun yas-debug-snippets (&optional outbuf hook)
+ "Print debug information on active snippets to buffer OUTBUF.
+If OUTBUF is nil, use a buffer named \"*YASsnippet trace*\".
+If HOOK is non-nil, install `yas-debug-snippets' in
+`post-command-hook' to update the information on every command
+after this one. If it is `snippet-navigation' then install hook
+buffer-locally, otherwise install it globally. If HOOK is
+`edebug-create', also instrument the function
+`yas--snippet-parse-create' with `edebug' and show its source."
(interactive (list nil t))
(condition-case err
(yas-debug-with-tracebuf outbuf
@@ -253,11 +265,12 @@
(ad-activate 'yas--snippet-parse-create)
(ad-enable-advice 'yas--commit-snippet 'after
'yas-debug-untarget-snippet)
(ad-activate 'yas--commit-snippet)
- (add-hook 'post-command-hook #'yas-debug-snippets)
+ (add-hook 'post-command-hook #'yas-debug-snippets
+ nil (eq hook 'snippet-navigation))
;; Window management is slapped together, it does what I
;; want when the caller has a single window open. Good
;; enough for now.
- (when (eq hook 'create)
+ (when (eq hook 'edebug-create)
(edebug-instrument-function 'yas--snippet-parse-create)
(let ((buf-point (find-function-noselect
'yas--snippet-parse-create)))
(with-current-buffer (car buf-point)
diff --git a/yasnippet.el b/yasnippet.el
index 43bc860..f2f7990 100644
--- a/yasnippet.el
+++ b/yasnippet.el
@@ -2705,8 +2705,11 @@ and `kill-buffer' instead."
(save-buffer)))
(quit-window kill)))
+(declare-function yas-debug-snippets "yasnippet-debug")
+
(defun yas-tryout-snippet (&optional debug)
- "Test current buffer's snippet template in other buffer."
+ "Test current buffer's snippet template in other buffer.
+DEBUG is for debugging the YASnippet engine itself."
(interactive "P")
(let* ((major-mode-and-parent (yas--compute-major-mode-and-parents
buffer-file-name))
(parsed (yas--parse-template))
@@ -2736,9 +2739,9 @@ and `kill-buffer' instead."
(point-max)
(yas--template-expand-env
yas--current-template))
(when (and debug
- (require 'yasnippet-debug nil t)
- (fboundp 'yas-debug-snippet-vars))
- (add-hook 'post-command-hook #'yas-debug-snippet-vars nil t))))
+ (require 'yasnippet-debug nil t))
+ (yas-debug-snippets "*YASnippet trace*" 'snippet-navigation)
+ (display-buffer "*YASnippet trace*"))))
(t
(yas--message 1 "Cannot test snippet for unknown major mode")))))