用途:审计 Dart 与 Flutter 代码库中的不可达、未使用声明,用于清理成熟包中的死代码、孤立内部抽象、独立应用与 CLI 工具中的失效功能,以及发布前裁剪实验性 API。它不同于仅检测文件私有标识符的 unused_element/unused_field 等词法 lint,而是从指定入口根构建整包可达性图。
主要能力:支持三种执行模式——library(默认,保留 lib/** 非 src 导出为公共 API 根)、closed-app(仅从 bin/**、lib/main.dart 等可执行入口追踪)、以及通过 --example-mode 控制 example/ 处理(demonstration/strict/skip)。输出格式可选 markdown、json、github,支持 --json-output 写文件、--extra-roots 追加根目录、--test-support-patterns 识别测试夹具、--ignore-name-patterns 忽略名称、--workspace-discovery 发现工作区消费者根、--ignore-external-bindings 保留 @JS()/FFI 外观、--suggest-private 识别可私有化声明、--fail-on-undead 供 CI 使用。
使用方式:在终端运行 dart run undead@^0.1.1 [options] [target_path]。若包未解析可加 --pub-get 自动执行 dart pub get 或 flutter pub get;沙箱环境遇 .dart_tool 原子重命名错误可加 --no-precompile。流程要求先只读审计并生成 undead_triage_report.md,再经用户确认后删除,删除前后需运行测试与 dart analyze --fatal-infos、dart format 校验。
限制:仅适用于 Dart/Flutter 项目,基于静态 AST 分析,无法识别动态 isolate、代码生成字符串模板、JS/WASM 编译目标、build hooks 等运行时引用;删除须遵守密封类子类型保护、测试共调用、框架入口点、@pragma('vm:entry-point') 等安全不变量,并可用 // undead:ignore 与 // undead:ignore_for_file 抑制。具体版本、收费与平台信息暂未提供。