Repository navigation
[http-client-csharp] Normalize acronyms in operation parameter names - #12076
JoshLove-msft with Copilot wants to merge 16 commits into
Conversation
|
Azure Pipelines: Successfully started running 1 pipeline(s). 1 pipeline(s) were filtered out due to trigger conditions. There may be pipelines that require an authorized user to comment /azp run to run. |
Jorge Rangel (jorgerangel-msft)
left a comment
There was a problem hiding this comment.
Copilot pull the latest from main and address the merge conflicts
commit: |
Co-authored-by: JoshLove-msft <54595583+JoshLove-msft@users.noreply.github.com>
Co-authored-by: JoshLove-msft <54595583+JoshLove-msft@users.noreply.github.com>
Co-authored-by: JoshLove-msft <54595583+JoshLove-msft@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 114125be-5763-45ae-ba45-d8901f6455fd
a1a26ce to
e6dd983
Compare
|
No changes needing a change description found. |
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 114125be-5763-45ae-ba45-d8901f6455fd
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 114125be-5763-45ae-ba45-d8901f6455fd
|
Added
|
There was a problem hiding this comment.
🟡 Changes recommended
Acronym normalization unintentionally renames client-scoped constructor and settings parameters without backward-compatibility restoration.
1 open finding
What changed in this PR
Normalizes acronyms in C# operation parameter names while preserving wire names, customized signatures, and published API compatibility.
Changes:
- Adds boundary-aware camelCase acronym normalization.
- Keeps method projections and forwarding references independent and synchronized.
- Expands compatibility and regression coverage.
| File | Description |
|---|---|
TestProjects/Local/Sample-TypeSpec/tspCodeModel.json |
Adds acronym scenarios to generated input. |
TestProjects/Local/Sample-TypeSpec/src/Generated/SampleTypeSpecClient.RestClient.cs |
Updates generated request methods. |
TestProjects/Local/Sample-TypeSpec/src/Generated/SampleTypeSpecClient.cs |
Updates generated public methods. |
TestProjects/Local/Sample-TypeSpec/Sample-TypeSpec.tsp |
Defines integration scenarios. |
Microsoft.TypeSpec.Generator/test/Providers/TypeProviderTests.cs |
Tests type-aware contract lookup. |
Microsoft.TypeSpec.Generator/test/Providers/ParameterProviderTests.cs |
Tests normalization and metadata isolation. |
Microsoft.TypeSpec.Generator/test/Expressions/PositionalParameterReferenceExpressionTests.cs |
Tests renamed named arguments. |
Microsoft.TypeSpec.Generator/src/Utilities/BackCompatHelper.cs |
Restores published parameter names. |
Microsoft.TypeSpec.Generator/src/Snippets/Snippet.cs |
Retains parameter references in named arguments. |
Microsoft.TypeSpec.Generator/src/Shared/CSharpNameExtensions.cs |
Adds camelCase acronym normalization. |
Microsoft.TypeSpec.Generator/src/Providers/ParameterProvider.cs |
Applies normalization to input parameters. |
Microsoft.TypeSpec.Generator/src/Expressions/PositionalParameterReferenceExpression.cs |
Resolves argument names dynamically. |
ScmMethodProviderCollectionTests/AcronymSpreadParametersPreserveSignatures(LastContract)/TestClient.cs |
Supplies published spread signatures. |
ScmMethodProviderCollectionTests/AcronymSpreadParametersPreserveSignatures(Custom)/TestClient.cs |
Supplies customized spread signatures. |
Microsoft.TypeSpec.Generator.ClientModel/test/Providers/ScmMethodProviderCollectionTests.cs |
Covers projections, spreading, and grouping. |
RestClientProviderTests/AcronymNamedArgumentsFollowReorderedProtocolSignature(Sync).cs |
Baselines sync forwarding. |
RestClientProviderTests/AcronymNamedArgumentsFollowReorderedProtocolSignature(Published)/TestClient.cs |
Supplies published reordered signatures. |
RestClientProviderTests/AcronymNamedArgumentsFollowReorderedProtocolSignature(Custom)/TestClient.cs |
Supplies customized reordered signatures. |
RestClientProviderTests/AcronymNamedArgumentsFollowReorderedProtocolSignature(Async).cs |
Baselines async forwarding. |
RestClientProviders/RestClientProviderTests.cs |
Tests request ordering and wire names. |
ClientProviderTests/TestMultipartClient_UploadMethods_OptionalBody.cs |
Updates multipart projection baseline. |
AcronymOperationParameterNamesPreserveSignatures(TypeMismatchLastContract)/TestClient.cs |
Covers incompatible published types. |
AcronymOperationParameterNamesPreserveSignatures(PrivateLastContract)/TestClient.cs |
Covers private prior signatures. |
AcronymOperationParameterNamesPreserveSignatures(Normalized).cs |
Baselines normalized forwarding. |
AcronymOperationParameterNamesPreserveSignatures(LastContract)/TestClient.cs |
Supplies legacy signatures. |
AcronymOperationParameterNamesPreserveSignatures(LastContract).cs |
Baselines legacy forwarding. |
AcronymOperationParameterNamesPreserveSignatures(DistinctLastContract)/TestClient.cs |
Supplies projection-specific names. |
AcronymOperationParameterNamesPreserveSignatures(DistinctLastContract).cs |
Baselines projection-specific forwarding. |
AcronymOperationParameterNamesPreserveSignatures(Custom)/TestClient.cs |
Supplies customized signatures. |
AcronymOperationParameterNamesPreserveSignatures(Custom).cs |
Baselines customized forwarding. |
AcronymOperationParameterNamesPreserveSignatures(CaseOnlyLastContract)/TestClient.cs |
Supplies casing variants. |
AcronymOperationParameterNamesPreserveSignatures(CaseOnlyLastContract).cs |
Baselines casing preservation. |
AcronymNamedArgumentsUseProtocolSignature(LastContract)/TestClient.cs |
Supplies published protocol names. |
AcronymNamedArgumentsUseProtocolSignature(LastContract,Sync).cs |
Baselines published sync arguments. |
AcronymNamedArgumentsUseProtocolSignature(LastContract,Async).cs |
Baselines published async arguments. |
AcronymNamedArgumentsUseProtocolSignature(Custom)/TestClient.cs |
Supplies custom protocol names. |
AcronymNamedArgumentsUseProtocolSignature(Custom,Sync).cs |
Baselines custom sync arguments. |
AcronymNamedArgumentsUseProtocolSignature(Custom,Async).cs |
Baselines custom async arguments. |
ClientProviders/ClientProviderTests.cs |
Tests signature compatibility. |
ClientModel/src/Providers/ScmMethodProviderCollection.cs |
Creates independent projection parameters. |
ClientModel/src/Providers/RestClientProvider.cs |
Creates independent request parameters. |
ClientModel/src/Primitives/ScmKnownParameters.cs |
Adds factories for signature-owned parameters. |
🧠 Review effort: Balanced
💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
…sharp-normalize-acronyms Co-authored-by: jorgerangel-msft <102122018+jorgerangel-msft@users.noreply.github.com>
Merged the latest |
Co-authored-by: jorgerangel-msft <102122018+jorgerangel-msft@users.noreply.github.com>
…t mapping Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 114125be-5763-45ae-ba45-d8901f6455fd
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 114125be-5763-45ae-ba45-d8901f6455fd
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 114125be-5763-45ae-ba45-d8901f6455fd
Acronym normalization now happens in |
…ility Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 114125be-5763-45ae-ba45-d8901f6455fd
| if (matchingPrevious != null) | ||
| { | ||
| preservedName = matchingPrevious.Signature.Parameters.FirstOrDefault(p => | ||
| string.Equals(p.Name, inputParameter.OriginalName, StringComparison.OrdinalIgnoreCase))?.Name; |
There was a problem hiding this comment.
Signature comparison and reordering now use one unambiguous raw/declared/normalized identity mapping, preserving the original parameter instances and published defaults. Forwarding is updated for positional and named arguments even when optional arguments are omitted; compilation-backed same/mixed-type cases verify sync/async signatures, CreateRequest calls, convenience calls, and XML docs.
🤖 Generated by Jorge's Copilot
| // Acronym restoration requires a matching signature; legacy date/time renames keep their name-only fallback. | ||
| var hasAcronymRename = inputParameter.Name != inputParameter.Name.NormalizeCSharpAcronyms(useCamelCase: true); | ||
| if (!hasAcronymRename) | ||
| { | ||
| preservedName = FindPreviousParameterName( | ||
| lastContractView, inputParameter.OriginalName, method.Signature.Name); | ||
| } |
There was a problem hiding this comment.
Date/time inputs now retain the legacy name-only fallback even when acronym normalization also applies. Added a type-changed sourceIpCreationTime regression; ordinary acronym parameters still require a matching enclosing signature.
🤖 Generated by Jorge's Copilot
…forwarding Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 114125be-5763-45ae-ba45-d8901f6455fd


Extend acronym normalization to ordinary operation parameters while preserving named-argument compatibility for exact, customized, and previously published signatures.
ipAddress,ipv4Address,ipv6Address) and leave serialized wire names unchanged.iPv4/iPv6spellings and existing property-derived and date/time parameter behavior.For new, non-exact parameters without a matching published signature: