diff --git a/src/cider/nrepl.clj b/src/cider/nrepl.clj index b6f39b76b..40867525f 100644 --- a/src/cider/nrepl.clj +++ b/src/cider/nrepl.clj @@ -239,6 +239,12 @@ "inspect-clear" {:doc "Clears the state state of the inspector." :requires {"session" "The current session"} + :returns {"status" "\"done\""}} + "inspect-def-current-value" + {:doc "Define the currently inspected value as a var with the given var-name in the provided namespace." + :requires {"session" "The current session" + "ns" "Namespace to define var on" + "var-name" "The var name"} :returns {"status" "\"done\""}}}})) (def-wrapper wrap-macroexpand cider.nrepl.middleware.macroexpand/handle-macroexpand diff --git a/src/cider/nrepl/middleware/inspect.clj b/src/cider/nrepl/middleware/inspect.clj index dddce82e0..3304d5c03 100644 --- a/src/cider/nrepl/middleware/inspect.clj +++ b/src/cider/nrepl/middleware/inspect.clj @@ -87,6 +87,9 @@ (defn clear-reply [msg] (inspector-response msg (swap-inspector! msg (constantly (inspect/fresh))))) +(defn def-current-value [msg] + (inspector-response msg (swap-inspector! msg inspect/def-current-value (symbol (:ns msg)) (:var-name msg)))) + (defn handle-inspect [handler msg] (if (= (:op msg) "eval") (eval-reply handler msg) @@ -99,4 +102,5 @@ "inspect-next-page" next-page-reply "inspect-prev-page" prev-page-reply "inspect-set-page-size" set-page-size-reply - "inspect-clear" clear-reply))) + "inspect-clear" clear-reply + "inspect-def-current-value" def-current-value))) diff --git a/test/clj/cider/nrepl/middleware/inspect_test.clj b/test/clj/cider/nrepl/middleware/inspect_test.clj index 2ef3fcf8b..447c42289 100644 --- a/test/clj/cider/nrepl/middleware/inspect_test.clj +++ b/test/clj/cider/nrepl/middleware/inspect_test.clj @@ -280,3 +280,20 @@ (first (:value (session/message {:op "eval" :inspect "true" :code "(range 100)"})))))))) + +(deftest inspect-def-current-value-test + (testing "inspect-def-current-value defines a var with the current inspector value" + (is (= "{3 4}" + (first (:value (do + (session/message {:op "eval" + :code "(def test-val [{1 2} {3 4}])"}) + (session/message {:op "eval" + :inspect "true" + :code "test-val"}) + (session/message {:op "inspect-push" + :idx 2}) + (session/message {:op "inspect-def-current-value" + :ns "user" + :var-name "sub-map"}) + (session/message {:op "eval" + :code "sub-map"}))))))))