DraftLenses

tcmts.vscode.releases.DraftLenses · #mfgsjmkr · class

Above a release draft: release the package, its notes taking the words written there.

import { draftName } from "#codebase/tcmts/vscode/releases";
import type { PublishedPackage, ReleaseCheck, Request } from "#codebase/tcmts/vscode/releases";
import * as vscode from "vscode";

export class DraftLenses implements vscode.CodeLensProvider {
  request: Request;
  changed = new vscode.EventEmitter<void>();
  onDidChangeCodeLenses = this.changed.event;

  constructor(request: Request) {
    this.request = request;
  }
  async provideCodeLenses(doc: vscode.TextDocument): Promise<vscode.CodeLens[]> {
    const file = doc.uri.path.slice(doc.uri.path.lastIndexOf("/") + 1);
    let pkgs: PublishedPackage[];
    try {
      pkgs = await this.request("tcm/publishing", {});
    } catch {
      return [];
    }
    const pkg = pkgs.find((p) => draftName(p.name) === file);
    if (!pkg) return [];
    let check: ReleaseCheck;
    try {
      check = await this.request("tcm/releaseCheck", { name: pkg.name });
    } catch {
      return [];
    }
    const top = new vscode.Range(0, 0, 0, 0);
    return [
      new vscode.CodeLens(top, { title: `$(rocket) Release ${pkg.name} (${check.version} as things stand: ${check.reason})`, command: "tcm.releasePackage", arguments: [{ name: pkg.name, fromDraft: doc.uri }] }),
      new vscode.CodeLens(top, { title: "Regenerate the changes", command: "tcm.draftRelease", arguments: [{ name: pkg.name }] }),
    ];
  }
}

uses

used by