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(task => () => {
19 console.log(`[TASK] ${task.name}`);
21 return task.name === "Compile Project";
24 const settings = Settings.getInstance();
26 settings !== undefined && settings.getBoolean(SettingsKey.useCmakeTools)
28 // Compile with CMake Tools
29 await commands.executeCommand(
30 "cmake.launchTargetPath"
38 const emitter = new EventEmitter();
40 // add callbacks for task completion
41 const end = tasks.onDidEndTaskProcess(e => {
44 e.exitCode === undefined ? -1 : e.exitCode
47 // eslint-disable-next-line @typescript-eslint/no-unused-vars
48 const end2 = tasks.onDidEndTask(e => {
49 emitter.emit("terminated", -1);
52 await tasks.executeTask(task);
53 // eslint-disable-next-line @typescript-eslint/no-unused-vars
54 const code = await new Promise<number>((resolve, reject) => {
55 emitter.on("terminated", code => {
56 if (typeof(code) === 'number') {
64 // dispose of callbacks
68 "Task 'Compile Project' completed with code " + code.toString()
74 this._logger.error("Task 'Compile Project' not found.");
75 void window.showErrorMessage("Task 'Compile Project' not found.");