@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,116 +0,0 @@
1
- import { TSESTree } from "@typescript-eslint/types";
2
- import Type from "typebox";
3
- import { Compile } from "typebox/compile";
4
- const isRuleOptions = Compile(Type.Object({
5
- allowPropertyAccess: Type.Optional(Type.Array(Type.String())),
6
- shorthands: Type.Optional(Type.Record(Type.String(), Type.String())),
7
- }));
8
- const isUnknownRecord = Compile(Type.Record(Type.String(), Type.Unknown()));
9
- const DEFAULT_OPTIONS = {
10
- allowPropertyAccess: ["char"],
11
- shorthands: {
12
- args: "parameters",
13
- char: "character",
14
- dt: "deltaTime",
15
- plr: "player",
16
- },
17
- };
18
- const ESCAPE_REGEXP = /[.*+?^${}()|[\]\\]/g;
19
- const ESCAPE_WITH = String.raw `\$&`;
20
- function normalizeOptions(rawOptions) {
21
- const mergedShorthands = { ...DEFAULT_OPTIONS.shorthands };
22
- if (rawOptions?.shorthands)
23
- for (const [key, value] of Object.entries(rawOptions.shorthands))
24
- mergedShorthands[key] = value;
25
- const shorthandsMap = new Map(Object.entries(mergedShorthands));
26
- const allowPropertyAccessSource = rawOptions?.allowPropertyAccess ?? DEFAULT_OPTIONS.allowPropertyAccess;
27
- const escapedKeys = new Array();
28
- let length = 0;
29
- for (const key of shorthandsMap.keys())
30
- escapedKeys[length++] = key.replaceAll(ESCAPE_REGEXP, ESCAPE_WITH);
31
- const selector = `Identifier[name=/^(${escapedKeys.join("|")})$/]`;
32
- return {
33
- allowPropertyAccess: new Set(allowPropertyAccessSource),
34
- selector,
35
- shorthands: shorthandsMap,
36
- };
37
- }
38
- const noShorthandNames = {
39
- create(context) {
40
- const validatedOptions = isRuleOptions.Check(context.options[0]) ? context.options[0] : undefined;
41
- const { shorthands, allowPropertyAccess, selector } = normalizeOptions(validatedOptions);
42
- return {
43
- [selector](node) {
44
- const shorthandName = node.name;
45
- const replacement = shorthands.get(shorthandName);
46
- if (replacement === undefined || replacement === "")
47
- return;
48
- const { parent } = node;
49
- if (allowPropertyAccess.has(shorthandName) &&
50
- parent !== undefined &&
51
- isUnknownRecord.Check(parent) &&
52
- parent.type === TSESTree.AST_NODE_TYPES.MemberExpression &&
53
- parent.property === node)
54
- return;
55
- if (shorthandName === "plr" &&
56
- parent?.type === TSESTree.AST_NODE_TYPES.VariableDeclarator &&
57
- parent.id === node) {
58
- const { init } = parent;
59
- if (init &&
60
- isUnknownRecord.Check(init) &&
61
- init.type === TSESTree.AST_NODE_TYPES.MemberExpression &&
62
- init.object !== undefined &&
63
- isUnknownRecord.Check(init.object) &&
64
- init.object.type === TSESTree.AST_NODE_TYPES.Identifier &&
65
- init.object.name === "Players" &&
66
- init.property !== undefined &&
67
- isUnknownRecord.Check(init.property) &&
68
- init.property.type === TSESTree.AST_NODE_TYPES.Identifier &&
69
- init.property.name === "LocalPlayer") {
70
- context.report({
71
- data: { replacement: "localPlayer", shorthand: shorthandName },
72
- messageId: "useReplacement",
73
- node,
74
- });
75
- return;
76
- }
77
- }
78
- context.report({
79
- data: { replacement, shorthand: shorthandName },
80
- messageId: "useReplacement",
81
- node,
82
- });
83
- },
84
- };
85
- },
86
- meta: {
87
- docs: {
88
- description: "Ban shorthand variable names. Use descriptive full names instead.",
89
- recommended: true,
90
- },
91
- messages: {
92
- useReplacement: "Use '{{replacement}}' instead of '{{shorthand}}' shorthand",
93
- },
94
- schema: [
95
- {
96
- additionalProperties: false,
97
- properties: {
98
- allowPropertyAccess: {
99
- description: "Shorthand names that are allowed as property access",
100
- items: { type: "string" },
101
- type: "array",
102
- },
103
- shorthands: {
104
- additionalProperties: { type: "string" },
105
- description: "Map of shorthand names to their full replacements",
106
- type: "object",
107
- },
108
- },
109
- type: "object",
110
- },
111
- ],
112
- type: "suggestion",
113
- },
114
- };
115
- export default noShorthandNames;
116
- //# sourceMappingURL=no-shorthand-names.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"no-shorthand-names.js","sourceRoot":"","sources":["../../src/rules/no-shorthand-names.ts"],"names":[],"mappings":"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"}
@@ -1,25 +0,0 @@
1
- const noWarn = {
2
- create(context) {
3
- return {
4
- 'CallExpression[callee.type="Identifier"][callee.name="warn"]'(node) {
5
- context.report({
6
- messageId: "useLog",
7
- node,
8
- });
9
- },
10
- };
11
- },
12
- meta: {
13
- docs: {
14
- description: "Ban warn() function calls. Use Log instead.",
15
- recommended: false,
16
- },
17
- messages: {
18
- useLog: "Use Log instead of warn()",
19
- },
20
- schema: [],
21
- type: "problem",
22
- },
23
- };
24
- export default noWarn;
25
- //# sourceMappingURL=no-warn.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"no-warn.js","sourceRoot":"","sources":["../../src/rules/no-warn.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,GAAoB;IAC/B,MAAM,CAAC,OAAO,EAAE;QACf,OAAO;YACN,8DAA8D,CAAC,IAAe,EAAE;gBAC/E,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,6CAA6C;YAC1D,WAAW,EAAE,KAAK;SAClB;QACD,QAAQ,EAAE;YACT,MAAM,EAAE,2BAA2B;SACnC;QACD,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,SAAS;KACf;CACD,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -1,109 +0,0 @@
1
- import { AST_NODE_TYPES } from "@typescript-eslint/types";
2
- import Type from "typebox";
3
- import { Compile } from "typebox/compile";
4
- const sequenceDescriptors = [
5
- { keypointName: "ColorSequenceKeypoint", sequenceName: "ColorSequence" },
6
- { keypointName: "NumberSequenceKeypoint", sequenceName: "NumberSequence" },
7
- ];
8
- function isSequenceIdentifier(node) {
9
- if (node.type !== AST_NODE_TYPES.Identifier)
10
- return false;
11
- for (const { sequenceName } of sequenceDescriptors)
12
- if (sequenceName === node.name)
13
- return true;
14
- return false;
15
- }
16
- function findDescriptor(sequenceName) {
17
- for (const descriptor of sequenceDescriptors)
18
- if (descriptor.sequenceName === sequenceName)
19
- return descriptor;
20
- return undefined;
21
- }
22
- const isNumericLiteral = Compile(Type.Object({
23
- type: Type.Literal(AST_NODE_TYPES.Literal),
24
- value: Type.Number(),
25
- }));
26
- function isExpressionArgument(argument) {
27
- return argument !== undefined && argument.type !== AST_NODE_TYPES.SpreadElement;
28
- }
29
- function extractKeypoint(element, descriptor) {
30
- if (element === undefined || element.type !== AST_NODE_TYPES.NewExpression)
31
- return undefined;
32
- if (element.callee.type !== AST_NODE_TYPES.Identifier || element.callee.name !== descriptor.keypointName)
33
- return undefined;
34
- if (element.arguments.length !== 2)
35
- return undefined;
36
- const [timeArgument, valueArgument] = element.arguments;
37
- if (!isNumericLiteral.Check(timeArgument))
38
- return undefined;
39
- if (!isExpressionArgument(valueArgument))
40
- return undefined;
41
- return {
42
- time: timeArgument.value,
43
- value: valueArgument,
44
- };
45
- }
46
- const docs = {
47
- description: "Prefer the optimized ColorSequence and NumberSequence constructor overloads over passing ColorSequenceKeypoint or NumberSequenceKeypoint arrays when only using endpoints 0 and 1.",
48
- recommended: true,
49
- };
50
- const preferSequenceOverloads = {
51
- create(context) {
52
- const { sourceCode } = context;
53
- return {
54
- NewExpression(node) {
55
- const { callee } = node;
56
- if (!isSequenceIdentifier(callee))
57
- return;
58
- const descriptor = findDescriptor(callee.name);
59
- if (descriptor === undefined || node.arguments.length !== 1)
60
- return;
61
- const [argument] = node.arguments;
62
- if (argument === undefined ||
63
- argument.type !== AST_NODE_TYPES.ArrayExpression ||
64
- argument.elements.length !== 2)
65
- return;
66
- const firstElement = argument.elements[0] ?? undefined;
67
- const secondElement = argument.elements[1] ?? undefined;
68
- const firstKeypoint = extractKeypoint(firstElement, descriptor);
69
- const secondKeypoint = extractKeypoint(secondElement, descriptor);
70
- if (firstKeypoint === undefined || secondKeypoint === undefined)
71
- return;
72
- if (firstKeypoint.time !== 0 || secondKeypoint.time !== 1)
73
- return;
74
- const firstValueText = sourceCode.getText(firstKeypoint.value);
75
- const secondValueText = sourceCode.getText(secondKeypoint.value);
76
- const normalizedFirstValue = firstValueText.trim();
77
- const normalizedSecondValue = secondValueText.trim();
78
- if (normalizedFirstValue === normalizedSecondValue) {
79
- context.report({
80
- data: { sequenceName: descriptor.sequenceName },
81
- fix: (fixer) => fixer.replaceText(node, `new ${descriptor.sequenceName}(${firstValueText})`),
82
- messageId: "preferSingleOverload",
83
- node,
84
- });
85
- return;
86
- }
87
- context.report({
88
- data: { sequenceName: descriptor.sequenceName },
89
- fix: (fixer) => fixer.replaceText(node, `new ${descriptor.sequenceName}(${firstValueText}, ${secondValueText})`),
90
- messageId: "preferTwoPointOverload",
91
- node,
92
- });
93
- },
94
- };
95
- },
96
- defaultOptions: [],
97
- meta: {
98
- docs,
99
- fixable: "code",
100
- messages: {
101
- preferSingleOverload: "Use the single-argument {{sequenceName}} constructor overload instead of redundant keypoints when both endpoints share the same value.",
102
- preferTwoPointOverload: "Use the two-argument {{sequenceName}} constructor overload instead of allocating an array of keypoints for endpoints 0 and 1.",
103
- },
104
- schema: [],
105
- type: "problem",
106
- },
107
- };
108
- export default preferSequenceOverloads;
109
- //# sourceMappingURL=prefer-sequence-overloads.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prefer-sequence-overloads.js","sourceRoot":"","sources":["../../src/rules/prefer-sequence-overloads.ts"],"names":[],"mappings":"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"}
@@ -1,161 +0,0 @@
1
- import { TSESTree } from "@typescript-eslint/utils";
2
- function isNumber(value) {
3
- return typeof value === "number" && !Number.isNaN(value);
4
- }
5
- function isRecord(node) {
6
- return typeof node === "object" && node !== null;
7
- }
8
- function hasTypeProperty(object) {
9
- return "type" in object;
10
- }
11
- const OPERATORS = new Set(["+", "-", "*", "/", "%"]);
12
- function reconstructText(node) {
13
- const nodeType = node.type;
14
- if (nodeType === TSESTree.AST_NODE_TYPES.Literal) {
15
- const { value } = node;
16
- return isNumber(value) ? String(value) : undefined;
17
- }
18
- if (nodeType === TSESTree.AST_NODE_TYPES.Identifier) {
19
- const { name } = node;
20
- return typeof name === "string" ? name : undefined;
21
- }
22
- if (nodeType === TSESTree.AST_NODE_TYPES.UnaryExpression) {
23
- const { operator } = node;
24
- if (typeof operator !== "string")
25
- return undefined;
26
- const { argument } = node;
27
- if (!isRecord(argument))
28
- return undefined;
29
- const text = reconstructText(argument);
30
- return text === undefined ? undefined : `${operator}${text}`;
31
- }
32
- if (nodeType === TSESTree.AST_NODE_TYPES.BinaryExpression) {
33
- const { operator } = node;
34
- if (typeof operator !== "string" || !OPERATORS.has(operator))
35
- return undefined;
36
- const { left, right } = node;
37
- if (!isRecord(left) || !isRecord(right))
38
- return undefined;
39
- const leftText = reconstructText(left);
40
- const rightText = reconstructText(right);
41
- return leftText === undefined || rightText === undefined ? undefined : `${leftText} ${operator} ${rightText}`;
42
- }
43
- return undefined;
44
- }
45
- function evaluateExpression(node) {
46
- if (!isRecord(node))
47
- return undefined;
48
- const nodeType = node.type;
49
- if (nodeType === TSESTree.AST_NODE_TYPES.Literal) {
50
- const { value } = node;
51
- return isNumber(value) ? value : undefined;
52
- }
53
- if (nodeType === TSESTree.AST_NODE_TYPES.UnaryExpression) {
54
- const { argument, operator } = node;
55
- if (typeof argument === "object" && argument !== null) {
56
- const value = evaluateExpression(argument);
57
- if (value === undefined)
58
- return undefined;
59
- if (operator === "-")
60
- return -value;
61
- if (operator === "+")
62
- return value;
63
- }
64
- return undefined;
65
- }
66
- if (nodeType === TSESTree.AST_NODE_TYPES.BinaryExpression) {
67
- const { right, left, operator } = node;
68
- if (typeof left === "object" && left !== null && typeof right === "object" && right !== null) {
69
- const leftValue = evaluateExpression(left);
70
- const rightValue = evaluateExpression(right);
71
- if (leftValue === undefined || rightValue === undefined)
72
- return undefined;
73
- switch (operator) {
74
- case "+":
75
- return leftValue + rightValue;
76
- case "-":
77
- return leftValue - rightValue;
78
- case "*":
79
- return leftValue * rightValue;
80
- case "/":
81
- return rightValue === 0 ? undefined : leftValue / rightValue;
82
- case "%":
83
- return rightValue === 0 ? undefined : leftValue % rightValue;
84
- default:
85
- return undefined;
86
- }
87
- }
88
- return undefined;
89
- }
90
- return undefined;
91
- }
92
- function collectArguments(_context, parameters) {
93
- if (parameters.length !== 4)
94
- return undefined;
95
- const texts = [undefined, undefined, undefined, undefined];
96
- for (let index = 0; index < 4; index++) {
97
- const parameter = parameters[index];
98
- if (!isRecord(parameter) || !hasTypeProperty(parameter))
99
- return undefined;
100
- if (parameter.type === TSESTree.AST_NODE_TYPES.SpreadElement)
101
- return undefined;
102
- const text = reconstructText(parameter);
103
- if (text === undefined)
104
- return undefined;
105
- texts[index] = text;
106
- }
107
- const [scaleXText, offsetXText, scaleYText, offsetYText] = texts;
108
- if (scaleXText === undefined || offsetXText === undefined || scaleYText === undefined || offsetYText === undefined)
109
- return undefined;
110
- return { offsetXText, offsetYText, scaleXText, scaleYText };
111
- }
112
- const preferUDim2Shorthand = {
113
- create(context) {
114
- return {
115
- NewExpression(node) {
116
- if (node.callee.type !== TSESTree.AST_NODE_TYPES.Identifier || node.callee.name !== "UDim2")
117
- return;
118
- const collected = collectArguments(context, node.arguments);
119
- if (!collected)
120
- return;
121
- const { offsetXText, offsetYText, scaleXText, scaleYText } = collected;
122
- const scaleX = evaluateExpression(node.arguments[0]);
123
- const offsetX = evaluateExpression(node.arguments[1]);
124
- const scaleY = evaluateExpression(node.arguments[2]);
125
- const offsetY = evaluateExpression(node.arguments[3]);
126
- if (scaleX === 0 && offsetX === 0 && scaleY === 0 && offsetY === 0)
127
- return;
128
- if (offsetX === 0 && offsetY === 0) {
129
- context.report({
130
- fix: (fixer) => fixer.replaceText(node, `UDim2.fromScale(${scaleXText}, ${scaleYText})`),
131
- messageId: "preferFromScale",
132
- node,
133
- });
134
- return;
135
- }
136
- if (scaleX === 0 && scaleY === 0) {
137
- context.report({
138
- fix: (fixer) => fixer.replaceText(node, `UDim2.fromOffset(${offsetXText}, ${offsetYText})`),
139
- messageId: "preferFromOffset",
140
- node,
141
- });
142
- }
143
- },
144
- };
145
- },
146
- meta: {
147
- docs: {
148
- description: "Prefer UDim2.fromScale() or UDim2.fromOffset() over new UDim2() when all offsets or all scales are zero.",
149
- recommended: true,
150
- },
151
- fixable: "code",
152
- messages: {
153
- preferFromOffset: "Use UDim2.fromOffset() instead of new UDim2(). When all scales are zero, use UDim2.fromOffset() for clarity.",
154
- preferFromScale: "Use UDim2.fromScale() instead of new UDim2(). When all offsets are zero, use UDim2.fromScale() for clarity.",
155
- },
156
- schema: [],
157
- type: "suggestion",
158
- },
159
- };
160
- export default preferUDim2Shorthand;
161
- //# sourceMappingURL=prefer-udim2-shorthand.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prefer-udim2-shorthand.js","sourceRoot":"","sources":["../../src/rules/prefer-udim2-shorthand.ts"],"names":[],"mappings":"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"}