--- /dev/null
+/**
+ * @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++;
+ }
+ };
+ }
+};