pi-lens
Version:
Real-time code feedback for pi — LSP, linters, formatters, type-checking, structural analysis & booboo
38 lines (35 loc) • 1.16 kB
JavaScript
import { createRequire as __pilensCreateRequire } from "node:module"; const require = __pilensCreateRequire(import.meta.url);
// dist/clients/review-graph/symbol-id.js
function buildSymbolId(filePath, name, kind, startLine) {
return `${filePath}:${name}:${kind}:${startLine}`;
}
var KIND_TOKEN_RE = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;
function parseSymbolKey(key, knownFilePath) {
if (key.startsWith("file:")) {
return { filePath: key.slice("file:".length) };
}
const canonical = /^(.*):([^:]*):([^:]+):(\d+)$/.exec(key);
if (canonical && KIND_TOKEN_RE.test(canonical[3])) {
return {
filePath: canonical[1],
symbolName: canonical[2] || void 0,
kind: canonical[3],
line: Number(canonical[4])
};
}
if (knownFilePath && key.startsWith(`${knownFilePath}:`)) {
return {
filePath: knownFilePath,
symbolName: key.slice(knownFilePath.length + 1) || void 0
};
}
const separator = key.lastIndexOf(":");
return separator < 0 ? { filePath: key } : {
filePath: key.slice(0, separator),
symbolName: key.slice(separator + 1) || void 0
};
}
export {
buildSymbolId,
parseSymbolKey
};