1/** 2 * @fileoverview Enforce a maximum number of classes per file 3 * @author James Garbutt <https://github.com/43081j> 4 */ 5"use strict"; 6 7//------------------------------------------------------------------------------ 8// Requirements 9//------------------------------------------------------------------------------ 10 11 12//------------------------------------------------------------------------------ 13// Rule Definition 14//------------------------------------------------------------------------------ 15 16module.exports = { 17 meta: { 18 type: "suggestion", 19 20 docs: { 21 description: "enforce a maximum number of classes per file", 22 category: "Best Practices", 23 recommended: false, 24 url: "https://eslint.org/docs/rules/max-classes-per-file" 25 }, 26 27 schema: [ 28 { 29 type: "integer", 30 minimum: 1 31 } 32 ], 33 34 messages: { 35 maximumExceeded: "File has too many classes ({{ classCount }}). Maximum allowed is {{ max }}." 36 } 37 }, 38 create(context) { 39 40 const maxClasses = context.options[0] || 1; 41 42 let classCount = 0; 43 44 return { 45 Program() { 46 classCount = 0; 47 }, 48 "Program:exit"(node) { 49 if (classCount > maxClasses) { 50 context.report({ 51 node, 52 messageId: "maximumExceeded", 53 data: { 54 classCount, 55 max: maxClasses 56 } 57 }); 58 } 59 }, 60 "ClassDeclaration, ClassExpression"() { 61 classCount++; 62 } 63 }; 64 } 65}; 66