From 3e5292bdeb16003565ffbb4ce660f6ad3aa4158b Mon Sep 17 00:00:00 2001 From: svc-cli-bot Date: Tue, 30 Sep 2025 12:11:56 -0500 Subject: [PATCH 1/5] Updating SHA256.md after 1.11.0 release --- SHA256.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SHA256.md b/SHA256.md index dbcaaae4..cb81be9b 100644 --- a/SHA256.md +++ b/SHA256.md @@ -15,7 +15,7 @@ make sure that their SHA values match the values in the list below. shasum -a 256 3. Confirm that the SHA in your output matches the value in this list of SHAs. - 92d8b8bf23aec05328349ceb9b471fd004fe3d530f584b066d56cca6bf41c009 ./extensions/sfdx-code-analyzer-vscode-1.10.0.vsix + 788e642e64081d15b52d4b68e6414ca32d519ae0d16dc2100c742ca9069ddec3 ./extensions/sfdx-code-analyzer-vscode-1.11.0.vsix 4. Change the filename extension for the file that you downloaded from .zip to .vsix. From 1fdba49036213c90be0eafcad4b4824f4d300f16 Mon Sep 17 00:00:00 2001 From: Randi Wilson Date: Fri, 3 Oct 2025 10:57:11 -0400 Subject: [PATCH 2/5] CHANGE: @W-19772795@ Agentforce Update (#293) --- src/extension.ts | 2 +- src/lib/external-services/llm-service.ts | 2 +- src/lib/messages.ts | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 35aec3a4..656acb63 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -273,7 +273,7 @@ export async function activate(context: vscode.ExtensionContext): Promise Date: Tue, 14 Oct 2025 10:14:30 -0400 Subject: [PATCH 3/5] CHANGE: @W-19890262@ Improve JSON parsing for Quick Fix (#294) --- src/lib/agentforce/a4d-fix-action.ts | 39 ++++- .../lib/agentforce/a4d-fix-action.test.ts | 138 ++++++++++++++++-- 2 files changed, 164 insertions(+), 13 deletions(-) diff --git a/src/lib/agentforce/a4d-fix-action.ts b/src/lib/agentforce/a4d-fix-action.ts index 8b620c4f..2046d501 100644 --- a/src/lib/agentforce/a4d-fix-action.ts +++ b/src/lib/agentforce/a4d-fix-action.ts @@ -52,6 +52,43 @@ export class A4DFixAction extends SuggestFixWithDiffAction { return Constants.TELEM_A4D_SUGGESTION_FAILED; } + /** + * Parses JSON from LLM response text that may contain extra formatting or text. + * Handles common cases like: + * - Markdown code blocks (```json ... ```) + * - Extra text before or after the JSON + * - Malformed responses with partial text + * @param responseText The raw response text from the LLM + * @returns Parsed JSON object + * @throws Error if no valid JSON can be extracted + */ + private parseJSON(responseText: string): LLMResponse { + // First, try parsing the response as-is + try { + return JSON.parse(responseText) as LLMResponse; + } catch { + // If that fails, try to extract JSON from the response + } + + // Remove leading/trailing whitespace + const cleanedText = responseText.trim(); + + // Try to find JSON object boundaries in the text + const jsonStartIndex = cleanedText.indexOf('{'); + const jsonEndIndex = cleanedText.lastIndexOf('}'); + + if (jsonStartIndex !== -1 && jsonEndIndex !== -1 && jsonEndIndex > jsonStartIndex) { + const potentialJson = cleanedText.substring(jsonStartIndex, jsonEndIndex + 1); + try { + return JSON.parse(potentialJson) as LLMResponse; + } catch { + // Continue to other methods if this fails + } + } + + throw new Error(`Unable to extract valid JSON from response: ${responseText.substring(0, 200)}...`); + } + /** * Returns suggested replacement code for the entire document that should fix the violation associated with the diagnostic (using A4D). * @param document @@ -102,7 +139,7 @@ export class A4DFixAction extends SuggestFixWithDiffAction { let llmResponse: LLMResponse; try { - llmResponse = JSON.parse(llmResponseText) as LLMResponse; + llmResponse = this.parseJSON(llmResponseText); } catch (error) { throw new Error(`Response from LLM is not valid JSON: ${getErrorMessage(error)}`); } diff --git a/src/test/unit/lib/agentforce/a4d-fix-action.test.ts b/src/test/unit/lib/agentforce/a4d-fix-action.test.ts index 29840a8c..58927688 100644 --- a/src/test/unit/lib/agentforce/a4d-fix-action.test.ts +++ b/src/test/unit/lib/agentforce/a4d-fix-action.test.ts @@ -159,20 +159,134 @@ describe('Tests for A4DFixAction', () => { A4DFixAction.COMMAND); }); - it('When llm response is not valid JSON, then display error message and send exception telemetry event', async () => { - spyLLMService.callLLMReturnValue = 'oops - not json'; - await a4dFixAction.run(sampleDiagForSingleLine, sampleDocument); + describe('JSON parsing positive tests', () => { + it('When llm response has JSON with only fixedCode field (explanation is optional), then fix is suggested successfully', async () => { + spyLLMService.callLLMReturnValue = '{"fixedCode": "test code"}'; + + await a4dFixAction.run(sampleDiagForSingleLine, sampleDocument); + + expect(unifiedDiffService.showDiffCallHistory).toHaveLength(1); + expect(unifiedDiffService.showDiffCallHistory[0].newCode).toContain('test code'); + expect(display.displayInfoCallHistory).toHaveLength(0); // No explanation provided + }); - expect(display.displayErrorCallHistory).toHaveLength(1); - expect(display.displayErrorCallHistory[0].msg).toContain(`Response from LLM is not valid JSON`); + it('When llm response has JSON with additional fields but still has a fixedCode field, then fix is suggested successfully', async () => { + spyLLMService.callLLMReturnValue = '{"fixedCode": "test code", "additionalField": "additional value"}'; + + await a4dFixAction.run(sampleDiagForSingleLine, sampleDocument); - expect(telemetryService.sendExceptionCallHistory).toHaveLength(1); - expect(telemetryService.sendExceptionCallHistory[0].errorMessage).toContain( - `Response from LLM is not valid JSON`); - expect(telemetryService.sendExceptionCallHistory[0].name).toEqual( - 'sfdx__eGPT_suggest_failure'); - expect(telemetryService.sendExceptionCallHistory[0].properties['executedCommand']).toEqual( - A4DFixAction.COMMAND); + expect(unifiedDiffService.showDiffCallHistory).toHaveLength(1); + expect(unifiedDiffService.showDiffCallHistory[0].newCode).toContain('test code'); + expect(display.displayInfoCallHistory).toHaveLength(0); // No explanation provided + }); + + it('When llm response is JSON in markdown code blocks with json language specifier, then fix is suggested successfully', async () => { + spyLLMService.callLLMReturnValue = '```json\n{"fixedCode": "fixed code", "explanation": "explanation"}\n```'; + + await a4dFixAction.run(sampleDiagForSingleLine, sampleDocument); + + expect(unifiedDiffService.showDiffCallHistory).toHaveLength(1); + expect(unifiedDiffService.showDiffCallHistory[0].newCode).toContain('fixed code'); + expect(display.displayInfoCallHistory).toHaveLength(1); + expect(display.displayInfoCallHistory[0].msg).toEqual('Fix Explanation: explanation'); + }); + + it('When llm response is JSON in markdown code blocks without language specifier, then fix is suggested successfully', async () => { + spyLLMService.callLLMReturnValue = '```\n{"fixedCode": "fixed code", "explanation": "explanation"}\n```'; + + await a4dFixAction.run(sampleDiagForSingleLine, sampleDocument); + + expect(unifiedDiffService.showDiffCallHistory).toHaveLength(1); + expect(unifiedDiffService.showDiffCallHistory[0].newCode).toContain('fixed code'); + expect(display.displayInfoCallHistory).toHaveLength(1); + expect(display.displayInfoCallHistory[0].msg).toEqual('Fix Explanation: explanation'); + }); + + it('When llm response has extra text before JSON (like "apist"), then fix is suggested successfully', async () => { + spyLLMService.callLLMReturnValue = 'apist\n{\n "explanation": "Added ApexDoc comment to the class",\n "fixedCode": "/**\\n * This class demonstrates bad practices.\\n */\\npublic class Test {}"\n}'; + + await a4dFixAction.run(sampleDiagForSingleLine, sampleDocument); + + expect(unifiedDiffService.showDiffCallHistory).toHaveLength(1); + expect(unifiedDiffService.showDiffCallHistory[0].newCode).toContain('This class demonstrates bad practices'); + expect(display.displayInfoCallHistory).toHaveLength(1); + expect(display.displayInfoCallHistory[0].msg).toEqual('Fix Explanation: Added ApexDoc comment to the class'); + }); + + it('When llm response has extra text before and after JSON, then fix is suggested successfully', async () => { + spyLLMService.callLLMReturnValue = 'some extra text here{"fixedCode": "test code", "explanation": "test explanation"}\nsome extra text here'; + + await a4dFixAction.run(sampleDiagForSingleLine, sampleDocument); + + expect(unifiedDiffService.showDiffCallHistory).toHaveLength(1); + expect(unifiedDiffService.showDiffCallHistory[0].newCode).toContain('test code'); + expect(display.displayInfoCallHistory).toHaveLength(1); + expect(display.displayInfoCallHistory[0].msg).toEqual('Fix Explanation: test explanation'); + }); + + it('When llm response is JSON wrapped in single quotes and markdown, then fix is suggested successfully', async () => { + const complexResponse = `' \`\`\`json{ "explanation": "Added ApexDoc comment to the class to satisfy the ApexDoc rule requirement for public classes.", "fixedCode": "/**\\\\n * This class demonstrates bad cryptographic practices.\\\\n */\\\\npublic without sharing class ApexBadCrypto {\\\\n Blob hardCodedIV = Blob.valueOf('Hardcoded IV 123');\\\\n Blob hardCodedKey = Blob.valueOf('0000000000000000');\\\\n Blob data = Blob.valueOf('Data to be encrypted');\\\\n Blob encrypted = Crypto.encrypt('AES128', hardCodedKey, hardCodedIV, data);\\\\n}"}\`\`\`'`; + spyLLMService.callLLMReturnValue = complexResponse; + + await a4dFixAction.run(sampleDiagForSingleLine, sampleDocument); + + expect(unifiedDiffService.showDiffCallHistory).toHaveLength(1); + expect(unifiedDiffService.showDiffCallHistory[0].newCode).toContain('public without sharing class ApexBadCrypto'); + expect(display.displayInfoCallHistory).toHaveLength(1); + expect(display.displayInfoCallHistory[0].msg).toEqual('Fix Explanation: Added ApexDoc comment to the class to satisfy the ApexDoc rule requirement for public classes.'); + }); + + it('When llm response has leading whitespace and newlines, then fix is suggested successfully', async () => { + spyLLMService.callLLMReturnValue = '\n\n \n{"fixedCode": "test code", "explanation": "test explanation"} \n\n'; + + await a4dFixAction.run(sampleDiagForSingleLine, sampleDocument); + + expect(unifiedDiffService.showDiffCallHistory).toHaveLength(1); + expect(unifiedDiffService.showDiffCallHistory[0].newCode).toContain('test code'); + expect(display.displayInfoCallHistory).toHaveLength(1); + expect(display.displayInfoCallHistory[0].msg).toEqual('Fix Explanation: test explanation'); + }); + + it('When llm response has JSON with nested braces and trailing content, then fix is suggested successfully', async () => { + spyLLMService.callLLMReturnValue = '{"fixedCode": "code with {nested} braces", "explanation": "test explanation"} and trailing text here'; + + await a4dFixAction.run(sampleDiagForSingleLine, sampleDocument); + + expect(unifiedDiffService.showDiffCallHistory).toHaveLength(1); + expect(unifiedDiffService.showDiffCallHistory[0].newCode).toContain('code with {nested} braces'); + expect(display.displayInfoCallHistory).toHaveLength(1); + expect(display.displayInfoCallHistory[0].msg).toEqual('Fix Explanation: test explanation'); + }); + }); + describe('JSON parsing negative tests', () => { + it.each([ + //no JSON at all + 'This is just plain text with no JSON at all', + //multiple JSON objects with text between them + '{"wrong": "object"} some text {"fixedCode": "test code", "explanation": "test explanation"} more text', + //JSON with missing opening brace + '"fixedCode": "test code", "explanation": "test explanation"}', + //JSON with missing closing brace + '{"fixedCode": "test code", "explanation": "test explanation"', + //JSON with missing quote and brace + '{"fixedCode": "test code", "explanation": "missing closing quote and brace', + ])('When llm response is not valid, then display error message and send exception telemetry event', async (response: string) => { + spyLLMService.callLLMReturnValue = response; + await a4dFixAction.run(sampleDiagForSingleLine, sampleDocument); + + expect(display.displayErrorCallHistory).toHaveLength(1); + expect(display.displayErrorCallHistory[0].msg).toContain('Response from LLM'); + expect(telemetryService.sendExceptionCallHistory).toHaveLength(1); + expect(telemetryService.sendExceptionCallHistory[0].errorMessage).toContain('Unable to extract valid JSON from response'); + + expect(telemetryService.sendExceptionCallHistory).toHaveLength(1); + expect(telemetryService.sendExceptionCallHistory[0].errorMessage).toContain( + `Response from LLM is not valid JSON`); + expect(telemetryService.sendExceptionCallHistory[0].name).toEqual( + 'sfdx__eGPT_suggest_failure'); + expect(telemetryService.sendExceptionCallHistory[0].properties['executedCommand']).toEqual( + A4DFixAction.COMMAND); + }); }); it('When fix is suggested, then the diff is displayed, the diagnostic is cleared, and a telemetry event is sent', async () => { From e3aa0a63ffb9f6c3501479cc7282ac17c28ce91e Mon Sep 17 00:00:00 2001 From: Randi Wilson Date: Thu, 16 Oct 2025 10:37:23 -0400 Subject: [PATCH 4/5] CHANGE: @W-18279823@ Hide A4V QF Without Authed Org (#295) --- src/extension.ts | 3 +- src/lib/agentforce/a4d-fix-action-provider.ts | 15 +++++- src/lib/messages.ts | 1 + .../agentforce-code-action-provider.test.ts | 48 +++++++++++++++++-- src/test/unit/stubs.ts | 24 +++++++++- 5 files changed, 84 insertions(+), 7 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 656acb63..8d636167 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -277,7 +277,8 @@ export async function activate(context: vscode.ExtensionContext): Promise { await a4dFixAction.run(diagnostic, document); }); diff --git a/src/lib/agentforce/a4d-fix-action-provider.ts b/src/lib/agentforce/a4d-fix-action-provider.ts index e36e3b81..65cdbaa1 100644 --- a/src/lib/agentforce/a4d-fix-action-provider.ts +++ b/src/lib/agentforce/a4d-fix-action-provider.ts @@ -1,6 +1,7 @@ import * as vscode from "vscode"; import {messages} from "../messages"; import {LLMServiceProvider} from "../external-services/llm-service"; +import {OrgConnectionService} from "../external-services/org-connection-service"; import {Logger} from "../logger"; import {CodeAnalyzerDiagnostic} from "../diagnostics"; import { A4DFixAction } from "./a4d-fix-action"; @@ -13,11 +14,14 @@ export class A4DFixActionProvider implements vscode.CodeActionProvider { static readonly providedCodeActionKinds: vscode.CodeActionKind[] = [vscode.CodeActionKind.QuickFix]; private readonly llmServiceProvider: LLMServiceProvider; + private readonly orgConnectionService: OrgConnectionService; private readonly logger: Logger; private hasWarnedAboutUnavailableLLMService: boolean = false; + private hasWarnedAboutUnauthenticatedOrg: boolean = false; - constructor(llmServiceProvider: LLMServiceProvider, logger: Logger) { + constructor(llmServiceProvider: LLMServiceProvider, orgConnectionService: OrgConnectionService, logger: Logger) { this.llmServiceProvider = llmServiceProvider; + this.orgConnectionService = orgConnectionService; this.logger = logger; } @@ -33,6 +37,15 @@ export class A4DFixActionProvider implements vscode.CodeActionProvider { return []; } + // Do not provide quick fix code actions if user is not authenticated to an org + if (!this.orgConnectionService.isAuthed()) { + if (!this.hasWarnedAboutUnauthenticatedOrg) { + this.logger.warn(messages.agentforce.a4dQuickFixUnauthenticatedOrg); + this.hasWarnedAboutUnauthenticatedOrg = true; + } + return []; + } + // Do not provide quick fix code actions if LLM service is not available. We warn once to let user know. if (!(await this.llmServiceProvider.isLLMServiceAvailable())) { if (!this.hasWarnedAboutUnavailableLLMService) { diff --git a/src/lib/messages.ts b/src/lib/messages.ts index ee38d682..6a37d3d6 100644 --- a/src/lib/messages.ts +++ b/src/lib/messages.ts @@ -15,6 +15,7 @@ export const messages = { }, agentforce: { a4dQuickFixUnavailable: "The ability to fix violations with 'Agentforce Vibes' is unavailable since a compatible 'Agentforce Vibes' extension was not found or activated. To enable this functionality, please install the 'Agentforce Vibes' extension and restart VS Code.", + a4dQuickFixUnauthenticatedOrg: "The ability to fix violations with 'Agentforce Vibes' is unavailable since you are not authenticated to an org. To enable this functionality, please authenticate to an org.", failedA4DResponse: "Unable to receive code fix suggestion from Agentforce Vibes." }, unifiedDiff: { diff --git a/src/test/unit/lib/agentforce/agentforce-code-action-provider.test.ts b/src/test/unit/lib/agentforce/agentforce-code-action-provider.test.ts index 98da8802..106d70ae 100644 --- a/src/test/unit/lib/agentforce/agentforce-code-action-provider.test.ts +++ b/src/test/unit/lib/agentforce/agentforce-code-action-provider.test.ts @@ -1,6 +1,6 @@ import * as vscode from "vscode"; // The vscode module is mocked out. See: scripts/setup.jest.ts import {A4DFixActionProvider} from "../../../../lib/agentforce/a4d-fix-action-provider"; -import {SpyLLMService, SpyLogger, StubLLMServiceProvider} from "../../stubs"; +import {SpyLLMService, SpyLogger, StubOrgConnectionService, StubLLMServiceProvider} from "../../stubs"; import {StubCodeActionContext} from "../../vscode-stubs"; import {messages} from "../../../../lib/messages"; import {createTextDocument} from "jest-mock-vscode"; @@ -11,13 +11,15 @@ describe('AgentforceCodeActionProvider Tests', () => { let spyLLMService: SpyLLMService; let llmServiceProvider: StubLLMServiceProvider; let spyLogger: SpyLogger; + let stubOrgConnectionService: StubOrgConnectionService; let actionProvider: A4DFixActionProvider; beforeEach(() => { spyLLMService = new SpyLLMService(); llmServiceProvider = new StubLLMServiceProvider(spyLLMService); spyLogger = new SpyLogger(); - actionProvider = new A4DFixActionProvider(llmServiceProvider, spyLogger); + stubOrgConnectionService = new StubOrgConnectionService(); + actionProvider = new A4DFixActionProvider(llmServiceProvider, stubOrgConnectionService, spyLogger); }); describe('provideCodeActions Tests', () => { @@ -68,7 +70,8 @@ describe('AgentforceCodeActionProvider Tests', () => { expect(codeActions[2].diagnostics).toEqual([supportedDiag3]); }); - it('When the LLMService is unavailable, then warn once and return no code actions', async () => { + // Authentication and LLM Service Availability Tests + it('When the LLMService is unavailable, then warn once and return no code actions and warn only once', async () => { llmServiceProvider.isLLMServiceAvailableReturnValue = false; const context: vscode.CodeActionContext = new StubCodeActionContext({diagnostics: [supportedDiag1]}); const codeActions: vscode.CodeAction[] = await actionProvider.provideCodeActions(sampleDocument, range, context); @@ -78,6 +81,45 @@ describe('AgentforceCodeActionProvider Tests', () => { expect(spyLogger.warnCallHistory).toHaveLength(1); expect(spyLogger.warnCallHistory[0]).toEqual({msg: messages.agentforce.a4dQuickFixUnavailable}); }); + + it('When user is not authenticated to an org, then return no code actions and warn once', async () => { + stubOrgConnectionService.isAuthedReturnValue = false; + const context: vscode.CodeActionContext = new StubCodeActionContext({diagnostics: [supportedDiag1]}); + const codeActions: vscode.CodeAction[] = await actionProvider.provideCodeActions(sampleDocument, range, context); + await actionProvider.provideCodeActions(sampleDocument, range, context); // Sanity check that multiple calls do not produce additional warnings + + expect(codeActions).toHaveLength(0); + expect(spyLogger.warnCallHistory).toHaveLength(1); + expect(spyLogger.warnCallHistory[0]).toEqual({msg: messages.agentforce.a4dQuickFixUnauthenticatedOrg}); + }); + + it('When user is authenticated and LLMService is available, then user does not see any warnings', async () => { + stubOrgConnectionService.isAuthedReturnValue = true; + llmServiceProvider.isLLMServiceAvailableReturnValue = true; + const context: vscode.CodeActionContext = new StubCodeActionContext({diagnostics: [supportedDiag1]}); + const codeActions: vscode.CodeAction[] = await actionProvider.provideCodeActions(sampleDocument, range, context); + + expect(codeActions).toHaveLength(1); + expect(spyLogger.warnCallHistory).toHaveLength(0); + }); + + it('When no supported diagnostics are in the context and user is not authenticated to an org, then do not warn', async () => { + stubOrgConnectionService.isAuthedReturnValue = false; + const context: vscode.CodeActionContext = new StubCodeActionContext({diagnostics: [unsupportedDiag1]}); + const codeActions: vscode.CodeAction[] = await actionProvider.provideCodeActions(sampleDocument, range, context); + + expect(codeActions).toHaveLength(0); + expect(spyLogger.warnCallHistory).toHaveLength(0); + }); + + it('When no supported diagnostics are in the context and LLM Service is unavailable, then do not warn', async () => { + llmServiceProvider.isLLMServiceAvailableReturnValue = false; + const context: vscode.CodeActionContext = new StubCodeActionContext({diagnostics: [unsupportedDiag1]}); + const codeActions: vscode.CodeAction[] = await actionProvider.provideCodeActions(sampleDocument, range, context); + + expect(codeActions).toHaveLength(0); + expect(spyLogger.warnCallHistory).toHaveLength(0); + }); }); }); diff --git a/src/test/unit/stubs.ts b/src/test/unit/stubs.ts index b81450ec..a652dd61 100644 --- a/src/test/unit/stubs.ts +++ b/src/test/unit/stubs.ts @@ -16,7 +16,7 @@ import {FileHandler} from "../../lib/fs-utils"; import {VscodeWorkspace, WindowManager} from "../../lib/vscode-api"; import {Workspace} from "../../lib/workspace"; import { ApexGuruAccess, ApexGuruAvailability, ApexGuruService } from "../../lib/apexguru/apex-guru-service"; - +import { HttpRequest, OrgConnectionService, OrgUserInfo } from "../../lib/external-services/org-connection-service"; export class SpyTelemetryService implements TelemetryService { sendExtensionActivationEventCallHistory: { hrStart: number }[] = []; @@ -384,4 +384,24 @@ export class ThrowingScanApexGuruService extends StubApexGuruService { scan(_absFileToScan: string): Promise { throw new Error("Sample error message from scan method"); } -} \ No newline at end of file +} + +export class StubOrgConnectionService implements OrgConnectionService { + isAuthedReturnValue: boolean = true; + + isAuthed(): boolean { + return this.isAuthedReturnValue; + } + + getApiVersion(): Promise { + return Promise.resolve('64.0'); + } + + onOrgChange(_callback: (orgUserInfo: OrgUserInfo) => void): void { + // No-op + } + + request(requestOptions: HttpRequest): Promise { + throw new Error(`Not implemented:\n${JSON.stringify(requestOptions, null, 2)}`); + } +} From b109123cedc376ea1168c8d9940d1e67b772e24b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 24 Oct 2025 12:13:01 +0000 Subject: [PATCH 5/5] Preparing for v1.12.0 release. --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0e60d943..ecd3d2a5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "sfdx-code-analyzer-vscode", - "version": "1.11.0", + "version": "1.12.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "sfdx-code-analyzer-vscode", - "version": "1.11.0", + "version": "1.12.0", "license": "BSD-3-Clause", "dependencies": { "@salesforce/vscode-service-provider": "^1.5.0", diff --git a/package.json b/package.json index 5e655c9c..859bd15a 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "color": "#ECECEC", "theme": "light" }, - "version": "1.11.0", + "version": "1.12.0", "publisher": "salesforce", "license": "BSD-3-Clause", "engines": {