From ef39375d1e1a9cf80d1cd468c4df0c8f599f1cb6 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 13 Jan 2026 20:00:16 +0000 Subject: [PATCH 1/5] Initial plan From 110bac41690578b51f2741151c1566f6e3b9aed4 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 13 Jan 2026 20:07:25 +0000 Subject: [PATCH 2/5] Add test case for client name validation with negation scopes Co-authored-by: iscai-msft <43154838+iscai-msft@users.noreply.github.com> --- .../test/decorators/client-name.test.ts | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/packages/typespec-client-generator-core/test/decorators/client-name.test.ts b/packages/typespec-client-generator-core/test/decorators/client-name.test.ts index 274b8dc2a2..f85fe04b66 100644 --- a/packages/typespec-client-generator-core/test/decorators/client-name.test.ts +++ b/packages/typespec-client-generator-core/test/decorators/client-name.test.ts @@ -650,3 +650,34 @@ it("duplicate model client name with multiple language scopes", async () => { }, ]); }); + +it("duplicate model client name with positive and negation scopes", async () => { + const diagnostics = await runner.diagnose( + ` + @service + namespace Contoso.WidgetManager; + + @clientName("Foo", "python") + model ModelOne { + id: int32; + } + + @clientName("Foo", "~csharp") + model ModelTwo { + prop1: string; + } + `, + ); + + expectDiagnostics(diagnostics, [ + { + code: "@azure-tools/typespec-client-generator-core/duplicate-client-name", + message: 'Client name: "Foo" is duplicated in language scope: "python"', + }, + { + code: "@azure-tools/typespec-client-generator-core/duplicate-client-name", + message: + 'Client name: "Foo" is defined somewhere causing naming conflicts in language scope: "python"', + }, + ]); +}); From 3e001f7cdf0fc1343799ebb874aa975b2f3c3fcc Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 13 Jan 2026 20:08:30 +0000 Subject: [PATCH 3/5] Fix test: use ! instead of ~ for negation scope syntax Co-authored-by: iscai-msft <43154838+iscai-msft@users.noreply.github.com> --- .../test/decorators/client-name.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/typespec-client-generator-core/test/decorators/client-name.test.ts b/packages/typespec-client-generator-core/test/decorators/client-name.test.ts index f85fe04b66..e293c73e18 100644 --- a/packages/typespec-client-generator-core/test/decorators/client-name.test.ts +++ b/packages/typespec-client-generator-core/test/decorators/client-name.test.ts @@ -662,7 +662,7 @@ it("duplicate model client name with positive and negation scopes", async () => id: int32; } - @clientName("Foo", "~csharp") + @clientName("Foo", "!csharp") model ModelTwo { prop1: string; } From 87f0bb663ae634f039a7c333d0be323bfd128678 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 13 Jan 2026 20:12:28 +0000 Subject: [PATCH 4/5] Add additional test for non-overlapping positive and negation scopes Co-authored-by: iscai-msft <43154838+iscai-msft@users.noreply.github.com> --- .../test/decorators/client-name.test.ts | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/packages/typespec-client-generator-core/test/decorators/client-name.test.ts b/packages/typespec-client-generator-core/test/decorators/client-name.test.ts index e293c73e18..6469bad8f4 100644 --- a/packages/typespec-client-generator-core/test/decorators/client-name.test.ts +++ b/packages/typespec-client-generator-core/test/decorators/client-name.test.ts @@ -681,3 +681,25 @@ it("duplicate model client name with positive and negation scopes", async () => }, ]); }); + +it("no conflict with non-overlapping positive and negation scopes", async () => { + const diagnostics = await runner.diagnose( + ` + @service + namespace Contoso.WidgetManager; + + @clientName("Foo", "csharp") + model ModelOne { + id: int32; + } + + @clientName("Foo", "!csharp") + model ModelTwo { + prop1: string; + } + `, + ); + + // Should have no diagnostics since csharp is excluded from ModelTwo + expectDiagnostics(diagnostics, []); +}); From 14dc5e6a516a6eb4dc0e7433e1b20990ad3c89e7 Mon Sep 17 00:00:00 2001 From: iscai-msft Date: Mon, 26 Jan 2026 15:58:35 -0500 Subject: [PATCH 5/5] update to latest test framework --- .../test/decorators/client-location.test.ts | 4 +++- .../test/decorators/client-name.test.ts | 3 +-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/typespec-client-generator-core/test/decorators/client-location.test.ts b/packages/typespec-client-generator-core/test/decorators/client-location.test.ts index 4ba48a7560..a4443d469b 100644 --- a/packages/typespec-client-generator-core/test/decorators/client-location.test.ts +++ b/packages/typespec-client-generator-core/test/decorators/client-location.test.ts @@ -846,7 +846,9 @@ describe("Parameter", () => { emitterName: "@azure-tools/typespec-python", }); - await runner.compile( + // Using compileAndDiagnose because the ARM override has known parameter mismatch + // but we still want to test @clientLocation functionality + await runner.compileAndDiagnose( ` @armProviderNamespace @service(#{ title: "ContosoProviderHubClient" }) diff --git a/packages/typespec-client-generator-core/test/decorators/client-name.test.ts b/packages/typespec-client-generator-core/test/decorators/client-name.test.ts index 6469bad8f4..e8e309cb02 100644 --- a/packages/typespec-client-generator-core/test/decorators/client-name.test.ts +++ b/packages/typespec-client-generator-core/test/decorators/client-name.test.ts @@ -676,8 +676,7 @@ it("duplicate model client name with positive and negation scopes", async () => }, { code: "@azure-tools/typespec-client-generator-core/duplicate-client-name", - message: - 'Client name: "Foo" is defined somewhere causing naming conflicts in language scope: "python"', + message: 'Client name: "Foo" is duplicated in language scope: "python"', }, ]); });