From e3f9a805c65474b49ea2373a834cee2e5cd7ec01 Mon Sep 17 00:00:00 2001 From: Alexander Gilin Date: Thu, 9 Oct 2025 12:57:45 +0300 Subject: [PATCH] fix: backward compatibility for using the oss extension ID --- examples/vscode-snippet-contrib/README.md | 4 +-- examples/vscode-snippet-contrib/package.json | 2 +- packages/backend/src/contributors.ts | 8 ++++-- packages/backend/test/contributors.spec.ts | 26 ++++++++++++++++++-- 4 files changed, 33 insertions(+), 7 deletions(-) diff --git a/examples/vscode-snippet-contrib/README.md b/examples/vscode-snippet-contrib/README.md index d966a0f..a632b85 100644 --- a/examples/vscode-snippet-contrib/README.md +++ b/examples/vscode-snippet-contrib/README.md @@ -7,10 +7,10 @@ using the VSCode code snippet framework. A code snippet contribution is a VSCode extension which: -1. Declares an `extensionDepedency` to `saposs.code-snippet`: +1. Declares an `extensionDepedency` to `saposs.code-snippet-tool`: - ```json { - "extensionDependencies": ["saposs.code-snippet"] + "extensionDependencies": ["saposs.code-snippet-tool"] } ``` 1. Returns an object from its `activate()` method which defines the diff --git a/examples/vscode-snippet-contrib/package.json b/examples/vscode-snippet-contrib/package.json index 9f6ee51..f3682cf 100644 --- a/examples/vscode-snippet-contrib/package.json +++ b/examples/vscode-snippet-contrib/package.json @@ -54,7 +54,7 @@ "@types/vscode": "^1.48.0" }, "extensionDependencies": [ - "saposs.code-snippet-framework" + "saposs.code-snippet-tool" ], "engines": { "vscode": "^1.44.2" diff --git a/packages/backend/src/contributors.ts b/packages/backend/src/contributors.ts index ccb4fce..c50be74 100644 --- a/packages/backend/src/contributors.ts +++ b/packages/backend/src/contributors.ts @@ -44,12 +44,16 @@ export class Contributors { } private getContributorExtension(contributorId: string) { + // Pre-compile regex pattern for better performance + const FRAMEWORK_PATTERN = /^saposs\.code-snippet(?:-tool)?$/; + return _.find(vscode.extensions.all, (extension: vscode.Extension) => { const extensionDependencies: string[] = _.get( extension, - "packageJSON.extensionDependencies" + "packageJSON.extensionDependencies", + [] ); - if (_.includes(extensionDependencies, "saposs.code-snippet")) { + if (extensionDependencies.some((dep) => FRAMEWORK_PATTERN.test(dep))) { if (contributorId === this.getExtensionId(extension)) { return extension; } diff --git a/packages/backend/test/contributors.spec.ts b/packages/backend/test/contributors.spec.ts index c759ffa..cfc81db 100644 --- a/packages/backend/test/contributors.spec.ts +++ b/packages/backend/test/contributors.spec.ts @@ -85,7 +85,7 @@ describe("Contributors unit test", () => { packageJSON: { name: "vscode-snippet-contrib", publisher: "BLABLA3", - extensionDependencies: ["saposs.code-snippet"], + extensionDependencies: ["saposs.code-snippet-tool"], }, extensionKind: null as any, activate: () => @@ -129,6 +129,28 @@ describe("Contributors unit test", () => { expect(snippet.getMessages()).to.deep.equal(messageValue); }); + it("receives valid contributorId and snippetName from exports ---> returns valid snippet (for old ID)", async () => { + const oldApi = { + ...api, + packageJSON: { + ...api.packageJSON, + extensionDependencies: ["saposs.code-snippet"], + }, + }; + + _.set(testVscode, "extensions.all", [oldApi]); + + const uiOptions = { + contributorId: extensionId, + snippetName: snippetName, + }; + + loggerWrapperMock.expects("getClassLogger").returns(logger); + const contributors = new Contributors(); + const snippet = await contributors.getSnippet(uiOptions); + expect(snippet.getMessages()).to.deep.equal(messageValue); + }); + it("receives valid contributorId and snippetName from activate ---> returns valid snippet", async () => { api.isActive = false; _.set(testVscode, "extensions.all", [api]); @@ -191,7 +213,7 @@ describe("Contributors unit test", () => { api.packageJSON = { name: "vscode-snippet-contrib", publisher: "BLABLA3", - extensionDependencies: ["saposs.code-snippet"], + extensionDependencies: ["saposs.code-snippet-tool"], }; _.set(testVscode, "extensions.all", [api]);