Fix spec dashboard overview grouping for C# management emitter - #11709
Fix spec dashboard overview grouping for C# management emitter#11709Wei Hu (live1206) wants to merge 7 commits into
Conversation
|
No changes needing a change description found. |
There was a problem hiding this comment.
Pull request overview
This PR updates the spec dashboard’s coverage overview to aggregate coverage by a logical emitter “display name” (e.g., grouping data-plane and management-plane C# emitters together) and adds a regression test intended to prevent the C# management emitter from appearing as a separate language card.
Changes:
- Group overview cards by a logical key derived from the emitter display name rather than the raw emitter package name.
- Track/display a grouped display name per overview entry.
- Add a regression test for the C# management/data-plane grouping scenario.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 3 comments.
| File | Description |
|---|---|
| packages/spec-dashboard/src/components/coverage-overview.tsx | Changes overview aggregation from per-emitter-package to per-display-name grouping. |
| packages/spec-dashboard/src/apis.test.ts | Adds a regression test rendering CoverageOverview to validate grouping behavior. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 2 out of 2 changed files in this pull request and generated no new comments.
Suppressed comments (2)
packages/spec-dashboard/src/components/coverage-overview.tsx:72
- The PR description (and linked issue) also calls out the management-plane table header showing a raw package name. This change only affects the overview grouping;
DashboardTableheader rendering is unchanged, so the table header may still fall back to the emitter package name whengeneratorMetadata.name/emitterDisplayNamesaren’t available. Either update the PR description to scope it to the overview-only fix, or include a table-header fix (e.g., derive a friendly name for*-mgmtpackages or ensure the mgmt emitter is always mapped viaemitterDisplayNames).
// Aggregate scenarios per logical emitter language across all summaries.
// This keeps emitters that share the same display name (for example C# data-plane
// and management-plane emitters) grouped into a single overview card.
packages/spec-dashboard/src/components/coverage-overview.tsx:134
- The overview aggregation does two linear scans over
summary.generatorReportspergroupKey(to computefirstReportand then again to computedisplayName). This makes the grouping work O(n²) per summary and adds avoidable complexity. SincegroupKeyis already the resolved display name, you can initialize the entry without re-scanning the reports.
const firstReport = Object.entries(summary.generatorReports).find(
([emitterName, report]) =>
getEmitterOverviewKey(emitterName, report, emitterDisplayNames) === groupKey,
)?.[1];
|
You can try these changes here
|
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 2 out of 2 changed files in this pull request and generated no new comments.
Suppressed comments (1)
packages/spec-dashboard/src/components/coverage-overview.tsx:133
- Inside the
if (!emitterMap.has(groupKey))block,Object.entries(summary.generatorReports).find(...)is executed twice with the same predicate. This adds unnecessary work and makes the code harder to follow; hoist the result into a single variable and reuse it for both thefirstReportand the emitter name used to computedisplayName.
const firstReport = Object.entries(summary.generatorReports).find(
([emitterName, report]) =>
getEmitterOverviewKey(emitterName, report, emitterDisplayNames) === groupKey,
)?.[1];
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.
Suppressed comments (1)
packages/spec-dashboard/src/apis.test.ts:269
- This regression test currently provides both
emitterDisplayNamesandgeneratorMetadata.name, so it doesn't cover the failure mode reported in #11699 where the management emitter can fall back to the raw package name (missing metadata and no friendly-name mapping). Consider removingemitterDisplayNamesand omittinggeneratorMetadata.nameso the test verifies the default display-name derivation + grouping behavior end-to-end.
const html = renderToStaticMarkup(
createElement(CoverageOverview, {
coverageSummaries,
emitterDisplayNames: {
"@azure-typespec/http-client-csharp": "C#",
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 4 out of 4 changed files in this pull request and generated no new comments.
Suppressed comments (1)
Previously missed (1) — in code that hasn't changed since the last review.
packages/spec-dashboard/src/components/coverage-overview.tsx:111
- This block scans
Object.entries(summary.generatorReports)twice with the same predicate to discover the first emitter for agroupKey. This is redundant work and makes the logic harder to follow. Consider extracting[firstEmitterName, firstReport]with a singlefind()and reuse those values when settingdisplayName.
const firstReport = Object.entries(summary.generatorReports).find(
([emitterName, report]) =>
getEmitterOverviewKey(emitterName, report, emitterDisplayNames) === groupKey,
)?.[1];
This reverts commit 4fb1f15.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.
Suppressed comments (1)
packages/spec-dashboard/src/apis.test.ts:231
- The PR description/linked issue state this change also fixes the management-plane table header showing a raw package name, but this PR only changes
CoverageOverviewgrouping and adds an overview-only regression test.DashboardTable/GeneratorHeaderCellstill renderdisplayName ?? report?.generatorMetadata?.name ?? language, so without anemitterDisplayNamesentry for@azure-typespec/http-client-csharp-mgmt(or a code change there) the header can still fall back to the package name.
it("should group overview coverage by logical display name across emitter packages", () => {
Summary
Fixes #11699
Group coverage overview entries by their configured display name rather than by raw emitter package name. This allows data-plane and management-plane emitters configured with the same language label to contribute to one overview card without counting a scenario more than once within a summary.
The explicit management C# display-name mapping is added by Azure/typespec-azure#5291.
Validation
C#display name and verifies the overview renders one combined C# card.