我们使用 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_Fmodernize-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 静态分析器可以 进行深入分析,找出错误。如需了解详情,请参阅静态分析。