Skip to content

Commit

Permalink
Always autoload callables if they aren't loaded
Browse files Browse the repository at this point in the history
Fixes #117
  • Loading branch information
Wilfred committed Mar 3, 2019
1 parent 72e9327 commit a20eef8
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 0 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,11 @@ Added looking up C-style Lisp names.
Set `comment-start` inside helpful buffers, to fix external packages
relying on that variable.

Helpful now always autoloads callables if they aren't already
loaded. This is consistent with help.el (unless you've overriden
`help-enable-auto-load`), produces more useful results, and fixes
crashes rendering some docstrings.

# v0.15

Fixed a crash on formatting values.
Expand Down
9 changes: 9 additions & 0 deletions helpful.el
Original file line number Diff line number Diff line change
Expand Up @@ -1926,13 +1926,22 @@ may contain duplicates."
(-flatten
(-map #'helpful--callees-1 (cdr form)))))))

(defun helpful--ensure-loaded ()
"Ensure the symbol associated with the current buffer has been loaded."
(when (and helpful--callable-p
(symbolp helpful--sym))
(let ((fn-obj (helpful--without-advice helpful--sym)))
(when (autoloadp fn-obj)
(autoload-do-load fn-obj)))))

(defun helpful-update ()
"Update the current *Helpful* buffer to the latest
state of the current symbol."
(interactive)
(cl-assert (not (null helpful--sym)))
(unless (buffer-live-p helpful--associated-buffer)
(setq helpful--associated-buffer nil))
(helpful--ensure-loaded)
(-let* ((val
;; Look at the value before setting `inhibit-read-only', so
;; users can see the correct value of that variable.
Expand Down
11 changes: 11 additions & 0 deletions test/helpful-unit-test.el
Original file line number Diff line number Diff line change
Expand Up @@ -880,3 +880,14 @@ find the source code."
(helpful--convert-c-name 'Fmake_string t))
(should-not
(helpful--convert-c-name 'Vgc_cons_percentage nil)))

(ert-deftest helpful--loads-autoload-symbol ()
"When asked to describe an autoloaded symbol, just load it."
;; This test assumes that you haven't loaded tetris.el.gz in your
;; current instance.
(skip-unless (autoloadp (symbol-function 'tetris)))
;; This is a regression test: `tetris' has `tetris-mode-map' in its
;; docstring, so we can't display the mode map unless tetris.el.gz is
;; loaded.
;;
(helpful-function #'tetris))

0 comments on commit a20eef8

Please sign in to comment.