关于 dart-run-static-analysis
面向 Dart 和 Flutter 开发者的静态分析工作指南,涵盖分析配置、诊断抑制和自动修复。它说明如何运行 dart analyze、检查诊断并格式化修改后的代码。
主要功能
- 01配置继承式 lint 规则
- 02启用严格类型检查
- 03排除文件或抑制诊断
- 04运行 Dart 静态分析
- 05预览并应用自动修复
- 06格式化代码并复查
适用场景
- 01为 Dart 或 Flutter 包设置分析规则
- 02处理生成文件中的分析诊断
- 03在 CI 中将提示设为失败条件
- 04批量应用修复并验证结果
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ dhruvanbhalara/ skills --skill dart-run-static-analysis安装后在 Claude Code 中输入/dart-run-static-analysis确认已加载。
详细介绍
目录
分析配置
在 Dart 包的根目录中配置 analysis_options.yaml,以强制执行严格的格式规范、整洁的代码风格和健全的代码:
- 继承 Lint 规则:使用
include指令继承一套推荐的基础规则。纯 Dart 包建议使用package:lints/recommended.yaml,Flutter 应用建议使用package:flutter_lints/flutter.yaml。 - 严格类型检查:在
analyzer: language:配置中显式声明严格静态类型,以消除不安全的动态类型:analyzer: language: strict-casts: true strict-inference: true strict-raw-types: true - 自定义 Linter 规则:在
linter: rules:下自定义特定规则。覆盖继承的配置时,使用映射键结构(rule_name: true/false)显式启用或停用规则。 - 自动格式化选项:在
formatter:节点下声明格式化参数(例如,配置page_width: 80)。
诊断抑制规则
当分析器警告或风格 Lint 产生误报,或命中生成的文件时,请使用以下策略之一显式抑制警告:
- 排除筛选器:使用标准 glob 模式,在
analyzer: exclude:列表中将整个文件或目录树(例如,生成的 JSON 模型或国际化文件)排除在分析之外:analyzer: exclude: - "lib/generated/**" - "**/*.g.dart" - 文件级抑制:在 Dart 文件绝对顶部的专用行中添加
// ignore_for_file: diagnostic_name,以停用整个文件范围内的特定规则。 - 行级抑制:在目标语句的上一行添加
// ignore: diagnostic_name,或将其追加到匹配行的末尾。 - Pubspec 抑制:在
pubspec.yaml中添加注释,以抑制包依赖项警告(例如# ignore: sort_pub_dependencies)。
工作流:运行静态分析
按照以下清单执行静态代码审查:
- 设置分析配置:确保项目根目录中存在
analysis_options.yaml。 - 运行分析:在终端中运行分析器:
dart analyze . - 将提示升级为致命错误:在 CI/CD 工作流中,追加致命错误标志,确保信息级 Lint 导致构建失败:
dart analyze . --fatal-infos - 分类处理诊断:检查警告,修正类型层次结构或未使用的变量,或酌情应用抑制规则。
工作流:应用自动代码修复
按照以下清单自动应用机械式快速修复:
- 验证 Lint 规则:确认目标 Linter 规则已在
analysis_options.yaml中启用。 - 试运行检查:运行试运行,检查建议的机械式修改:
dart fix --dry-run - 应用修复:在整个工作区中直接应用快速修复:
dart fix --apply - 格式化代码:格式化已修改的代码文件:
dart format . - 重新运行分析:确认
dart analyze报告结果无问题。
示例
完整的 analysis_options.yaml 模板
include: package:lints/recommended.yaml
analyzer:
exclude:
- "lib/generated/**"
- "**/*.g.dart"
- "**/*.freezed.dart"
language:
strict-casts: true
strict-inference: true
strict-raw-types: true
errors:
todo: ignore
missing_required_param: error
missing_return: error
linter:
rules:
always_declare_return_types: true
avoid_empty_else: true
prefer_const_constructors: true
sort_pub_dependencies: false
formatter:
page_width: 100
trailing_commas: preserve
行内抑制技巧
// 1. Suppress all instances of unused variables inside this specific file
// ignore_for_file: unused_local_variable
void calculateMetrics() {
// 2. Suppress a single line using a preceding comment ignore
// ignore: invalid_assignment
int x = 'not_an_int';
final unusedString = 'value'; // File-level ignore handles this
// 3. Suppress at the end of the line
final double pi = 3.14; // ignore: constant_identifier_names
}
评论
支持 Markdown