UNPKG

pi-lens

Version:

Real-time code feedback for pi — LSP, linters, formatters, type-checking, structural analysis & booboo

45 lines (44 loc) • 1.61 kB
import * as path from "node:path"; function deadCodeMessage(issue) { if (issue.category === "unlisted") return `Unlisted dependency ${issue.name}`; if (issue.category === "dependency") return `Unused dependency ${issue.name}`; if (issue.category === "file") return `Unused file ${issue.name}`; return `Unused ${issue.kind} ${issue.name}`; } /** * A dead-code issue (the non-JS/TS analogue of knip — e.g. Python via vulture) * at a concrete `file:line`. An *unlisted* dependency is blocking (a real * import gap), matching knip; everything else is an advisory warning. */ export function deadCodeIssueToProjectDiagnostic(cwd, issue, language) { const blocking = issue.category === "unlisted"; return { filePath: issue.file ? path.isAbsolute(issue.file) ? issue.file : path.resolve(cwd, issue.file) : cwd, line: issue.line, severity: blocking ? "error" : "warning", semantic: blocking ? "blocking" : "warning", tool: "dead-code", runner: `dead-code-${language}`, rule: `dead-code:${issue.category}`, message: deadCodeMessage(issue), source: "project-scan", }; } export function deadCodeResultToProjectDiagnostics(cwd, result) { if (!result.success) return []; const issues = [ ...result.unusedExports, ...result.unusedFiles, ...result.unusedDeps, ...result.unlistedDeps, ]; return issues.map((issue) => deadCodeIssueToProjectDiagnostic(cwd, issue, result.language)); }