Skip to content

Commit 9db3902

Browse files
Fix user-level tasks.json causing infinite spinner (#4659)
* Fix user tasks.json not working - handle non-WorkspaceFolder task scopes Co-authored-by: hanniavalera <[email protected]> * Add null check to task.scope type guard Co-authored-by: hanniavalera <[email protected]> * Add CHANGELOG entry for v1.23 user tasks.json fix Co-authored-by: hanniavalera <[email protected]> * Fix CHANGELOG entry to link to PR #4659 Co-authored-by: hanniavalera <[email protected]> --------- Co-authored-by: copilot-swe-agent[bot] <[email protected]> Co-authored-by: hanniavalera <[email protected]>
1 parent 8d70158 commit 9db3902

2 files changed

Lines changed: 14 additions & 6 deletions

File tree

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# What's New?
22

3+
## 1.23
4+
5+
Bug Fixes:
6+
7+
- Fix user-level tasks defined in `~/.config/Code/User/tasks.json` causing infinite spinner. [#4659](https://github.com/microsoft/vscode-cmake-tools/pull/4659)
8+
39
## 1.22
410

511
Features:

src/cmakeTaskProvider.ts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -228,9 +228,10 @@ export class CMakeTaskProvider implements vscode.TaskProvider {
228228
const execution: any = task.execution;
229229
if (!execution) {
230230
const definition: CMakeTaskDefinition = <any>task.definition;
231-
// In this extension, the scope of the task is always a workspace folder.
232-
const workspaceFolder: vscode.WorkspaceFolder = task.scope as vscode.WorkspaceFolder;
233-
const resolvedTask: CMakeTask = new vscode.Task(definition, workspaceFolder, definition.label, CMakeTaskProvider.CMakeSourceStr,
231+
// task.scope can be a WorkspaceFolder, TaskScope.Global, or TaskScope.Workspace.
232+
// Only use it as a WorkspaceFolder if it's an object (not a number or null).
233+
const workspaceFolder: vscode.WorkspaceFolder | undefined = (task.scope && typeof task.scope === 'object') ? task.scope as vscode.WorkspaceFolder : undefined;
234+
const resolvedTask: CMakeTask = new vscode.Task(definition, workspaceFolder ?? vscode.TaskScope.Workspace, definition.label, CMakeTaskProvider.CMakeSourceStr,
234235
new vscode.CustomExecution(async (resolvedDefinition: vscode.TaskDefinition): Promise<vscode.Pseudoterminal> =>
235236
new CustomBuildTaskTerminal(resolvedDefinition.command, resolvedDefinition.targets, workspaceFolder, resolvedDefinition.preset, resolvedDefinition.options)
236237
), []);
@@ -243,9 +244,10 @@ export class CMakeTaskProvider implements vscode.TaskProvider {
243244
const execution: any = task.execution;
244245
if (!execution) {
245246
const definition: CMakeTaskDefinition = <any>task.definition;
246-
// In this extension, the scope of the task is always a workspace folder.
247-
const workspaceFolder: vscode.WorkspaceFolder = task.scope as vscode.WorkspaceFolder;
248-
const resolvedTask: CMakeTask = new vscode.Task(definition, workspaceFolder, definition.label, CMakeTaskProvider.CMakeSourceStr,
247+
// task.scope can be a WorkspaceFolder, TaskScope.Global, or TaskScope.Workspace.
248+
// Only use it as a WorkspaceFolder if it's an object (not a number or null).
249+
const workspaceFolder: vscode.WorkspaceFolder | undefined = (task.scope && typeof task.scope === 'object') ? task.scope as vscode.WorkspaceFolder : undefined;
250+
const resolvedTask: CMakeTask = new vscode.Task(definition, workspaceFolder ?? vscode.TaskScope.Workspace, definition.label, CMakeTaskProvider.CMakeSourceStr,
249251
new vscode.CustomExecution(async (resolvedDefinition: vscode.TaskDefinition): Promise<vscode.Pseudoterminal> =>
250252
new CustomBuildTaskTerminal(resolvedDefinition.command, resolvedDefinition.targets, workspaceFolder, resolvedDefinition.preset, resolvedDefinition.options)
251253
), []);

0 commit comments

Comments
 (0)