Missing Necessary Knowledge for CS Students
  • 前言
  • 基础知识
    • Git
      • 安装
      • 基本命令
      • Git Commit Template
      • GitHub
    • Vim
      • 安装
      • 教程
    • 学会获取信息
      • 学会使用英文搜索信息
      • 阅读官方文档
    • 调试
      • 断点调试
      • 网页调试
    • 测试
    • 代码规范
      • 不同编程语言的代码规范
      • 注释与文档
    • 工具链
      • 代码格式化工具(Formatter)
      • 代码检查工具(Linter)
      • 包管理器与依赖管理工具
      • 打包工具
    • 抽象
      • 封装
      • 重构
      • 究竟什么是抽象
    • 编程语言
      • 编译器与解释器
      • 强类型与弱类型
      • 静态类型与动态类型
      • 面向对象与函数式编程
    • 其他
      • Markdown
      • Jupyter Notebook
      • 虚拟机与 Docker
      • CI/CD
  • 附:一些常见工具的使用
    • Scoop
Powered by GitBook
On this page
  1. 基础知识
  2. 工具链

代码检查工具(Linter)

Previous代码格式化工具(Formatter)Next包管理器与依赖管理工具

Last updated 2 years ago

Linter 是一个不太容易翻译的词,有时我们将其翻译为“代码检查工具”,但更常见的做法其实是不翻译。简单来说,这是一种帮助你编写更好代码、以减少代码中潜在 BUG 的工具。Linter 中通常包含若干规则,如许多 Linter 会在函数的圈复杂度高于一定值时产生提示,建议你重构函数以降低代码复杂度。当然,也有许多针对不同编程语言的特定规则,如建议 Python 使用连续三个双引号而非单引号作为 docstring、对 Java 代码文件中潜在 null 值的检查、对 C++潜在内存泄漏问题的检测等。

一个比较知名的 Linter 是 SonarLint,它为多种不同的编程语言配置了大量规则。你可以在许多编辑器/IDE,比如 VSCode 和 IDEA 的插件市场中找到 SonarLint 插件并安装。

例如,在下面的 JavaScript 框架 React 的代码中,SonarLint 发现我们在 JSX 中传递节点数组时使用了数组下标作为 key,而这是不建议的做法。你可以打开 SonarLint 对这个规则的具体描述,看到为什么不建议这么做,与你可以怎么做来修正这段代码。

在下面这段 C++代码中,使用了 Clang-Tidy 作为 Linter,可以看到,我们在 main 函数中使用new在堆中分配了一个对象h,但却没有及时使用delete释放它。Clang-Tidy 检测到了这个问题,提示我们这里存在潜在的内存泄露风险,建议我们在使用h之后为其释放内存。

下面列出一些编程语言常见的 Linter.

  • Python - Pylint / Ruff

  • Java - Checkstyle / SpotBugs

  • C++ - Clang-Tidy (clangd) / IntelliSense in Visual Studio

  • JavaScript/TypeScript - ESLint

  • Ruby - RuboCop

  • Go - Golangci-lint

  • Rust - Clippy

Sonarlint 示例
Clang-Tidy 示例