一、oclint的好处
OCLean代码扫描工具OCLint是基于Clang的静态分析工具,它可以分析代码中的潜在错误、代码规范性问题、复杂度问题等。在软件开发过程中,代码风格一致、通俗易懂、易于维护是非常重要的。而oclint可以通过对代码进行静态分析,自动生成各种规则来帮助开发人员检测代码中的错误和不规范的写法,进而提高代码的质量和可维护性。
使用oclint工具我们可以掌握代码的复杂性,根据代码结构和缺陷进行自动化分析,更好的保障代码的质量和稳定性,减少人力测试成本,同时也提高调试效率,给开发和测试人员提供了极大的帮助。
下面我们根据使用实例具体介绍一下oclint的使用方法和好处。
二、oclint cmake
OCLint当前支持手写Makefile和Cmake编译,我们这里介绍一下cmake的使用方法。首先确保您已经安装完了cmake,同时将代码托管到本地仓库当中(这里我们以Github为例)。
cmake -G Xcode -D OCLINT_BUILD_DIR=build \ -D CMAKE_C_COMPILER=clang \ -D CMAKE_CXX_COMPILER=clang++ \ -D OCLINT_BUILD_SYMBOLS=ON \ -D OCLINT_BUILD_DOCS=ON \ -D OCLINT_BUILD_TESTS=ON \ -D LLVM_ENABLE_ASSERTIONS=ON ../llvm/
这里我们使用cmake工具生成了llvm的Xcode工程文件,并且指定了编译器为clang。同时指定了编译输出目录为build目录。通过修改这个命令中的参数,您可以很方便地控制编译输出的结果。
三、oclint不更新了?
有人认为OCLint不再更新以及变得陈旧过时,但实际并非如此。其实它一直在更新,最近的一次更新是2021年8月份,版本号是0.15。相比于其他代码扫描工具,OCLint的代码库更为开源,更新速度也更快。同时,OCLint也支持自定义规则,您可以根据自己的需求和经验,添加或删除规则。
所以说,OCLint虽然历史悠久,但它仍然是一款很好用的代码扫描工具,它可以大大提高我们代码的精确性和可读性。相比其他代码扫描工具,OCLint具有更多的优势,可以更好地配合Clang使用。
四、oclint自定义规则
OCLint默认有很多规则,但也不能满足所有的需求,所以它支持自定义规则。我们可以使用oclint-json-compilation-database生成json文件,然后在json文件中进行自定义规则的添加和删除。例如:
{ "clang": { "include_dirs": ["include"], "defines": ["__NP__", "FOO=BAR"], "cflags": ["-fobjc-arc", "-Wall"], "cxxflags": ["-stdlib=libc++", "-std=c++11"], "warnings_as_errors": true }, "rules": { "my_custom_rule": { "enabled": true, "priority": 3, "category": "portability", "message": "This is my custom rule.", "description": "This rule is a demonstration of how to define a custom rule for OCLint.", "regex": "[-+](nonnull|retained|released)" } } }
以上是一个典型的json文件,可以看到在rules定义中,有一个my_custom_rule,这是一个自定义规则。其中各个属性的含义如下:
- enabled:表示该规则是否启用
- priority:表示优先级,用来控制规则的执行顺序
- category:表示规则所属的分类
- message:表示规则的错误信息
- description:表示规则的详细描述
- regex:表示规则所匹配的正则表达式
随着自定义规则的增加,OCLint的分析结果会变得更准确、更丰富。同时,如果您的团队有自己的代码规范和最佳实践,您可以使用自定义规则将这些标准固化在代码扫描工具中。
五、oclint如果需要真机才可以build
在使用OCLint时,有些开发者总会遇到一些很奇怪的问题,比如说,安装了OCLint但是无法在Xcode中运行。这种情况下,我们需要在终端中执行以下命令:
cd /usr/local/bin sudo ln -s /usr/local/opt/llvm@3.7/bin/clang oclint sudo ln -s /usr/local/opt/llvm@3.7/bin/oclint oclint-json-compilation-database
以上命令将OCLint、oclint-json-compilation-database添加到了环境变量中,并且定义了一个软链接。这样我们就可以在终端中使用OCLint了。
六、oclint ci
现在,很多开发人员都在使用CI/CD来构建和测试代码。CI/CD工具也可以很好地和OCLint配合使用。例如,我们可以在GitLab CI/CD的.yml文件中添加以下代码:
image: alpine stages: - lint oclint: stage: lint before_script: - apk add --no-cache alpine-sdk cmake gcc g++ llvm-dev curl - curl -sSL https://github.com/oclint/oclint/releases/download/v0.13/oclint-0.13-x86_64-linux-llvm-3.9.1.tar.gz | tar -xz - export PATH=$PATH:/root/oclint-0.13/bin - which oclint || exit 1 script: - cd ${CI_PROJECT_DIR} - make clean all - oclint-json-compilation-database -- -c - oclint -list-enabled-rules -max-priority=3 -rc SHORT_VARIABLE_NAME=3 -rc LONG_LINE=280 -rc=LONG_VARIABLE_NAME=40 allow_failure: true artifacts: when: always paths: - oclint.xml
以上代码实现了以下功能:
- Download OCLint
- Compile code with -c flag to generate compilation database
- Execute oclint command with pre-set configuration for filtering by priority, rules, variables, etc
这样我们就可以在GitLab图形化界面看到完整的oclint分析结果了。
结语
这里我们详细介绍了OCLean代码扫描工具OCLint的好处、使用方法和自定义规则。掌握了这些技巧后,我们可以更好地利用静态分析来提高代码的质量和稳定性,同时最大限度地减少无效的测试。