0

Clojure で時々やり続けるエラーがあります。忘れたものをすぐに知るにはまだ十分な頻度ではありませんが、本当に迷惑になるほど頻繁に行います。

基本的に を使用した後nrepl-jack-in、正しい名前空間に変更するのを忘れることがよくありました。

したがって、nrepluser>プロンプトで関数を入力すると、次のようになります。

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

プロンプトnreplを返す前にバッファに出力されました。user>

そこで私は、Java / Clojure を台無しにしようとする代わりに、Emacs マジックだけを使用して、Emacs から直接ヒントを与える簡単な方法があると考えました。

フック(?)またはEmacs / nrepl-modeに似たものを追加して、特定のメッセージが出力されたときに(たとえば、「シンボルを解決できません」および「このコンテキストで」を含むメッセージなど)追加できるようにするにはどうすればよいですか?次のような1行:

"Didn't you forget to change namespace?"

あるいは:

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

Clojure にはかなり不可解なエラー メッセージがいくつかあり、通常、何が間違っているのかを理解するのに時間がかかります。これらのエラー メッセージを Emacs から直接「パーソナライズ」できれば、かなりの時間を勝ち取ることができます。

では、nrepl の出力を「傍受」して、ニーズに合わせて調整するにはどうすればよいでしょうか。

4

1 に答える 1

1

nrepl-default-err-handler目的の効果を得るには、nrepl.el を変更する必要があります。特定のパターンに一致する場合は、その出力を置き換えるように(を使用してdefadvice)アドバイスできます。nrepl-default-err-handlerただし、 nrepl.el からこれを行うことは、特に良い考えではないようです。おそらく、nREPL ミドルウェアがより良いアプローチになるでしょう。

于 2013-02-16T19:17:09.820 に答える