Expose stable machine-readable Angular build diagnostics

未关闭
#33,121 4 条评论 4 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
5/5
预计耗时
一周以上
新手友好度
35/100
Issue 类型
功能
描述清晰度
基本清楚
活跃度
冷清
技术栈
angular, typescript

调研方向

从 compiler-cli 包和 ng build 入口点开始,然后跟踪 Angular compiler 和 template diagnostics 的生成与格式化位置。定义并记录一种稳定的机器可读输出,其中包含所请求的诊断字段,并验证 strict-check build 能够为外部基线工具输出该内容。

由索引模型根据 Issue 内容生成。

描述

area: @angular/cli gemini-triaged
Which @angular/* package(s) are relevant/related to the feature request?

compiler-cli

Description

Large Angular codebases often want to enable stricter compiler checks, especially strictTemplates and extended diagnostics, but cannot fix all existing diagnostics in one migration.

Angular already supports category-based strictness ratcheting through template type-checking flags. That helps when a whole category of checks is too noisy.

It does not solve the case where a team wants a check enabled, but wants to treat existing diagnostics as migration debt while preventing new diagnostics from being introduced.

Teams can build this externally by parsing ng build output, but text output is not a stable API. Angular diagnostics can include template source spans and compiler-specific formatting, which makes external parsing fragile.

This is not a request for strictTemplates warning mode. A previous discussion in https://github.com/angular/angular/issues/55868 explained why warning mode is not a good fit for strictTemplates, especially because template type-checking often produces TypeScript diagnostics from generated template-checking code.

This request is only about exposing stable diagnostic output so external tooling can implement baseline/ratchet workflows reliably.

Proposed solution

Expose stable machine-readable diagnostics from Angular CLI builds.

For example:

ng build my-app --configuration strict-check --diagnostics-format json

or:

ng build my-app --configuration strict-check --diagnostics-output angular-diagnostics.json

The exact CLI/API shape is not important. The important part is that ng build can emit stable, machine-readable diagnostics.

Example shape:

{
  "diagnostics": [
    {
      "code": "NG8002",
      "category": "error",
      "source": "angular-template",
      "message": "Can't bind to ...",
      "file": "libs/example/src/example.component.html",
      "startLine": 12,
      "startColumn": 7,
      "endLine": 12,
      "endColumn": 28,
      "relatedInformation": []
    }
  ]
}

The schema should include enough stable information for tools to compare diagnostics across runs, such as diagnostic code, category/severity, source, file, source span, message, and related information when available.

This would enable external workflows like:

ng build my-app --configuration strict-check --diagnostics-output angular-diagnostics.json
angular-baseline check angular-diagnostics.json

That allows teams to create a migration ratchet:

  • Existing diagnostics are treated as migration debt.
  • New diagnostics fail CI.
  • Fixed diagnostics can be removed from the baseline.
  • The codebase becomes stricter over time.

This is similar in spirit to tsc-baseline or ESLint bulk suppressions, but for Angular compiler and template diagnostics.

Alternatives considered

Use existing template strictness flags

Angular's existing strictness flags are useful for category-based rollout.

However, disabling a category allows both existing and new violations in that category.

A diagnostic baseline lets a team keep the check enabled while allowing only known existing diagnostics.

Parse ng build text output

Teams can parse ng build output today, but this is fragile because CLI text output is optimized for humans, not long-term machine consumption.

Add first-class Angular diagnostic baselines

Angular could provide a full diagnostic baseline feature directly, for example:

ng build my-app --configuration strict-check --update-diagnostic-baseline
ng build my-app --configuration strict-check --diagnostic-baseline angular-diagnostics.baseline.json

That would be useful, but stable machine-readable diagnostics would already allow the ecosystem to build this externally.

主要语言
TypeScript
星标
27k
派生
11.8k
平均合并
16 小时 35 分钟
30 天内合并 PR
176

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

angular/angular-cli 的其他 Issue

查看 angular/angular-cli 的全部 Issue

相似的 Issue

更多 TypeScript Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。