aboutsummaryrefslogtreecommitdiffstats
path: root/lib/tools
diff options
context:
space:
mode:
authorJohan Claesson <[email protected]>2019-03-17 19:37:48 +0100
committerJohan Claesson <[email protected]>2019-03-17 19:53:58 +0100
commit6d33a26a344fe6d788f3c3a52f6637f0ea6b98e6 (patch)
treeaca39bb39fc2736f70f24fd4bfb5d2736db2a6a8 /lib/tools
parent7a63195cc680a6e89fc1a59440d494f343c023d3 (diff)
downloadotp-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.el37
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