diff options
| author | Wilfred Hughes <me@wilfred.me.uk> | 2019-03-03 22:43:55 +0000 |
|---|---|---|
| committer | Wilfred Hughes <me@wilfred.me.uk> | 2019-03-03 22:43:55 +0000 |
| commit | a20eef8fd3fb33abe35dd2ed1590184bc2975b69 (patch) | |
| tree | cfe0e567e5ec1060be594c0134749b8ca36f006f | |
| parent | 72e93276fc0032e434f2acf62d8d63d51557e55b (diff) | |
Always autoload callables if they aren't loaded0.16
Fixes #117
| -rw-r--r-- | CHANGELOG.md | 5 | ||||
| -rw-r--r-- | helpful.el | 9 | ||||
| -rw-r--r-- | test/helpful-unit-test.el | 11 |
3 files changed, 25 insertions, 0 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index ecacc4a..bab2fa5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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. @@ -1926,6 +1926,14 @@ 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." @@ -1933,6 +1941,7 @@ state of the current symbol." (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. diff --git a/test/helpful-unit-test.el b/test/helpful-unit-test.el index bfe887c..0e660bb 100644 --- a/test/helpful-unit-test.el +++ b/test/helpful-unit-test.el @@ -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)) |
