/** * ESLint rule to enforce that Presenters are NOT used * * Presenters are deprecated and replaced with Builders. * This rule flags any file ending with "Presenter" as an error. */ module.exports = { meta: { type: 'problem', docs: { description: 'Prevent use of deprecated Presenter pattern', category: 'Best Practices', recommended: true, }, fixable: null, schema: [], messages: { presenterDeprecated: 'Presenters are deprecated. Use Builder pattern instead. See apps/website/lib/contracts/builders/Builder.ts', }, }, create(context) { return { // Check for any file ending with "Presenter" Program(node) { const filename = context.getFilename(); // Check if filename ends with Presenter.ts or Presenter.tsx if (filename.endsWith('Presenter.ts') || filename.endsWith('Presenter.tsx')) { context.report({ node, messageId: 'presenterDeprecated', }); } }, // Also check class declarations ending with Presenter ClassDeclaration(node) { const className = node.id?.name; if (className && className.endsWith('Presenter')) { context.report({ node, messageId: 'presenterDeprecated', }); } }, }; }, };