definitionItem

tcmts.vscode.extension.definitionItem · #2doj37an · term · runs anywhere

An item for one definition (shared by both views).

import { short } from "#codebase/tcmts/vscode/extension";
import type { DefinitionEntry } from "#codebase/tcmts/vscode/extension";
import * as vscode from "vscode";

export function definitionItem(e: DefinitionEntry, label: string = e.name): vscode.TreeItem {
  const item = new vscode.TreeItem(label, vscode.TreeItemCollapsibleState.None);
  item.description = e.kind === "type" ? "type" : e.kind === "file" ? e.signature : short(e.signature);
  item.iconPath =
    e.test === "passed" ? new vscode.ThemeIcon("testing-passed-icon", new vscode.ThemeColor("testing.iconPassed"))
    : e.test === "failed" ? new vscode.ThemeIcon("testing-failed-icon", new vscode.ThemeColor("testing.iconFailed"))
    : e.test ? new vscode.ThemeIcon("beaker")
    : e.role === "app" ? new vscode.ThemeIcon("rocket")
    : e.role === "table" ? new vscode.ThemeIcon("database")
    : e.role === "schedule" ? new vscode.ThemeIcon("watch")
    : e.endpoint ? new vscode.ThemeIcon(e.streaming ? "radio-tower" : "cloud")
    : new vscode.ThemeIcon(e.kind === "file" ? "file" : e.kind === "type" ? "symbol-interface" : e.kind === "class" ? "symbol-class" : e.symbolKind === 12 ? "symbol-function" : "symbol-variable");
  const tip = new vscode.MarkdownString();
  tip.appendMarkdown(`**${e.path}** \`#${e.hash.slice(0, 8)}\`\n\n`);
  if (e.kind !== "file") tip.appendCodeblock(e.kind === "type" ? e.signature : `: ${e.signature}`, "typescript");
  if (e.place) tip.appendMarkdown(`\n\nRuns ${e.place === "anywhere" ? "anywhere" : e.place === "server" ? "on the server" : "in the browser"}.`);
  if (e.endpoint) tip.appendMarkdown(` The browser calls it by hash${e.streaming ? ", streaming" : ""}.`);
  if (e.test) tip.appendMarkdown(`\n\nTest: ${e.test}.`);
  if (e.doc) tip.appendMarkdown(`\n\n${e.doc}`);
  item.tooltip = tip;
  item.contextValue = e.role === "app" ? "definition.app" : "definition";
  item.command = { command: "tcm.openPage", title: "Open page", arguments: [{ hash: e.hash }] };
  return item;
}

uses

used by