Repository navigation
[api_summary] Add expectApiSummaryClean and --write/--check CLI flags - #2603
Conversation
Package publishingIf you have publishing permissions, you can use the links below to publish the changes after merging this PR.
Documentation at https://github.com/dart-lang/ecosystem/wiki/Publishing-automation. |
There was a problem hiding this comment.
Code Review
This pull request introduces golden file verification capabilities to the api_summary package, adding the expectApiSummaryClean function, ApiSummaryFormat enum, and ApiSummaryVerificationException class to support one-liner golden file verification in tests. It also extends the CLI executable with --write (-w), --check (-c), and --output (-o) flags. The review feedback highlights three key issues: a failure to correctly resolve the caller's package directory when api_summary is consumed as a pub dependency with a version suffix, a path resolution discrepancy in the CLI when combining a custom package path with a relative output path, and a regex parsing limitation in resolveCallerPackageDirectory when file paths contain parentheses.
PR Health
Coverage
|
| File | Coverage |
|---|---|
| pkgs/api_summary/bin/api_summary.dart | 💔 Not covered |
| pkgs/api_summary/lib/api_summary.dart | 💚 98 % |
| pkgs/api_summary/lib/src/verify.dart | 💚 92 % |
This check for test coverage is informational (issues shown here will not fail the PR).
This check can be disabled by tagging the PR with skip-coverage-check.
License Headers ✔️
// Copyright (c) 2026, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
| Files |
|---|
| no missing headers |
All source files should start with a license header.
Unrelated files missing license headers
| Files |
|---|
| pkgs/html/test/differential_test.dart |
| pkgs/html/test/dom_parsing_test.dart |
| pkgs/html/test/mxss_test.dart |
| pkgs/html/test/noah_ark_clause_limit_test.dart |
This check can be disabled by tagging the PR with skip-license-check.
Breaking changes ✔️
| Package | Change | Current Version | New Version | Needed Version | Looking good? |
|---|---|---|---|---|---|
| api_summary | Non-Breaking | 1.0.0 | 1.1.0 | 1.1.0 | ✔️ |
This check can be disabled by tagging the PR with skip-breaking-check.
Unused Dependencies ✔️
| Package | Status |
|---|---|
| api_summary | ✔️ All dependencies utilized correctly. |
For details on how to fix these, see dependency_validator.
This check can be disabled by tagging the PR with skip-unused-dependencies-check.
API leaks ✔️
The following packages contain symbols visible in the public API, but not exported by the library. Export these symbols or remove them from your publicly visible API.
| Package | Leaked API symbol | Leaking sources |
|---|
This check can be disabled by tagging the PR with skip-leaking-check.
Changelog Entry ✔️
| Package | Changed Files |
|---|
Changes to files need to be accounted for in their respective changelogs.
This check can be disabled by tagging the PR with skip-changelog-check.
…ller resolution and relative -o
…Path to Directory.current
… -o path resolution
- Use enum dot shorthands in `ApiSummaryFormat.format` and `_buildRemediationCommand`. - Use conditional collection elements and spreads in `_buildRemediationCommand`. - Add doc comments to private helpers in `lib/src/verify.dart`.
Adds a
build_verify-style one-liner test helper (expectApiSummaryClean) and companion--write(-w),--check(-c), and--output(-o) CLI flags topackage:api_summary(v1.1.0).expectApiSummaryClean):ApiSummarymatches its checked-in golden file (api.txt,api.json, orapi.yaml).packagePathdefaults toDirectory.current), it can be passed directly as a tear-off totest():ApiSummaryVerificationExceptionwith a compact line diff and copy-pasteable remediation command (dart run api_summary --write) without requiringpackage:testinapi_summary's runtimedependencies.bin/api_summary.dart):-w, --write: Writes the summary to the default golden file (api.txt,api.json, orapi.yaml) in the package root.-c, --check: Verifies that the existing golden file matches the current public API, exiting with code1on mismatch.-o, --output <file>: Writes the summary to a custom file path instead ofstdout(relative paths resolve relative to--package-path).--write,--check, and--outputvia an exhaustive record switch (exiting with code64on invalid combinations or unexpected positional arguments).test/app_test.dart):expectApiSummaryCleanforapi.txt,api.json, andapi.yamland pre-compilesbin/api_summary.dartto a kernel.dillinsetUpAll(cuttingtest/app_test.dartexecution time from ~105s to ~44s).