import fs from "node:fs"; /** @type {import("eslint").Rule.RuleModule} */ export default { meta: { type: "problem", docs: { description: "Every *.use-case.ts file must have a sibling *.use-case.test.ts (TDD discipline).", }, schema: [], messages: { missingTestFile: "Use case {{filename}} has no sibling test file at {{expected}}. Write the red test first.", }, }, create(context) { return { Program(node) { const filename = context.filename; if (!filename.endsWith(".use-case.ts")) return; const expected = filename.replace(/\.use-case\.ts$/, ".use-case.test.ts"); if (fs.existsSync(expected)) return; context.report({ node, messageId: "missingTestFile", data: { filename: filename.split("/").pop(), expected: expected.split("/").pop() }, }); }, }; }, };