commit 5922370d79516d36a43f68b51643c8fc7aa5aa26
parent d796702d88abf24fde14a3f4390b0380f943a262
Author: Wilfred Hughes <me@wilfred.me.uk>
Date: Thu, 14 Dec 2017 23:23:36 +0000
Ensure enabling and disabling edebug works as expected
Edebug requires the source buffer to exist, so ensure we preserve the
source buffer when edebugging.
Ensure helpful--can-edebug-p returns the correct value, even if the
source buffer was not freshly created.
Diffstat:
| M | helpful.el | | | 44 | ++++++++++++++++++++++++-------------------- |
1 file changed, 24 insertions(+), 20 deletions(-)
diff --git a/helpful.el b/helpful.el
@@ -182,32 +182,36 @@ This allows us to distinguish strings from symbols."
(not (helpful--primitive-p sym callable-p))
;; We need to be able to find its definition, or we can't step
;; through the source.
- (-when-let ((buf pos opened) (helpful--definition sym t))
+ (-let* (((buf pos opened) (helpful--definition sym t))
+ (have-definition (and buf pos)))
(when opened
(kill-buffer buf))
- t)))
+ have-definition)))
(defun helpful--toggle-edebug (sym)
"Enable edebug when function SYM is called,
or disable if already enabled."
- (-if-let ((buf pos created) (helpful--definition sym t))
- (progn
- (with-current-buffer buf
- (save-excursion
- (save-restriction
- (widen)
- (goto-char pos)
-
- (let* ((should-edebug (not (helpful--edebug-p sym)))
- (edebug-all-forms should-edebug)
- (edebug-all-defs should-edebug)
- (form (edebug-read-top-level-form)))
- ;; Based on `edebug-eval-defun'.
- (eval (eval-sexp-add-defvars form) lexical-binding)))))
- (when created
- (kill-buffer buf)))
-
- (user-error "Could not find source for edebug")))
+ (-let ((should-edebug (not (helpful--edebug-p sym)))
+ ((buf pos created) (helpful--definition sym t)))
+ (if (and buf pos)
+ (progn
+ (with-current-buffer buf
+ (save-excursion
+ (save-restriction
+ (widen)
+ (goto-char pos)
+
+ (let* ((edebug-all-forms should-edebug)
+ (edebug-all-defs should-edebug)
+ (form (edebug-read-top-level-form)))
+ ;; Based on `edebug-eval-defun'.
+ (eval (eval-sexp-add-defvars form) lexical-binding)))))
+ ;; If we're enabling edebug, we need the source buffer to
+ ;; exist. Otherwise, we can clean it up.
+ (when (and created (not should-edebug))
+ (kill-buffer buf)))
+
+ (user-error "Could not find source for edebug"))))
(defun helpful--edebug (button)
"Toggle edebug for the current symbol."