[Experimental] model-name-request-suffix rule in ARM package#4461
[Experimental] model-name-request-suffix rule in ARM package#4461haiyuazhang wants to merge 1 commit into
Conversation
Experimental: implements the Request->Content model name rule in the ARM package instead of TCGC. This version cannot check @clientName overrides because the ARM package does not depend on TCGC, which causes false positives when client.tsp already has @@clientName fixes. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
❌ There is undocummented changes. Run The following packages have changes but are not documented.
Show changes |
commit: |
⚡ Benchmark Results
Full details – comparing
|
| Metric | Baseline | Current | Change |
|---|---|---|---|
| total | 🔴 581.2ms | 🔴 758.2ms | +30.4% 🔴 |
| loader | 🟢 108.4ms | 🟢 144.6ms | +33.4% 🔴 |
| resolver | 🟢 13.5ms | 🟢 21.1ms | +55.9% 🔴 |
| checker | 🟢 135.4ms | 🟢 178.3ms | +31.6% 🔴 |
| validation | 🟢 32.0ms | 🟢 40.5ms | +26.5% 🔴 |
| ↳ validation/@azure-tools/typespec-azure-core | 🟢 4.4ms | 🟢 5.6ms | +26.9% 🔴 |
| ↳ validation/@typespec/http | 🟢 3.8ms | 🟢 5.1ms | +35.7% 🔴 |
| ↳ validation/@typespec/rest | 🟢 0.4ms | 🟢 0.6ms | +39.6% |
| ↳ validation/@typespec/versioning | 🔴 21.6ms | 🔴 26.9ms | +24.3% 🔴 |
| ↳ validation/compiler | 🟢 1.3ms | 🟢 1.7ms | +30.3% |
| linter | 🟢 93.5ms | 🟢 121.3ms | +29.6% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-core/auth-required | 🟢 0.0ms | 🟢 0.0ms | +28.9% |
| ↳ linter/@azure-tools/typespec-azure-core/bad-record-type | 🟢 0.1ms | 🟢 0.2ms | +41.3% |
| ↳ linter/@azure-tools/typespec-azure-core/byos | 🟢 4.1ms | 🟢 5.3ms | +29.5% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-core/casing-style | 🟢 0.4ms | 🟢 0.5ms | +23.8% |
| ↳ linter/@azure-tools/typespec-azure-core/composition-over-inheritance | 🟢 0.1ms | 🟢 0.1ms | +3.0% |
| ↳ linter/@azure-tools/typespec-azure-core/documentation-required | 🟢 0.6ms | 🟢 0.8ms | +31.2% |
| ↳ linter/@azure-tools/typespec-azure-core/friendly-name | 🟢 0.4ms | 🟢 0.6ms | +26.3% |
| ↳ linter/@azure-tools/typespec-azure-core/key-visibility-required | 🟢 0.1ms | 🟢 0.2ms | +35.0% |
| ↳ linter/@azure-tools/typespec-azure-core/known-encoding | 🟢 0.2ms | 🟢 0.2ms | +19.9% |
| ↳ linter/@azure-tools/typespec-azure-core/long-running-polling-operation-required | 🟢 0.2ms | 🟢 0.3ms | +22.5% |
| ↳ linter/@azure-tools/typespec-azure-core/no-case-mismatch | 🟢 0.2ms | 🟢 0.2ms | +22.6% |
| ↳ linter/@azure-tools/typespec-azure-core/no-closed-literal-union | 🟢 0.2ms | 🟢 0.2ms | +31.4% |
| ↳ linter/@azure-tools/typespec-azure-core/no-enum | 🟢 0.0ms | 🟢 0.0ms | +23.2% |
| ↳ linter/@azure-tools/typespec-azure-core/no-error-status-codes | 🟢 0.1ms | 🟢 0.1ms | +30.7% |
| ↳ linter/@azure-tools/typespec-azure-core/no-explicit-routes-resource-ops | 🟢 0.1ms | 🟢 0.1ms | +26.2% |
| ↳ linter/@azure-tools/typespec-azure-core/no-format | 🟢 0.3ms | 🟢 0.4ms | +33.7% |
| ↳ linter/@azure-tools/typespec-azure-core/no-generic-numeric | 🟢 0.3ms | 🟢 0.4ms | +20.6% |
| ↳ linter/@azure-tools/typespec-azure-core/no-header-explode | 🟡 12.7ms | 🟡 17.6ms | +38.7% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-core/no-legacy-usage | 🟢 0.8ms | 🟢 1.0ms | +29.2% |
| ↳ linter/@azure-tools/typespec-azure-core/no-multiple-discriminator | 🟢 0.0ms | 🟢 0.1ms | +57.7% |
| ↳ linter/@azure-tools/typespec-azure-core/no-nullable | 🟢 0.2ms | 🟢 0.2ms | +21.7% |
| ↳ linter/@azure-tools/typespec-azure-core/no-offsetdatetime | 🟢 0.9ms | 🟢 1.2ms | +22.6% |
| ↳ linter/@azure-tools/typespec-azure-core/no-openapi | 🟢 1.4ms | 🟢 1.8ms | +26.5% |
| ↳ linter/@azure-tools/typespec-azure-core/no-private-usage | 🟢 1.4ms | 🟢 1.8ms | +31.0% |
| ↳ linter/@azure-tools/typespec-azure-core/no-query-explode | 🟡 13.0ms | 🟡 16.7ms | +28.3% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-core/no-response-body | 🟡 16.6ms | 🔴 21.4ms | +29.2% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-core/no-rest-library-interfaces | 🟢 0.0ms | 🟢 0.0ms | +32.4% |
| ↳ linter/@azure-tools/typespec-azure-core/no-route-parameter-name-mismatch | 🟢 3.5ms | 🟢 4.6ms | +31.7% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-core/no-rpc-path-params | 🟢 0.1ms | 🟢 0.2ms | +22.0% |
| ↳ linter/@azure-tools/typespec-azure-core/no-string-discriminator | 🟢 0.0ms | 🟢 0.0ms | +26.2% |
| ↳ linter/@azure-tools/typespec-azure-core/no-unknown | 🟢 0.1ms | 🟢 0.2ms | +43.1% |
| ↳ linter/@azure-tools/typespec-azure-core/no-unnamed-union | 🟢 0.2ms | 🟢 0.3ms | +24.6% |
| ↳ linter/@azure-tools/typespec-azure-core/operation-missing-api-version | 🟢 0.1ms | 🟢 0.2ms | +16.4% |
| ↳ linter/@azure-tools/typespec-azure-core/request-body-problem | 🟢 0.2ms | 🟢 0.3ms | +40.8% |
| ↳ linter/@azure-tools/typespec-azure-core/require-versioned | 🟢 0.0ms | 🟢 0.0ms | +30.9% |
| ↳ linter/@azure-tools/typespec-azure-core/response-schema-problem | 🟡 15.5ms | 🟡 19.6ms | +26.5% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-core/rpc-operation-request-body | 🟢 0.2ms | 🟢 0.3ms | +22.2% |
| ↳ linter/@azure-tools/typespec-azure-core/spread-discriminated-model | 🟢 0.2ms | 🟢 0.2ms | +35.0% |
| ↳ linter/@azure-tools/typespec-azure-core/use-standard-names | 🟢 3.3ms | 🟢 4.6ms | +36.8% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-core/use-standard-operations | 🟢 0.1ms | 🟢 0.1ms | +37.7% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-common-types-version | 🟢 3.0ms | 🟢 3.8ms | +29.4% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-custom-resource-no-key | 🟢 0.1ms | 🟢 0.1ms | +92.6% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-custom-resource-usage-discourage | 🟢 0.0ms | 🟢 0.1ms | +48.9% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-delete-operation-response-codes | 🟢 3.8ms | 🟢 4.7ms | +26.5% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-model-name-request-suffix | 🟢 0.0ms | 🟢 0.1ms | +100.0% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-no-path-casing-conflicts | 🟢 3.4ms | 🟢 4.1ms | +20.8% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-no-record | 🟢 0.3ms | 🟢 0.3ms | +25.7% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-post-operation-response-codes | 🟢 0.4ms | 🟢 0.4ms | +13.1% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-put-operation-response-codes | 🟢 0.0ms | 🟢 0.0ms | +14.6% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-action-no-segment | 🟢 0.2ms | 🟢 0.2ms | +36.7% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-duplicate-property | 🟢 0.1ms | 🟢 0.1ms | +41.5% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-interface-requires-decorator | 🟢 0.0ms | 🟢 0.0ms | +39.8% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-invalid-action-verb | 🟢 0.1ms | 🟢 0.1ms | +32.7% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-invalid-envelope-property | 🟢 0.1ms | 🟢 0.1ms | +39.9% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-invalid-version-format | 🟢 0.0ms | 🟢 0.0ms | +23.3% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-key-invalid-chars | 🟢 0.2ms | 🟢 0.2ms | +37.4% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-name-pattern | 🟢 0.0ms | 🟢 0.0ms | +39.5% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-operation | 🟢 0.1ms | 🟢 0.2ms | +30.4% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-operation-response | 🟢 3.6ms | 🟢 5.3ms | +46.0% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-patch | 🟢 0.2ms | 🟢 0.3ms | +42.1% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-path-segment-invalid-chars | 🟢 0.1ms | 🟢 0.2ms | +44.2% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-provisioning-state | 🟢 0.1ms | 🟢 0.1ms | +28.4% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/beyond-nesting-levels | 🟢 0.1ms | 🟢 0.1ms | +43.3% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/empty-updateable-properties | 🟢 0.1ms | 🟢 0.1ms | +44.8% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/improper-subscription-list-operation | 🟢 0.0ms | 🟢 0.0ms | +20.5% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/lro-location-header | 🟢 9.2ms | 🟡 13.5ms | +46.3% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/missing-operations-endpoint | 🟢 0.0ms | 🟢 0.0ms | +21.3% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/missing-x-ms-identifiers | 🟢 0.2ms | 🟢 0.3ms | +27.8% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/no-empty-model | 🟢 0.1ms | 🟢 0.1ms | +70.4% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/no-resource-delete-operation | 🟢 0.1ms | 🟢 0.2ms | +41.6% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/no-response-body | 🟡 14.6ms | 🟡 19.0ms | +30.1% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/patch-envelope | 🟢 0.1ms | 🟢 0.1ms | +39.8% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/resource-name | 🟢 0.1ms | 🟢 0.1ms | +44.9% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/secret-prop | 🟢 1.9ms | 🟢 2.5ms | +33.3% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/unsupported-type | 🟢 0.3ms | 🟢 0.4ms | +24.7% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/version-progression | 🟢 0.0ms | 🟢 0.0ms | +28.6% |
| ↳ linter/@azure-tools/typespec-client-generator-core/property-name-conflict | 🟢 0.7ms | 🟢 1.0ms | +32.9% |
| ↳ linter/@azure-tools/typespec-client-generator-core/require-client-suffix | 🟢 0.2ms | 🟢 0.2ms | +31.5% |
| emit | 🟢 192.6ms | 🟡 246.3ms | +27.9% 🔴 |
| ↳ emit/@azure-tools/typespec-autorest | 🟢 120.0ms | 🟢 154.6ms | +28.8% 🔴 |
| ↳ emit/@typespec/openapi3 | 🟢 107.7ms | 🟢 137.0ms | +27.2% 🔴 |
| ↳ emit/@typespec/openapi3/compute | 🟢 96.5ms | 🟢 122.8ms | +27.3% 🔴 |
| ↳ emit/@typespec/openapi3/write | 🟢 11.0ms | 🟢 14.3ms | +30.3% 🔴 |
Averaged across 3 specs (azure-arm-resource-manager, azure-core-dataplane, azure-full).
Threshold: changes > ±5% are highlighted.
🟢 Fast · 🟡 Moderate (stages >200ms, rules >10ms) · 🔴 Slow (stages >400ms, rules >20ms)
|
You can try these changes here
|
|
Hi @@haiyuazhang. Your PR has had no update for 14 days and it is marked as a stale PR. If it is not updated within 14 days, the PR will automatically be closed. If you want to refresh the PR, please remove the |
|
Hi @@haiyuazhang. This PR will be closed since it has had no update for 28 days. If this change is still relevant, please reopen the PR. |
Experimental: model-name-request-suffix rule in ARM package
This is an experimental PR to compare placing the
Request→Contentmodelname rule in the ARM package vs TCGC (see #4460).
Related issue: #4448
Why this is NOT the recommended approach
The ARM package (
@azure-tools/typespec-azure-resource-manager) does not dependon
@azure-tools/typespec-client-generator-core, so this rule:@clientNameoverrides — only sees raw TypeSpec model namesclient.tspalready has@@clientName("...Content", "csharp")tsp compile .andtsp compile client.tspshow the same warningsCompare with the TCGC version (#4460) which:
getLibraryName(ctx, model, "csharp")to check the C#-resolved name@clientNameoverrides — no false positivestsp compile client.tspcorrectly shows 0 warnings when overrides existTest results (advisor spec)
tsp compile .tsp compile client.tsp