lint 指什么?

通常意义上讲,lint 在软件行业中是指从代码的静态分析中检测出潜在的问题,包括

  • 特定逻辑的写法
  • 设计模式的使用
  • 编程范式的使用
  • 变量命名的方式
  • 代码风格的规定

我们对 lint 的诉求是什么?

  • 易于拓展
  • 社区活跃
  • 配置灵活

团队内部开发时有哪些实践?

  • 区分 coding / pre-commit hook / ci / nightly run 四套 lint 规则
    • coding 为了减少干扰,stylistic lint 都设置为 warn
    • pre-commit hook 为了减少 lint 占用时间,禁用类型相关的 lint (同时提供手动触发全量 lint 的 script)
    • ci 为了统一代码风格、减少冲突和 reviewer 痛苦,把 stylistic lint 打开
    • nightly run 集成类似 sonar.js / deprecated 这种高级 lint,形成 report 来提供代码质量 overview 及些许 insight
  • 对注释的 lint
  • 对 deprecated 的 lint
  • 内部需要的自定义 lint
  • 定期做 code review,回顾一些典型错误

一些想法

区分这么多是为了在开发效率和代码质量的强检查之间做 tradeoff,如果大家的机器都很好,有资源在本地跑各种 lint 就没必要分的那么细了。一般对开源项目来讲,开发者的环境比较未知,给一套统一的就足够了,好处是无需配置多套 lint 的工作量,本地和 CI 一致。

代码风格的选择往往并不是有公认的最优选择的,而是权衡考虑各方面,包括编程者的知识背景、对编码风格的认知、在工程上的好处等等。虽然代码风格没有绝对的好坏,统一的代码风格在工程中有着不可替代的优势的,无论是在阅读、重构、搜索或者追溯性上。代码写多的人有一种代码的直觉,各种 pattern 了然于胸,借助它们来帮助快速理解代码,但即使这样,也许要考虑到不太熟悉项目的团队成员,代码中花里胡哨的写法、技术债、hack 写法、历史包袱等等脱离注释或文档是很难再被理解的,需要借助良好的书写方式、遵从特定的规范来书写,以起到帮助读者理解的作用。


延伸阅读