/* eslint-disable @typescript-eslint/naming-convention */ import * as vscode from 'vscode'; enum ReportType { Debug = 'Debug', Launch = 'Launch', Performance = 'Performance', PathCheck = 'Path Check', Info = 'Info', Warn = 'Warn', Error = 'Error', Run = 'Run' }; class Output { private _output: vscode.OutputChannel; private _ignoreTypes: ReportType[]; constructor(title: string, ignoreType: ReportType[] = []) { this._output = vscode.window.createOutputChannel(title); this._ignoreTypes = ignoreType; } private alignTime(s: number): string { const sstr: string = s + ''; if (sstr.length === 1) { return '0' + sstr; } else { return sstr; } } private getCurrentTime() { const date = new Date(); const hms = [date.getHours(), date.getMinutes(), date.getSeconds()]; return hms.map(this.alignTime).join(':'); } private skipMessage(type: ReportType) : boolean { return this._ignoreTypes.includes(type); } private showInWindows(message: string, type: ReportType = ReportType.Info) { if (type === ReportType.Warn) { vscode.window.showWarningMessage(message); } else if (type === ReportType.Error) { vscode.window.showErrorMessage(message); } else { vscode.window.showInformationMessage(message); } } /** * * @param message message * @param type report type * @param reportInWindows whether use vscode.windows. to show info */ public report(message: string | unknown, type: ReportType = ReportType.Info, reportInWindows: boolean = false) { if (!this.skipMessage(type) && message) { // this._output.show(true); const currentTime = this.getCurrentTime(); this._output.appendLine('[' + type + ' - ' + currentTime + '] ' + message); if (reportInWindows) { this.showInWindows('' + message, type); } } } public show() { this._output.show(true); } } const MainOutput = new Output('Digital-IDE'); const LspOutput = new Output('Digital-IDE Language Server'); const YosysOutput = new Output('Digital-IDE Yosys'); const WaveViewOutput = new Output('Digital-IDE Wave Viewer'); export { ReportType, MainOutput, LspOutput, YosysOutput, WaveViewOutput };