]> git.eshelyaron.com Git - emacs.git/commitdiff
Better jsonrpc.el workaround for debug-on-error check
authorJoão Távora <joaotavora@gmail.com>
Tue, 14 Mar 2023 19:07:23 +0000 (19:07 +0000)
committerJoão Távora <joaotavora@gmail.com>
Tue, 14 Mar 2023 19:36:47 +0000 (19:36 +0000)
Some extensions, notably ert.el, set `debug-on-error' to non-nil,
which makes it hard to test the behaviour catching of the Elisp
error when processing a request and replying to the endpoint with
an JSONRPC-error.

The previous workaround relied on requiring lisp/emacs-lisp/ert.el in
lisp/jsonrpc.el, which really doesn't make sense.

This is better.  For the single test of that behaviour, set a new
variable, jsonrpc-inhibit-debug-on-error.

Not only is this cleaner, it allows us to use ert.el's useful
debug-on-error setting.

* lisp/jsonrpc.el (ert): Don't require it.
(jsonrpc-inhibit-debug-on-error): New variable.
(jsonrpc-connection-receive): Use it.
(Package-Requires): Bump to 1.0.17

* test/lisp/jsonrpc-tests.el (signals-an--32603-JSONRPC-error):
Bind jsonrpc-inhibit-debug-on-error.

lisp/jsonrpc.el
test/lisp/jsonrpc-tests.el

index f583d116d2019e854243494ee580a06937a158a0..3965d38bc3e73a4002984317b1e66fac7da98ffd 100644 (file)
@@ -4,7 +4,7 @@
 
 ;; Author: João Távora <joaotavora@gmail.com>
 ;; Keywords: processes, languages, extensions
-;; Version: 1.0.16
+;; Version: 1.0.17
 ;; Package-Requires: ((emacs "25.2"))
 
 ;; This is a GNU ELPA :core package.  Avoid functionality that is not
@@ -43,7 +43,6 @@
 (eval-when-compile (require 'subr-x))
 (require 'warnings)
 (require 'pcase)
-(require 'ert) ; to escape a `condition-case-unless-debug'
 
 \f
 ;;; Public API
@@ -154,6 +153,14 @@ immediately."
   "Stop waiting for responses from the current JSONRPC CONNECTION."
   (clrhash (jsonrpc--request-continuations connection)))
 
+(defvar jsonrpc-inhibit-debug-on-error nil
+  "Inhibit `debug-on-error' when answering requests.
+Some extensions, notably ert.el, set `debug-on-error' to non-nil,
+which makes it hard to test the behaviour of catching the Elisp
+error and replying to the endpoint with an JSONRPC-error.  This
+variable can be set around calls like `jsonrpc-request' to
+circumvent that.")
+
 (defun jsonrpc-connection-receive (connection message)
   "Process MESSAGE just received from CONNECTION.
 This function will destructure MESSAGE and call the appropriate
@@ -166,7 +173,8 @@ dispatcher in CONNECTION."
       (cond
        (;; A remote request
         (and method id)
-        (let* ((debug-on-error (and debug-on-error (not (ert-running-test))))
+        (let* ((debug-on-error (and debug-on-error
+                                    (not jsonrpc-inhibit-debug-on-error)))
                (reply
                 (condition-case-unless-debug _ignore
                     (condition-case oops
index a595167d13033861066d72e40748b487b99d422b..85ac96a931cc467e8f6744b7b069c0f568f03458 100644 (file)
   "Signals an -32603 JSONRPC error."
   (jsonrpc--with-emacsrpc-fixture (conn)
     (condition-case err
-        (progn
+        (let ((jsonrpc-inhibit-debug-on-error t))
           (jsonrpc-request conn '+ ["a" 2])
           (ert-fail "A `jsonrpc-error' should have been signaled!"))
       (jsonrpc-error