Skip to content

Commit 2cff4fb

Browse files
committed
Fix occasional race with the CMake Tools extension at activation
1 parent 7f2b941 commit 2cff4fb

File tree

1 file changed

+56
-1
lines changed

1 file changed

+56
-1
lines changed

src/utils/cmakeToolsUtil.mts

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,62 @@
1-
import { commands, window, ProgressLocation } from "vscode";
1+
import { commands, extensions, window, ProgressLocation } from "vscode";
2+
import Logger, { LoggerSource } from "../logger.mjs";
23

34

45
export async function cmakeToolsForcePicoKit(): Promise<void> {
6+
// Check if the CMake Tools extension is installed and active
7+
let foundCmakeToolsExtension = false;
8+
for (let i = 0; i < 2; i++) {
9+
const cmakeToolsExtension =
10+
extensions.getExtension("ms-vscode.cmake-tools");
11+
if (cmakeToolsExtension !== undefined) {
12+
Logger.debug(
13+
LoggerSource.cmake,
14+
`cmakeToolsExtension: ${cmakeToolsExtension.isActive}`
15+
);
16+
17+
if (cmakeToolsExtension.isActive) {
18+
foundCmakeToolsExtension = true;
19+
break;
20+
}
21+
22+
// Attempt to activate the extension
23+
const onActivate = cmakeToolsExtension.activate();
24+
const onTimeout = new Promise<string>((resolve) => {
25+
setTimeout(resolve, 2000, "timeout");
26+
});
27+
28+
await Promise.race([onActivate, onTimeout]).then((value) => {
29+
if (value === "timeout") {
30+
Logger.warn(
31+
LoggerSource.cmake,
32+
"CMake Tools Extension activation timed out"
33+
);
34+
foundCmakeToolsExtension = false;
35+
} else {
36+
foundCmakeToolsExtension = true;
37+
}
38+
});
39+
} else {
40+
// Undefined if not installed/disabled
41+
Logger.debug(
42+
LoggerSource.cmake,
43+
`cmakeToolsExtension: undefined`
44+
);
45+
break;
46+
}
47+
await new Promise(resolve => setTimeout(resolve, 1000));
48+
}
49+
50+
if (!foundCmakeToolsExtension) {
51+
// Give up and return, as this function is non-essential
52+
Logger.warn(
53+
LoggerSource.cmake,
54+
"cmakeToolsExtension not available yet"
55+
);
56+
57+
return;
58+
}
59+
560
let cmakeToolsKit = await commands.executeCommand(
661
"cmake.buildKit"
762
);

0 commit comments

Comments
 (0)