2023年12月18日月曜日

clojureのマクロを利用する定義の静的解析で変数未定義エラーになる場合の対応


マクロ内の変数が未定義エラーになる

VSCodeでclojureのマクロ(記事冒頭の図はpedestalのbuddyののinterceptor)を記述すると、error-dispatchマクロを利用する記述で下記の未定義エラーが発生しました。
Unresolved symbol: ctx clj-kondo(unresolved-symbol)

対応: declareで定義する

記述前にdeclareで定義しておけば、静的解析の意味付けはできませんがエラーは回避できます。
(declare ctx)
(declare ex)

変数にマウスカーソルを重ねると表示される定義は、declareで定義した情報が表示され、マクロで扱われる役割とは異なります。

参考: How to avoid unresolved symbol with clj-kond when using hugSQL def-db-fns macro?

おわり

解析で赤線が出るものの動きはするコードが出てきて戸惑いましたが、とりあえずエラーの赤線は消せて良かったです。
他に良い解決方法があれば、コメントなどで教えていただけると嬉しいです。

この記事は Clojure Advent Calendar 2023 18日目の記事です。

0 件のコメント :