clojure-emacs/cider

cider-ns: jump to file/line on errors

Closed this issue · 0 comments

vemv commented

It would be handy if cider-ns jumped to the culprit file/line on errors, so that the user can fix the error and retry.

(Note that the culprit error may not be in an open buffer. Also, if the culprit is in a .jar, probably it's not worth visiting as it may be a wrong diagnostic).

This is a sample refresh response currently:

{:id "0a8f0873-bce2-4d11-826a-906c32ba41d3",
 :reloading ["cider.broken-test-ns"],
 :session #{"9542be41-dc08-4926-99d2-13b68a90ef74"},
 :error
 [{:path "cider/broken_test_ns.clj",
   :file "cider/broken_test_ns.clj",
   :phase "read-source",
   :file-url
   "file:/Users/vemv/cider-nrepl-upstream/broken-refresh-dirs/cider/broken_test_ns.clj",
   :column 6,
   :line 4,
   :class "clojure.lang.Compiler$CompilerException",
   :stacktrace [,,,],
   :compile-like "false",
   :location
   #:clojure.error{:column 6,
                   :line 4,
                   :phase "read-source",
                   :source "cider/broken_test_ns.clj"},
   :message
   "Syntax error reading source at (cider/broken_test_ns.clj:4:6).",
   :data
   "{:clojure.error/phase :read-source, :clojure.error/line 4, :clojure.error/column 6, :clojure.error/source \"cider/broken_test_ns.clj\"}"}
  {:class "java.lang.RuntimeException",
   :compile-like "false",
   :message "Invalid token: :::",
   :phase [],
   :stacktrace
   [,,,]}],
 :error-ns "cider.broken-test-ns",
 :status #{"error" "done"},
 :err
 "Syntax error reading source at (cider/broken_test_ns.clj:4:6).\nInvalid token: :::\n"}

So, we can grab the first valid :file-url / :line combination from :error.