Clojure世界:静态代码分析

    Java世界里有findbugs这样的神器,可以让你避免很多“简单愚蠢”的bug。同样,Clojure世界里也有相应的替代品,这就是今天要介绍的kibit。不过kibit现在还比较年轻,判断的规则较少,但是已经可以使用起来做clojure代码的静态检查。

项目主页:https://github.com/jonase/kibit
使用:
1.安装lein插件:

lein plugin install jonase/kibit 0.0.2

2.在项目的根目录运行

lein kibit

kibit会分析项目里所有clojure源码,每个namespace分别分析,例如我分析clojure-control的输出:

== control.commands ==
== control.core ==
[186] Consider (zero? (:status (ssh host user cluster (str "test -e " file)))) instead of (= (:status (ssh host user cluster (str "test -e " file))) 0)
== control.main ==
== leiningen.control ==
[null] Consider Integer/parseInt instead of (fn* [p1__61444#] (Integer/parseInt p1__61444#))
[null] Consider Integer/parseInt instead of (fn* [p1__65254#] (Integer/parseInt p1__65254#))

    显然,kibit一个一个namespace分析过去,并且按照规则对它认为有问题的地方打印出来,并提出建议。例如这里它建议我用

(zero? (:status (ssh host user cluster (str "test -e " file))))
    替换control.core里186行的:

 (= (:status (ssh host user cluster (str "test -e " file))) 0)

    目前kibit大多数是这类代码风格上的检查,还没有做到类似findbugs那样更丰富的检查,例如NPE异常检查等。此外kibit还提供反射检查,任何有反射调用的地方都给出警告。
    kibit是基于core.logic实现的,它的规则都放在了这里,通过defrules宏来定义检查规则,源码中对算术运算的规则定义:

(defrules rules
  [(+ ?x 1) (inc ?x)]
  [(+ 1 ?x) (inc ?x)]
  [(- ?x 1) (dec ?x)]

  [(* ?x (* . ?xs)) (* ?x . ?xs)]
  [(+ ?x (+ . ?xs)) (+ ?x . ?xs)])

   
    第一个规则,任何对类似(+ 1 x)的代码,都建议替换成(inc x),后面的与此类似。理论上你也可以自定义规则,并提交给官方。总体上说kibit仍然是比不上findbugs的,期待未来发展的更好。

文章转自庄周梦蝶  ,原文发布时间 2012-03-23

时间: 2024-11-08 19:08:22

Clojure世界:静态代码分析的相关文章

静态代码分析工具Klocwork发新版本

为了让开发团队在其代码中提升安全问题和漏洞的发现,Rogue Wave发布了新的安全报告功能,新的Java检查器,CERT分类法的更新等静态代码分析工具. Klocwork 2017.1是Rogue Wave发布的最新版本,并引入了一个新的内置图形安全报告,能够总结前三大漏洞,以及发生这些问题的热点. 据介绍,这些报告的初衷是将项目状态报告纳入管理层或其他业务相关部门.团队可以根据最受欢迎的安全规则创建安全报告,包括CWE Top 25,CERT-C,DISA-STIG等. 每个报告提供了前三大

Infer —— Facebook 开源静态代码分析工具

Infer 是 Facebook 最新开源的静态程序分析工具,用于在发布移动应用之前对代码进行分析,找出潜在的问题.目前 Facebook 使用该工具来分析 Facebook 的 App,包括 Android .iOS.Facebook Messenger 和 Instagram 等等. 文章转载自 开源中国社区 [http://www.oschina.net]

静态代码检查工具 FindBugs

使用 FindBugs的原因和方法   静态分析工具承诺无需开发人员费劲就能找出代码中已有的缺陷.当然,如果有多年的编写经验,就会知道这些承诺并不是一定能兑现.尽管如此,好的静态分析工具仍然是工具箱中的无价之宝.在这个由两部分组成的系列文章的第一部分中,高级软件工程师 Chris Grindstaff 分析了 FindBugs如何帮助提高代码质量以及排除隐含的缺陷. 代码质量工具的一个问题是它们容易为开发人员提供大量但并非真正问题的问题--即伪问题(false positives).出现伪问题时

指针-java静态代码检查工具

问题描述 java静态代码检查工具 推荐一款java静态代码检查的工具,可以java nullpointer exception静态检查,可以实现检查是否有抛空指针异常的可能性,便于解决代码中更多空指针异常的问题 解决方案 FindBugs,这个可以检查很多,并且根据异常的等级区分开来. 解决方案二: 去这里 http://java-source.net/open-source/code-analyzers 选择 解决方案三: http://stackoverflow.com/questions

【ARM】Uboot代码分析

一.摘要 这篇文章主要对BootLoader(UBoot)的源码进行了分析,并对UBoot的移植略作提及.  BootLoader的总目标是正确调用内核的执行,由于大部分的BoorLoader都依赖于CPU的体系结构.因此大部分的BootLoader都分为两个步骤启动.依赖于CPU体系结构(如设备初始化等)的代码都放在stage1.而stage2一般使用C语言实现,能够实现更加复杂的功能,代码的可移植性也提高. 二.本文提纲 1. 摘要 2. 本文提纲 3. UBoot启动过程 4. Stage

DispatcherServlet代码分析及运行过程

DispatcherServlet代码分析及运行过程 1    首先该类有一静态语块,用以加载缺省策略.     static {             ClassPathResource resource =new ClassPathResource(DEFAULT_STRATEGIES_PATH,DispatcherServlet.class);             defaultStrategies = PropertiesLoaderUtils.loadProperties(res

facebook静态代码检查工具开源了!

以前一直想写个静态代码的检查工具,能够根据语法分析自动找出内存泄露的问题,今天发现facebook开源了这样一个工具,可以检查Java , Object c  和c代码,美中不足的是不支持C++. facebook的这款工具叫Infer,用于在发布移动应用之前对代码进行分析,找出潜在的问题.目前 Facebook 使用该工具来分析 Facebook 的 App,包括 Android .iOS.Facebook Messenger 和 Instagram 等等 Facebook 称该工具帮助其每个

代码分析-easyui在jsp页面中路径都对了,但是在浏览器中没效果。

问题描述 easyui在jsp页面中路径都对了,但是在浏览器中没效果. 路径已经核对了很多遍,是对的啊: 在静态的html页面是可以使用: 我是在官网下载的easyui1.4.3版本的: 不是浏览器缓存,换了很多浏览器都没效果: ...... 女生的头脑对代码分析能力就那么多了,没有c币了不能给悬赏了,不好意思了. 求大神帮帮忙 解决方案 查看浏览器客户端接收到的html代码是什么样的..f12调出开发工具看浏览器报错了吗 解决方案二: 浏览器中报出easyui中jquery.min.js和jq

Clojure世界:如何做性能测试

  我们经常需要在程序中测量某段代码的性能,或者某个函数的性能,在Java中,我们可能简单地循环调用某个方法多少次,然后利用System.currentTimeMillis()方法测量下时间.在Ruby中,一般都是用Benchmark module做测试,提供了更详细的报告信息.     同样,在Clojure里你可以做这些事情,你仍然可以使用System.currentTimeMillis()来测量运行时间,例如: user=> (defn sum1 [& args] (reduce +