Clojure :: lint-like提示

时间:2013-02-10 11:22:19

标签: clojure

我今天找到了一个错误,最终是由于我的代码中的某个地方的代码段(我试图仅过滤列表中的“PRIMARY KEY”约束):

(filter #(= (% :constraint_type "PRIMARY KEY")) aListOfconstraints)

而不是正确的:

(filter #(= (% :constraint_type) "PRIMARY KEY") aListOfconstraints)

即。该错误是在未找到密钥的情况下采用默认参数的地图的组合效果,如:

({:a 1 :b 2} :a 0)

...并且相等的函数只接受一个参数并返回true:

(= 1) ; evals to true

我是否可以使用任何工具来促使我使用这种有效但可疑的代码?或者也许是一些我不知道的最佳实践?

3 个答案:

答案 0 :(得分:5)

您正在寻找的最佳实践是检查代码正确行为的单元测试。

对于lint工具,您可以查看Eastwood,但在您的情况下,很难提供可以广泛使用的自定义检查。

答案 1 :(得分:5)

您可以查看kibit - 尝试使用core.logic之上构建的规则对clojure代码执行静态分析的工具。添加新规则应该不难,但此工具也有局限性 - 请参阅项目说明。

答案 2 :(得分:2)

在之前的回答中提到,伊斯特伍德现在能够在2014年初抓住您的特定问题以及其他几种问题。看看:https://github.com/jonase/eastwood