Skip to content

Commit e5ad7b2

Browse files
CopilotOmotolahanniavalera
authored
Fix select preset/kit commands to return strings for task variable substitution (#4825)
* Initial plan * fix: return preset/kit name instead of boolean from select commands The select commands (selectConfigurePreset, selectBuildPreset, selectTestPreset, selectPackagePreset, selectWorkflowPreset, selectKit) now return the selected preset/kit name as a string instead of a boolean. This allows them to work correctly as ${command:...} variables in tasks.json, which require a string result. Empty string is returned on cancellation (falsy), so all existing callers that check truthiness continue to work correctly. Fixes #4239 Co-authored-by: Omotola <[email protected]> * Fix merge conflict markers in CHANGELOG.md Co-authored-by: hanniavalera <[email protected]> Agent-Logs-Url: https://github.com/microsoft/vscode-cmake-tools/sessions/7e265975-65ca-40bf-87fc-2d06d58ae0a5 --------- Co-authored-by: copilot-swe-agent[bot] <[email protected]> Co-authored-by: Omotola <[email protected]> Co-authored-by: Omotola <[email protected]> Co-authored-by: Hannia Valera <[email protected]>
1 parent 27926a2 commit e5ad7b2

2 files changed

Lines changed: 30 additions & 33 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ Improvements:
3131
- Honor `debugger.workingDirectory` from the CMake File API when debugging a target, so that the `DEBUGGER_WORKING_DIRECTORY` target property is used as the debugger working directory. [#4595](https://github.com/microsoft/vscode-cmake-tools/issues/4595)
3232

3333
Bug Fixes:
34+
- Fix `${command:cmake.selectConfigurePreset}` (and other preset/kit selection commands) failing with "command did not return a result of type string" when used in `tasks.json` as a command variable. The commands now return the selected preset or kit name instead of a boolean. [#4239](https://github.com/microsoft/vscode-cmake-tools/issues/4239)
3435
- Fix renaming a CMake project creating a duplicate node in the Project Outline instead of replacing the existing one. [#4343](https://github.com/microsoft/vscode-cmake-tools/issues/4343)
3536
- Remove internal stack traces from the Output pane when a subprocess fails. Error messages now show only human-readable information; stack traces are still available in debug-level logging. [#4807](https://github.com/microsoft/vscode-cmake-tools/issues/4807)
3637
- Fix duplicate launch configurations in the ctest debug picker when both `.vscode/launch.json` and a `.code-workspace` file exist. [#4586](https://github.com/microsoft/vscode-cmake-tools/issues/4586)

src/extension.ts

Lines changed: 29 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1121,15 +1121,15 @@ export class ExtensionManager implements vscode.Disposable {
11211121
/**
11221122
* Show UI to allow the user to select an active kit
11231123
*/
1124-
async selectKit(folder?: vscode.WorkspaceFolder): Promise<boolean> {
1124+
async selectKit(folder?: vscode.WorkspaceFolder): Promise<string> {
11251125
if (util.isTestMode()) {
11261126
log.trace(localize('selecting.kit.in.test.mode', 'Running CMakeTools in test mode. selectKit is disabled.'));
1127-
return false;
1127+
return '';
11281128
}
11291129

11301130
const cmakeProject = this.getProjectsForWorkspaceFolder(folder);
11311131
if (!cmakeProject) {
1132-
return false;
1132+
return '';
11331133
}
11341134

11351135
const activeProject = this.getActiveProject();
@@ -1159,11 +1159,7 @@ export class ExtensionManager implements vscode.Disposable {
11591159
telemetry.logEvent('kitSelection', telemetryProperties);
11601160
}
11611161

1162-
if (kitSelected) {
1163-
return true;
1164-
}
1165-
1166-
return false;
1162+
return kitSelected ? activeKit?.name ?? '' : '';
11671163
}
11681164

11691165
/**
@@ -2166,20 +2162,20 @@ export class ExtensionManager implements vscode.Disposable {
21662162
/**
21672163
* Show UI to allow the user to select an active configure preset
21682164
*/
2169-
async selectConfigurePreset(folder?: vscode.WorkspaceFolder): Promise<boolean> {
2165+
async selectConfigurePreset(folder?: vscode.WorkspaceFolder): Promise<string> {
21702166
if (util.isTestMode()) {
21712167
log.trace(localize('selecting.config.preset.in.test.mode', 'Running CMakeTools in test mode. selectConfigurePreset is disabled.'));
2172-
return false;
2168+
return '';
21732169
}
21742170

21752171
const project = this.getProjectFromFolder(folder);
21762172
if (!project) {
2177-
return false;
2173+
return '';
21782174
}
21792175

21802176
if (!project.useCMakePresets) {
21812177
log.info(localize('skip.set.configure.preset', 'Using kits, skip selecting configure preset'));
2182-
return false;
2178+
return '';
21832179
}
21842180

21852181
const presetSelected = await project.presetsController.selectConfigurePreset();
@@ -2191,7 +2187,7 @@ export class ExtensionManager implements vscode.Disposable {
21912187
this.statusBar.setBuildPresetName(buildPreset?.displayName || buildPreset?.name || '');
21922188
const testPreset = project.testPreset;
21932189
this.statusBar.setTestPresetName(testPreset?.displayName || testPreset?.name || '');
2194-
return presetSelected;
2190+
return presetSelected ? configurePreset?.name ?? '' : '';
21952191
}
21962192

21972193
viewConfigureSettings(): void {
@@ -2201,26 +2197,26 @@ export class ExtensionManager implements vscode.Disposable {
22012197
/**
22022198
* Show UI to allow the user to select an active build preset
22032199
*/
2204-
async selectBuildPreset(folder?: vscode.WorkspaceFolder): Promise<boolean> {
2200+
async selectBuildPreset(folder?: vscode.WorkspaceFolder): Promise<string> {
22052201
if (util.isTestMode()) {
22062202
log.trace(localize('selecting.build.preset.in.test.mode', 'Running CMakeTools in test mode. selectBuildPreset is disabled.'));
2207-
return false;
2203+
return '';
22082204
}
22092205

22102206
const project = this.getProjectFromFolder(folder);
22112207
if (!project) {
2212-
return false;
2208+
return '';
22132209
}
22142210

22152211
if (!project.useCMakePresets) {
22162212
log.info(localize('skip.set.build.preset', 'Using kits, skip selecting build preset'));
2217-
return false;
2213+
return '';
22182214
}
22192215

22202216
const presetSelected = await project.presetsController.selectBuildPreset();
22212217
const buildPreset = project.buildPreset;
22222218
this.statusBar.setBuildPresetName(buildPreset?.displayName || buildPreset?.name || '');
2223-
return presetSelected;
2219+
return presetSelected ? buildPreset?.name ?? '' : '';
22242220
}
22252221

22262222
viewBuildSettings(): void {
@@ -2230,26 +2226,26 @@ export class ExtensionManager implements vscode.Disposable {
22302226
/**
22312227
* Show UI to allow the user to select an active test preset
22322228
*/
2233-
async selectTestPreset(folder?: vscode.WorkspaceFolder): Promise<boolean> {
2229+
async selectTestPreset(folder?: vscode.WorkspaceFolder): Promise<string> {
22342230
if (util.isTestMode()) {
22352231
log.trace(localize('selecting.test.preset.in.test.mode', 'Running CMakeTools in test mode. selectTestPreset is disabled.'));
2236-
return false;
2232+
return '';
22372233
}
22382234

22392235
const project = this.getProjectFromFolder(folder);
22402236
if (!project) {
2241-
return false;
2237+
return '';
22422238
}
22432239

22442240
if (!project.useCMakePresets) {
22452241
log.info(localize('skip.set.test.preset', 'Using kits, skip selecting test preset'));
2246-
return false;
2242+
return '';
22472243
}
22482244

22492245
const presetSelected = await project.presetsController.selectTestPreset();
22502246
const testPreset = project.testPreset;
22512247
this.statusBar.setTestPresetName(testPreset?.displayName || testPreset?.name || '');
2252-
return presetSelected;
2248+
return presetSelected ? testPreset?.name ?? '' : '';
22532249
}
22542250

22552251
viewTestSettings(): void {
@@ -2259,51 +2255,51 @@ export class ExtensionManager implements vscode.Disposable {
22592255
/**
22602256
* Show UI to allow the user to select an active package preset
22612257
*/
2262-
async selectPackagePreset(folder?: vscode.WorkspaceFolder): Promise<boolean> {
2258+
async selectPackagePreset(folder?: vscode.WorkspaceFolder): Promise<string> {
22632259
if (util.isTestMode()) {
22642260
log.trace(localize('selecting.package.preset.in.test.mode', 'Running CMakeTools in test mode. selectPackagePreset is disabled.'));
2265-
return false;
2261+
return '';
22662262
}
22672263

22682264
const project = this.getProjectFromFolder(folder);
22692265
if (!project) {
2270-
return false;
2266+
return '';
22712267
}
22722268

22732269
if (!project.useCMakePresets) {
22742270
log.info(localize('skip.set.package.preset', 'Using kits, skip selecting package preset'));
2275-
return false;
2271+
return '';
22762272
}
22772273

22782274
const presetSelected = await project.presetsController.selectPackagePreset();
22792275
const packagePreset = project.packagePreset;
22802276
this.statusBar.setPackagePresetName(packagePreset?.displayName || packagePreset?.name || '');
2281-
return presetSelected;
2277+
return presetSelected ? packagePreset?.name ?? '' : '';
22822278
}
22832279

22842280
/**
22852281
* Show UI to allow the user to select an active workflow preset
22862282
*/
2287-
async selectWorkflowPreset(folder?: vscode.WorkspaceFolder): Promise<boolean> {
2283+
async selectWorkflowPreset(folder?: vscode.WorkspaceFolder): Promise<string> {
22882284
if (util.isTestMode()) {
22892285
log.trace(localize('selecting.workflow.preset.in.test.mode', 'Running CMakeTools in test mode. selectWorkflowPreset is disabled.'));
2290-
return false;
2286+
return '';
22912287
}
22922288

22932289
const project = this.getProjectFromFolder(folder);
22942290
if (!project) {
2295-
return false;
2291+
return '';
22962292
}
22972293

22982294
if (!project.useCMakePresets) {
22992295
log.info(localize('skip.set.workflow.preset', 'Using kits, skip selecting workflow preset'));
2300-
return false;
2296+
return '';
23012297
}
23022298

23032299
const presetSelected = await project.presetsController.selectWorkflowPreset();
23042300
const workflowPreset = project.workflowPreset;
23052301
this.statusBar.setWorkflowPresetName(workflowPreset?.displayName || workflowPreset?.name || '');
2306-
return presetSelected;
2302+
return presetSelected ? workflowPreset?.name ?? '' : '';
23072303
}
23082304

23092305
public api: CMakeToolsApiImpl;

0 commit comments

Comments
 (0)