简体   繁体   中英

Customizing repl/nrepl error messages

There's an error I keep doing in Clojure once in a while and I don't do it often enough yet to know immediately what I forgot but I still do it often enough that it gets really annoying.

Basically after using nrepl-jack-in , I often forgot to change to the correct namespace.

So at the nrepl user> prompt I enter a function and I get:

CompilerException java.lang.RuntimeException: Unable to resolve symbol: foo-bar-baz in this context, compiling:(NO_SOURCE_PATH:1)

printed in the nrepl buffer before giving me back the user> prompt.

So I figured out that instead of trying to mess up with Java / Clojure there was probably an easy way to give an hint directly from Emacs, using only some Emacs magic.

How can I add a hook (?) or something similar to Emacs / nrepl-mode so that when a specific message gets printed (like, say, a message containing "Unable to resolve symbol" and "in this context") I could add one line saying something like:

"Didn't you forget to change namespace?"

or even:

"There's a .clj buffer opened using namespace abc.defk, didn't you forget to enter: (ns  abc.def) ?"

There are quite some error messages which I find quite cryptic in Clojure and it usually takes me a while to figure out what I'm doing wrong. If I could "personalize" these error messages directly from Emacs I'd win quite some time.

So how can I "intercept" nrepl outputs and tailor them to my needs?

You'll have to alter nrepl-default-err-handler in nrepl.el to achieve the desired effect. Alternative you can advice (with defadvice ) nrepl-default-err-handler to replace its output if it matches a certain pattern. Doing this from nrepl.el doesn't seem particularly good idea to me, though. Maybe a nREPL middleware would be a better approach.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM