diff options
Diffstat (limited to 'packages/vscode-ide-companion/src')
| -rw-r--r-- | packages/vscode-ide-companion/src/extension.test.ts | 12 | ||||
| -rw-r--r-- | packages/vscode-ide-companion/src/extension.ts | 50 |
2 files changed, 37 insertions, 25 deletions
diff --git a/packages/vscode-ide-companion/src/extension.test.ts b/packages/vscode-ide-companion/src/extension.test.ts index 2b3db5ac..5a738c2a 100644 --- a/packages/vscode-ide-companion/src/extension.test.ts +++ b/packages/vscode-ide-companion/src/extension.test.ts @@ -25,6 +25,7 @@ vi.mock('vscode', () => ({ close: vi.fn(), }, showTextDocument: vi.fn(), + showWorkspaceFolderPick: vi.fn(), }, workspace: { workspaceFolders: [], @@ -80,8 +81,7 @@ describe('activate', () => { vi.mocked(context.globalState.get).mockReturnValue(undefined); await activate(context); expect(showInformationMessageMock).toHaveBeenCalledWith( - 'Gemini CLI Companion extension successfully installed. Please restart your terminal to enable full IDE integration.', - 'Re-launch Gemini CLI', + 'Gemini CLI Companion extension successfully installed.', ); }); @@ -99,8 +99,10 @@ describe('activate', () => { await activate(context); expect(showInformationMessageMock).toHaveBeenCalled(); await new Promise(process.nextTick); // Wait for the promise to resolve - expect(vscode.commands.executeCommand).toHaveBeenCalledWith( - 'gemini-cli.runGeminiCLI', - ); + const commandCallback = vi + .mocked(vscode.commands.registerCommand) + .mock.calls.find((call) => call[0] === 'gemini-cli.runGeminiCLI')?.[1]; + + expect(commandCallback).toBeDefined(); }); }); diff --git a/packages/vscode-ide-companion/src/extension.ts b/packages/vscode-ide-companion/src/extension.ts index 10aa41f8..a491ac41 100644 --- a/packages/vscode-ide-companion/src/extension.ts +++ b/packages/vscode-ide-companion/src/extension.ts @@ -85,21 +85,9 @@ export async function activate(context: vscode.ExtensionContext) { } if (!context.globalState.get(INFO_MESSAGE_SHOWN_KEY)) { - void vscode.window - .showInformationMessage( - 'Gemini CLI Companion extension successfully installed. Please restart your terminal to enable full IDE integration.', - 'Re-launch Gemini CLI', - ) - .then( - (selection) => { - if (selection === 'Re-launch Gemini CLI') { - void vscode.commands.executeCommand('gemini-cli.runGeminiCLI'); - } - }, - (err) => { - log(`Failed to show information message: ${String(err)}`); - }, - ); + void vscode.window.showInformationMessage( + 'Gemini CLI Companion extension successfully installed.', + ); context.globalState.update(INFO_MESSAGE_SHOWN_KEY, true); } @@ -107,11 +95,33 @@ export async function activate(context: vscode.ExtensionContext) { vscode.workspace.onDidChangeWorkspaceFolders(() => { updateWorkspacePath(context); }), - vscode.commands.registerCommand('gemini-cli.runGeminiCLI', () => { - const geminiCmd = 'gemini'; - const terminal = vscode.window.createTerminal(`Gemini CLI`); - terminal.show(); - terminal.sendText(geminiCmd); + vscode.commands.registerCommand('gemini-cli.runGeminiCLI', async () => { + const workspaceFolders = vscode.workspace.workspaceFolders; + if (!workspaceFolders || workspaceFolders.length === 0) { + vscode.window.showInformationMessage( + 'No folder open. Please open a folder to run Gemini CLI.', + ); + return; + } + + let selectedFolder: vscode.WorkspaceFolder | undefined; + if (workspaceFolders.length === 1) { + selectedFolder = workspaceFolders[0]; + } else { + selectedFolder = await vscode.window.showWorkspaceFolderPick({ + placeHolder: 'Select a folder to run Gemini CLI in', + }); + } + + if (selectedFolder) { + const geminiCmd = 'gemini'; + const terminal = vscode.window.createTerminal({ + name: `Gemini CLI (${selectedFolder.name})`, + cwd: selectedFolder.uri.fsPath, + }); + terminal.show(); + terminal.sendText(geminiCmd); + } }), vscode.commands.registerCommand('gemini-cli.showNotices', async () => { const noticePath = vscode.Uri.joinPath( |
