diff options
author | Johan Claesson <[email protected]> | 2019-03-17 19:37:48 +0100 |
---|---|---|
committer | Johan Claesson <[email protected]> | 2019-03-17 19:53:58 +0100 |
commit | 6d33a26a344fe6d788f3c3a52f6637f0ea6b98e6 (patch) | |
tree | aca39bb39fc2736f70f24fd4bfb5d2736db2a6a8 /lib/tools | |
parent | 7a63195cc680a6e89fc1a59440d494f343c023d3 (diff) | |
download | otp-6d33a26a344fe6d788f3c3a52f6637f0ea6b98e6.tar.gz otp-6d33a26a344fe6d788f3c3a52f6637f0ea6b98e6.tar.bz2 otp-6d33a26a344fe6d788f3c3a52f6637f0ea6b98e6.zip |
Emacs: Hide html parsing failure in erldoc by default
The parsing of the OTP doc seldom fails but in the rare cases it does
not find a function signature hide the error by default. If the user
wish to be notified they may customize `erldoc-no-signature-function'.
Sorry for breaking the "Let it crash!" rule ;)
Diffstat (limited to 'lib/tools')
-rw-r--r-- | lib/tools/emacs/erldoc.el | 37 |
1 files changed, 28 insertions, 9 deletions
diff --git a/lib/tools/emacs/erldoc.el b/lib/tools/emacs/erldoc.el index b9d5e9572a..bc16d7a14d 100644 --- a/lib/tools/emacs/erldoc.el +++ b/lib/tools/emacs/erldoc.el @@ -89,6 +89,13 @@ up the indexing." :type 'file :group 'erldoc) +(defcustom erldoc-no-signature-function #'ignore + "Notification function called if no function signature was found." + :type '(choice (function-item :tag "Ignore" ignore) + (function-item :tag "Warn" warn) + (function-item :tag "Error" error)) + :group 'erldoc) + (defun erldoc-strip-string (s) (let* ((re "[ \t\n\r\f\v\u00a0]+") (from (if (string-match (concat "\\`" re) s) (match-end 0) 0)) @@ -212,12 +219,21 @@ up the indexing." ;; Get the full function signature. (when (and (eq (car-safe d) 'a) (gethash (erldoc-dom-get-attribute d 'name) table)) - (push (append (gethash (erldoc-dom-get-attribute d 'name) table) - (list (or (funcall span-content d) - (funcall span-content - (or (erldoc-dom-get-element d 'span) - (cadr (memq d erldoc-dom-walk-siblings))))))) - entries)) + (let* ((name (erldoc-dom-get-attribute d 'name)) + (mfa-url (gethash name table)) + (mfa (car mfa-url)) + (sig (or (funcall span-content d) + (funcall span-content + (or (erldoc-dom-get-element d 'span) + (cadr + (memq d erldoc-dom-walk-siblings)))) + (progn + (funcall erldoc-no-signature-function + "erldoc-parse-man: no sig for %s" + mfa) + nil)))) + (push (append mfa-url (list sig)) + entries))) ;; Get data types (when (and (eq (car-safe d) 'a) (string-prefix-p "type-" @@ -357,9 +373,12 @@ up the indexing." (sigs)) (maphash (lambda (k v) (when (string-match re k) - (push (cons (string-to-number (match-string 1 k)) - (cdr (erldoc-tokenize-signature (cadr v)))) - sigs))) + (if (cadr v) + (push (cons (string-to-number (match-string 1 k)) + (cdr (erldoc-tokenize-signature (cadr v)))) + sigs) + (funcall erldoc-no-signature-function + "erldoc-format-signature: No sig for %s" k)))) (erldoc-lookup-table)) (when sigs ;; Mostly single return type but there are exceptions such as |