diff options
author | Stefan Monnier <monnier@iro.umontreal.ca> | 2017-10-20 16:04:02 -0400 |
---|---|---|
committer | Glenn Morris <rgm@gnu.org> | 2017-10-20 16:58:32 -0400 |
commit | ef3d8505ecc0d44517abc82ec2be04f4bb286bd6 (patch) | |
tree | 2c72c1f7878fe57785dc149a277d4f7d65a3e4de | |
parent | 11bd8aa24b347f75e674528dd1a94b0a4037105e (diff) | |
download | emacs-ef3d8505ecc0d44517abc82ec2be04f4bb286bd6.tar.gz |
* lisp/help-fns.el (describe-function-1):
Fix help-fns-test-dangling-alias. (Bug#28918)
(cherry picked from commit e1d42f8f4a945669ff8b5159a569cb4b18f56e18)
-rw-r--r-- | lisp/help-fns.el | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/lisp/help-fns.el b/lisp/help-fns.el index d75fec2b564..dfff8be2a6a 100644 --- a/lisp/help-fns.el +++ b/lisp/help-fns.el @@ -561,6 +561,8 @@ FILE is the file where FUNCTION was probably defined." short)) (defun help-fns--analyse-function (function) + ;; FIXME: Document/explain the differences between FUNCTION, + ;; REAL-FUNCTION, DEF, and REAL-DEF. "Return information about FUNCTION. Returns a list of the form (REAL-FUNCTION DEF ALIASED REAL-DEF)." (let* ((advised (and (symbolp function) @@ -689,10 +691,15 @@ Returns a list of the form (REAL-FUNCTION DEF ALIASED REAL-DEF)." (point)))) (terpri)(terpri) - (pcase-let ((`(,real-function ,def ,_aliased ,real-def) - (help-fns--analyse-function function)) - (doc-raw (documentation function t)) - (key-bindings-buffer (current-buffer))) + (pcase-let* ((`(,real-function ,def ,_aliased ,real-def) + (help-fns--analyse-function function)) + (doc-raw (condition-case nil + ;; FIXME: Maybe `documentation' should return nil + ;; for invalid functions i.s.o. signaling an error. + (documentation function t) + ;; E.g. an alias for a not yet defined function. + (invalid-function nil))) + (key-bindings-buffer (current-buffer))) ;; If the function is autoloaded, and its docstring has ;; key substitution constructs, load the library. @@ -703,10 +710,15 @@ Returns a list of the form (REAL-FUNCTION DEF ALIASED REAL-DEF)." (help-fns--key-bindings function) (with-current-buffer standard-output - (let ((doc (help-fns--signature - function doc-raw - (if (subrp def) (indirect-function real-def) real-def) - real-function key-bindings-buffer))) + (let ((doc (condition-case nil + ;; FIXME: Maybe `help-fns--signature' should return `doc' + ;; for invalid functions i.s.o. signaling an error. + (help-fns--signature + function doc-raw + (if (subrp def) (indirect-function real-def) real-def) + real-function key-bindings-buffer) + ;; E.g. an alias for a not yet defined function. + (invalid-function doc-raw)))) (run-hook-with-args 'help-fns-describe-function-functions function) (insert "\n" (or doc "Not documented."))) ;; Avoid asking the user annoying questions if she decides |