Skip to content

Add C# nameing convention linter rules - batch1#4867

Draft
haiyuazhang wants to merge 4 commits into
Azure:mainfrom
haiyuazhang:haiyzhan/csharp-model-suffix-rules
Draft

Add C# nameing convention linter rules - batch1#4867
haiyuazhang wants to merge 4 commits into
Azure:mainfrom
haiyuazhang:haiyzhan/csharp-model-suffix-rules

Conversation

@haiyuazhang

@haiyuazhang haiyuazhang commented Jul 10, 2026

Copy link
Copy Markdown
Member

Adds four TCGC linter rules for C# SDK model naming:

  • csharp-no-options-suffix: suggests Config instead of Options, except client options
  • csharp-no-request-suffix: suggests Content instead of Request
  • csharp-no-response-suffix: suggests Result instead of Response
  • csharp-use-standard-acronyms: starts with Ip -> IP, Db -> DB, and Os -> OS

All rules use C# resolved names via getLibraryName(..., "csharp"), add @@clientName(..., "csharp") codefixes in client.tsp, and are enabled only through @azure-tools/typespec-azure-rulesets/client-sdk.

This PR partially addresses #4458 because that issue lists many acronym casing patterns. Based on existing client.tsp overrides, the most common three are Ip, Db, and Os, so this PR implements only those first to keep the rule focused. Additional acronyms can be added later.

Fixes #4448
Fixes #4449
Fixes #4450
Partially addresses #4458

Validation run locally:

  • pnpm --filter @azure-tools/typespec-client-generator-core build
  • pnpm --filter @azure-tools/typespec-client-generator-core exec vitest run test/rules/csharp-no-options-suffix.test.ts test/rules/csharp-no-request-suffix.test.ts test/rules/csharp-no-response-suffix.test.ts test/rules/csharp-use-standard-acronyms.test.ts
  • pnpm --filter @azure-tools/typespec-azure-rulesets build
  • pnpm --filter @azure-tools/typespec-azure-rulesets test

@microsoft-github-policy-service microsoft-github-policy-service Bot added int:azure-specs Run integration tests against azure-rest-api-specs lib:tcgc Issues for @azure-tools/typespec-client-generator-core library meta:website TypeSpec.io updates linter Issues related to linter rules labels Jul 10, 2026
@azure-sdk-automation

azure-sdk-automation Bot commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

All changed packages have been documented.

  • @azure-tools/typespec-azure-rulesets
  • @azure-tools/typespec-client-generator-core
Show changes

@azure-tools/typespec-client-generator-core - feature ✏️

Add csharp-no-options-suffix, csharp-no-request-suffix, csharp-no-response-suffix, and csharp-use-standard-acronyms linter rules for C# SDK model naming.

@azure-tools/typespec-azure-rulesets - feature ✏️

Add csharp-no-options-suffix, csharp-no-request-suffix, csharp-no-response-suffix, and csharp-use-standard-acronyms linter rules for C# SDK model naming.

@azure-sdk-automation

Copy link
Copy Markdown
Contributor

You can try these changes here

🛝 Playground 🌐 Website

@pkg-pr-new

pkg-pr-new Bot commented Jul 10, 2026

Copy link
Copy Markdown

Open in StackBlitz

npm i https://pkg.pr.new/@azure-tools/typespec-azure-rulesets@4867
npm i https://pkg.pr.new/@azure-tools/typespec-client-generator-core@4867

commit: aec1f70

@github-actions

github-actions Bot commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

⚡ Benchmark Results

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

Metric Baseline Current Change
total 🔴 1.00s 🔴 1.08s +7.2% 🔴
loader 🟡 304.5ms 🟡 328.4ms +7.8% 🔴
resolver 🟢 40.1ms 🟢 43.9ms +9.5% 🔴
checker 🟡 361.4ms 🟡 389.2ms +7.7% 🔴
validation 🟢 84.2ms 🟢 88.5ms +5.1% 🔴
linter 🟡 213.4ms 🟡 226.7ms +6.2% 🔴
 ↳ linter/@azure-tools/typespec-azure-core/no-header-explode 🔴 26.5ms 🔴 28.4ms +7.3% 🔴
 ↳ linter/@azure-tools/typespec-azure-core/no-query-explode 🔴 27.6ms 🔴 29.6ms +7.4% 🔴
 ↳ linter/@azure-tools/typespec-azure-core/no-response-body 🔴 33.2ms 🔴 35.4ms +6.7% 🔴
 ↳ linter/@azure-tools/typespec-azure-core/response-schema-problem 🔴 32.3ms 🔴 34.1ms +5.6% 🔴
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-agent-base-type-child-resources 🔴 20.3ms 🔴 22.1ms +8.7% 🔴
 ↳ linter/@azure-tools/typespec-azure-resource-manager/lro-location-header 🟡 19.5ms 🔴 21.3ms +9.1% 🔴
 ↳ linter/@azure-tools/typespec-azure-resource-manager/no-response-body 🔴 29.5ms 🔴 31.8ms +7.5% 🔴
emit 🔴 5.98s 🔴 6.32s +5.7% 🔴
 ↳ emit/@azure-tools/typespec-autorest 🟢 124.1ms 🟢 131.0ms +5.6% 🔴
 ↳ emit/@azure-tools/typespec-python 🔴 2.23s 🔴 2.36s +5.8% 🔴
 ↳ emit/@typespec/http-client-js 🔴 566.1ms 🔴 596.1ms +5.3% 🔴
 ↳ emit/@typespec/openapi3 🟢 106.7ms 🟢 112.1ms +5.1% 🔴
Full details – comparing d87c28d vs baseline rolling-baseline-3b1e01f-e161baf (rolling baseline (20 main runs))
Metric Baseline Current Change
total 🔴 1.00s 🔴 1.08s +7.2% 🔴
loader 🟡 304.5ms 🟡 328.4ms +7.8% 🔴
resolver 🟢 40.1ms 🟢 43.9ms +9.5% 🔴
checker 🟡 361.4ms 🟡 389.2ms +7.7% 🔴
validation 🟢 84.2ms 🟢 88.5ms +5.1% 🔴
 ↳ validation/@azure-tools/typespec-azure-core 🟡 12.5ms 🟡 13.3ms +6.9%
 ↳ validation/@typespec/http 🟡 15.4ms 🟡 16.3ms +5.5%
 ↳ validation/@typespec/rest 🟢 1.6ms 🟢 1.8ms +10.0%
 ↳ validation/@typespec/versioning 🔴 50.8ms 🔴 53.0ms +4.4%
 ↳ validation/compiler 🟢 3.8ms 🟢 4.0ms +4.9%
linter 🟡 213.4ms 🟡 226.7ms +6.2% 🔴
 ↳ linter/@azure-tools/typespec-azure-core/auth-required 🟢 0.1ms 🟢 0.1ms +11.9%
 ↳ linter/@azure-tools/typespec-azure-core/bad-record-type 🟢 0.6ms 🟢 0.6ms +3.9%
 ↳ linter/@azure-tools/typespec-azure-core/byos 🟢 8.3ms 🟢 8.7ms +5.3%
 ↳ linter/@azure-tools/typespec-azure-core/casing-style 🟢 1.4ms 🟢 1.5ms +3.2%
 ↳ linter/@azure-tools/typespec-azure-core/composition-over-inheritance 🟢 0.2ms 🟢 0.2ms +5.6%
 ↳ linter/@azure-tools/typespec-azure-core/documentation-required 🟢 1.9ms 🟢 2.0ms +5.4%
 ↳ linter/@azure-tools/typespec-azure-core/friendly-name 🟢 1.4ms 🟢 1.4ms +4.7%
 ↳ linter/@azure-tools/typespec-azure-core/key-visibility-required 🟢 0.4ms 🟢 0.4ms +5.0%
 ↳ linter/@azure-tools/typespec-azure-core/known-encoding 🟢 0.5ms 🟢 0.5ms +5.5%
 ↳ linter/@azure-tools/typespec-azure-core/long-running-polling-operation-required 🟢 0.8ms 🟢 0.9ms +6.4%
 ↳ linter/@azure-tools/typespec-azure-core/no-case-mismatch 🟢 0.7ms 🟢 0.7ms +5.3%
 ↳ linter/@azure-tools/typespec-azure-core/no-closed-literal-union 🟢 1.0ms 🟢 1.0ms +4.9%
 ↳ linter/@azure-tools/typespec-azure-core/no-enum 🟢 0.2ms 🟢 0.3ms +5.8%
 ↳ linter/@azure-tools/typespec-azure-core/no-error-status-codes 🟢 0.3ms 🟢 0.3ms +5.7%
 ↳ linter/@azure-tools/typespec-azure-core/no-explicit-routes-resource-ops 🟢 0.2ms 🟢 0.2ms +5.4%
 ↳ linter/@azure-tools/typespec-azure-core/no-format 🟢 0.8ms 🟢 0.9ms +4.6%
 ↳ linter/@azure-tools/typespec-azure-core/no-generic-numeric 🟢 0.8ms 🟢 0.9ms +5.4%
 ↳ linter/@azure-tools/typespec-azure-core/no-header-explode 🔴 26.5ms 🔴 28.4ms +7.3% 🔴
 ↳ linter/@azure-tools/typespec-azure-core/no-legacy-usage 🟢 2.1ms 🟢 2.2ms +4.7%
 ↳ linter/@azure-tools/typespec-azure-core/no-multiple-discriminator 🟢 0.2ms 🟢 0.3ms +8.9%
 ↳ linter/@azure-tools/typespec-azure-core/no-nullable 🟢 0.4ms 🟢 0.4ms +6.5%
 ↳ linter/@azure-tools/typespec-azure-core/no-offsetdatetime 🟢 2.0ms 🟢 2.1ms +5.0%
 ↳ linter/@azure-tools/typespec-azure-core/no-openapi 🟢 2.3ms 🟢 2.4ms +2.8%
 ↳ linter/@azure-tools/typespec-azure-core/no-private-usage 🟢 3.2ms 🟢 3.3ms +4.7%
 ↳ linter/@azure-tools/typespec-azure-core/no-query-explode 🔴 27.6ms 🔴 29.6ms +7.4% 🔴
 ↳ linter/@azure-tools/typespec-azure-core/no-response-body 🔴 33.2ms 🔴 35.4ms +6.7% 🔴
 ↳ linter/@azure-tools/typespec-azure-core/no-rest-library-interfaces 🟢 0.1ms 🟢 0.1ms +10.6%
 ↳ linter/@azure-tools/typespec-azure-core/no-route-parameter-name-mismatch 🟢 7.6ms 🟢 8.1ms +7.1%
 ↳ linter/@azure-tools/typespec-azure-core/no-rpc-path-params 🟢 0.4ms 🟢 0.4ms +6.0%
 ↳ linter/@azure-tools/typespec-azure-core/no-string-discriminator 🟢 0.1ms 🟢 0.2ms +8.3%
 ↳ linter/@azure-tools/typespec-azure-core/no-unknown 🟢 0.3ms 🟢 0.4ms +7.0%
 ↳ linter/@azure-tools/typespec-azure-core/no-unnamed-union 🟢 0.8ms 🟢 0.8ms +4.8%
 ↳ linter/@azure-tools/typespec-azure-core/operation-missing-api-version 🟢 0.4ms 🟢 0.4ms +4.0%
 ↳ linter/@azure-tools/typespec-azure-core/request-body-problem 🟢 0.5ms 🟢 0.5ms +2.9%
 ↳ linter/@azure-tools/typespec-azure-core/require-versioned 🟢 0.1ms 🟢 0.1ms +5.0%
 ↳ linter/@azure-tools/typespec-azure-core/response-schema-problem 🔴 32.3ms 🔴 34.1ms +5.6% 🔴
 ↳ linter/@azure-tools/typespec-azure-core/rpc-operation-request-body 🟢 0.7ms 🟢 0.7ms +6.2%
 ↳ linter/@azure-tools/typespec-azure-core/spread-discriminated-model 🟢 0.4ms 🟢 0.5ms +5.2%
 ↳ linter/@azure-tools/typespec-azure-core/use-standard-names 🟢 7.5ms 🟢 8.1ms +7.5%
 ↳ linter/@azure-tools/typespec-azure-core/use-standard-operations 🟢 0.3ms 🟢 0.3ms +3.4%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-agent-base-type-child-resources 🔴 20.3ms 🔴 22.1ms +8.7% 🔴
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-agent-base-type-lifecycle-operations 🟢 0.2ms 🟢 0.3ms +2.6%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-common-types-version 🟡 12.0ms 🟡 12.9ms +7.8%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-custom-resource-no-key 🟢 0.2ms 🟢 0.2ms +7.0%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-custom-resource-usage-discourage 🟢 0.1ms 🟢 0.1ms +8.1%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-delete-operation-response-codes 🟢 5.2ms 🟢 4.6ms -12.2%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-feature-file-usage-discourage 🟢 0.1ms 🟢 0.1ms +6.3%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-no-path-casing-conflicts 🟡 16.9ms 🟡 17.9ms +5.8%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-no-record 🟢 0.6ms 🟢 0.7ms +5.5%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-post-operation-response-codes 🟢 1.4ms 🟢 1.5ms +5.3%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-put-operation-response-codes 🟢 0.2ms 🟢 0.2ms +0.7%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-action-no-segment 🟢 0.4ms 🟢 0.5ms +9.3%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-duplicate-property 🟢 0.4ms 🟢 0.4ms +7.5%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-interface-requires-decorator 🟢 0.1ms 🟢 0.1ms +9.9%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-invalid-action-verb 🟢 0.2ms 🟢 0.2ms +11.7%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-invalid-envelope-property 🟢 0.3ms 🟢 0.3ms +8.2%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-invalid-version-format 🟢 0.2ms 🟢 0.2ms +1.2%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-key-invalid-chars 🟢 0.5ms 🟢 0.5ms +5.0%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-name-pattern 🟢 0.1ms 🟢 0.1ms +6.9%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-operation 🟢 0.5ms 🟢 0.6ms +5.2%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-operation-response 🟢 8.9ms 🟢 9.5ms +7.1%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-patch 🟢 0.8ms 🟢 0.8ms +3.8%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-path-segment-invalid-chars 🟢 0.4ms 🟢 0.4ms +5.8%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-provisioning-state 🟢 0.4ms 🟢 0.5ms +9.1%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/beyond-nesting-levels 🟢 0.2ms 🟢 0.2ms +6.9%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/empty-updateable-properties 🟢 0.4ms 🟢 0.4ms +5.4%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/improper-subscription-list-operation 🟢 0.1ms 🟢 0.1ms +15.2%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/lro-location-header 🟡 19.5ms 🔴 21.3ms +9.1% 🔴
 ↳ linter/@azure-tools/typespec-azure-resource-manager/missing-operations-endpoint 🟢 0.1ms 🟢 0.2ms +8.0%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/missing-x-ms-identifiers 🟢 1.0ms 🟢 1.0ms +4.2%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/no-empty-model 🟢 0.3ms 🟢 0.3ms +10.3%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/no-override-props 🟢 0.3ms 🟢 0.3ms +4.8%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/no-reserved-resource-property 🟢 0.2ms 🟢 0.2ms +8.7%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/no-resource-delete-operation 🟢 0.5ms 🟢 0.5ms +8.9%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/no-response-body 🔴 29.5ms 🔴 31.8ms +7.5% 🔴
 ↳ linter/@azure-tools/typespec-azure-resource-manager/patch-envelope 🟢 0.4ms 🟢 0.4ms +3.8%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/resource-name 🟢 0.4ms 🟢 0.4ms +2.7%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/secret-prop 🟢 5.3ms 🟢 5.6ms +6.0%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/unsupported-type 🟢 0.7ms 🟢 0.7ms +4.1%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/version-progression 🟢 0.3ms 🟢 0.3ms +0.8%
 ↳ linter/@azure-tools/typespec-client-generator-core/property-name-conflict 🟢 2.3ms 🟢 2.4ms +4.8%
 ↳ linter/@azure-tools/typespec-client-generator-core/require-client-suffix 🟢 1.7ms 🟢 1.7ms +3.4%
emit 🔴 5.98s 🔴 6.32s +5.7% 🔴
 ↳ emit/@Azure-Tools 🟢 0.0ms 🟢 0.0ms +0.0%
 ↳ emit/@azure-tools/typespec-autorest 🟢 124.1ms 🟢 131.0ms +5.6% 🔴
 ↳ emit/@azure-tools/typespec-python 🔴 2.23s 🔴 2.36s +5.8% 🔴
 ↳ emit/@typespec 🟢 0.0ms 🟢 0.0ms +0.0%
 ↳ emit/@typespec/http-client-js 🔴 566.1ms 🔴 596.1ms +5.3% 🔴
 ↳ emit/@typespec/openapi3 🟢 106.7ms 🟢 112.1ms +5.1% 🔴
 ↳ emit/@typespec/openapi3/compute 🟢 92.7ms 🟢 97.2ms +4.9%
 ↳ emit/@typespec/openapi3/write 🟢 13.7ms 🟢 14.6ms +6.1%

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)

@haiyuazhang haiyuazhang force-pushed the haiyzhan/csharp-model-suffix-rules branch from 49d785c to 8aaa585 Compare July 14, 2026 06:13
@github-actions

github-actions Bot commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

⚡ External Spec Benchmark Results

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

Metric Baseline Current Change
total 🔴 6.97s 🔴 7.65s +9.8% 🔴
loader 🔴 2.04s 🔴 2.32s +13.7% 🔴
checker 🔴 1.55s 🔴 1.66s +7.2% 🔴
validation 🟡 382.7ms 🔴 401.9ms +5.0% 🔴
 ↳ validation/@azure-tools/typespec-client-generator-core 🔴 20.4ms 🔴 22.4ms +9.8% 🔴
 ↳ validation/@typespec/http 🔴 158.3ms 🔴 171.5ms +8.3% 🔴
linter 🔴 2.83s 🔴 3.12s +10.0% 🔴
 ↳ linter/@azure-tools/typespec-azure-core/byos 🔴 131.4ms 🔴 146.3ms +11.3% 🔴
 ↳ linter/@azure-tools/typespec-azure-core/documentation-required 🟡 14.1ms 🟡 16.1ms +14.1% 🔴
 ↳ linter/@azure-tools/typespec-azure-core/no-header-explode 🔴 282.9ms 🔴 314.5ms +11.2% 🔴
 ↳ linter/@azure-tools/typespec-azure-core/no-private-usage 🔴 35.1ms 🔴 39.7ms +13.1% 🔴
 ↳ linter/@azure-tools/typespec-azure-core/no-query-explode 🔴 290.7ms 🔴 320.5ms +10.3% 🔴
 ↳ linter/@azure-tools/typespec-azure-core/no-rest-library-interfaces 🟡 16.4ms 🟡 19.2ms +17.0% 🔴
 ↳ linter/@azure-tools/typespec-azure-core/no-route-parameter-name-mismatch 🔴 128.6ms 🔴 141.3ms +9.8% 🔴
 ↳ linter/@azure-tools/typespec-azure-core/response-schema-problem 🔴 324.9ms 🔴 359.9ms +10.8% 🔴
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-agent-base-type-child-resources 🔴 66.9ms 🔴 73.1ms +9.3% 🔴
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-common-types-version 🔴 127.7ms 🔴 136.7ms +7.1% 🔴
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-no-path-casing-conflicts 🔴 146.4ms 🔴 161.7ms +10.4% 🔴
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-post-operation-response-codes 🟢 9.9ms 🟡 11.1ms +12.4% 🔴
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-operation-response 🔴 66.4ms 🔴 73.7ms +11.0% 🔴
 ↳ linter/@azure-tools/typespec-azure-resource-manager/lro-location-header 🔴 287.6ms 🔴 323.4ms +12.5% 🔴
 ↳ linter/@azure-tools/typespec-azure-resource-manager/no-response-body 🔴 473.8ms 🔴 518.5ms +9.5% 🔴
 ↳ linter/@azure-tools/typespec-client-generator-core/property-name-conflict 🔴 29.7ms 🔴 33.0ms +11.4% 🔴
Full details – comparing d87c28d vs baseline rolling-baseline-3497e82-e161baf (rolling baseline (2 main runs))
Metric Baseline Current Change
total 🔴 6.97s 🔴 7.65s +9.8% 🔴
loader 🔴 2.04s 🔴 2.32s +13.7% 🔴
resolver 🟢 152.3ms 🟢 156.4ms +2.7%
checker 🔴 1.55s 🔴 1.66s +7.2% 🔴
validation 🟡 382.7ms 🔴 401.9ms +5.0% 🔴
 ↳ validation/@azure-tools/typespec-azure-core 🟢 0.2ms 🟢 0.2ms -6.1%
 ↳ validation/@azure-tools/typespec-client-generator-core 🔴 20.4ms 🔴 22.4ms +9.8% 🔴
 ↳ validation/@typespec/http 🔴 158.3ms 🔴 171.5ms +8.3% 🔴
 ↳ validation/@typespec/rest 🔴 23.4ms 🔴 24.2ms +3.2%
 ↳ validation/@typespec/versioning 🔴 154.3ms 🔴 158.4ms +2.7%
 ↳ validation/compiler 🔴 24.7ms 🔴 25.2ms +2.3%
linter 🔴 2.83s 🔴 3.12s +10.0% 🔴
 ↳ linter/@azure-tools/typespec-azure-core/auth-required 🟢 0.1ms 🟢 0.1ms +3.9%
 ↳ linter/@azure-tools/typespec-azure-core/byos 🔴 131.4ms 🔴 146.3ms +11.3% 🔴
 ↳ linter/@azure-tools/typespec-azure-core/casing-style 🟢 9.6ms 🟡 10.4ms +8.0%
 ↳ linter/@azure-tools/typespec-azure-core/composition-over-inheritance 🟢 1.0ms 🟢 1.1ms +13.4%
 ↳ linter/@azure-tools/typespec-azure-core/documentation-required 🟡 14.1ms 🟡 16.1ms +14.1% 🔴
 ↳ linter/@azure-tools/typespec-azure-core/friendly-name 🟡 10.4ms 🟡 11.1ms +6.8%
 ↳ linter/@azure-tools/typespec-azure-core/key-visibility-required 🟢 3.2ms 🟢 3.5ms +10.4%
 ↳ linter/@azure-tools/typespec-azure-core/known-encoding 🟢 2.9ms 🟢 3.1ms +6.7%
 ↳ linter/@azure-tools/typespec-azure-core/long-running-polling-operation-required 🟢 5.5ms 🟢 6.2ms +12.9%
 ↳ linter/@azure-tools/typespec-azure-core/no-case-mismatch 🟢 3.3ms 🟢 3.5ms +8.7%
 ↳ linter/@azure-tools/typespec-azure-core/no-closed-literal-union 🟢 5.2ms 🟢 5.9ms +14.9%
 ↳ linter/@azure-tools/typespec-azure-core/no-enum 🟢 0.4ms 🟢 0.5ms +12.8%
 ↳ linter/@azure-tools/typespec-azure-core/no-error-status-codes 🟢 2.1ms 🟢 2.1ms +4.2%
 ↳ linter/@azure-tools/typespec-azure-core/no-explicit-routes-resource-ops 🟢 1.5ms 🟢 1.6ms +7.4%
 ↳ linter/@azure-tools/typespec-azure-core/no-format 🟢 7.3ms 🟢 8.1ms +10.9%
 ↳ linter/@azure-tools/typespec-azure-core/no-generic-numeric 🟢 3.6ms 🟢 3.8ms +4.2%
 ↳ linter/@azure-tools/typespec-azure-core/no-header-explode 🔴 282.9ms 🔴 314.5ms +11.2% 🔴
 ↳ linter/@azure-tools/typespec-azure-core/no-legacy-usage 🔴 22.5ms 🔴 22.5ms +0.2%
 ↳ linter/@azure-tools/typespec-azure-core/no-multiple-discriminator 🟢 0.8ms 🟢 1.0ms +20.5%
 ↳ linter/@azure-tools/typespec-azure-core/no-nullable 🟢 2.9ms 🟢 3.2ms +9.5%
 ↳ linter/@azure-tools/typespec-azure-core/no-offsetdatetime 🟡 15.2ms 🟡 15.9ms +4.7%
 ↳ linter/@azure-tools/typespec-azure-core/no-openapi 🔴 36.5ms 🔴 37.8ms +3.7%
 ↳ linter/@azure-tools/typespec-azure-core/no-private-usage 🔴 35.1ms 🔴 39.7ms +13.1% 🔴
 ↳ linter/@azure-tools/typespec-azure-core/no-query-explode 🔴 290.7ms 🔴 320.5ms +10.3% 🔴
 ↳ linter/@azure-tools/typespec-azure-core/no-rest-library-interfaces 🟡 16.4ms 🟡 19.2ms +17.0% 🔴
 ↳ linter/@azure-tools/typespec-azure-core/no-route-parameter-name-mismatch 🔴 128.6ms 🔴 141.3ms +9.8% 🔴
 ↳ linter/@azure-tools/typespec-azure-core/no-rpc-path-params 🟢 1.9ms 🟢 1.9ms +2.3%
 ↳ linter/@azure-tools/typespec-azure-core/no-string-discriminator 🟢 0.6ms 🟢 0.7ms +15.0%
 ↳ linter/@azure-tools/typespec-azure-core/no-unknown 🟢 2.2ms 🟢 2.4ms +10.2%
 ↳ linter/@azure-tools/typespec-azure-core/no-unnamed-union 🟢 5.4ms 🟢 5.9ms +9.2%
 ↳ linter/@azure-tools/typespec-azure-core/operation-missing-api-version 🟢 3.3ms 🟢 3.5ms +6.3%
 ↳ linter/@azure-tools/typespec-azure-core/request-body-problem 🟢 5.1ms 🟢 5.6ms +8.0%
 ↳ linter/@azure-tools/typespec-azure-core/require-versioned 🟢 0.1ms 🟢 0.1ms +2.5%
 ↳ linter/@azure-tools/typespec-azure-core/response-schema-problem 🔴 324.9ms 🔴 359.9ms +10.8% 🔴
 ↳ linter/@azure-tools/typespec-azure-core/rpc-operation-request-body 🟢 0.7ms 🟢 0.8ms +15.1%
 ↳ linter/@azure-tools/typespec-azure-core/spread-discriminated-model 🟢 3.4ms 🟢 3.7ms +6.6%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-agent-base-type-child-resources 🔴 66.9ms 🔴 73.1ms +9.3% 🔴
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-agent-base-type-lifecycle-operations 🟢 0.2ms 🟢 0.2ms -2.5%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-common-types-version 🔴 127.7ms 🔴 136.7ms +7.1% 🔴
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-custom-resource-no-key 🟢 0.9ms 🟢 1.1ms +21.0%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-custom-resource-usage-discourage 🟢 0.6ms 🟢 0.7ms +14.8%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-delete-operation-response-codes 🟢 3.7ms 🟢 4.0ms +8.7%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-feature-file-usage-discourage 🟢 0.0ms 🟢 0.0ms +3.2%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-no-path-casing-conflicts 🔴 146.4ms 🔴 161.7ms +10.4% 🔴
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-no-record 🟢 3.4ms 🟢 3.6ms +6.7%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-post-operation-response-codes 🟢 9.9ms 🟡 11.1ms +12.4% 🔴
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-put-operation-response-codes 🟢 0.3ms 🟢 0.3ms +3.3%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-action-no-segment 🟢 4.4ms 🟢 5.0ms +12.1%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-duplicate-property 🟢 1.0ms 🟢 1.2ms +16.1%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-interface-requires-decorator 🟢 0.5ms 🟢 0.6ms +14.3%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-invalid-action-verb 🟢 1.5ms 🟢 1.6ms +7.0%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-invalid-envelope-property 🟢 0.8ms 🟢 0.9ms +13.4%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-invalid-version-format 🟢 0.3ms 🟢 0.3ms +4.1%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-key-invalid-chars 🟢 1.9ms 🟢 2.2ms +15.8%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-name-pattern 🟢 0.2ms 🟢 0.3ms +6.8%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-operation 🟢 3.3ms 🟢 3.6ms +8.6%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-operation-response 🔴 66.4ms 🔴 73.7ms +11.0% 🔴
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-patch 🟢 4.1ms 🟢 5.0ms +20.0%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-path-segment-invalid-chars 🟢 1.4ms 🟢 1.5ms +9.0%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-provisioning-state 🟢 0.9ms 🟢 1.1ms +16.6%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/beyond-nesting-levels 🟢 0.8ms 🟢 0.9ms +14.3%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/empty-updateable-properties 🟢 1.5ms 🟢 1.5ms +5.6%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/improper-subscription-list-operation 🟢 0.1ms 🟢 0.1ms +9.8%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/lro-location-header 🔴 287.6ms 🔴 323.4ms +12.5% 🔴
 ↳ linter/@azure-tools/typespec-azure-resource-manager/missing-operations-endpoint 🟢 0.2ms 🟢 0.2ms +7.9%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/missing-x-ms-identifiers 🟢 4.4ms 🟢 4.7ms +7.0%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/no-empty-model 🟢 0.7ms 🟢 0.8ms +13.3%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/no-override-props 🟢 0.7ms 🟢 0.8ms +11.4%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/no-reserved-resource-property 🟢 0.7ms 🟢 0.8ms +9.2%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/no-resource-delete-operation 🟢 2.2ms 🟢 2.9ms +29.2%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/no-response-body 🔴 473.8ms 🔴 518.5ms +9.5% 🔴
 ↳ linter/@azure-tools/typespec-azure-resource-manager/patch-envelope 🟢 1.5ms 🟢 1.6ms +9.7%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/resource-name 🟢 1.6ms 🟢 1.7ms +6.3%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/secret-prop 🔴 82.4ms 🔴 83.9ms +1.8%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/unsupported-type 🟢 4.1ms 🟢 4.3ms +4.1%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/version-progression 🟢 0.3ms 🟢 0.3ms -0.8%
 ↳ linter/@azure-tools/typespec-client-generator-core/property-name-conflict 🔴 29.7ms 🔴 33.0ms +11.4% 🔴
 ↳ linter/@azure-tools/typespec-client-generator-core/require-client-suffix 🟢 6.6ms 🟢 6.9ms +3.6%
emit 🔴 11.50s 🔴 12.05s +4.7%
 ↳ emit/@Azure-Tools 🟢 0.0ms 🟢 0.0ms +0.0%
 ↳ emit/@azure-tools/typespec-client-generator-core 🔴 5.75s 🔴 6.02s +4.7%

Averaged across 3 specs (compute, network, web).
Threshold: changes > ±5% are highlighted.
🟢 Fast · 🟡 Moderate (stages >200ms, rules >10ms) · 🔴 Slow (stages >400ms, rules >20ms)

Add csharp-no-options-suffix, csharp-no-request-suffix, csharp-no-response-suffix, and csharp-use-standard-acronyms for C# SDK model naming.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@haiyuazhang haiyuazhang force-pushed the haiyzhan/csharp-model-suffix-rules branch from 8aaa585 to 8a257fc Compare July 14, 2026 06:33
Haiyuan Zhang added 3 commits July 14, 2026 17:09
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: d02f6a96-81e2-4256-b6f5-798e382049b8
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: d02f6a96-81e2-4256-b6f5-798e382049b8
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: d02f6a96-81e2-4256-b6f5-798e382049b8
@haiyuazhang haiyuazhang changed the title Add C# model suffix linter rules Add C# nameing convention linter rules - batch1 Jul 14, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

int:azure-specs Run integration tests against azure-rest-api-specs lib:tcgc Issues for @azure-tools/typespec-client-generator-core library linter Issues related to linter rules meta:website TypeSpec.io updates

Projects

None yet

1 participant