pi-lens
Version:
Real-time code feedback for pi — LSP, linters, formatters, type-checking, structural analysis & booboo
38 lines (37 loc) • 1.44 kB
JavaScript
/**
* high-import-coupling — a file importing from > 15 distinct modules. Fact-based
* (reads `file.imports` from the tree-sitter import provider, no compiler);
* formerly QR-003 (#402).
*/
const IMPORT_COUPLING_THRESHOLD = 15;
// Registry/hub files are intentionally wide — they import everything by design
const IMPORT_COUPLING_EXEMPT = /[/\\](index|integration)\.[cm]?tsx?$/;
export const highImportCouplingRule = {
id: "high-import-coupling",
requires: ["file.imports"],
appliesTo(ctx) {
return /\.tsx?$/.test(ctx.filePath);
},
evaluate(ctx, store) {
if (IMPORT_COUPLING_EXEMPT.test(ctx.filePath))
return [];
const imports = store.getFileFact(ctx.filePath, "file.imports") ?? [];
const sources = new Set(imports.map((i) => i.source));
const count = sources.size;
if (count <= IMPORT_COUPLING_THRESHOLD)
return [];
return [
{
id: `high-import-coupling:${ctx.filePath}:1:1`,
tool: "fact-rules",
rule: "high-import-coupling",
filePath: ctx.filePath,
line: 1,
column: 1,
severity: "warning",
semantic: "warning",
message: `File imports from ${count} distinct modules (threshold: ${IMPORT_COUPLING_THRESHOLD}) — split responsibilities`,
},
];
},
};