definitionItem
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; }