pi-lens
Version:
Real-time code feedback for pi — LSP, linters, formatters, type-checking, structural analysis & booboo
45 lines (44 loc) • 1.61 kB
JavaScript
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));
}