Problem

Emacs Mode + Lsp mode 不支援 clj-kondo 的靜態分析。 在使用 uix 這樣使用 Macro 的 library 時, 不會有對應的上色。如 defui ,應該是使用 defn 上色,作者有整合 clj-kondo ,但在 使用 Emacs 時,需 要搭配 Cider 、並且 jack-in 進 Clojure 中,才會對 defui 上色。

emacs

補充:為什麼 VS code 的上色沒有問題

VS code 的 Clojure 的上色是基於語法導向。它會基於模式去斷定語法該上什麼顏色。因此 defui 在語法上接近 defn ,所以會將它上色。(from ChatGPT)

vscode

Emacs 設定方式

新版 Emacs 內建 tree-sitter ,tree-sitter 比傳統的 font-lock 方法相比,使用抽象語法樹做靜態分析,所以建義使用各語言的 ts mode。

使用 Clojure-ts-mode ,官網上有提供客制化 def form 的方式

(setopt clojure-ts-extra-def-forms '("defui" "$"))

設定完成就可以不用使用 jack-in ,但還是提供上色支持。

emacs2

留言