Skip to content

[Experimental] model-name-request-suffix rule in ARM package#4461

Draft
haiyuazhang wants to merge 1 commit into
mainfrom
haiyzhan/linter-request-suffix-in-arm
Draft

[Experimental] model-name-request-suffix rule in ARM package#4461
haiyuazhang wants to merge 1 commit into
mainfrom
haiyzhan/linter-request-suffix-in-arm

Conversation

@haiyuazhang
Copy link
Copy Markdown
Member

Experimental: model-name-request-suffix rule in ARM package

This is an experimental PR to compare placing the RequestContent model
name 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 depend
on @azure-tools/typespec-client-generator-core, so this rule:

  • Cannot check @clientName overrides — only sees raw TypeSpec model names
  • Produces false positives when client.tsp already has @@clientName("...Content", "csharp")
  • ❌ Both tsp compile . and tsp compile client.tsp show the same warnings

Compare with the TCGC version (#4460) which:

  • ✅ Uses getLibraryName(ctx, model, "csharp") to check the C#-resolved name
  • ✅ Respects @clientName overrides — no false positives
  • tsp compile client.tsp correctly shows 0 warnings when overrides exist

Test results (advisor spec)

Compile mode ARM version (this PR) TCGC version (#4460)
tsp compile . ⚠️ 1 warning ⚠️ 1 warning
tsp compile client.tsp ⚠️ 1 warning (false positive) ✅ 0 warnings

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>
@microsoft-github-policy-service microsoft-github-policy-service Bot added the lib:azure-resource-manager Issues for @azure-tools/typespec-azure-core library label May 19, 2026
@azure-sdk
Copy link
Copy Markdown
Collaborator

❌ There is undocummented changes. Run chronus add to add a changeset or click here.

The following packages have changes but are not documented.

  • @azure-tools/typespec-azure-resource-manager
  • @azure-tools/typespec-azure-rulesets
Show changes

@pkg-pr-new
Copy link
Copy Markdown

pkg-pr-new Bot commented May 19, 2026

Open in StackBlitz

npm i https://pkg.pr.new/@azure-tools/typespec-azure-resource-manager@4461
npm i https://pkg.pr.new/@azure-tools/typespec-azure-rulesets@4461

commit: 5454ad5

@github-actions
Copy link
Copy Markdown
Contributor

⚡ Benchmark Results

⚠️ 24 metric(s) regressed above the +5% threshold:

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/versioning 🔴 21.6ms 🔴 26.9ms +24.3% 🔴
linter 🟢 93.5ms 🟢 121.3ms +29.6% 🔴
 ↳ linter/@azure-tools/typespec-azure-core/byos 🟢 4.1ms 🟢 5.3ms +29.5% 🔴
 ↳ linter/@azure-tools/typespec-azure-core/no-header-explode 🟡 12.7ms 🟡 17.6ms +38.7% 🔴
 ↳ 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-route-parameter-name-mismatch 🟢 3.5ms 🟢 4.6ms +31.7% 🔴
 ↳ linter/@azure-tools/typespec-azure-core/response-schema-problem 🟡 15.5ms 🟡 19.6ms +26.5% 🔴
 ↳ linter/@azure-tools/typespec-azure-core/use-standard-names 🟢 3.3ms 🟢 4.6ms +36.8% 🔴
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-operation-response 🟢 3.6ms 🟢 5.3ms +46.0% 🔴
 ↳ linter/@azure-tools/typespec-azure-resource-manager/lro-location-header 🟢 9.2ms 🟡 13.5ms +46.3% 🔴
 ↳ linter/@azure-tools/typespec-azure-resource-manager/no-response-body 🟡 14.6ms 🟡 19.0ms +30.1% 🔴
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% 🔴
Full details – comparing b6b5d53 vs baseline 213d2b2
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)

@azure-sdk
Copy link
Copy Markdown
Collaborator

You can try these changes here

🛝 Playground 🌐 Website

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

lib:azure-resource-manager Issues for @azure-tools/typespec-azure-core library

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants