Objective-CLint(创建一个轻量级的、支持pre-commit的Objective-C 的静态检查)

Objective-CLint

创建一个轻量级的、支持pre-commit的Objective-C 的静态检查

感谢

感谢 spacecommander作者提供的Objective-C lint的思路以及open source 本文大部分是基于 spacecommander累加的一些新功能。再次感谢开源作者,非常棒👍🏻

架构/构思

1.前因

因为OC-Lint的重量型检查,导致如果使用OCLint 那么首先我们需要安装OCLint 以及 还需要编译工程,如果我们使用pre-commit那么 就会导致我们每次 git commit 时间会增加很多,每次 commit可能对于我们来说都是一种煎熬。ok那么就需要我们使用另外的方式解决。

OK,解决方法之一就是我们之间使用Clang-format,我们知道其实OCLint也是基于Clang-format做的,那么在寻找的过程中发现了有伟大的 spacecommander 作者已经帮助我们集成了Clang-format 作者除此之外还解决了可能会引起Clang-format有歧义的代码修改、以及Clang-format 扫不到的一些规则修改。

那么有了伟大的 spacecommander 作为基础,我们就可以利用他做一个pre-commit hook,用来OClint

2.相关实现、改动

  1. 在spacecommander 的基础上,实现了支持pre-commit,更方便集成
  2. spacecommander 只是对比了format之后行数,以用来比较是否有不否和规则的代码出现,不够明显,我们采用diff的方式对比了 format之前和之后的代码,使得开发者能更清楚,自己哪些地方代码不规范
  3. spacecommander 提供了api 一键format代码,我们不提供此功能,因为我总觉得只有多次的认识到不规范的代码,才能保证下次写出规范的代码
  4. 提供了diff之后可视化输出,打开html,一眼即可看到不规范的代码
  5. 修改了部分自定义规则代码,以适应灵活的代码不规范
  6. .clang-format 配置了更多的clang 规则

​ 2023.6.8 更新

1、增加命令

使用

  1. 安装 pre-commit , brew install pre-commit

  2. 在工程根目录添加(即.git同级目录)添加 .pre-commit-config.yaml

    并配置为:

    fail_fast: false
    repos:
      - repo: https://github.com/HaoXianSen/Objective-CLint.git
        rev: v1.0.0
        hooks:
          - id: objc-lint
            name: objc-format
            entry: format-objc-hook
            language: script
            require_serial: true
            verbose: true
    

    高阶使用

    fork 工程,可修改、增加自定义规则,以及.clang 规则

相关截图

image-20220914145906934

image-20220914145930603


2023年更新

  • clang-format 库更新、适配

    • 分别加入新版x86版的clang-format-x86, arm64版的clang-format-arm64

    • 根据系统判断使用x86版本的还是arm64版本的

  • 增加一些便捷性命令

    • –reporter [terminal / html / open_html ]

      增加报告类型,1、terminal 终端直接输出 2、html 终端输出html 3、 直接web打开html

    • –output [path]

      增加可配置输出目的地址,如果带有–output 输出会直接输出到指定文件

    • –quiet

      增加静默执行,即增加–quiet之后,全程不输出提示性、错误性的信息

  • 美观report html

    • 嵌入开源三方库diff2html 美观report html

    image-20230616114432297

2023 年后续迭代

  • autocorrect
    • 修正、完善aotocorrect功能
    • autocorrect 支持多文件

github

https://github.com/HaoXianSen/Objective-CLint

联系方式

harry_c2016@163.com