helpful

a fork of Wilfred's helpful
git clone https://git.trogloxene.org/helpful.git
Log | Files | Refs | README

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:
Mhelpful.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."