能否在宏展开前执行clj-kondo钩子以避免误报?
让clj-kondo钩子在原始节点运行的解决方案
clj-kondo钩子默认在宏展开后执行,这就是你处理cond->>时出现误报的核心原因——钩子看到的是展开后的嵌套->>结构,而非源文件里的原始cond->>形式。
要解决这个问题,你可以通过配置让钩子在**宏展开前(原始AST节点)**运行:
- 在
.clj-kondo/config.edn中修改:hooks配置,给目标钩子指定:when :unexpanded,并列出需要生效的宏符号(比如clojure.core/cond->>)。 - 示例配置如下:
{:hooks {:analyze-call {your.redundant.thread/hook {:when :unexpanded :macro-symbols [clojure.core/cond->>]}}}}
将your.redundant.thread/hook替换成你实际定义的钩子函数的命名空间和名称。
配置生效后,钩子会直接处理源文件里的cond->>原始节点,而非展开后的代码,这样就能准确判断是否存在冗余线程宏,避免误报。
同时,记得调整你的钩子逻辑,适配原始cond->>的节点结构(比如(cond->> expr pred1 expr1 pred2 expr2 ...)),而非展开后的嵌套形式。
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

