Skip to content

Commit

Permalink
Fix inspector silently doing nothing if eval errored
Browse files Browse the repository at this point in the history
  • Loading branch information
alexander-yakushev committed Dec 7, 2018
1 parent fa43d28 commit c0b9094
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 40 deletions.
65 changes: 32 additions & 33 deletions src/cider/nrepl/middleware/inspect.clj
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
(ns cider.nrepl.middleware.inspect
(:require
[cider.nrepl.middleware.util.cljs :as cljs]
[cider.nrepl.middleware.util.error-handling :refer [base-error-response]]
[cider.nrepl.middleware.util.error-handling :refer [base-error-response
with-safe-transport]]
[orchard.inspect :as inspect]))

;; Compatibility with the legacy tools.nrepl and the new nREPL 0.4.x.
Expand Down Expand Up @@ -46,9 +47,16 @@
(recv [this] (.recv transport))
(recv [this timeout] (.recv transport timeout))
(send [this response]
(if (contains? response :value)
(inspect-reply msg response)
(.send transport response))
(cond (contains? response :value)
(inspect-reply msg response)

(contains? (:status response) :eval-error)
(let [resp (base-error-response
msg (or *e (Exception. (or (:ex response) "")))
:inspect-eval-error :done)]
(.send transport resp))

:else (.send transport response))
this)))

(defn eval-msg
Expand All @@ -61,48 +69,39 @@
[handler msg]
(handler (eval-msg msg)))

(defn- success [{:keys [transport] :as msg} inspector]
(transport/send transport (response-for msg :value (:rendered inspector) :status :done)))

(defn- failure [{:keys [transport] :as msg} err err-kw]
(transport/send transport (base-error-response msg err err-kw :done)))
(defn- success [msg inspector]
(response-for msg :value (:rendered inspector) :status :done))

(defn pop-reply [msg]
(try (success msg (swap-inspector! msg inspect/up))
(catch Exception e (failure msg e :inspect-pop-error))))
(success msg (swap-inspector! msg inspect/up)))

(defn push-reply [msg]
(try (success msg (swap-inspector! msg inspect/down (:idx msg)))
(catch Exception e (failure msg e :inspect-push-error))))
(success msg (swap-inspector! msg inspect/down (:idx msg))))

(defn refresh-reply [msg]
(try (success msg (swap-inspector! msg #(or % (inspect/fresh))))
(catch Exception e (failure msg e :inspect-refresh-error))))
(success msg (swap-inspector! msg #(or % (inspect/fresh)))))

(defn get-path-reply [{:keys [session] :as msg}]
(try (success msg (:path (get session #'*inspector*)))
(catch Exception e (failure msg e :inspect-get-path-error))))
(:path (get session #'*inspector*)))

(defn next-page-reply [msg]
(try (success msg (swap-inspector! msg inspect/next-page))
(catch Exception e (failure msg e :inspect-next-page-error))))
(success msg (swap-inspector! msg inspect/next-page)))

(defn prev-page-reply [msg]
(try (success msg (swap-inspector! msg inspect/prev-page))
(catch Exception e (failure msg e :inspect-prev-page-error))))
(success msg (swap-inspector! msg inspect/prev-page)))

(defn set-page-size-reply [msg]
(try (success msg (swap-inspector! msg inspect/set-page-size (:page-size msg)))
(catch Exception e (failure msg e :inspect-set-page-size-error))))
(success msg (swap-inspector! msg inspect/set-page-size (:page-size msg))))

(defn handle-inspect [handler msg]
(case (:op msg)
"eval" (eval-reply handler msg)
"inspect-pop" (pop-reply msg)
"inspect-push" (push-reply msg)
"inspect-refresh" (refresh-reply msg)
"inspect-get-path" (get-path-reply msg)
"inspect-next-page" (next-page-reply msg)
"inspect-prev-page" (prev-page-reply msg)
"inspect-set-page-size" (set-page-size-reply msg)
(handler msg)))
(if (= (:op msg) "eval")
(eval-reply handler msg)

(with-safe-transport handler msg
"inspect-pop" pop-reply
"inspect-push" push-reply
"inspect-refresh" refresh-reply
"inspect-get-path" get-path-reply
"inspect-next-page" next-page-reply
"inspect-prev-page" prev-page-reply
"inspect-set-page-size" set-page-size-reply)))
9 changes: 2 additions & 7 deletions test/clj/cider/nrepl/middleware/inspect_test.clj
Original file line number Diff line number Diff line change
Expand Up @@ -76,13 +76,8 @@
:code "(first 1)"})]

(testing "exprs that throw exceptions return an `ex` slot"
(is (= "class java.lang.IllegalArgumentException"
(:ex exception-response))))

;;TODO: The :err slot is missing when running this through the Cider test-runner
(testing "exprs that throw exceptions return an `err` slot"
(is (.startsWith (:err exception-response)
"IllegalArgumentException")))))
(is (= "class java.lang.Exception"
(:ex exception-response))))))

(testing "inspect-pop error handling"
(with-redefs [i/swap-inspector! (fn [& _] (throw (Exception. "pop exception")))]
Expand Down

0 comments on commit c0b9094

Please sign in to comment.