Skip to content

Commit

Permalink
TCGC, add crossLanguageDefinitionId to SdkClientType (#1238)
Browse files Browse the repository at this point in the history
Fix #954
  • Loading branch information
haolingdong-msft committed Aug 1, 2024
1 parent 45eab1e commit 7f5f070
Show file tree
Hide file tree
Showing 6 changed files with 22 additions and 3 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
# Change versionKind to one of: internal, fix, dependencies, feature, deprecation, breaking
changeKind: fix
packages:
- "@azure-tools/typespec-client-generator-core"
---

TCGC, add `crossLanguageDefinitionId` to `SdkClientType`
2 changes: 1 addition & 1 deletion packages/typespec-client-generator-core/src/decorators.ts
Original file line number Diff line number Diff line change
Expand Up @@ -335,7 +335,7 @@ export function listClients(context: TCGCContext): SdkClient[] {
service: service.type,
type: service.type,
arm: isArm(service.type),
crossLanguageDefinitionId: `${getNamespaceFullName(service.type)}.${clientName}`,
crossLanguageDefinitionId: getNamespaceFullName(service.type),
} as SdkClient;
});

Expand Down
1 change: 1 addition & 0 deletions packages/typespec-client-generator-core/src/interfaces.ts
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@ export interface SdkClientType<TServiceOperation extends SdkServiceOperation>
methods: SdkMethod<TServiceOperation>[];
apiVersions: string[];
nameSpace: string; // fully qualified
crossLanguageDefinitionId: string;
/**
* @deprecated This property is deprecated. Look at `.arm` on `SdkContext` instead.
*/
Expand Down
2 changes: 2 additions & 0 deletions packages/typespec-client-generator-core/src/package.ts
Original file line number Diff line number Diff line change
Expand Up @@ -524,6 +524,8 @@ function createSdkClientType<TServiceOperation extends SdkServiceOperation>(
// eslint-disable-next-line deprecation/deprecation
arm: client.kind === "SdkClient" ? client.arm : false,
decorators: diagnostics.pipe(getTypeDecorators(context, client.type)),
// if it is client, the crossLanguageDefinitionId is the ${namespace}, if it is operation group, the crosslanguageDefinitionId is the %{namespace}.%{operationGroupName}
crossLanguageDefinitionId: getCrossLanguageDefinitionId(context, client.type),
};
return diagnostics.wrap(sdkClientType);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,7 @@ describe("typespec-client-generator-core: decorators", () => {
service: MyService,
type: MyService,
arm: false,
crossLanguageDefinitionId: "MyService.MyServiceClient",
crossLanguageDefinitionId: "MyService",
},
]);
});
Expand Down Expand Up @@ -431,7 +431,7 @@ describe("typespec-client-generator-core: decorators", () => {
service: MyService,
type: MyService,
arm: false,
crossLanguageDefinitionId: "MyService.MyServiceClient",
crossLanguageDefinitionId: "MyService",
},
]);
});
Expand Down
8 changes: 8 additions & 0 deletions packages/typespec-client-generator-core/test/package.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -447,6 +447,7 @@ describe("typespec-client-generator-core: package", () => {
strictEqual(sdkPackage.clients.length, 1);
const client = sdkPackage.clients[0];
strictEqual(client.name, "ServiceClient");
strictEqual(client.crossLanguageDefinitionId, "My.Service");
strictEqual(client.initialization.properties.length, 3);
strictEqual(client.apiVersions.length, 1);
strictEqual(client.apiVersions[0], "2022-12-01-preview");
Expand Down Expand Up @@ -516,6 +517,7 @@ describe("typespec-client-generator-core: package", () => {
strictEqual(sdkPackage.clients.length, 1);
const client = sdkPackage.clients[0];
strictEqual(client.name, "ServiceClient");
strictEqual(client.crossLanguageDefinitionId, "My.Service");
strictEqual(client.initialization.properties.length, 3);
strictEqual(client.apiVersions.length, 2);
deepStrictEqual(client.apiVersions, ["2022-12-01-preview", "2022-12-01"]);
Expand Down Expand Up @@ -579,6 +581,7 @@ describe("typespec-client-generator-core: package", () => {
strictEqual(mainClient.methods.length, 1);
strictEqual(mainClient.initialization.properties.length, 1);
strictEqual(mainClient.initialization.properties[0].name, "endpoint");
strictEqual(mainClient.crossLanguageDefinitionId, "TestService");

const clientAccessor = mainClient.methods[0];
strictEqual(clientAccessor.kind, "clientaccessor");
Expand All @@ -596,6 +599,7 @@ describe("typespec-client-generator-core: package", () => {
operationGroup.methods[0].crossLanguageDefintionId,
"TestService.MyOperationGroup.func"
);
strictEqual(operationGroup.crossLanguageDefinitionId, "TestService.MyOperationGroup");
});

it("operationGroup2", async () => {
Expand Down Expand Up @@ -629,6 +633,7 @@ describe("typespec-client-generator-core: package", () => {
ok(mainClient.initialization);
strictEqual(mainClient.initialization.properties.length, 1);
strictEqual(mainClient.initialization.properties[0].name, "endpoint");
strictEqual(mainClient.crossLanguageDefinitionId, "TestService");

const fooAccessor = mainClient.methods[0];
strictEqual(fooAccessor.kind, "clientaccessor");
Expand All @@ -649,6 +654,7 @@ describe("typespec-client-generator-core: package", () => {
strictEqual(fooClient.initialization.properties.length, 1);
strictEqual(fooClient.initialization.access, "internal");
strictEqual(fooClient.methods.length, 1);
strictEqual(fooClient.crossLanguageDefinitionId, "TestService.Foo");

const fooBarAccessor = fooClient.methods[0];
strictEqual(fooBarAccessor.kind, "clientaccessor");
Expand All @@ -660,13 +666,15 @@ describe("typespec-client-generator-core: package", () => {

strictEqual(fooBarClient.initialization.properties.length, 1);
strictEqual(fooBarClient.initialization.access, "internal");
strictEqual(fooBarClient.crossLanguageDefinitionId, "TestService.Foo.Bar");
strictEqual(fooBarClient.methods.length, 1);
strictEqual(fooBarClient.methods[0].kind, "basic");
strictEqual(fooBarClient.methods[0].name, "one");
strictEqual(fooBarClient.methods[0].crossLanguageDefintionId, "TestService.Foo.Bar.one");

strictEqual(barClient.initialization.properties.length, 1);
strictEqual(barClient.initialization.access, "internal");
strictEqual(barClient.crossLanguageDefinitionId, "TestService.Bar");
strictEqual(barClient.methods.length, 1);
strictEqual(barClient.methods[0].kind, "basic");
strictEqual(barClient.methods[0].name, "two");
Expand Down

0 comments on commit 7f5f070

Please sign in to comment.