UNPKG

1.78 kBJavaScriptView Raw
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};