【问题标题】:Clojure :: lint-like hintsClojure :: 类似 lint 的提示
【发布时间】:2014-11-05 09:34:07
【问题描述】:

我今天发现了一个错误,该错误最终是由于我的代码中某处的以下 sn-p 导致的(我试图在列表中仅过滤“主键”约束):

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

而不是正确的:

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

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

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

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

(= 1) ; evals to true

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

【问题讨论】:

    标签: clojure


    【解决方案1】:

    您可以查看kibit - 尝试使用基于core.logic 构建的规则对clojure 代码执行静态分析的工具。添加新规则应该不是那么难,但是这个工具也有限制 - 请参阅项目的描述。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        如果您遇到此类问题,最好使用右缩进。你的情况

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

        如果你有

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

        你显然可以注意到一个错误。

        【讨论】:

          【解决方案4】:

          早先的回答中提到的 Eastwood 现在能够在 2014 年初解决您的特定问题以及其他几种问题。看看吧:https://github.com/jonase/eastwood

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-06-22
            • 2017-07-27
            • 2011-10-13
            • 1970-01-01
            • 1970-01-01
            • 2011-03-02
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多