校对:soup
目录
概览
dart analyze 是 Dart SDK 的内置静态分析器—— 与 Dart IDE 后面的同一引擎
插件 。 它报告了两种发现, 这个适配器处理两种:
- 林特规则 (215 Codacy types)——风格与最佳做法检查. Opt-in:它们只在
a 一个
analysis_options.yaml允许他们. - 分析器诊断 (962 Codacy types)——编译-时间错误,类型错误,死代码. 总是在,不需要配置.
| 财产 | 数值 |
|---|---|
| 工具标识 | dartanalyzer |
| 编码 UUID | d203d615-6cf1-41f9-be5f-e2f660f7850f |
| 战略 | CLI (中文(简体) )spawnTool(中文(简体) ) |
| 语文 | 达特 |
| 文件图案 | **/*.dart |
| 运行时间 | Dart SDK 3.x(~210 MB,自动安装) |
| 上游文件 | https://dart.dev/tools/dart-analysis. 互联网档案馆的存檔,存档日期2013-12-21 |
| Codacy 包装器 | https://github.com/codacy/codacy-dartan分析器 互联网档案馆的存檔,存档日期2013-12-21 |
更新图案
# Re-fetch pattern metadata from the Codacy API
pnpm prefetch
# The pattern-type table is derived from patterns.json — always refresh it too
pnpm fetch-rule-types
# Commit both
git add src/patterns.json src/pattern-types.json
更新图案类型表格
src/pattern-types.json 将每个光标名称映射到 lint, (中文(简体) ), diagnostic 或者说 unknown。适配器
需要它,因为 analysis_options.yaml 有两个独立的部分和一个规则写错了
一个人默默无所事事.
pnpm fetch-rule-types 取自达特SDK自己的机器可读线条目录
(单位:千美元)pkg/linter/tool/machine/rules.json,具有压倒性 DART_LINT_RULES_URL: 名称目录
lists is a lint, 其他任何在科达西的目录 是一个诊断。 它会打印结果的计数
加上两个值得注意的差距:
- 删除的线条 (单位:千美元)
unknown)——仍在科达西的目录中,从SDK中走出. 写给两个 配置部分,因为分析器 既不认得它们。 明确名单生活在isRemovedLint()内scripts/fetch-rule-types.mjs; prune条目Codacy 滴出. - 没有可调性图案的 SDK 线条 ——目前49个. 它们永远无法从科达西上被启用 在Codacy的目录被赶上之前 这个软件包是无能为力的.
科德西包装船 相当于手写的桌子 docs/patterns_type.json这个
取而代之的是,该快照已经是SDK背后的49行规则;两者完全一致
他们分享的1213个图案(215 + 3去除的林斯 = 包装器的218;995个诊断).
更新 Dart SDK 版本
- 检查 Codacy 运行 :
.tool_version内codacy/codacy-dartanalyzer,或version字段 从https://app.codacy.com/api/v3/tools追踪,不是最新的稳定释放. - 更新
preferredVersion内src/metadata.ts。下载 URL 来源于它,所以没有 其它变化. - 运行
pnpm prefetch财务报告和审定财务报表pnpm fetch-rule-types来拿起新的和删除的规则. - 运行
pnpm test。 。 。 . - 新达特 主要 版本指一个新的适配器包(
dartanalyzer-4/) (中文(简体) ).
发展
pnpm build # Build with tsup
pnpm test # Run tests (SDK-dependent tests skip when no dart is installed)
在本地安装一个 Dart SDK, 因此集成测试运行而不是跳过 :
brew install dart # macOS
# or install Flutter, which bundles Dart
# or https://dart.dev/get-dart
codacy-analysis analyze . --install-dependencies 也可以工作:它下载被绑的便携式SDK
输入 ~/.codacy/tools/dartanalyzer/dart-sdk/。 。 。 .
维护者的注释
仓库- root 配置交换
这个是外出写字的适配器 .codacy/这不是一条捷径 dart analyze
没有任何选择.
这里的所有其他工具都需要一个 --config <path>。 。 。 . dart analyze 无等效: dartdev 曝光
仅限 --format, (中文(简体) ), --packages, (中文(简体) ), --cache, (中文(简体) ), --sdk-path 编辑 --fatal-* 旗帜。 分析师发现
analysis_options.yaml 通过行走 上来 分析文件中的目录树
(单位:千美元)ContextLocator 内 pkg/analyzer因此,一个配置在 .codacy/generated/ 从来没有见过。 科达西
Docker 包装器通过写入解决此问题 /analysis_options.yaml 并在
/src ——它拥有的父目录. 当地没有这样的目录.
这么说吧 analyze() 这样做,顺序如下:
- 回收 如果根配置带有
codacy-cli-generated-analysis-options标记, a 前一次运行被杀死 中游 : 恢复.codacy/generated/dartanalyzer/analysis_options.yaml.orig若为 当前,否则删除文件. - 写入 生成的配置为
.codacy/generated/dartanalyzer/analysis_options.yaml(贴在那里为 检查,将任何已有的根配置备份到…/analysis_options.yaml.orig,并复制 生成文件到寄存器根. - 运行 每个
dart analyze在一个配置下块. - 恢复 在一个
finally: 将备份放回, 或删除生成的文件—— 只有永远 删除一个带有标记的文件,所以用户创建的中程配置存活了下来.
标记使每一步都能安全地重复。 完全跳过互换的两条路径 :
正在使用项目本身的配置( i)useLocalConfigurationFile),当交换失败时(只读)
检查,权限)——这是警告,而不是失败,因为分析器诊断仍然有效
没有它,只有选入规则丢失.
不管运行哪条路径,结果都是通过启用的模式ID过滤后hoc的 本地配置路径也正确 .
为什么生成的配置看起来半空
它已启用 线条 而被忽视 诊断,没有其他的:
analyzer:
errors:
unused_import: ignore # every diagnostic NOT selected
linter:
rules:
prefer_single_quotes: true # every lint selected
- 未选中的线条得到否
false文件没有include:,所以一个没有名字的线条已经 关闭。 (击打)include:还避免了package:flutter_lints解析失败 包装器用一个容器底盘在周围工作dart pub add. ) (中文(简体) ) - 选定的诊断没有条目。 他们已经以默认严重性开火
Issue.severity来自patterns.json在这里写一个关卡意味着翻译Codacy的High改为 a 区域ignore|info|warning|error- 包装纸写着high,则无效.
--format json没有 --format machine
包装器使用 --format machine 带有评论, JSON "在给定后返回多个对象
限制。 这在SDK 3.x 中已不再如此: emitJsonFormat 是一个单 json.encode 电话 JSON是... 乔治
更妙的是,它携带着 range.end (-) endLine编号 :endColumn, (中文(简体) ), correctionMessage
(-) Issue.suggestion),以及 code ,其中机器格式大写
代码和只给出 length 可跨行的三角洲.
parseDartOutput 仍然回到逐行解析压缩文档,以防
行为永远回归.
退出代码为 0 干净, 1 资讯, 2 警告者, 3 错误, 4 崩溃——仅 4 以上为a
失败.
未解决的依赖关系
dart analyze 需求 dart pub get 运行;无 .dart_tool/package_config.json,每个
package: 导入无法解决, 并报告 uri_does_not_exist 数以百计的调查结论
花花库.
适配器 从不运行 pub get (它会写 .dart_tool/ 财务报告和审定财务报表 pubspec.lock 输入
存储器,并需要网络——与 ESLint 适配器采取的立场相同 npm install) (中文(简体) ).
相反,它警告和压制 uri_does_not_exist, (中文(简体) ), uri_has_not_been_generated 财务报告和审定财务报表
depend_on_referenced_packages 只为了跑步 镇压是后胡克而不是一个配置
ignore 因此,它也适用于本地-配置路径,那里没有产生任何东西.
部件文件
达特 part 文件无法自行分析; 瞄准一个 dart analyze 报告
"是一部分,不能分析" 这是关于援引的抱怨,不是代码,所以..
信件被丢弃( 包装过滤器会过滤相同的两个字符串) 。 载有 part
指令是应该分析的。 B. 诊断与非.dart 文档(pubspec.yaml, (中文(简体) ),
analysis_options.yaml由于同样的原因而放弃.
已知的限制
- 达特·莫瑞斯. 互换只触及寄存器根. 嵌入自有的套件
analysis_options.yaml击败了它,所以Codacy的图案选择被忽略了文件在此下 软件包。 已跟踪docs/tech-debt.md。 。 。 . - 同时运行. 两个
codacy-analysis analyze在互换中进行一个寄存器竞赛. - 每块一个分析服务器 . 每个
dart analyze引用启动自己的分析服务器, 所以,一个文件列表 足够大, 可以被分割到 argv 块 支付启动 不止一次 .