summaryrefslogtreecommitdiff
path: root/packages/core/src
diff options
context:
space:
mode:
authorShreya Keshive <[email protected]>2025-08-19 13:25:11 -0700
committerGitHub <[email protected]>2025-08-19 20:25:11 +0000
commited1fc4ddb39a25fad2c9dd12a250959c050a6343 (patch)
tree1ff5fdcf8edbaaed52d4b13f107c3d7dee251b1b /packages/core/src
parent24858b319a81aa4293ffebd8573b6d38c428fec5 (diff)
fix(ide): Fix bug where companion extension was not being installed on Windows correctly (#6576)
Diffstat (limited to 'packages/core/src')
-rw-r--r--packages/core/src/ide/ide-installer.test.ts13
-rw-r--r--packages/core/src/ide/ide-installer.ts23
2 files changed, 24 insertions, 12 deletions
diff --git a/packages/core/src/ide/ide-installer.test.ts b/packages/core/src/ide/ide-installer.test.ts
index e43e1b34..e5388253 100644
--- a/packages/core/src/ide/ide-installer.test.ts
+++ b/packages/core/src/ide/ide-installer.test.ts
@@ -16,6 +16,14 @@ vi.mock('fs');
vi.mock('os');
describe('ide-installer', () => {
+ beforeEach(() => {
+ vi.spyOn(os, 'homedir').mockReturnValue('/home/user');
+ });
+
+ afterEach(() => {
+ vi.restoreAllMocks();
+ });
+
describe('getIdeInstaller', () => {
it('should return a VsCodeInstaller for "vscode"', () => {
const installer = getIdeInstaller(DetectedIde.VSCode);
@@ -33,11 +41,6 @@ describe('ide-installer', () => {
installer = getIdeInstaller(DetectedIde.VSCode)!;
vi.spyOn(child_process, 'execSync').mockImplementation(() => '');
vi.spyOn(fs, 'existsSync').mockReturnValue(false);
- vi.spyOn(os, 'homedir').mockReturnValue('/home/user');
- });
-
- afterEach(() => {
- vi.restoreAllMocks();
});
describe('install', () => {
diff --git a/packages/core/src/ide/ide-installer.ts b/packages/core/src/ide/ide-installer.ts
index 4a771c67..bf74bd07 100644
--- a/packages/core/src/ide/ide-installer.ts
+++ b/packages/core/src/ide/ide-installer.ts
@@ -26,13 +26,22 @@ export interface InstallResult {
async function findVsCodeCommand(): Promise<string | null> {
// 1. Check PATH first.
try {
- child_process.execSync(
- process.platform === 'win32'
- ? `where.exe ${VSCODE_COMMAND}`
- : `command -v ${VSCODE_COMMAND}`,
- { stdio: 'ignore' },
- );
- return VSCODE_COMMAND;
+ if (process.platform === 'win32') {
+ const result = child_process
+ .execSync(`where.exe ${VSCODE_COMMAND}`)
+ .toString()
+ .trim();
+ // `where.exe` can return multiple paths. Return the first one.
+ const firstPath = result.split(/\r?\n/)[0];
+ if (firstPath) {
+ return firstPath;
+ }
+ } else {
+ child_process.execSync(`command -v ${VSCODE_COMMAND}`, {
+ stdio: 'ignore',
+ });
+ return VSCODE_COMMAND;
+ }
} catch {
// Not in PATH, continue to check common locations.
}