brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.0 KiB · 7f3bbef Raw
68 lines · typescript
1import * as path from "path";2import * as vscode from "vscode";3 4/**5 * Formats the given date as a string in the form "YYYYMMddTHHMMSS".6 *7 * @param date The date to format as a string.8 * @returns The formatted date.9 */10function formatDate(date: Date): string {11  const year = date.getFullYear().toString().padStart(4, "0");12  const month = (date.getMonth() + 1).toString().padStart(2, "0");13  const day = date.getDate().toString().padStart(2, "0");14  const hour = date.getHours().toString().padStart(2, "0");15  const minute = date.getMinutes().toString().padStart(2, "0");16  const seconds = date.getSeconds().toString().padStart(2, "0");17  return `${year}${month}${day}T${hour}${minute}${seconds}`;18}19 20export enum LogType {21  DEBUG_SESSION,22}23 24export class LogFilePathProvider {25  private logFolder: string = "";26 27  constructor(28    private context: vscode.ExtensionContext,29    private logger: vscode.LogOutputChannel,30  ) {31    this.updateLogFolder();32    context.subscriptions.push(33        vscode.workspace.onDidChangeConfiguration(e => {34            if (35                e.affectsConfiguration("lldb-dap.logFolder")36            ) {37                this.updateLogFolder();38            }39        })40    );41  }42 43  get(type: LogType): string {44    const logFolder = this.logFolder || this.context.logUri.fsPath;45    switch(type) {46    case LogType.DEBUG_SESSION:47        return path.join(logFolder, `lldb-dap-${formatDate(new Date())}-${vscode.env.sessionId.split("-")[0]}.log`);48        break;49    }50  }51 52  private updateLogFolder() {53    const config = vscode.workspace.getConfiguration("lldb-dap");54    let logFolder =55      config.get<string>("logFolder") || this.context.logUri.fsPath;56    vscode.workspace.fs57      .createDirectory(vscode.Uri.file(logFolder))58      .then(undefined, (error) => {59        this.logger.error(`Failed to create log folder ${logFolder}: ${error}`);60        logFolder = this.context.logUri.fsPath;61      })62      .then(() => {63        this.logFolder = logFolder;64        this.logger.info(`Persisting lldb-dap logs to ${logFolder}`);65      });66  }67}68