57 lines · 2.1 KB · TypeScript
RawDownload
import { splitPathAndPosition } from "./terminal-links"; function normalizePathSeparators(path: string): string {  return path.replaceAll("\\", "/");} function canonicalizeWindowsDrivePath(path: string): string {  return /^\/[A-Za-z]:\//.test(path) ? path.slice(1) : path;} function trimTrailingPathSeparators(path: string): string {  return path.replace(/[\\/]+$/, "");} function basenameOfPath(path: string): string {  const separatorIndex = Math.max(path.lastIndexOf("/"), path.lastIndexOf("\\"));  return separatorIndex >= 0 ? path.slice(separatorIndex + 1) : path;} function stripRelativePrefixes(path: string): string {  return path.replace(/^\.\/+/, "").replace(/^\/+/, "");} export function formatWorkspaceRelativePath(  pathWithPosition: string,  workspaceRoot: string | undefined,): string {  const { path, line, column } = splitPathAndPosition(pathWithPosition);  const normalizedPath = canonicalizeWindowsDrivePath(normalizePathSeparators(path));   let displayPath = normalizedPath;  if (workspaceRoot) {    const normalizedWorkspaceRoot = canonicalizeWindowsDrivePath(      normalizePathSeparators(trimTrailingPathSeparators(workspaceRoot)),    );    const workspaceLabel = basenameOfPath(normalizedWorkspaceRoot);    const pathForCompare = normalizedPath.toLowerCase();    const workspaceForCompare = normalizedWorkspaceRoot.toLowerCase();    const workspaceWithSeparator = `${workspaceForCompare}/`;    const workspaceLabelWithSeparator = `${workspaceLabel.toLowerCase()}/`;     if (pathForCompare === workspaceForCompare) {      displayPath = workspaceLabel;    } else if (pathForCompare.startsWith(workspaceWithSeparator)) {      const relativeSuffix = normalizedPath.slice(normalizedWorkspaceRoot.length + 1);      displayPath = `${workspaceLabel}/${relativeSuffix}`;    } else if (!normalizedPath.startsWith("/")) {      const relativePath = stripRelativePrefixes(normalizedPath);      displayPath = pathForCompare.startsWith(workspaceLabelWithSeparator)        ? normalizedPath        : `${workspaceLabel}/${relativePath}`;    }  }   if (!line) return displayPath;  return `${displayPath}:${line}${column ? `:${column}` : ""}`;}