From e54bc88e4654dc5c332fc7a44e3a339e1bae0dfe Mon Sep 17 00:00:00 2001 From: yiliang114 <1204183885@qq.com> Date: Sat, 21 Mar 2026 00:16:35 +0800 Subject: [PATCH] fix(vscode-ide-companion): silence secondary sidebar warning on older VS Code versions Flip the context key logic from negative (`doesNotSupportSecondarySidebar`) to positive (`supportsSecondarySidebar`) so that the secondary sidebar container is only declared when the VS Code version is known to support it. This prevents the "container 'qwen-code-secondary' does not exist" warning on older versions and avoids accidentally relocating other extensions' views to the Explorer container. Closes #2432 Closes #2416 Made-with: Cursor --- packages/vscode-ide-companion/package.json | 8 ++++---- .../src/constants/viewIds.ts | 2 +- .../providers/chatViewRegistration.test.ts | 12 +++++++---- .../webview/providers/chatViewRegistration.ts | 20 ++++++++++--------- 4 files changed, 24 insertions(+), 18 deletions(-) diff --git a/packages/vscode-ide-companion/package.json b/packages/vscode-ide-companion/package.json index a7c18ab4b..31039854c 100644 --- a/packages/vscode-ide-companion/package.json +++ b/packages/vscode-ide-companion/package.json @@ -49,7 +49,7 @@ "id": "qwen-code-sidebar", "title": "Qwen Code", "icon": "assets/sidebar-icon.svg", - "when": "qwen-code:doesNotSupportSecondarySidebar" + "when": "!qwen-code:supportsSecondarySidebar" } ], "secondarySidebar": [ @@ -57,7 +57,7 @@ "id": "qwen-code-secondary", "title": "Qwen Code", "icon": "assets/sidebar-icon.svg", - "when": "!qwen-code:doesNotSupportSecondarySidebar" + "when": "qwen-code:supportsSecondarySidebar" } ] }, @@ -68,7 +68,7 @@ "id": "qwen-code.chatView.sidebar", "name": "Qwen Code", "icon": "assets/sidebar-icon.svg", - "when": "qwen-code:doesNotSupportSecondarySidebar" + "when": "!qwen-code:supportsSecondarySidebar" } ], "qwen-code-secondary": [ @@ -77,7 +77,7 @@ "id": "qwen-code.chatView.secondary", "name": "Qwen Code", "icon": "assets/sidebar-icon.svg", - "when": "!qwen-code:doesNotSupportSecondarySidebar" + "when": "qwen-code:supportsSecondarySidebar" } ] }, diff --git a/packages/vscode-ide-companion/src/constants/viewIds.ts b/packages/vscode-ide-companion/src/constants/viewIds.ts index b54c6eaa1..8a18cc671 100644 --- a/packages/vscode-ide-companion/src/constants/viewIds.ts +++ b/packages/vscode-ide-companion/src/constants/viewIds.ts @@ -9,7 +9,7 @@ * These IDs must match the `views` contributions declared in package.json. * * Only one of sidebar / secondary is visible at runtime — controlled by the - * `qwen-code:doesNotSupportSecondarySidebar` context key in package.json. + * `qwen-code:supportsSecondarySidebar` context key in package.json. * The secondary sidebar is preferred; the primary sidebar is a fallback for * VS Code versions that lack secondary sidebar support. */ diff --git a/packages/vscode-ide-companion/src/webview/providers/chatViewRegistration.test.ts b/packages/vscode-ide-companion/src/webview/providers/chatViewRegistration.test.ts index dcfa74f00..428f77c11 100644 --- a/packages/vscode-ide-companion/src/webview/providers/chatViewRegistration.test.ts +++ b/packages/vscode-ide-companion/src/webview/providers/chatViewRegistration.test.ts @@ -71,11 +71,15 @@ describe('registerChatViewProviders', () => { expect(calls[0]?.[2]).toEqual({ webviewOptions: { retainContextWhenHidden: true }, }); - expect(executeCommand).not.toHaveBeenCalled(); + expect(executeCommand).toHaveBeenCalledWith( + 'setContext', + 'qwen-code:supportsSecondarySidebar', + true, + ); expect(context.subscriptions).toHaveLength(2); }); - it('sets the fallback context key when secondary sidebar is unavailable', () => { + it('sets context key to false when secondary sidebar is unavailable', () => { registerChatViewProviders({ context: context as never, createViewProvider: vi.fn(), @@ -84,8 +88,8 @@ describe('registerChatViewProviders', () => { expect(executeCommand).toHaveBeenCalledWith( 'setContext', - 'qwen-code:doesNotSupportSecondarySidebar', - true, + 'qwen-code:supportsSecondarySidebar', + false, ); }); }); diff --git a/packages/vscode-ide-companion/src/webview/providers/chatViewRegistration.ts b/packages/vscode-ide-companion/src/webview/providers/chatViewRegistration.ts index d3eb5eb83..9897af026 100644 --- a/packages/vscode-ide-companion/src/webview/providers/chatViewRegistration.ts +++ b/packages/vscode-ide-companion/src/webview/providers/chatViewRegistration.ts @@ -14,8 +14,7 @@ import { type WebViewProviderFactory, } from './ChatWebviewViewProvider.js'; -const SECONDARY_SIDEBAR_CONTEXT_KEY = - 'qwen-code:doesNotSupportSecondarySidebar'; +const SECONDARY_SIDEBAR_CONTEXT_KEY = 'qwen-code:supportsSecondarySidebar'; export function detectSecondarySidebarSupport(vscodeVersion: string): boolean { const [major, minor] = vscodeVersion.split('.').map(Number); @@ -35,13 +34,16 @@ export function registerChatViewProviders(params: { const supportsSecondarySidebar = detectSecondarySidebarSupport(vscodeVersion); - if (!supportsSecondarySidebar) { - void vscode.commands.executeCommand( - 'setContext', - SECONDARY_SIDEBAR_CONTEXT_KEY, - true, - ); - } + // Set the context key so package.json `when` clauses can gate the + // secondarySidebar view container. The key defaults to undefined (falsy), + // which keeps the secondary container hidden until we explicitly enable it. + // This prevents the "view container not found" warning on older VS Code + // versions that don't recognise the `secondarySidebar` location. + void vscode.commands.executeCommand( + 'setContext', + SECONDARY_SIDEBAR_CONTEXT_KEY, + supportsSecondarySidebar, + ); const sidebarViewProvider = new ChatWebviewViewProvider(createViewProvider); const secondaryViewProvider = new ChatWebviewViewProvider(createViewProvider);