signatureOf

tcmts.core.analyze.signatureOf · #spk25vtv · term · runs anywhere

import type { DefSite } from "#codebase/tcmts/core/extract";
import type { TypeChecker } from "#codebase/tcmts/core/ts";
import { TypeFormatFlags as ts_TypeFormatFlags } from "typescript/sync";

export function signatureOf(site: DefSite, checker: TypeChecker): string {
  if (site.kind === "type") return site.tag === "Interface" ? "interface" : "type";
  const flags = ts_TypeFormatFlags.NoTruncation | ts_TypeFormatFlags.UseAliasDefinedOutsideCurrentScope;
  if (site.isWatch) return checker.typeToString(checker.getTypeAtLocation(site.nodes[0]!), undefined, flags);
  const sym = checker.getSymbolAtLocation(site.nameNode!);
  if (!sym) return "?";
  return checker.typeToString(checker.getTypeOfSymbolAtLocation(sym, site.nameNode!), undefined, flags);
}

uses

used by