Skip to content

Add Support for More Back Compat Model Ctor Scenarios - #11614

Draft
Jorge Rangel (jorgerangel-msft) wants to merge 1 commit into
microsoft:mainfrom
jorgerangel-msft:fix-backcompat-ctors
Draft

Add Support for More Back Compat Model Ctor Scenarios#11614
Jorge Rangel (jorgerangel-msft) wants to merge 1 commit into
microsoft:mainfrom
jorgerangel-msft:fix-backcompat-ctors

Conversation

@jorgerangel-msft

@jorgerangel-msft Jorge Rangel (jorgerangel-msft) commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

This PR introduces more covered scenarios for the back compat support for model ctors.

fixes: #11588

@pkg-pr-new

pkg-pr-new Bot commented Aug 10, 2026

Copy link
Copy Markdown

Open in StackBlitz

npm i https://pkg.pr.new/@typespec/http-client-csharp@11614

commit: bb866c5

@github-actions

Copy link
Copy Markdown
Contributor

No changes needing a change description found.

@microsoft-github-policy-service microsoft-github-policy-service Bot added the emitter:client:csharp Issue for the C# client emitter: @typespec/http-client-csharp label Aug 10, 2026
@jorgerangel-msft Jorge Rangel (jorgerangel-msft) changed the title Fix backcompat ctors Add Support for More Back Compat Model Ctor Scenarios Aug 10, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR expands the C# generator’s back-compat handling for model constructors (and a related synthesized-parameter method scenario) so that previously-published parameter names can be restored when matching last-contract signatures by parameter types, including swap/rotation cases and certain constructor-restore paths.

Changes:

  • Adds constructor-parameter name restoration by last-contract signature matching (including swap/rotation and casing scenarios).
  • Allows restoring certain previously-published constructors as standalone constructors when no chaining target exists (or when a required property can’t be assigned).
  • Adds/updates unit tests and last-contract/expected-output fixtures to cover the added scenarios.

Reviewed changes

Copilot reviewed 17 out of 17 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/src/Utilities/BackCompatHelper.cs Enables positional fallback for synthesized parameters even when ParameterProvider.Name differs from InputParameter.Name.
packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/src/Providers/ModelProvider.cs Implements ctor parameter-name restoration by signature and extends constructor restoration to standalone scenarios.
packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/test/Providers/TypeProviderTests.cs Adds a regression test for synthesized parameter name restoration via signature match.
packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/test/Providers/TestData/TypeProviderTests/BuildMethodsForBackCompatibilityRestoresSynthesizedParameterNameBySignatureMatch/TestClient.cs Adds last-contract input fixture for the synthesized-parameter test.
packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/test/Providers/TestData/TypeProviderTests/BuildMethodsForBackCompatibilityRestoresSynthesizedParameterNameBySignatureMatch.cs Adds expected generated output fixture for the synthesized-parameter test.
packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/test/Providers/ModelProviders/ModelProviderTests.cs Adds ctor back-compat tests for rename/swap/rotation/casing and standalone constructor restore scenarios.
packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/test/Providers/ModelProviders/TestData/ModelProviderTests/BackCompat_ConstructorParameterSwapRestoredBySignatureMatch/MockInputModel.cs Adds last-contract input fixture for swapped ctor parameter names.
packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/test/Providers/ModelProviders/TestData/ModelProviderTests/BackCompat_ConstructorParameterSwapRestoredBySignatureMatch.cs Adds expected output fixture for swapped ctor parameter names.
packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/test/Providers/ModelProviders/TestData/ModelProviderTests/BackCompat_ConstructorParameterRenameRestoredBySignatureMatch/MockInputModel.cs Adds last-contract input fixture for renamed ctor parameter names.
packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/test/Providers/ModelProviders/TestData/ModelProviderTests/BackCompat_ConstructorParameterRenameRestoredBySignatureMatch.cs Adds expected output fixture for renamed ctor parameter names.
packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/test/Providers/ModelProviders/TestData/ModelProviderTests/BackCompat_ConstructorParameterCasingAndRotationRestoredBySignatureMatch/Models.cs Adds last-contract input fixtures for casing-only rename and 3-param rotation.
packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/test/Providers/ModelProviders/TestData/ModelProviderTests/BackCompat_ConstructorParameterCasingAndRotationRestoredBySignatureMatch(Casing).cs Adds expected output fixture for casing-only ctor parameter restore.
packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/test/Providers/ModelProviders/TestData/ModelProviderTests/BackCompat_ConstructorParameterCasingAndRotationRestoredBySignatureMatch(Rotation).cs Adds expected output fixture for rotated ctor parameter restore.
packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/test/Providers/ModelProviders/TestData/ModelProviderTests/BackCompat_StandaloneConstructorRestoredWhenNoChainTarget/MockInputModel.cs Adds last-contract input fixture for standalone ctor restoration when no chaining target exists.
packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/test/Providers/ModelProviders/TestData/ModelProviderTests/BackCompat_StandaloneConstructorRestoredWhenNoChainTarget.cs Adds expected output fixture for standalone ctor restoration when no chaining target exists.
packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/test/Providers/ModelProviders/TestData/ModelProviderTests/BackCompat_StandaloneConstructorRestoredWhenRequiredPropertyUnassigned/MockInputModel.cs Adds last-contract input fixture for restoring a ctor that can’t assign a newly-required property.
packages/http-client-csharp/generator/Microsoft.TypeSpec.Generator/test/Providers/ModelProviders/TestData/ModelProviderTests/BackCompat_StandaloneConstructorRestoredWhenRequiredPropertyUnassigned.cs Adds expected output fixture for restoring a ctor that can’t assign a newly-required property.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

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

Labels

emitter:client:csharp Issue for the C# client emitter: @typespec/http-client-csharp

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Restore previous GA parameter names on generated constructors

2 participants