@pobammer-ts/eslint-cease-nonsense-rules 1.2.3 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/dist/build-metadata.json +5 -0
  2. package/dist/index.d.ts +1 -0
  3. package/dist/index.js +11847 -80
  4. package/dist/index.js.map +516 -1
  5. package/dist/rules/no-async-constructor.d.ts +7 -0
  6. package/package.json +10 -10
  7. package/dist/configure-utilities.js +0 -136
  8. package/dist/configure-utilities.js.map +0 -1
  9. package/dist/rules/ban-instances.js +0 -123
  10. package/dist/rules/ban-instances.js.map +0 -1
  11. package/dist/rules/ban-react-fc.js +0 -42
  12. package/dist/rules/ban-react-fc.js.map +0 -1
  13. package/dist/rules/enforce-ianitor-check-type.js +0 -340
  14. package/dist/rules/enforce-ianitor-check-type.js.map +0 -1
  15. package/dist/rules/no-color3-constructor.js +0 -76
  16. package/dist/rules/no-color3-constructor.js.map +0 -1
  17. package/dist/rules/no-instance-methods-without-this.js +0 -122
  18. package/dist/rules/no-instance-methods-without-this.js.map +0 -1
  19. package/dist/rules/no-print.js +0 -25
  20. package/dist/rules/no-print.js.map +0 -1
  21. package/dist/rules/no-shorthand-names.js +0 -116
  22. package/dist/rules/no-shorthand-names.js.map +0 -1
  23. package/dist/rules/no-warn.js +0 -25
  24. package/dist/rules/no-warn.js.map +0 -1
  25. package/dist/rules/prefer-sequence-overloads.js +0 -109
  26. package/dist/rules/prefer-sequence-overloads.js.map +0 -1
  27. package/dist/rules/prefer-udim2-shorthand.js +0 -161
  28. package/dist/rules/prefer-udim2-shorthand.js.map +0 -1
  29. package/dist/rules/require-named-effect-functions.js +0 -350
  30. package/dist/rules/require-named-effect-functions.js.map +0 -1
  31. package/dist/rules/require-paired-calls.js +0 -861
  32. package/dist/rules/require-paired-calls.js.map +0 -1
  33. package/dist/rules/require-react-component-keys.js +0 -357
  34. package/dist/rules/require-react-component-keys.js.map +0 -1
  35. package/dist/rules/use-exhaustive-dependencies.js +0 -697
  36. package/dist/rules/use-exhaustive-dependencies.js.map +0 -1
  37. package/dist/rules/use-hook-at-top-level.js +0 -351
  38. package/dist/rules/use-hook-at-top-level.js.map +0 -1
@@ -1,340 +0,0 @@
1
- import { TSESTree } from "@typescript-eslint/types";
2
- import { ESLintUtils } from "@typescript-eslint/utils";
3
- const DEFAULT_CONFIGURATION = {
4
- baseThreshold: 10,
5
- errorThreshold: 25,
6
- interfacePenalty: 20,
7
- performanceMode: true,
8
- warnThreshold: 15,
9
- };
10
- const SHOULD_NOT_NOT_RETURN_TYPE = new Set([
11
- TSESTree.AST_NODE_TYPES.FunctionDeclaration,
12
- TSESTree.AST_NODE_TYPES.FunctionExpression,
13
- ]);
14
- function hasTypeAnnotationProperty(node) {
15
- return "typeAnnotation" in node;
16
- }
17
- function hasTypeAnnotation(node) {
18
- if (node.type === TSESTree.AST_NODE_TYPES.VariableDeclarator &&
19
- node.id &&
20
- typeof node.id === "object" &&
21
- hasTypeAnnotationProperty(node.id))
22
- return !!node.id.typeAnnotation;
23
- if (SHOULD_NOT_NOT_RETURN_TYPE.has(node.type))
24
- return !!node.returnType;
25
- return false;
26
- }
27
- function getTypeName(node) {
28
- return node.type === TSESTree.AST_NODE_TYPES.TSInterfaceDeclaration ||
29
- node.type === TSESTree.AST_NODE_TYPES.TSTypeAliasDeclaration
30
- ? node.id.name
31
- : undefined;
32
- }
33
- function isIanitorValidator(node) {
34
- return (node.type === TSESTree.AST_NODE_TYPES.CallExpression &&
35
- node.callee?.type === TSESTree.AST_NODE_TYPES.MemberExpression &&
36
- node.callee.object?.type === TSESTree.AST_NODE_TYPES.Identifier &&
37
- node.callee.object.name === "Ianitor");
38
- }
39
- function extractIanitorStaticVariable(typeAnnotation) {
40
- let currentType = typeAnnotation;
41
- if (currentType.type === TSESTree.AST_NODE_TYPES.TSTypeReference &&
42
- currentType.typeName.type === TSESTree.AST_NODE_TYPES.Identifier &&
43
- currentType.typeName.name === "Readonly" &&
44
- currentType.typeArguments?.params[0])
45
- currentType = currentType.typeArguments.params[0];
46
- if (currentType.type !== TSESTree.AST_NODE_TYPES.TSTypeReference)
47
- return undefined;
48
- const { typeName, typeArguments } = currentType;
49
- const firstParam = typeArguments?.params[0];
50
- if (typeName.type === TSESTree.AST_NODE_TYPES.TSQualifiedName &&
51
- typeName.left.type === TSESTree.AST_NODE_TYPES.Identifier &&
52
- typeName.left.name === "Ianitor" &&
53
- typeName.right.type === TSESTree.AST_NODE_TYPES.Identifier &&
54
- typeName.right.name === "Static" &&
55
- firstParam?.type === TSESTree.AST_NODE_TYPES.TSTypeQuery &&
56
- firstParam.exprName.type === TSESTree.AST_NODE_TYPES.Identifier)
57
- return firstParam.exprName.name;
58
- return undefined;
59
- }
60
- function hasIanitorStaticType(typeAnnotation) {
61
- let currentType = typeAnnotation;
62
- if (currentType.type === TSESTree.AST_NODE_TYPES.TSTypeReference &&
63
- currentType.typeName.type === TSESTree.AST_NODE_TYPES.Identifier &&
64
- currentType.typeName.name === "Readonly" &&
65
- currentType.typeArguments?.params[0])
66
- currentType = currentType.typeArguments.params[0];
67
- if (currentType.type !== TSESTree.AST_NODE_TYPES.TSTypeReference)
68
- return false;
69
- const { typeName, typeArguments } = currentType;
70
- return (typeName.type === TSESTree.AST_NODE_TYPES.TSQualifiedName &&
71
- typeName.left.type === TSESTree.AST_NODE_TYPES.Identifier &&
72
- typeName.left.name === "Ianitor" &&
73
- typeName.right.type === TSESTree.AST_NODE_TYPES.Identifier &&
74
- typeName.right.name === "Static" &&
75
- typeArguments?.params[0]?.type === TSESTree.AST_NODE_TYPES.TSTypeQuery);
76
- }
77
- function calculateIanitorComplexity(node) {
78
- const callee = node.callee;
79
- if (callee?.type !== TSESTree.AST_NODE_TYPES.MemberExpression ||
80
- callee.property?.type !== TSESTree.AST_NODE_TYPES.Identifier)
81
- return 0;
82
- const method = callee.property.name;
83
- switch (method) {
84
- case "interface":
85
- case "strictInterface": {
86
- const properties = node.arguments?.[0];
87
- return properties?.type === TSESTree.AST_NODE_TYPES.ObjectExpression
88
- ? 10 + (properties.properties?.length || 0) * 3
89
- : 0;
90
- }
91
- case "optional":
92
- case "array":
93
- case "instanceIsA":
94
- case "instanceOf":
95
- return 2;
96
- case "record":
97
- case "map":
98
- return 3;
99
- case "union":
100
- case "intersection":
101
- return (node.arguments?.length || 0) * 2;
102
- case "string":
103
- case "number":
104
- case "boolean":
105
- return 1;
106
- default:
107
- return 1;
108
- }
109
- }
110
- const createRule = ESLintUtils.RuleCreator((name) => `https://github.com/howmanysmall/eslint-cease-nonsense-rules/blob/main/docs/rules/${name}.md`);
111
- const enforceIanitorCheckType = createRule({
112
- create(context) {
113
- const config = { ...DEFAULT_CONFIGURATION, ...context.options[0] };
114
- const cache = {
115
- nodeCache: new WeakMap(),
116
- visitedNodes: new WeakSet(),
117
- };
118
- const ianitorStaticVariables = new Set();
119
- const depthMultiplierCache = new Map();
120
- const complexityCeiling = config.errorThreshold * 2;
121
- function getDepthMultiplier(depth) {
122
- const cached = depthMultiplierCache.get(depth);
123
- if (cached !== undefined)
124
- return cached;
125
- const computed = Math.log2(depth + 1);
126
- depthMultiplierCache.set(depth, computed);
127
- return computed;
128
- }
129
- function addScore(current, addition) {
130
- const nextScore = current + addition;
131
- if (!config.performanceMode)
132
- return nextScore;
133
- return nextScore > complexityCeiling ? complexityCeiling : nextScore;
134
- }
135
- function calculateStructuralComplexity(node, depth = 0) {
136
- const cached = cache.nodeCache.get(node);
137
- if (cached !== undefined)
138
- return cached;
139
- if (cache.visitedNodes.has(node))
140
- return 50;
141
- cache.visitedNodes.add(node);
142
- let score = 0;
143
- const nextDepth = depth + 1;
144
- switch (node.type) {
145
- case TSESTree.AST_NODE_TYPES.TSStringKeyword:
146
- case TSESTree.AST_NODE_TYPES.TSNumberKeyword:
147
- case TSESTree.AST_NODE_TYPES.TSBooleanKeyword:
148
- case TSESTree.AST_NODE_TYPES.TSNullKeyword:
149
- case TSESTree.AST_NODE_TYPES.TSUndefinedKeyword:
150
- case TSESTree.AST_NODE_TYPES.TSVoidKeyword:
151
- case TSESTree.AST_NODE_TYPES.TSSymbolKeyword:
152
- case TSESTree.AST_NODE_TYPES.TSBigIntKeyword:
153
- score = 1;
154
- break;
155
- case TSESTree.AST_NODE_TYPES.TSNeverKeyword:
156
- case TSESTree.AST_NODE_TYPES.TSUnknownKeyword:
157
- case TSESTree.AST_NODE_TYPES.TSAnyKeyword:
158
- score = 0;
159
- break;
160
- case TSESTree.AST_NODE_TYPES.TSInterfaceDeclaration: {
161
- const iface = node;
162
- score = config.interfacePenalty;
163
- const extendsLength = iface.extends?.length;
164
- if (extendsLength)
165
- score = addScore(score, extendsLength * 5);
166
- const { body } = iface.body;
167
- score = addScore(score, body.length * 2);
168
- for (const member of body) {
169
- const typeAnnotation = "typeAnnotation" in member ? member.typeAnnotation : undefined;
170
- if (typeAnnotation)
171
- score = addScore(score, calculateStructuralComplexity(typeAnnotation.typeAnnotation, nextDepth));
172
- }
173
- break;
174
- }
175
- case TSESTree.AST_NODE_TYPES.TSTypeLiteral: {
176
- const { members } = node;
177
- score = 2 + members.length * 0.5;
178
- for (const member of members) {
179
- const typeAnnotation = "typeAnnotation" in member ? member.typeAnnotation : undefined;
180
- if (typeAnnotation)
181
- score = addScore(score, calculateStructuralComplexity(typeAnnotation.typeAnnotation, nextDepth));
182
- }
183
- break;
184
- }
185
- case TSESTree.AST_NODE_TYPES.TSUnionType: {
186
- const { types } = node;
187
- for (const type of types)
188
- score = addScore(score, calculateStructuralComplexity(type, nextDepth));
189
- score = addScore(score, 2 * (types.length - 1));
190
- break;
191
- }
192
- case TSESTree.AST_NODE_TYPES.TSIntersectionType: {
193
- const { types } = node;
194
- for (const type of types)
195
- score = addScore(score, calculateStructuralComplexity(type, nextDepth));
196
- score = addScore(score, 3 * types.length);
197
- break;
198
- }
199
- case TSESTree.AST_NODE_TYPES.TSArrayType:
200
- score = addScore(calculateStructuralComplexity(node.elementType, nextDepth), 1);
201
- break;
202
- case TSESTree.AST_NODE_TYPES.TSTupleType: {
203
- const { elementTypes } = node;
204
- score = 1;
205
- for (const element of elementTypes) {
206
- const elementType = element.type;
207
- if (elementType !== "TSRestType" && elementType !== "TSOptionalType")
208
- score = addScore(score, calculateStructuralComplexity(element, nextDepth));
209
- }
210
- score = addScore(score, 1.5 * elementTypes.length);
211
- break;
212
- }
213
- case TSESTree.AST_NODE_TYPES.TSTypeReference: {
214
- score = 2;
215
- const { typeArguments } = node;
216
- if (typeArguments) {
217
- for (const param of typeArguments.params)
218
- score = addScore(score, calculateStructuralComplexity(param, nextDepth) + 2);
219
- }
220
- break;
221
- }
222
- case TSESTree.AST_NODE_TYPES.TSConditionalType: {
223
- score = 3;
224
- score = addScore(score, calculateStructuralComplexity(node.checkType, nextDepth));
225
- score = addScore(score, calculateStructuralComplexity(node.extendsType, nextDepth));
226
- score = addScore(score, calculateStructuralComplexity(node.trueType, nextDepth));
227
- score = addScore(score, calculateStructuralComplexity(node.falseType, nextDepth));
228
- break;
229
- }
230
- case TSESTree.AST_NODE_TYPES.TSMappedType: {
231
- score = 5;
232
- if (node.constraint)
233
- score = addScore(score, calculateStructuralComplexity(node.constraint, nextDepth));
234
- if (node.typeAnnotation)
235
- score = addScore(score, calculateStructuralComplexity(node.typeAnnotation, nextDepth));
236
- break;
237
- }
238
- case TSESTree.AST_NODE_TYPES.TSFunctionType:
239
- case TSESTree.AST_NODE_TYPES.TSMethodSignature: {
240
- const func = node;
241
- score = 2;
242
- for (const param of func.params) {
243
- const typeAnnotation = "typeAnnotation" in param ? param.typeAnnotation : undefined;
244
- if (typeAnnotation)
245
- score = addScore(score, calculateStructuralComplexity(typeAnnotation.typeAnnotation, nextDepth));
246
- }
247
- if (func.returnType)
248
- score = addScore(score, calculateStructuralComplexity(func.returnType.typeAnnotation, nextDepth));
249
- break;
250
- }
251
- default:
252
- score = 1;
253
- }
254
- score *= getDepthMultiplier(depth);
255
- cache.nodeCache.set(node, score);
256
- cache.visitedNodes.delete(node);
257
- return score;
258
- }
259
- const variableDeclaratorsToCheck = new Map();
260
- return {
261
- "Program:exit"() {
262
- for (const [nodeKey, data] of variableDeclaratorsToCheck.entries()) {
263
- const node = nodeKey;
264
- if (node.id.type === TSESTree.AST_NODE_TYPES.Identifier && ianitorStaticVariables.has(node.id.name))
265
- continue;
266
- context.report({
267
- data: { score: data.complexity.toFixed(1) },
268
- messageId: "missingIanitorCheckType",
269
- node: node.id,
270
- });
271
- }
272
- },
273
- TSInterfaceDeclaration(node) {
274
- const complexity = calculateStructuralComplexity(node);
275
- const name = getTypeName(node);
276
- if (complexity >= config.interfacePenalty) {
277
- context.report({
278
- data: { name: name || "unknown" },
279
- messageId: "complexInterfaceNeedsCheck",
280
- node,
281
- });
282
- }
283
- },
284
- TSTypeAliasDeclaration(node) {
285
- const variableName = extractIanitorStaticVariable(node.typeAnnotation);
286
- if (variableName)
287
- ianitorStaticVariables.add(variableName);
288
- if (hasIanitorStaticType(node.typeAnnotation))
289
- return;
290
- const complexity = calculateStructuralComplexity(node.typeAnnotation);
291
- if (complexity < config.baseThreshold)
292
- return;
293
- context.report({
294
- data: { score: complexity.toFixed(1) },
295
- messageId: "missingIanitorCheckType",
296
- node,
297
- });
298
- },
299
- VariableDeclarator(node) {
300
- if (!node.init || node.init.type !== TSESTree.AST_NODE_TYPES.CallExpression)
301
- return;
302
- if (!isIanitorValidator(node.init))
303
- return;
304
- if (hasTypeAnnotation(node))
305
- return;
306
- const complexity = calculateIanitorComplexity(node.init);
307
- if (complexity < config.baseThreshold)
308
- return;
309
- variableDeclaratorsToCheck.set(node, { complexity });
310
- },
311
- };
312
- },
313
- defaultOptions: [DEFAULT_CONFIGURATION],
314
- meta: {
315
- docs: {
316
- description: "Enforce Ianitor.Check<T> type annotations on complex TypeScript types",
317
- },
318
- messages: {
319
- complexInterfaceNeedsCheck: "Interface '{{name}}' requires Ianitor.Check<T> annotation (interfaces always need explicit checking)",
320
- missingIanitorCheckType: "Complex type (score: {{score}}) requires Ianitor.Check<T> annotation for type safety",
321
- },
322
- schema: [
323
- {
324
- additionalProperties: false,
325
- properties: {
326
- baseThreshold: { minimum: 1, type: "number" },
327
- errorThreshold: { minimum: 1, type: "number" },
328
- interfacePenalty: { minimum: 1, type: "number" },
329
- performanceMode: { type: "boolean" },
330
- warnThreshold: { minimum: 1, type: "number" },
331
- },
332
- type: "object",
333
- },
334
- ],
335
- type: "problem",
336
- },
337
- name: "enforce-ianitor-check-type",
338
- });
339
- export default enforceIanitorCheckType;
340
- //# sourceMappingURL=enforce-ianitor-check-type.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"enforce-ianitor-check-type.js","sourceRoot":"","sources":["../../src/rules/enforce-ianitor-check-type.ts"],"names":[],"mappings":"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"}
@@ -1,76 +0,0 @@
1
- import { TSESTree } from "@typescript-eslint/types";
2
- import Type from "typebox";
3
- import { Compile } from "typebox/compile";
4
- const isNumericLiteralNode = Compile(Type.Object({
5
- type: Type.Literal(TSESTree.AST_NODE_TYPES.Literal),
6
- value: Type.Number(),
7
- }));
8
- function mapComponentToRgbRange(value) {
9
- return Math.round(value > 1 ? value : value * 255);
10
- }
11
- function collectNumericComponents(parameters) {
12
- const components = new Array();
13
- let size = 0;
14
- let allZero = true;
15
- for (const parameter of parameters) {
16
- if (!isNumericLiteralNode.Check(parameter))
17
- return undefined;
18
- const mapped = mapComponentToRgbRange(parameter.value);
19
- components[size++] = mapped;
20
- if (mapped !== 0)
21
- allZero = false;
22
- }
23
- return { allZero, components };
24
- }
25
- const noColor3Constructor = {
26
- create(context) {
27
- return {
28
- NewExpression(node) {
29
- if (node.callee.type !== TSESTree.AST_NODE_TYPES.Identifier || node.callee.name !== "Color3")
30
- return;
31
- const parameters = node.arguments;
32
- if (parameters.length === 0)
33
- return;
34
- const collected = collectNumericComponents(parameters);
35
- if (!collected) {
36
- context.report({
37
- messageId: parameters.length < 3 ? "useFromRGB" : "onlyZeroArgs",
38
- node,
39
- });
40
- return;
41
- }
42
- if (parameters.length < 3) {
43
- const [red, green = 0] = collected.components;
44
- context.report({
45
- fix: (fixer) => fixer.replaceText(node, `Color3.fromRGB(${red}, ${green}, 0)`),
46
- messageId: "useFromRGB",
47
- node,
48
- });
49
- return;
50
- }
51
- if (!collected.allZero) {
52
- context.report({
53
- fix: (fixer) => fixer.replaceText(node, `Color3.fromRGB(${collected.components.join(", ")})`),
54
- messageId: "onlyZeroArgs",
55
- node,
56
- });
57
- }
58
- },
59
- };
60
- },
61
- meta: {
62
- docs: {
63
- description: "Ban new Color3(...) except new Color3() or new Color3(0, 0, 0). Use Color3.fromRGB() instead.",
64
- recommended: true,
65
- },
66
- fixable: "code",
67
- messages: {
68
- onlyZeroArgs: "Use Color3.fromRGB() instead of new Color3(). new Color3() uses floats [0-1] and performs worse than Color3.fromRGB() which uses [0-255]. Only 'new Color3()' or 'new Color3(0, 0, 0)' are allowed.",
69
- useFromRGB: "Use Color3.fromRGB() instead of new Color3(). new Color3() uses floats [0-1] and performs worse than Color3.fromRGB() which uses [0-255].",
70
- },
71
- schema: [],
72
- type: "problem",
73
- },
74
- };
75
- export default noColor3Constructor;
76
- //# sourceMappingURL=no-color3-constructor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"no-color3-constructor.js","sourceRoot":"","sources":["../../src/rules/no-color3-constructor.ts"],"names":[],"mappings":"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"}
@@ -1,122 +0,0 @@
1
- import { AST_NODE_TYPES } from "@typescript-eslint/types";
2
- const DEFAULT_OPTIONS = {
3
- checkPrivate: true,
4
- checkProtected: true,
5
- checkPublic: true,
6
- };
7
- function normalizeOptions(rawOptions) {
8
- const mergedOptions = { ...DEFAULT_OPTIONS };
9
- if (rawOptions?.checkPrivate !== undefined)
10
- mergedOptions.checkPrivate = rawOptions.checkPrivate;
11
- if (rawOptions?.checkProtected !== undefined)
12
- mergedOptions.checkProtected = rawOptions.checkProtected;
13
- if (rawOptions?.checkPublic !== undefined)
14
- mergedOptions.checkPublic = rawOptions.checkPublic;
15
- return mergedOptions;
16
- }
17
- function shouldCheckMethod(node, options) {
18
- if (node.static)
19
- return false;
20
- if (node.kind !== "method")
21
- return false;
22
- const accessibility = node.accessibility ?? "public";
23
- if (accessibility === "private" && !options.checkPrivate)
24
- return false;
25
- if (accessibility === "protected" && !options.checkProtected)
26
- return false;
27
- if (accessibility === "public" && !options.checkPublic)
28
- return false;
29
- return true;
30
- }
31
- function isNode(value) {
32
- return typeof value === "object" && value !== null && "type" in value;
33
- }
34
- // Widen node to allow safe enumeration without producing implicit any values
35
- function hasDynamicProperties(_node) {
36
- return true;
37
- }
38
- function traverseForThis(currentNode, visited) {
39
- if (visited.has(currentNode))
40
- return false;
41
- visited.add(currentNode);
42
- if (currentNode.type === AST_NODE_TYPES.ThisExpression || currentNode.type === AST_NODE_TYPES.Super)
43
- return true;
44
- if (!hasDynamicProperties(currentNode))
45
- return false;
46
- for (const key in currentNode) {
47
- const childValue = currentNode[key];
48
- if (childValue === null || childValue === undefined)
49
- continue;
50
- if (Array.isArray(childValue)) {
51
- for (const item of childValue)
52
- if (isNode(item) && traverseForThis(item, visited))
53
- return true;
54
- continue;
55
- }
56
- if (isNode(childValue) && traverseForThis(childValue, visited))
57
- return true;
58
- }
59
- return false;
60
- }
61
- function methodUsesThis(node) {
62
- const value = node.value;
63
- if (value === undefined || value.type !== AST_NODE_TYPES.FunctionExpression)
64
- return false;
65
- return traverseForThis(value, new WeakSet());
66
- }
67
- const noInstanceMethodsWithoutThis = {
68
- create(context) {
69
- const rawOptions = context.options[0];
70
- const options = normalizeOptions(rawOptions);
71
- return {
72
- MethodDefinition(node) {
73
- if (!shouldCheckMethod(node, options))
74
- return;
75
- if (methodUsesThis(node))
76
- return;
77
- const methodName = node.key.type === AST_NODE_TYPES.Identifier ? node.key.name : "unknown";
78
- context.report({
79
- data: { methodName },
80
- messageId: "noInstanceMethodWithoutThis",
81
- node,
82
- });
83
- },
84
- };
85
- },
86
- defaultOptions: [DEFAULT_OPTIONS],
87
- meta: {
88
- docs: {
89
- description: "Detect instance methods that do not use 'this' and suggest converting them to standalone functions for better performance in roblox-ts.",
90
- recommended: true,
91
- },
92
- messages: {
93
- noInstanceMethodWithoutThis: "Method '{{methodName}}' does not use 'this' and creates unnecessary metatable overhead in roblox-ts. Convert it to a standalone function for better performance.",
94
- },
95
- schema: [
96
- {
97
- additionalProperties: false,
98
- properties: {
99
- checkPrivate: {
100
- default: true,
101
- description: "Check private methods (default: true)",
102
- type: "boolean",
103
- },
104
- checkProtected: {
105
- default: true,
106
- description: "Check protected methods (default: true)",
107
- type: "boolean",
108
- },
109
- checkPublic: {
110
- default: true,
111
- description: "Check public methods (default: true)",
112
- type: "boolean",
113
- },
114
- },
115
- type: "object",
116
- },
117
- ],
118
- type: "problem",
119
- },
120
- };
121
- export default noInstanceMethodsWithoutThis;
122
- //# sourceMappingURL=no-instance-methods-without-this.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"no-instance-methods-without-this.js","sourceRoot":"","sources":["../../src/rules/no-instance-methods-without-this.ts"],"names":[],"mappings":"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"}
@@ -1,25 +0,0 @@
1
- const noPrint = {
2
- create(context) {
3
- return {
4
- 'CallExpression[callee.type="Identifier"][callee.name="print"]'(node) {
5
- context.report({
6
- messageId: "useLog",
7
- node,
8
- });
9
- },
10
- };
11
- },
12
- meta: {
13
- docs: {
14
- description: "Ban print() function calls. Use Log instead.",
15
- recommended: false,
16
- },
17
- messages: {
18
- useLog: "Use Log instead of print()",
19
- },
20
- schema: [],
21
- type: "problem",
22
- },
23
- };
24
- export default noPrint;
25
- //# sourceMappingURL=no-print.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"no-print.js","sourceRoot":"","sources":["../../src/rules/no-print.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,GAAoB;IAChC,MAAM,CAAC,OAAO,EAAE;QACf,OAAO;YACN,+DAA+D,CAAC,IAAe,EAAE;gBAChF,OAAO,CAAC,MAAM,CAAC;oBACd,SAAS,EAAE,QAAQ;oBACnB,IAAI;iBACJ,CAAC,CAAC;YAAA,CACH;SACD,CAAC;IAAA,CACF;IACD,IAAI,EAAE;QACL,IAAI,EAAE;YACL,WAAW,EAAE,8CAA8C;YAC3D,WAAW,EAAE,KAAK;SAClB;QACD,QAAQ,EAAE;YACT,MAAM,EAAE,4BAA4B;SACpC;QACD,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,SAAS;KACf;CACD,CAAC;AAEF,eAAe,OAAO,CAAC"}