1 import { commands, tasks, window } from "vscode";
2 import { EventEmitter } from 'events';
3 import { CommandWithResult } from "./command.mjs";
4 import Logger from "../logger.mjs";
5 import Settings, { SettingsKey } from "../settings.mjs";
7 export default class CompileProjectCommand extends CommandWithResult<boolean> {
8 private _logger: Logger = new Logger("CompileProjectCommand");
10 public static readonly id = "compileProject";
13 super(CompileProjectCommand.id);
16 async execute(): Promise<boolean> {
17 // Get the task with the specified name
18 const task = (await tasks.fetchTasks()).find(
19 (task) => task.name === "Compile Project"
22 const settings = Settings.getInstance();
24 settings !== undefined && settings.getBoolean(SettingsKey.useCmakeTools)
26 // Compile with CMake Tools
27 await commands.executeCommand(
28 "cmake.launchTargetPath"
36 const emitter = new EventEmitter();
38 // add callbacks for task completion
39 const end = tasks.onDidEndTaskProcess(e => {
40 if (e.execution.task === task) {
43 e.exitCode === undefined ? -1 : e.exitCode
47 const end2 = tasks.onDidEndTask(e => {
48 if (e.execution.task === task) {
49 emitter.emit("terminated", -1);
53 await tasks.executeTask(task);
54 // eslint-disable-next-line @typescript-eslint/no-unused-vars
55 const code = await new Promise<number>((resolve, reject) => {
56 emitter.on("terminated", code => {
57 if (typeof(code) === 'number') {
65 // dispose of callbacks
69 "Task 'Compile Project' completed with code " + code.toString()
75 this._logger.error("Task 'Compile Project' not found.");
76 void window.showErrorMessage("Task 'Compile Project' not found.");