| /** | |
| * @fileoverview Enforce a maximum number of classes per file | |
| * @author James Garbutt <https://github.com/43081j> | |
| */ | |
| "use strict"; | |
| //------------------------------------------------------------------------------ | |
| // Requirements | |
| //------------------------------------------------------------------------------ | |
| //------------------------------------------------------------------------------ | |
| // Rule Definition | |
| //------------------------------------------------------------------------------ | |
| module.exports = { | |
| meta: { | |
| type: "suggestion", | |
| docs: { | |
| description: "enforce a maximum number of classes per file", | |
| category: "Best Practices", | |
| recommended: false, | |
| url: "https://eslint.org/docs/rules/max-classes-per-file" | |
| }, | |
| schema: [ | |
| { | |
| type: "integer", | |
| minimum: 1 | |
| } | |
| ], | |
| messages: { | |
| maximumExceeded: "File has too many classes ({{ classCount }}). Maximum allowed is {{ max }}." | |
| } | |
| }, | |
| create(context) { | |
| const maxClasses = context.options[0] || 1; | |
| let classCount = 0; | |
| return { | |
| Program() { | |
| classCount = 0; | |
| }, | |
| "Program:exit"(node) { | |
| if (classCount > maxClasses) { | |
| context.report({ | |
| node, | |
| messageId: "maximumExceeded", | |
| data: { | |
| classCount, | |
| max: maxClasses | |
| } | |
| }); | |
| } | |
| }, | |
| "ClassDeclaration, ClassExpression"() { | |
| classCount++; | |
| } | |
| }; | |
| } | |
| }; |