Clojure :: lint-like提示

Mar*_*tus 4 clojure

我今天找到了一个错误,最终导致我的代码中的某个代码片段(我试图仅在列表中过滤"PRIMARY KEY"约束):

(filter #(= (% :constraint_type "PRIMARY KEY")) aListOfconstraints)
Run Code Online (Sandbox Code Playgroud)

而不是正确的:

(filter #(= (% :constraint_type) "PRIMARY KEY") aListOfconstraints)
Run Code Online (Sandbox Code Playgroud)

即错误是地图采用默认参数的组合效果,以防万一找不到密钥,如:

({:a 1 :b 2} :a 0)
Run Code Online (Sandbox Code Playgroud)

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

(= 1) ; evals to true
Run Code Online (Sandbox Code Playgroud)

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

har*_*pun 5

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

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


Ale*_*Ott 5

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