[TCGC] Extend isExactName to clients, methods, and enum values#4480
Conversation
…mValueType Agent-Logs-Url: https://github.com/Azure/typespec-azure/sessions/1a0c6fb7-3f3f-476c-a05d-05f23d26c6db Co-authored-by: tadelesh <1726438+tadelesh@users.noreply.github.com>
isExactName to clients, methods, and enum values
Agent-Logs-Url: https://github.com/Azure/typespec-azure/sessions/d203911a-12c3-45c7-817d-a2af2b3a1bcf Co-authored-by: tadelesh <1726438+tadelesh@users.noreply.github.com>
commit: |
Agent-Logs-Url: https://github.com/Azure/typespec-azure/sessions/4bcaa13c-14de-4915-a2ac-f4082d910d9c Co-authored-by: tadelesh <1726438+tadelesh@users.noreply.github.com>
Co-authored-by: tadelesh <1726438+tadelesh@users.noreply.github.com>
⚡ Benchmark Results
Full details – comparing
|
| Metric | Baseline | Current | Change |
|---|---|---|---|
| total | 🔴 700.9ms | 🔴 784.9ms | +12.0% 🔴 |
| loader | 🟢 128.6ms | 🟢 145.0ms | +12.7% 🔴 |
| resolver | 🟢 14.4ms | 🟢 20.0ms | +38.8% 🔴 |
| checker | 🟢 165.8ms | 🟢 183.4ms | +10.6% 🔴 |
| validation | 🟢 39.3ms | 🟢 43.0ms | +9.3% 🔴 |
| ↳ validation/@azure-tools/typespec-azure-core | 🟢 5.6ms | 🟢 5.8ms | +4.4% |
| ↳ validation/@typespec/http | 🟢 4.8ms | 🟢 5.5ms | +14.7% 🔴 |
| ↳ validation/@typespec/rest | 🟢 0.5ms | 🟢 0.7ms | +41.8% 🔴 |
| ↳ validation/@typespec/versioning | 🔴 26.2ms | 🔴 28.7ms | +9.5% 🔴 |
| ↳ validation/compiler | 🟢 1.3ms | 🟢 2.3ms | +72.5% 🔴 |
| linter | 🟢 118.7ms | 🟢 142.2ms | +19.8% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-core/auth-required | 🟢 0.0ms | 🟢 0.0ms | +21.7% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-core/bad-record-type | 🟢 0.2ms | 🟢 0.2ms | +1.5% |
| ↳ linter/@azure-tools/typespec-azure-core/byos | 🟢 5.1ms | 🟢 6.0ms | +16.1% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-core/casing-style | 🟢 0.5ms | 🟢 0.6ms | +23.6% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-core/composition-over-inheritance | 🟢 0.0ms | 🟢 0.1ms | +44.8% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-core/documentation-required | 🟢 0.6ms | 🟢 0.8ms | +31.0% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-core/friendly-name | 🟢 0.6ms | 🟢 0.6ms | +8.0% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-core/key-visibility-required | 🟢 0.1ms | 🟢 0.2ms | +26.5% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-core/known-encoding | 🟢 0.2ms | 🟢 0.3ms | +15.1% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-core/long-running-polling-operation-required | 🟢 0.3ms | 🟢 0.4ms | +73.5% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-core/no-case-mismatch | 🟢 0.2ms | 🟢 0.2ms | +22.8% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-core/no-closed-literal-union | 🟢 0.2ms | 🟢 0.3ms | +35.6% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-core/no-enum | 🟢 0.0ms | 🟢 0.0ms | +26.7% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-core/no-error-status-codes | 🟢 0.1ms | 🟢 0.1ms | +10.7% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-core/no-explicit-routes-resource-ops | 🟢 0.1ms | 🟢 0.1ms | +10.2% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-core/no-format | 🟢 0.5ms | 🟢 0.5ms | +4.4% |
| ↳ linter/@azure-tools/typespec-azure-core/no-generic-numeric | 🟢 0.3ms | 🟢 0.4ms | +56.9% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-core/no-header-explode | 🟡 17.4ms | 🟡 18.7ms | +7.1% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-core/no-legacy-usage | 🟢 1.0ms | 🟢 1.1ms | +13.6% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-core/no-multiple-discriminator | 🟢 0.0ms | 🟢 0.1ms | +46.0% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-core/no-nullable | 🟢 0.2ms | 🟢 0.2ms | +13.4% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-core/no-offsetdatetime | 🟢 1.1ms | 🟢 1.3ms | +19.0% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-core/no-openapi | 🟢 1.7ms | 🟢 2.3ms | +30.1% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-core/no-private-usage | 🟢 1.6ms | 🟢 2.0ms | +24.5% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-core/no-query-explode | 🟡 16.8ms | 🟡 19.2ms | +14.3% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-core/no-response-body | 🔴 20.7ms | 🔴 22.5ms | +8.5% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-core/no-rest-library-interfaces | 🟢 0.0ms | 🟢 0.0ms | +52.0% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-core/no-route-parameter-name-mismatch | 🟢 4.7ms | 🟢 4.8ms | +2.5% |
| ↳ linter/@azure-tools/typespec-azure-core/no-rpc-path-params | 🟢 0.2ms | 🟢 0.2ms | +25.2% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-core/no-string-discriminator | 🟢 0.0ms | 🟢 0.1ms | +44.3% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-core/no-unknown | 🟢 0.2ms | 🟢 0.2ms | -7.9% 🟢 |
| ↳ linter/@azure-tools/typespec-azure-core/no-unnamed-union | 🟢 0.3ms | 🟢 0.3ms | +11.6% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-core/operation-missing-api-version | 🟢 0.2ms | 🟢 0.2ms | +17.1% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-core/request-body-problem | 🟢 0.2ms | 🟢 0.3ms | +50.2% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-core/require-versioned | 🟢 0.0ms | 🟢 0.0ms | +38.8% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-core/response-schema-problem | 🔴 20.4ms | 🔴 29.3ms | +43.3% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-core/rpc-operation-request-body | 🟢 0.3ms | 🟢 0.3ms | +4.9% |
| ↳ linter/@azure-tools/typespec-azure-core/spread-discriminated-model | 🟢 0.2ms | 🟢 0.3ms | +21.0% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-core/use-standard-names | 🟢 4.4ms | 🟢 4.5ms | +2.3% |
| ↳ linter/@azure-tools/typespec-azure-core/use-standard-operations | 🟢 0.1ms | 🟢 0.1ms | +5.4% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-common-types-version | 🟢 3.7ms | 🟢 4.8ms | +29.5% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-custom-resource-no-key | 🟢 0.1ms | 🟢 0.1ms | +36.7% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-custom-resource-usage-discourage | 🟢 0.1ms | 🟢 0.1ms | +22.9% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-delete-operation-response-codes | 🟢 4.9ms | 🟢 6.2ms | +27.2% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-no-path-casing-conflicts | 🟢 4.3ms | 🟢 5.3ms | +24.3% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-no-record | 🟢 0.3ms | 🟢 0.4ms | +14.4% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-post-operation-response-codes | 🟢 0.4ms | 🟢 0.6ms | +32.6% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-put-operation-response-codes | 🟢 0.0ms | 🟢 0.0ms | +75.2% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-action-no-segment | 🟢 0.2ms | 🟢 0.3ms | +16.6% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-duplicate-property | 🟢 0.1ms | 🟢 0.1ms | +47.9% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-interface-requires-decorator | 🟢 0.0ms | 🟢 0.0ms | +62.2% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-invalid-action-verb | 🟢 0.1ms | 🟢 0.1ms | +36.7% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-invalid-envelope-property | 🟢 0.1ms | 🟢 0.1ms | +32.9% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-invalid-version-format | 🟢 0.0ms | 🟢 0.1ms | +60.8% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-key-invalid-chars | 🟢 0.2ms | 🟢 0.2ms | +25.5% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-name-pattern | 🟢 0.0ms | 🟢 0.0ms | +67.2% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-operation | 🟢 0.2ms | 🟢 0.2ms | +44.7% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-operation-response | 🟢 4.4ms | 🟢 5.4ms | +23.8% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-patch | 🟢 0.3ms | 🟢 0.4ms | +31.2% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-path-segment-invalid-chars | 🟢 0.2ms | 🟢 0.2ms | +14.9% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-provisioning-state | 🟢 0.1ms | 🟢 0.1ms | +14.5% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/beyond-nesting-levels | 🟢 0.1ms | 🟢 0.1ms | +24.2% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/empty-updateable-properties | 🟢 0.1ms | 🟢 0.2ms | +37.2% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/improper-subscription-list-operation | 🟢 0.0ms | 🟢 0.0ms | +177.6% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/lro-location-header | 🟡 12.8ms | 🟡 17.2ms | +34.7% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/missing-operations-endpoint | 🟢 0.0ms | 🟢 0.0ms | +31.0% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/missing-x-ms-identifiers | 🟢 0.3ms | 🟢 0.3ms | +25.2% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/no-empty-model | 🟢 0.1ms | 🟢 0.1ms | +54.0% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/no-resource-delete-operation | 🟢 0.1ms | 🟢 0.2ms | +38.8% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/no-response-body | 🟡 19.0ms | 🔴 24.6ms | +29.4% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/patch-envelope | 🟢 0.1ms | 🟢 0.1ms | +23.2% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/resource-name | 🟢 0.1ms | 🟢 0.2ms | +36.3% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/secret-prop | 🟢 2.1ms | 🟢 2.9ms | +38.0% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/unsupported-type | 🟢 0.4ms | 🟢 0.4ms | +22.7% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/version-progression | 🟢 0.0ms | 🟢 0.0ms | +26.4% 🔴 |
| ↳ linter/@azure-tools/typespec-client-generator-core/property-name-conflict | 🟢 0.9ms | 🟢 1.1ms | +15.7% 🔴 |
| ↳ linter/@azure-tools/typespec-client-generator-core/require-client-suffix | 🟢 0.2ms | 🟢 0.2ms | +46.2% 🔴 |
| emit | 🟡 230.0ms | 🟡 251.3ms | +9.2% 🔴 |
| ↳ emit/@azure-tools/typespec-autorest | 🟢 144.1ms | 🟢 157.1ms | +9.0% 🔴 |
| ↳ emit/@typespec/openapi3 | 🟢 127.9ms | 🟢 141.2ms | +10.4% 🔴 |
| ↳ emit/@typespec/openapi3/compute | 🟢 115.6ms | 🟢 126.4ms | +9.3% 🔴 |
| ↳ emit/@typespec/openapi3/write | 🟢 12.2ms | 🟢 14.7ms | +20.6% 🔴 |
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)
|
All changed packages have been documented.
Show changes
|
|
You can try these changes here
|
@clientNamecan be applied to any type, butisExactNamewas only tracked on a subset of TCGC types — leaving emitters unable to detectexact()overrides on clients, service methods, and enum values.Interface additions
Added
isExactName: booleanto:SdkClientTypeSdkServiceMethodBase(inherited by basic / paging / lro / lropaging methods)SdkEnumValueTypePopulation
createSdkClientType(clients.ts): populatesisExactNameviaisExactClientName(...)and normalizes the override so the internal_exact_:marker no longer leaks intoSdkClientType.name.getSdkBasicServiceMethod(methods.ts): populatesisExactName; spread by all method variants.getSdkEnumValueWithDiagnosticsandgetSdkUnionEnumValues(types.ts): populateisExactNamefor both enum and union-as-enum members.Example
All three resulting SDK types now expose
isExactName: truewith theirnamereturned verbatim (no_exact_:prefix).Tests
Extended
test/functions/exact.test.tswith cases covering clients, methods, and enum values; existing method test now also assertsisExactName.