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 &&
25 settings.getBoolean(SettingsKey.useCmakeTools)
27 // Compile with CMake Tools
28 await commands.executeCommand("cmake.launchTargetPath");
35 const emitter = new EventEmitter();
37 // add callbacks for task completion
38 const end = tasks.onDidEndTaskProcess(e => {
39 if (e.execution.task === task) {
42 e.exitCode === undefined ? -1 : e.exitCode
46 const end2 = tasks.onDidEndTask(e => {
47 if (e.execution.task === task) {
48 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.");