paddle C++源代码风格检查工具
Created by: QiJune
paddle的源代码使用clang-format工具来进行格式化,还缺少源代码风格的检查工具。以下对源代码风格检查工具做了一些调研:
- clang-tidy
clang-tidy (http://clang.llvm.org/extra/clang-tidy/) 是一个基于clang的静态代码分析框架,支持C++/C/Objective-C。相对于cpplint脚本,clang-tidy则是基于抽象语法树(AST)对源文件进行分析,结果更加准确,能检测的问题也更多,并且可以进行自动更正。 以命名为例,clang-tidy可以支持以下配置 (https://github.com/Microsoft/clang-tools-extra/blob/master/test/clang-tidy/readability-identifier-naming.cpp) ,是相当丰富的。 比较遗憾的是,目前clang-tidy不能避免对引入的第三方库进行检测,该filter功能还未被merge到主线https://reviews.llvm.org/D26418
- libclang的python绑定
libclang提供了一系列的C语言的接口,但是这些接口并不能完全提供存储在Clang C++ AST中的所有信息,只能提供部分基本信息。与此同时,libclang支持和python绑定使用。一个 cursor 是libclang中的关键抽象,它表示一个被解析翻译单元的抽象语法树中的一些节点。在一个单一抽象下的程序中,cursor整合不同类型的实体,提供一组常见的操作,如获取它的位置和子cursor( https://github.com/llvm-mirror/clang/blob/aca4fe314a55cacae29e1548cb7bfd2119c6df4c/bindings/python/clang/cindex.py#L599 )。 有一个开源工具cncc使用libclang来对源代码风格进行检查(https://github.com/mapbox/cncc )。可以支持的style的检查有限 ( https://github.com/mapbox/cncc/blob/master/examples/all.style )。
目前还暂未找到合适的C++源代码风格检查工具