lint

我们使用 clang-tidy 对 C++ 代码执行 lint 请求,旨在使代码库保持干净整洁。 linter 在根级 .clang-tidy 文件中配置。开发者 不应在较低级别创建额外的配置文件 这会导致规则树出现分歧。

如何执行 lint 请求

fx lint 是一种 Fuchsia 脚本,用于将特定于语言的 linter 封装在一个通用的 命令行界面。它会根据您选择的选项来收集 通过匹配 linter 将它们分隔开来,然后执行每个所需的 linter。 clang-tidy 用于 C 和 C++ 文件。

如果不使用任何其他参数,fx lint 会对 最新的 Git 提交,并通过 linter 传递它们:

fx lint

要将 lint 限制在 C++ 中,请添加双短划线 (--),后跟 要匹配的文件格式,例如:

fx lint -- '*.cc' '*.cpp'

如需通过 linter 运行特定的 GN 目标,请使用以下命令:

fx lint --target=<target>

要对当前工作目录下的所有文件执行 lint 请求,请添加 --all。 通常,从顶级 fuchsia 目录运行 fx lint --all 不会 (建议完成此任务,这可能需要几个小时才能完成)。请您确定 cd 到最适合您的分析要求的顶级目录。例如:

(cd <your/subdir>; fx lint --all -- '*.cc')

您还可以添加 --fix,以便针对某些问题自动生成修复(但 而不是全部)警告。

该工具本身介绍了其他选项和示例。为 运行以下关于 fx lint 的最新文档(包括示例):

fx lint --help

禁止显示警告

任何警告都可以通过添加 // NOLINT(<check_name>) 或 向违规行添加 // NOLINTNEXTLINE(<check_name>) 注释。它还 可以通过修改 根级 .clang-tidy 文件。

Checks

已启用多个检查类别,并且这些类别中包含特定的检查 已被停用,原因如下:已启用的检查类别列表 如下所示:

  • bugprone-*
  • clang-diagnostic-*
  • google-*
  • misc-*
  • modernize-
  • performance-*
  • readability-*

此列表在特定检查中跟踪了造成我们停用广告的原因:

  • clang-diagnostic-unused-command-line-argument - 忍者生成的编译 数据库包含链接器参数,该参数最终未被使用并触发 系统会针对每个文件显示此警告
  • misc-noexcept* - Fuchsia 不使用 C++ 异常
  • misc-non-private-member-variables-in-classes - 我们不允许使用类/结构体 包括私有和公开成员,但所有公开都没有问题。
  • modernize-deprecated-headers - Fuchsia 使用旧式 C 头文件
  • modernize-use-nodiscard - 不通常用于 Fuchsia 代码库中
  • modernize-raw-string-literal - 检查建议转换 \xFF 而我们更希望以转义形式保存这些文字
  • modernize-return-braced-init-list - 关于返回结果的可读性问题 大括号中的构造函数参数初始化列表,建议使用 构造函数
  • modernize-use-emplace - 启用了 IgnoreImplicitConstructors 选项 遵守 Abseil Tip of the Week #112
  • modernize-use-equals-delete - 标记所有 gtest TEST_F
  • modernize-use-trailing-return-type - Fuchsia C++ 代码通常使用 定义函数的 int foo() 样式,而不是 auto foo() -> int 样式 样式。
  • readability-implicit-bool-conversion - Fuchsia C++ 代码通常使用隐式 对指针和数字进行布尔值类型转换
  • readability-isolate-declaration - Zircon 代码通常使用成对声明。
  • readability-uppercase-literal-suffix - Fuchsia C++ 代码选择不强行 这种风格

静态分析

严格来说,它不会执行 lint 请求,但 Clang 静态分析器可以 进行深入分析,找出错误。如需了解详情,请参阅静态分析