Skip to content

Commit a01bc7f

Browse files
committed
Fixed issue with build-debug not working in quick succession
1 parent 4289c8c commit a01bc7f

File tree

2 files changed

+33
-10
lines changed

2 files changed

+33
-10
lines changed

src/extension.ts

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ import {
5555
runDtshShell,
5656
clean,
5757
MenuConfig,
58+
build,
5859
} from "./zephyr_utilities/build";
5960
import { flashActive } from "./zephyr_utilities/flash";
6061
import { WorkspaceConfig, GlobalConfig } from "./setup_utilities/types";
@@ -983,7 +984,7 @@ export async function activate(context: vscode.ExtensionContext) {
983984
context.subscriptions.push(
984985
vscode.commands.registerCommand("zephyr-ide.debug", async () => {
985986
let debugTarget = "Zephyr IDE: Debug";
986-
let activeBuild = await project.getActiveBuild(context, wsConfig);
987+
let activeBuild = await project.getActiveBuild(wsConfig);
987988

988989
if (activeBuild?.launchTarget) {
989990
debugTarget = activeBuild.launchTarget;
@@ -1008,7 +1009,7 @@ export async function activate(context: vscode.ExtensionContext) {
10081009
context.subscriptions.push(
10091010
vscode.commands.registerCommand("zephyr-ide.debug-attach", async () => {
10101011
let debugTarget = "Zephyr IDE: Attach";
1011-
let activeBuild = await project.getActiveBuild(context, wsConfig);
1012+
let activeBuild = await project.getActiveBuild(wsConfig);
10121013

10131014
if (activeBuild?.attachTarget) {
10141015
debugTarget = activeBuild.attachTarget;
@@ -1033,18 +1034,40 @@ export async function activate(context: vscode.ExtensionContext) {
10331034
context.subscriptions.push(
10341035
vscode.commands.registerCommand("zephyr-ide.build-debug", async () => {
10351036
let debugTarget = "Zephyr IDE: Debug";
1036-
let activeBuild = await project.getActiveBuild(context, wsConfig);
1037+
let activeProject = await project.getActiveProject(wsConfig);
1038+
let activeBuild = await project.getActiveBuild(wsConfig);
10371039

1038-
if (activeBuild?.buildDebugTarget) {
1040+
if (activeProject && activeBuild?.buildDebugTarget) {
10391041
debugTarget = activeBuild.buildDebugTarget;
10401042
}
10411043
let debugConfig = await getLaunchConfigurationByName(
10421044
wsConfig,
10431045
debugTarget
10441046
);
10451047

1046-
if (debugConfig) {
1047-
let res = await buildHelper(context, wsConfig, false);
1048+
if (debugConfig && activeProject && activeBuild) {
1049+
debugConfig.executable = '${command:zephyr-ide.get-active-build-path}/${command:zephyr-ide.get-active-project-name}/zephyr/zephyr.elf';
1050+
// Resolve all ${command:zephyr-ide.*} variables in debugConfig
1051+
async function resolveZephyrCommandsInObject(obj: Record<string, unknown>) {
1052+
for (const key of Object.keys(obj)) {
1053+
if (typeof obj[key] === "string") {
1054+
const strVal = obj[key] as string;
1055+
const matches = strVal.match(/\$\{command:zephyr-ide\.[^}]+\}/g);
1056+
if (matches) {
1057+
let newValue = strVal;
1058+
for (const match of matches) {
1059+
const commandName = match.slice(10, -1); // Remove ${command: and }
1060+
const result = await vscode.commands.executeCommand(commandName);
1061+
const resultStr = result !== undefined ? String(result) : "";
1062+
newValue = newValue.split(match).join(resultStr);
1063+
}
1064+
obj[key] = newValue;
1065+
}
1066+
}
1067+
}
1068+
}
1069+
await resolveZephyrCommandsInObject(debugConfig);
1070+
let res = await build(wsConfig, activeProject, activeBuild, false);
10481071
if (res) {
10491072
await vscode.commands.executeCommand(
10501073
"debug.startFromConfig",

src/project_utilities/project.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -789,7 +789,7 @@ export async function addRunner(wsConfig: WorkspaceConfig, context: vscode.Exten
789789
await addRunnerToBuild(wsConfig, context, wsConfig.activeProject, activeBuild);
790790
}
791791

792-
export async function getActiveBuild(context: vscode.ExtensionContext, wsConfig: WorkspaceConfig) {
792+
export async function getActiveBuild(wsConfig: WorkspaceConfig) {
793793
if (wsConfig.activeProject === undefined) {
794794
return;
795795
}
@@ -804,7 +804,7 @@ export async function getActiveBuild(context: vscode.ExtensionContext, wsConfig:
804804
}
805805

806806
export async function selectDebugLaunchConfiguration(context: vscode.ExtensionContext, wsConfig: WorkspaceConfig) {
807-
let activeBuild = await getActiveBuild(context, wsConfig);
807+
let activeBuild = await getActiveBuild(wsConfig);
808808
let newConfig = await selectLaunchConfiguration(wsConfig);
809809
if (activeBuild && newConfig) {
810810
activeBuild.launchTarget = newConfig;
@@ -813,7 +813,7 @@ export async function selectDebugLaunchConfiguration(context: vscode.ExtensionCo
813813
}
814814

815815
export async function selectBuildDebugLaunchConfiguration(context: vscode.ExtensionContext, wsConfig: WorkspaceConfig) {
816-
let activeBuild = await getActiveBuild(context, wsConfig);
816+
let activeBuild = await getActiveBuild(wsConfig);
817817
let newConfig = await selectLaunchConfiguration(wsConfig);
818818
if (activeBuild && newConfig) {
819819
activeBuild.buildDebugTarget = newConfig;
@@ -822,7 +822,7 @@ export async function selectBuildDebugLaunchConfiguration(context: vscode.Extens
822822
}
823823

824824
export async function selectDebugAttachLaunchConfiguration(context: vscode.ExtensionContext, wsConfig: WorkspaceConfig) {
825-
let activeBuild = await getActiveBuild(context, wsConfig);
825+
let activeBuild = await getActiveBuild(wsConfig);
826826
let newConfig = await selectLaunchConfiguration(wsConfig);
827827
if (activeBuild && newConfig) {
828828
activeBuild.attachTarget = newConfig;

0 commit comments

Comments
 (0)