@pobammer-ts/eslint-cease-nonsense-rules 0.1.0 → 0.2.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.
package/README.md CHANGED
@@ -3,3 +3,5 @@
3
3
  A bunch of lints to prevent idiot mistakes I encounter with frequency.
4
4
 
5
5
  Note: You said to create a README now; if you'd like a different structure or badges, say so and I’ll update it.
6
+
7
+ **NOTE** I did not write this junk, an LLM did because I do not care.
@@ -15,13 +15,10 @@ const DEFAULT_CONFIG = {
15
15
  * @returns True if the node has a type annotation.
16
16
  */
17
17
  function hasTypeAnnotation(node) {
18
- const nodeObj = node;
19
- if (nodeObj.type === "VariableDeclarator") {
20
- const id = nodeObj.id;
21
- return !!(id && "typeAnnotation" in id && id.typeAnnotation);
22
- }
23
- if (nodeObj.type === "FunctionDeclaration" || nodeObj.type === "FunctionExpression")
24
- return !!nodeObj.returnType;
18
+ if (node.type === "VariableDeclarator" && node.id && typeof node.id === "object" && "typeAnnotation" in node.id)
19
+ return !!node.id.typeAnnotation;
20
+ if (node.type === "FunctionDeclaration" || node.type === "FunctionExpression")
21
+ return !!node.returnType;
25
22
  return false;
26
23
  }
27
24
  /**
@@ -31,11 +28,7 @@ function hasTypeAnnotation(node) {
31
28
  * @returns The type name or null if not applicable.
32
29
  */
33
30
  function getTypeName(node) {
34
- if (node.type === "TSInterfaceDeclaration")
35
- return node.id.name;
36
- if (node.type === "TSTypeAliasDeclaration")
37
- return node.id.name;
38
- return null;
31
+ return node.type === "TSInterfaceDeclaration" || node.type === "TSTypeAliasDeclaration" ? node.id.name : null;
39
32
  }
40
33
  /**
41
34
  * Checks if a node is an Ianitor validator call.
@@ -44,15 +37,37 @@ function getTypeName(node) {
44
37
  * @returns True if the node is an Ianitor validator.
45
38
  */
46
39
  function isIanitorValidator(node) {
47
- if (node.type !== "CallExpression")
48
- return false;
49
- const callee = node.callee;
50
- if (callee && callee.type === "MemberExpression") {
51
- const object = callee.object;
52
- if (object && object.type === "Identifier" && object.name === "Ianitor")
53
- return true;
40
+ return (node.type === "CallExpression" &&
41
+ node.callee?.type === "MemberExpression" &&
42
+ node.callee.object?.type === "Identifier" &&
43
+ node.callee.object.name === "Ianitor");
44
+ }
45
+ /**
46
+ * Checks if a type annotation uses the Ianitor.Static<typeof ...> pattern.
47
+ *
48
+ * @param typeAnnotation - The TypeScript type annotation to check.
49
+ * @returns True if the type uses Ianitor.Static pattern.
50
+ */
51
+ function hasIanitorStaticType(typeAnnotation) {
52
+ let currentType = typeAnnotation;
53
+ // Handle Readonly<...> wrapper
54
+ if (currentType.type === "TSTypeReference" &&
55
+ currentType.typeName.type === "Identifier" &&
56
+ currentType.typeName.name === "Readonly" &&
57
+ currentType.typeArguments?.params[0]) {
58
+ currentType = currentType.typeArguments.params[0];
54
59
  }
55
- return false;
60
+ // Check for Ianitor.Static<typeof ...>
61
+ if (currentType.type !== "TSTypeReference")
62
+ return false;
63
+ const { typeName, typeArguments } = currentType;
64
+ const firstParam = typeArguments?.params[0];
65
+ return (typeName.type === "TSQualifiedName" &&
66
+ typeName.left.type === "Identifier" &&
67
+ typeName.left.name === "Ianitor" &&
68
+ typeName.right.type === "Identifier" &&
69
+ typeName.right.name === "Static" &&
70
+ firstParam?.type === "TSTypeQuery");
56
71
  }
57
72
  /**
58
73
  * Calculates the complexity score of an Ianitor validator.
@@ -61,46 +76,34 @@ function isIanitorValidator(node) {
61
76
  * @returns The complexity score.
62
77
  */
63
78
  function calculateIanitorComplexity(node) {
64
- const callNode = node;
65
- const callee = callNode.callee;
66
- let score = 0;
67
- if (callee?.type === "MemberExpression" && callee.property && callee.property.type === "Identifier") {
68
- const method = callee.property.name;
69
- switch (method) {
70
- case "interface":
71
- case "strictInterface": {
72
- const props = callNode.arguments?.[0];
73
- // Skip recursive property calculation for now to avoid type issues
74
- if (props && props.type === "ObjectExpression")
75
- score = 10 + (props.properties?.length || 0) * 3;
76
- break;
77
- }
78
- case "optional":
79
- case "array":
80
- score = 2;
81
- break;
82
- case "record":
83
- case "map":
84
- score = 3;
85
- break;
86
- case "union":
87
- case "intersection":
88
- score = (callNode.arguments?.length || 0) * 2;
89
- break;
90
- case "string":
91
- case "number":
92
- case "boolean":
93
- score = 1;
94
- break;
95
- case "instanceIsA":
96
- case "instanceOf":
97
- score = 2;
98
- break;
99
- default:
100
- score = 1;
79
+ const callee = node.callee;
80
+ if (callee?.type !== "MemberExpression" || callee.property?.type !== "Identifier")
81
+ return 0;
82
+ const method = callee.property.name;
83
+ switch (method) {
84
+ case "interface":
85
+ case "strictInterface": {
86
+ const props = node.arguments?.[0];
87
+ return props?.type === "ObjectExpression" ? 10 + (props.properties?.length || 0) * 3 : 0;
101
88
  }
89
+ case "optional":
90
+ case "array":
91
+ case "instanceIsA":
92
+ case "instanceOf":
93
+ return 2;
94
+ case "record":
95
+ case "map":
96
+ return 3;
97
+ case "union":
98
+ case "intersection":
99
+ return (node.arguments?.length || 0) * 2;
100
+ case "string":
101
+ case "number":
102
+ case "boolean":
103
+ return 1;
104
+ default:
105
+ return 1;
102
106
  }
103
- return score;
104
107
  }
105
108
  const enforceIanitorCheckType = {
106
109
  /**
@@ -115,6 +118,69 @@ const enforceIanitorCheckType = {
115
118
  nodeCache: new WeakMap(),
116
119
  visitedNodes: new WeakSet(),
117
120
  };
121
+ // Track variable names used in Ianitor.Static<typeof varName> patterns
122
+ const ianitorStaticVariables = new Set();
123
+ const depthMultiplierCache = new Map();
124
+ const complexityCeiling = config.errorThreshold * 2;
125
+ /**
126
+ * Retrieves the cached logarithmic multiplier for a given depth.
127
+ *
128
+ * @param depth - The current recursion depth.
129
+ * @returns The multiplier applied to the accumulated score.
130
+ */
131
+ function getDepthMultiplier(depth) {
132
+ const cached = depthMultiplierCache.get(depth);
133
+ if (cached !== undefined)
134
+ return cached;
135
+ const computed = Math.log2(depth + 1);
136
+ depthMultiplierCache.set(depth, computed);
137
+ return computed;
138
+ }
139
+ /**
140
+ * Adds a contribution to the running score, respecting performance ceilings.
141
+ *
142
+ * @param current - The current accumulated score.
143
+ * @param addition - The contribution that should be added.
144
+ * @returns The bounded score after applying the contribution.
145
+ */
146
+ function addScore(current, addition) {
147
+ const nextScore = current + addition;
148
+ if (!config.performanceMode)
149
+ return nextScore;
150
+ return nextScore > complexityCeiling ? complexityCeiling : nextScore;
151
+ }
152
+ /**
153
+ * Extracts the variable name from Ianitor.Static<typeof varName> pattern.
154
+ *
155
+ * @param typeAnnotation - The TypeScript type annotation to check.
156
+ * @returns The variable name if found, null otherwise.
157
+ */
158
+ // oxlint-disable-next-line consistent-function-scoping
159
+ function extractIanitorStaticVariable(typeAnnotation) {
160
+ let currentType = typeAnnotation;
161
+ // Handle Readonly<...> wrapper
162
+ if (currentType.type === "TSTypeReference" &&
163
+ currentType.typeName.type === "Identifier" &&
164
+ currentType.typeName.name === "Readonly" &&
165
+ currentType.typeArguments?.params[0]) {
166
+ currentType = currentType.typeArguments.params[0];
167
+ }
168
+ // Check for Ianitor.Static<typeof varName>
169
+ if (currentType.type !== "TSTypeReference")
170
+ return null;
171
+ const { typeName, typeArguments } = currentType;
172
+ const firstParam = typeArguments?.params[0];
173
+ if (typeName.type === "TSQualifiedName" &&
174
+ typeName.left.type === "Identifier" &&
175
+ typeName.left.name === "Ianitor" &&
176
+ typeName.right.type === "Identifier" &&
177
+ typeName.right.name === "Static" &&
178
+ firstParam?.type === "TSTypeQuery" &&
179
+ firstParam.exprName.type === "Identifier") {
180
+ return firstParam.exprName.name;
181
+ }
182
+ return null;
183
+ }
118
184
  /**
119
185
  * Calculates the structural complexity of a TypeScript type.
120
186
  *
@@ -124,13 +190,15 @@ const enforceIanitorCheckType = {
124
190
  */
125
191
  function calculateStructuralComplexity(node, depth = 0) {
126
192
  // Performance: Cache everything
127
- if (cache.nodeCache.has(node))
128
- return cache.nodeCache.get(node);
193
+ const cached = cache.nodeCache.get(node);
194
+ if (cached !== undefined)
195
+ return cached;
129
196
  // Cycle detection without TypeChecker
130
197
  if (cache.visitedNodes.has(node))
131
198
  return 50;
132
199
  cache.visitedNodes.add(node);
133
200
  let score = 0;
201
+ const nextDepth = depth + 1;
134
202
  switch (node.type) {
135
203
  // Primitives
136
204
  case "TSStringKeyword":
@@ -152,88 +220,88 @@ const enforceIanitorCheckType = {
152
220
  // INTERFACES - ALWAYS COMPLEX
153
221
  case "TSInterfaceDeclaration": {
154
222
  const iface = node;
155
- score = config.interfacePenalty; // Base penalty
156
- // Add for extends
157
- if (iface.extends && iface.extends.length > 0)
158
- score += iface.extends.length * 5;
159
- // Add for members
160
- score += iface.body.body.length * 2;
161
- // Recurse on member types
162
- for (const member of iface.body.body)
163
- if ("typeAnnotation" in member && member.typeAnnotation)
164
- score += calculateStructuralComplexity(member.typeAnnotation.typeAnnotation, depth + 1);
223
+ score = config.interfacePenalty;
224
+ const extendsLength = iface.extends?.length;
225
+ if (extendsLength)
226
+ score = addScore(score, extendsLength * 5);
227
+ const { body } = iface.body;
228
+ score = addScore(score, body.length * 2);
229
+ for (const member of body) {
230
+ const typeAnnotation = "typeAnnotation" in member ? member.typeAnnotation : undefined;
231
+ if (typeAnnotation)
232
+ score = addScore(score, calculateStructuralComplexity(typeAnnotation.typeAnnotation, nextDepth));
233
+ }
165
234
  break;
166
235
  }
167
236
  // Type literals (object types)
168
237
  case "TSTypeLiteral": {
169
- const literal = node;
170
- score = 2;
171
- score += literal.members.length * 0.5;
172
- for (const member of literal.members)
173
- if ("typeAnnotation" in member && member.typeAnnotation)
174
- score += calculateStructuralComplexity(member.typeAnnotation.typeAnnotation, depth + 1);
238
+ const { members } = node;
239
+ score = 2 + members.length * 0.5;
240
+ for (const member of members) {
241
+ const typeAnnotation = "typeAnnotation" in member ? member.typeAnnotation : undefined;
242
+ if (typeAnnotation)
243
+ score = addScore(score, calculateStructuralComplexity(typeAnnotation.typeAnnotation, nextDepth));
244
+ }
175
245
  break;
176
246
  }
177
247
  // Unions
178
248
  case "TSUnionType": {
179
- const union = node;
180
- for (const type of union.types)
181
- score += calculateStructuralComplexity(type, depth + 1);
182
- score += 2 * (union.types.length - 1); // Branch penalty
249
+ const { types } = node;
250
+ for (const type of types)
251
+ score = addScore(score, calculateStructuralComplexity(type, nextDepth));
252
+ score = addScore(score, 2 * (types.length - 1));
183
253
  break;
184
254
  }
185
255
  // Intersections
186
256
  case "TSIntersectionType": {
187
- const intersection = node;
188
- for (const type of intersection.types) {
189
- score += calculateStructuralComplexity(type, depth + 1);
190
- }
191
- score += 3 * intersection.types.length; // Overlap resolution penalty
257
+ const { types } = node;
258
+ for (const type of types)
259
+ score = addScore(score, calculateStructuralComplexity(type, nextDepth));
260
+ score = addScore(score, 3 * types.length);
192
261
  break;
193
262
  }
194
263
  // Arrays
195
- case "TSArrayType": {
196
- const array = node;
197
- score = calculateStructuralComplexity(array.elementType, depth + 1) + 1;
264
+ case "TSArrayType":
265
+ score = addScore(calculateStructuralComplexity(node.elementType, nextDepth), 1);
198
266
  break;
199
- }
200
267
  // Tuples
201
268
  case "TSTupleType": {
202
- const tuple = node;
269
+ const { elementTypes } = node;
203
270
  score = 1;
204
- for (const element of tuple.elementTypes)
205
- if (element.type !== "TSRestType" && element.type !== "TSOptionalType")
206
- score += calculateStructuralComplexity(element, depth + 1);
207
- score += 1.5 * tuple.elementTypes.length;
271
+ for (const element of elementTypes) {
272
+ const elementType = element.type;
273
+ if (elementType !== "TSRestType" && elementType !== "TSOptionalType")
274
+ score = addScore(score, calculateStructuralComplexity(element, nextDepth));
275
+ }
276
+ score = addScore(score, 1.5 * elementTypes.length);
208
277
  break;
209
278
  }
210
279
  // Type references (including generics)
211
280
  case "TSTypeReference": {
212
- const ref = node;
213
281
  score = 2;
214
- if (ref.typeArguments)
215
- for (const param of ref.typeArguments.params)
216
- score += calculateStructuralComplexity(param, depth + 1) + 2;
282
+ const { typeArguments } = node;
283
+ if (typeArguments) {
284
+ for (const param of typeArguments.params)
285
+ score = addScore(score, calculateStructuralComplexity(param, nextDepth) + 2);
286
+ }
217
287
  break;
218
288
  }
219
289
  // Conditional types
220
290
  case "TSConditionalType": {
221
- const conditional = node;
222
291
  score = 3;
223
- score += calculateStructuralComplexity(conditional.checkType, depth + 1);
224
- score += calculateStructuralComplexity(conditional.extendsType, depth + 1);
225
- score += calculateStructuralComplexity(conditional.trueType, depth + 1);
226
- score += calculateStructuralComplexity(conditional.falseType, depth + 1);
292
+ score = addScore(score, calculateStructuralComplexity(node.checkType, nextDepth));
293
+ score = addScore(score, calculateStructuralComplexity(node.extendsType, nextDepth));
294
+ score = addScore(score, calculateStructuralComplexity(node.trueType, nextDepth));
295
+ score = addScore(score, calculateStructuralComplexity(node.falseType, nextDepth));
227
296
  break;
228
297
  }
229
298
  // Mapped types
230
299
  case "TSMappedType": {
231
- const mapped = node;
232
300
  score = 5;
233
- if (mapped.typeParameter?.constraint)
234
- score += calculateStructuralComplexity(mapped.typeParameter.constraint, depth + 1);
235
- if (mapped.typeAnnotation)
236
- score += calculateStructuralComplexity(mapped.typeAnnotation, depth + 1);
301
+ if (node.constraint)
302
+ score = addScore(score, calculateStructuralComplexity(node.constraint, nextDepth));
303
+ if (node.typeAnnotation)
304
+ score = addScore(score, calculateStructuralComplexity(node.typeAnnotation, nextDepth));
237
305
  break;
238
306
  }
239
307
  // Function types
@@ -241,24 +309,47 @@ const enforceIanitorCheckType = {
241
309
  case "TSMethodSignature": {
242
310
  const func = node;
243
311
  score = 2;
244
- for (const param of func.params)
245
- if ("typeAnnotation" in param && param.typeAnnotation)
246
- score += calculateStructuralComplexity(param.typeAnnotation.typeAnnotation, depth + 1);
312
+ for (const param of func.params) {
313
+ const typeAnnotation = "typeAnnotation" in param ? param.typeAnnotation : undefined;
314
+ if (typeAnnotation)
315
+ score = addScore(score, calculateStructuralComplexity(typeAnnotation.typeAnnotation, nextDepth));
316
+ }
247
317
  if (func.returnType)
248
- score += calculateStructuralComplexity(func.returnType.typeAnnotation, depth + 1);
318
+ score = addScore(score, calculateStructuralComplexity(func.returnType.typeAnnotation, nextDepth));
249
319
  break;
250
320
  }
251
321
  default:
252
322
  score = 1;
253
323
  }
254
324
  // Apply depth multiplier (logarithmic to prevent explosion)
255
- score *= Math.log2(depth + 1);
325
+ score *= getDepthMultiplier(depth);
256
326
  // Cache and return
257
327
  cache.nodeCache.set(node, score);
258
328
  cache.visitedNodes.delete(node);
259
329
  return score;
260
330
  }
331
+ // Track which VariableDeclarator nodes need checking after type aliases are collected
332
+ const variableDeclaratorsToCheck = new Map();
261
333
  return {
334
+ // Handle type alias declarations
335
+ TSTypeAliasDeclaration(node) {
336
+ // First, check if this uses Ianitor.Static pattern and collect the variable name
337
+ const varName = extractIanitorStaticVariable(node.typeAnnotation);
338
+ if (varName)
339
+ ianitorStaticVariables.add(varName);
340
+ // Skip complexity check if the type uses Ianitor.Static<typeof ...> pattern
341
+ if (hasIanitorStaticType(node.typeAnnotation))
342
+ return;
343
+ // Check complexity of the type alias
344
+ const complexity = calculateStructuralComplexity(node.typeAnnotation);
345
+ if (complexity < config.baseThreshold)
346
+ return;
347
+ context.report({
348
+ data: { score: complexity.toFixed(1) },
349
+ messageId: "missingIanitorCheckType",
350
+ node,
351
+ });
352
+ },
262
353
  // Check interface declarations
263
354
  TSInterfaceDeclaration(node) {
264
355
  const complexity = calculateStructuralComplexity(node);
@@ -271,18 +362,7 @@ const enforceIanitorCheckType = {
271
362
  });
272
363
  }
273
364
  },
274
- // Check type alias declarations
275
- TSTypeAliasDeclaration(node) {
276
- const complexity = calculateStructuralComplexity(node.typeAnnotation);
277
- if (complexity < config.baseThreshold)
278
- return;
279
- context.report({
280
- data: { score: complexity.toFixed(1) },
281
- messageId: "missingIanitorCheckType",
282
- node,
283
- });
284
- },
285
- // Check variable declarations with Ianitor validators
365
+ // Collect variable declarators that might need checking
286
366
  VariableDeclarator(node) {
287
367
  if (!node.init || node.init.type !== "CallExpression")
288
368
  return;
@@ -293,11 +373,22 @@ const enforceIanitorCheckType = {
293
373
  const complexity = calculateIanitorComplexity(node.init);
294
374
  if (complexity < config.baseThreshold)
295
375
  return;
296
- context.report({
297
- data: { score: complexity.toFixed(1) },
298
- messageId: "missingIanitorCheckType",
299
- node,
300
- });
376
+ // Store for later checking in Program:exit
377
+ variableDeclaratorsToCheck.set(node, { complexity });
378
+ },
379
+ // After all nodes are visited, check the collected variable declarators
380
+ "Program:exit"() {
381
+ for (const [nodeKey, data] of variableDeclaratorsToCheck.entries()) {
382
+ const node = nodeKey;
383
+ // Skip if this variable is used in an Ianitor.Static<typeof ...> pattern
384
+ if (node.id.type === "Identifier" && ianitorStaticVariables.has(node.id.name))
385
+ continue;
386
+ context.report({
387
+ data: { score: data.complexity.toFixed(1) },
388
+ messageId: "missingIanitorCheckType",
389
+ node,
390
+ });
391
+ }
301
392
  },
302
393
  };
303
394
  },
@@ -1 +1 @@
1
- {"version":3,"file":"enforce-ianitor-check-type.js","sourceRoot":"","sources":["../../src/rules/enforce-ianitor-check-type.ts"],"names":[],"mappings":"AAsBA;;GAEG;AACH,MAAM,cAAc,GAAqB;IACxC,aAAa,EAAE,EAAE;IACjB,cAAc,EAAE,EAAE;IAClB,gBAAgB,EAAE,EAAE;IACpB,eAAe,EAAE,IAAI;IACrB,aAAa,EAAE,EAAE;CACjB,CAAC;AAEF;;;;;GAKG;AACH,SAAS,iBAAiB,CAAC,IAAa;IACvC,MAAM,OAAO,GAAG,IAA4D,CAAC;IAC7E,IAAI,OAAO,CAAC,IAAI,KAAK,oBAAoB,EAAE,CAAC;QAC3C,MAAM,EAAE,GAAG,OAAO,CAAC,EAA8C,CAAC;QAClE,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,gBAAgB,IAAI,EAAE,IAAI,EAAE,CAAC,cAAc,CAAC,CAAC;IAC9D,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,KAAK,qBAAqB,IAAI,OAAO,CAAC,IAAI,KAAK,oBAAoB;QAAE,OAAO,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;IACjH,OAAO,KAAK,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,SAAS,WAAW,CAAC,IAAmB;IACvC,IAAI,IAAI,CAAC,IAAI,KAAK,wBAAwB;QAAE,OAAO,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;IAChE,IAAI,IAAI,CAAC,IAAI,KAAK,wBAAwB;QAAE,OAAO,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;IAChE,OAAO,IAAI,CAAC;AACb,CAAC;AAED;;;;;GAKG;AACH,SAAS,kBAAkB,CAAC,IAG3B;IACA,IAAI,IAAI,CAAC,IAAI,KAAK,gBAAgB;QAAE,OAAO,KAAK,CAAC;IACjD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAE3B,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;QAClD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC7B,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;IACtF,CAAC;IAED,OAAO,KAAK,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,SAAS,0BAA0B,CAAC,IAAa;IAChD,MAAM,QAAQ,GAAG,IAOhB,CAAC;IAEF,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;IAC/B,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,IAAI,MAAM,EAAE,IAAI,KAAK,kBAAkB,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QACrG,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QAEpC,QAAQ,MAAM,EAAE,CAAC;YAChB,KAAK,WAAW,CAAC;YACjB,KAAK,iBAAiB,CAAC,CAAC,CAAC;gBACxB,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAA8C,CAAC;gBACnF,mEAAmE;gBACnE,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB;oBAAE,KAAK,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBACjG,MAAM;YACP,CAAC;YAED,KAAK,UAAU,CAAC;YAChB,KAAK,OAAO;gBACX,KAAK,GAAG,CAAC,CAAC;gBACV,MAAM;YAEP,KAAK,QAAQ,CAAC;YACd,KAAK,KAAK;gBACT,KAAK,GAAG,CAAC,CAAC;gBACV,MAAM;YAEP,KAAK,OAAO,CAAC;YACb,KAAK,cAAc;gBAClB,KAAK,GAAG,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC9C,MAAM;YAEP,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ,CAAC;YACd,KAAK,SAAS;gBACb,KAAK,GAAG,CAAC,CAAC;gBACV,MAAM;YAEP,KAAK,aAAa,CAAC;YACnB,KAAK,YAAY;gBAChB,KAAK,GAAG,CAAC,CAAC;gBACV,MAAM;YAEP;gBACC,KAAK,GAAG,CAAC,CAAC;QACZ,CAAC;IACF,CAAC;IAED,OAAO,KAAK,CAAC;AACd,CAAC;AAED,MAAM,uBAAuB,GAAoB;IAChD;;;;;OAKG;IACH,MAAM,CAAC,OAAO;QACb,MAAM,MAAM,GAAqB,EAAE,GAAG,cAAc,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,MAAM,KAAK,GAAoB;YAC9B,SAAS,EAAE,IAAI,OAAO,EAAE;YACxB,YAAY,EAAE,IAAI,OAAO,EAAE;SAC3B,CAAC;QAEF;;;;;;WAMG;QACH,SAAS,6BAA6B,CAAC,IAAmB,EAAE,KAAK,GAAG,CAAC;YACpE,gCAAgC;YAChC,IAAI,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,OAAO,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC;YAEjE,sCAAsC;YACtC,IAAI,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,OAAO,EAAE,CAAC;YAE5C,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAE7B,IAAI,KAAK,GAAG,CAAC,CAAC;YAEd,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;gBACnB,aAAa;gBACb,KAAK,iBAAiB,CAAC;gBACvB,KAAK,iBAAiB,CAAC;gBACvB,KAAK,kBAAkB,CAAC;gBACxB,KAAK,eAAe,CAAC;gBACrB,KAAK,oBAAoB,CAAC;gBAC1B,KAAK,eAAe,CAAC;gBACrB,KAAK,iBAAiB,CAAC;gBACvB,KAAK,iBAAiB;oBACrB,KAAK,GAAG,CAAC,CAAC;oBACV,MAAM;gBAEP,iBAAiB;gBACjB,KAAK,gBAAgB,CAAC;gBACtB,KAAK,kBAAkB,CAAC;gBACxB,KAAK,cAAc;oBAClB,KAAK,GAAG,CAAC,CAAC;oBACV,MAAM;gBAEP,8BAA8B;gBAC9B,KAAK,wBAAwB,CAAC,CAAC,CAAC;oBAC/B,MAAM,KAAK,GAAG,IAAI,CAAC;oBACnB,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC,eAAe;oBAChD,kBAAkB;oBAClB,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;wBAAE,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;oBAEjF,kBAAkB;oBAClB,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;oBACpC,0BAA0B;oBAC1B,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI;wBACnC,IAAI,gBAAgB,IAAI,MAAM,IAAI,MAAM,CAAC,cAAc;4BACtD,KAAK,IAAI,6BAA6B,CAAC,MAAM,CAAC,cAAc,CAAC,cAAc,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;oBAE1F,MAAM;gBACP,CAAC;gBAED,+BAA+B;gBAC/B,KAAK,eAAe,CAAC,CAAC,CAAC;oBACtB,MAAM,OAAO,GAAG,IAAI,CAAC;oBACrB,KAAK,GAAG,CAAC,CAAC;oBACV,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC;oBACtC,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,OAAO;wBACnC,IAAI,gBAAgB,IAAI,MAAM,IAAI,MAAM,CAAC,cAAc;4BACtD,KAAK,IAAI,6BAA6B,CAAC,MAAM,CAAC,cAAc,CAAC,cAAc,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;oBAE1F,MAAM;gBACP,CAAC;gBAED,SAAS;gBACT,KAAK,aAAa,CAAC,CAAC,CAAC;oBACpB,MAAM,KAAK,GAAG,IAAI,CAAC;oBACnB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK;wBAAE,KAAK,IAAI,6BAA6B,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;oBAExF,KAAK,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,iBAAiB;oBACxD,MAAM;gBACP,CAAC;gBAED,gBAAgB;gBAChB,KAAK,oBAAoB,CAAC,CAAC,CAAC;oBAC3B,MAAM,YAAY,GAAG,IAAI,CAAC;oBAC1B,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,KAAK,EAAE,CAAC;wBACvC,KAAK,IAAI,6BAA6B,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;oBACzD,CAAC;oBACD,KAAK,IAAI,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,6BAA6B;oBACrE,MAAM;gBACP,CAAC;gBAED,SAAS;gBACT,KAAK,aAAa,CAAC,CAAC,CAAC;oBACpB,MAAM,KAAK,GAAG,IAAI,CAAC;oBACnB,KAAK,GAAG,6BAA6B,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;oBACxE,MAAM;gBACP,CAAC;gBAED,SAAS;gBACT,KAAK,aAAa,CAAC,CAAC,CAAC;oBACpB,MAAM,KAAK,GAAG,IAAI,CAAC;oBACnB,KAAK,GAAG,CAAC,CAAC;oBACV,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,YAAY;wBACvC,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY,IAAI,OAAO,CAAC,IAAI,KAAK,gBAAgB;4BACrE,KAAK,IAAI,6BAA6B,CAAC,OAAO,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;oBAE7D,KAAK,IAAI,GAAG,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC;oBACzC,MAAM;gBACP,CAAC;gBAED,uCAAuC;gBACvC,KAAK,iBAAiB,CAAC,CAAC,CAAC;oBACxB,MAAM,GAAG,GAAG,IAAI,CAAC;oBACjB,KAAK,GAAG,CAAC,CAAC;oBACV,IAAI,GAAG,CAAC,aAAa;wBACpB,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,aAAa,CAAC,MAAM;4BAC3C,KAAK,IAAI,6BAA6B,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;oBAE/D,MAAM;gBACP,CAAC;gBAED,oBAAoB;gBACpB,KAAK,mBAAmB,CAAC,CAAC,CAAC;oBAC1B,MAAM,WAAW,GAAG,IAAI,CAAC;oBACzB,KAAK,GAAG,CAAC,CAAC;oBACV,KAAK,IAAI,6BAA6B,CAAC,WAAW,CAAC,SAAS,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;oBACzE,KAAK,IAAI,6BAA6B,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;oBAC3E,KAAK,IAAI,6BAA6B,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;oBACxE,KAAK,IAAI,6BAA6B,CAAC,WAAW,CAAC,SAAS,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;oBACzE,MAAM;gBACP,CAAC;gBAED,eAAe;gBACf,KAAK,cAAc,CAAC,CAAC,CAAC;oBACrB,MAAM,MAAM,GAAG,IAAI,CAAC;oBACpB,KAAK,GAAG,CAAC,CAAC;oBACV,IAAI,MAAM,CAAC,aAAa,EAAE,UAAU;wBACnC,KAAK,IAAI,6BAA6B,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;oBAEpF,IAAI,MAAM,CAAC,cAAc;wBAAE,KAAK,IAAI,6BAA6B,CAAC,MAAM,CAAC,cAAc,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;oBAEpG,MAAM;gBACP,CAAC;gBAED,iBAAiB;gBACjB,KAAK,gBAAgB,CAAC;gBACtB,KAAK,mBAAmB,CAAC,CAAC,CAAC;oBAC1B,MAAM,IAAI,GAAG,IAA4D,CAAC;oBAC1E,KAAK,GAAG,CAAC,CAAC;oBACV,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM;wBAC9B,IAAI,gBAAgB,IAAI,KAAK,IAAI,KAAK,CAAC,cAAc;4BACpD,KAAK,IAAI,6BAA6B,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;oBAEzF,IAAI,IAAI,CAAC,UAAU;wBAClB,KAAK,IAAI,6BAA6B,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;oBAEnF,MAAM;gBACP,CAAC;gBAED;oBACC,KAAK,GAAG,CAAC,CAAC;YACZ,CAAC;YAED,4DAA4D;YAC5D,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YAE9B,mBAAmB;YACnB,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACjC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAChC,OAAO,KAAK,CAAC;QACd,CAAC;QAED,OAAO;YACN,+BAA+B;YAC/B,sBAAsB,CAAC,IAAI;gBAC1B,MAAM,UAAU,GAAG,6BAA6B,CAAC,IAAI,CAAC,CAAC;gBACvD,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;gBAE/B,IAAI,UAAU,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;oBAC3C,OAAO,CAAC,MAAM,CAAC;wBACd,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,IAAI,SAAS,EAAE;wBACjC,SAAS,EAAE,4BAA4B;wBACvC,IAAI;qBACJ,CAAC,CAAC;gBACJ,CAAC;YACF,CAAC;YAED,gCAAgC;YAChC,sBAAsB,CAAC,IAAI;gBAC1B,MAAM,UAAU,GAAG,6BAA6B,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBAEtE,IAAI,UAAU,GAAG,MAAM,CAAC,aAAa;oBAAE,OAAO;gBAC9C,OAAO,CAAC,MAAM,CAAC;oBACd,IAAI,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;oBACtC,SAAS,EAAE,yBAAyB;oBACpC,IAAI;iBACJ,CAAC,CAAC;YACJ,CAAC;YAED,sDAAsD;YACtD,kBAAkB,CAAC,IAAI;gBACtB,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,gBAAgB;oBAAE,OAAO;gBAC9D,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;oBAAE,OAAO;gBAC3C,IAAI,iBAAiB,CAAC,IAAI,CAAC;oBAAE,OAAO;gBAEpC,MAAM,UAAU,GAAG,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAEzD,IAAI,UAAU,GAAG,MAAM,CAAC,aAAa;oBAAE,OAAO;gBAC9C,OAAO,CAAC,MAAM,CAAC;oBACd,IAAI,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;oBACtC,SAAS,EAAE,yBAAyB;oBACpC,IAAI;iBACJ,CAAC,CAAC;YACJ,CAAC;SACD,CAAC;IACH,CAAC;IACD,IAAI,EAAE;QACL,IAAI,EAAE;YACL,WAAW,EAAE,uEAAuE;YACpF,WAAW,EAAE,KAAK;SAClB;QACD,OAAO,EAAE,SAAS;QAClB,QAAQ,EAAE;YACT,0BAA0B,EACzB,sGAAsG;YACvG,uBAAuB,EACtB,sFAAsF;SACvF;QACD,MAAM,EAAE;YACP;gBACC,oBAAoB,EAAE,KAAK;gBAC3B,UAAU,EAAE;oBACX,aAAa,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC7C,cAAc,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC9C,gBAAgB,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAChD,eAAe,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;oBACpC,aAAa,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE;iBAC7C;gBACD,IAAI,EAAE,QAAQ;aACd;SACD;QACD,IAAI,EAAE,SAAS;KACf;CACD,CAAC;AAEF,eAAe,uBAAuB,CAAC"}
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,3 +1,28 @@
1
+ function isUnknownRecord(value) {
2
+ return typeof value === "object" && value !== null;
3
+ }
4
+ function isNumericLiteralNode(value) {
5
+ return (isUnknownRecord(value) &&
6
+ value.type === "Literal" &&
7
+ "value" in value &&
8
+ typeof value.value === "number");
9
+ }
10
+ function mapComponentToRgbRange(value) {
11
+ return Math.round(value > 1 ? value : value * 255);
12
+ }
13
+ function collectNumericComponents(parameters) {
14
+ const components = [];
15
+ let allZero = true;
16
+ for (const parameter of parameters) {
17
+ if (!isNumericLiteralNode(parameter))
18
+ return undefined;
19
+ const mapped = mapComponentToRgbRange(parameter.value);
20
+ components.push(mapped);
21
+ if (mapped !== 0)
22
+ allZero = false;
23
+ }
24
+ return { allZero, components };
25
+ }
1
26
  /**
2
27
  * Bans use of `new Color3(...)` except for `new Color3()` or `new Color3(0, 0, 0)`.
3
28
  *
@@ -27,27 +52,32 @@ const noColor3Constructor = {
27
52
  NewExpression(node) {
28
53
  if (node.callee.type !== "Identifier" || node.callee.name !== "Color3")
29
54
  return;
30
- const args = node.arguments;
31
- // No arguments is allowed: new Color3()
32
- if (args.length === 0)
55
+ const parameters = node.arguments;
56
+ if (parameters.length === 0)
33
57
  return;
34
- // 1 or 2 arguments - always flag
35
- if (args.length === 1 || args.length === 2) {
58
+ const collected = collectNumericComponents(parameters);
59
+ if (!collected) {
36
60
  context.report({
61
+ messageId: parameters.length < 3 ? "useFromRGB" : "onlyZeroArgs",
62
+ node,
63
+ });
64
+ return;
65
+ }
66
+ if (parameters.length < 3) {
67
+ const [red, green = 0] = collected.components;
68
+ context.report({
69
+ fix: (fixer) => fixer.replaceText(node, `Color3.fromRGB(${red}, ${green}, 0)`),
37
70
  messageId: "useFromRGB",
38
71
  node,
39
72
  });
40
73
  return;
41
74
  }
42
- // 3 arguments - only allow if all are literal 0
43
- if (args.length === 3) {
44
- const allZero = args.every((arg) => arg.type === "Literal" && arg.value === 0);
45
- if (!allZero) {
46
- context.report({
47
- messageId: "onlyZeroArgs",
48
- node,
49
- });
50
- }
75
+ if (!collected.allZero) {
76
+ context.report({
77
+ fix: (fixer) => fixer.replaceText(node, `Color3.fromRGB(${collected.components.join(", ")})`),
78
+ messageId: "onlyZeroArgs",
79
+ node,
80
+ });
51
81
  }
52
82
  },
53
83
  };
@@ -55,8 +85,9 @@ const noColor3Constructor = {
55
85
  meta: {
56
86
  docs: {
57
87
  description: "Ban new Color3(...) except new Color3() or new Color3(0, 0, 0). Use Color3.fromRGB() instead.",
58
- recommended: false,
88
+ recommended: true,
59
89
  },
90
+ fixable: "code",
60
91
  messages: {
61
92
  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.",
62
93
  useFromRGB: "Use Color3.fromRGB() instead of new Color3(). new Color3() uses floats [0-1] and performs worse than Color3.fromRGB() which uses [0-255].",
@@ -1 +1 @@
1
- {"version":3,"file":"no-color3-constructor.js","sourceRoot":"","sources":["../../src/rules/no-color3-constructor.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,mBAAmB,GAAoB;IAC5C;;;;;OAKG;IACH,MAAM,CAAC,OAAO;QACb,OAAO;YACN,aAAa,CAAC,IAAI;gBACjB,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ;oBAAE,OAAO;gBAE/E,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;gBAE5B,wCAAwC;gBACxC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO;gBAE9B,iCAAiC;gBACjC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC5C,OAAO,CAAC,MAAM,CAAC;wBACd,SAAS,EAAE,YAAY;wBACvB,IAAI;qBACJ,CAAC,CAAC;oBACH,OAAO;gBACR,CAAC;gBAED,gDAAgD;gBAChD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACvB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;oBAE/E,IAAI,CAAC,OAAO,EAAE,CAAC;wBACd,OAAO,CAAC,MAAM,CAAC;4BACd,SAAS,EAAE,cAAc;4BACzB,IAAI;yBACJ,CAAC,CAAC;oBACJ,CAAC;gBACF,CAAC;YACF,CAAC;SACD,CAAC;IACH,CAAC;IACD,IAAI,EAAE;QACL,IAAI,EAAE;YACL,WAAW,EACV,+FAA+F;YAChG,WAAW,EAAE,KAAK;SAClB;QACD,QAAQ,EAAE;YACT,YAAY,EACX,qMAAqM;YACtM,UAAU,EACT,2IAA2I;SAC5I;QACD,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,SAAS;KACf;CACD,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
1
+ {"version":3,"file":"no-color3-constructor.js","sourceRoot":"","sources":["../../src/rules/no-color3-constructor.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ import type { Rule } from "eslint";
2
2
  /**
3
3
  * Bans use of `print()` function calls. Use `Log` instead.
4
4
  *
5
- * The `print()` function is deprecated or discouraged in favor of a proper
5
+ * The `print()` function is not wanted in this codebase and discouraged in favor of a proper
6
6
  * logging system like `Log`.
7
7
  *
8
8
  * @example
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Bans use of `print()` function calls. Use `Log` instead.
3
3
  *
4
- * The `print()` function is deprecated or discouraged in favor of a proper
4
+ * The `print()` function is not wanted in this codebase and discouraged in favor of a proper
5
5
  * logging system like `Log`.
6
6
  *
7
7
  * @example
@@ -22,9 +22,7 @@ const noPrint = {
22
22
  */
23
23
  create(context) {
24
24
  return {
25
- CallExpression(node) {
26
- if (node.callee.type !== "Identifier" || node.callee.name !== "print")
27
- return;
25
+ 'CallExpression[callee.type="Identifier"][callee.name="print"]'(node) {
28
26
  context.report({
29
27
  messageId: "useLog",
30
28
  node,
@@ -1 +1 @@
1
- {"version":3,"file":"no-print.js","sourceRoot":"","sources":["../../src/rules/no-print.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,GAAoB;IAChC;;;;;OAKG;IACH,MAAM,CAAC,OAAO;QACb,OAAO;YACN,cAAc,CAAC,IAAI;gBAClB,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO;oBAAE,OAAO;gBAE9E,OAAO,CAAC,MAAM,CAAC;oBACd,SAAS,EAAE,QAAQ;oBACnB,IAAI;iBACJ,CAAC,CAAC;YACJ,CAAC;SACD,CAAC;IACH,CAAC;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"}
1
+ {"version":3,"file":"no-print.js","sourceRoot":"","sources":["../../src/rules/no-print.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,GAAoB;IAChC;;;;;OAKG;IACH,MAAM,CAAC,OAAO;QACb,OAAO;YACN,+DAA+D,CAAC,IAAe;gBAC9E,OAAO,CAAC,MAAM,CAAC;oBACd,SAAS,EAAE,QAAQ;oBACnB,IAAI;iBACJ,CAAC,CAAC;YACJ,CAAC;SACD,CAAC;IACH,CAAC;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"}
@@ -1,43 +1,60 @@
1
- const SHORTHANDS = [
2
- { messageId: "useParameters", replacement: "parameters", shorthand: "args" },
3
- { messageId: "useDeltaTime", replacement: "deltaTime", shorthand: "dt" },
4
- { messageId: "useCharacter", replacement: "character", shorthand: "char" },
5
- ];
6
1
  /**
7
- * Checks if a node is Players.LocalPlayer member expression.
2
+ * Default configuration values for the rule.
3
+ */
4
+ const DEFAULT_OPTIONS = {
5
+ allowPropertyAccess: ["char"],
6
+ shorthands: {
7
+ args: "parameters",
8
+ char: "character",
9
+ dt: "deltaTime",
10
+ plr: "player",
11
+ },
12
+ };
13
+ function isUnknownRecord(value) {
14
+ return typeof value === "object" && value !== null;
15
+ }
16
+ function isStringRecord(value) {
17
+ return isUnknownRecord(value) && Object.values(value).every((v) => typeof v === "string");
18
+ }
19
+ function isStringArray(value) {
20
+ return Array.isArray(value) && value.every((entry) => typeof entry === "string");
21
+ }
22
+ /**
23
+ * Escapes special regex characters in a string.
8
24
  *
9
- * @param node - The node to check.
10
- * @returns True if node is Players.LocalPlayer.
25
+ * @param str - The string to escape.
26
+ * @returns The escaped string safe for use in regex.
11
27
  */
12
- function isPlayersLocalPlayer(node) {
13
- if (!node || typeof node !== "object")
14
- return false;
15
- const n = node;
16
- if (n.type !== "MemberExpression")
17
- return false;
18
- const obj = n.object;
19
- const prop = n.property;
20
- if (!obj || typeof obj !== "object" || !prop || typeof prop !== "object")
21
- return false;
22
- const objNode = obj;
23
- const propNode = prop;
24
- return (objNode.type === "Identifier" &&
25
- objNode.name === "Players" &&
26
- propNode.type === "Identifier" &&
27
- propNode.name === "LocalPlayer");
28
+ function escapeRegex(str) {
29
+ return str.replaceAll(/[.*+?^${}()|[\]\\]/g, "\\$&");
28
30
  }
29
31
  /**
30
- * Checks if an identifier is used as a property access.
32
+ * Type guard to check if an unknown value is valid RuleOptions.
31
33
  *
32
- * @param node - The identifier node to check.
33
- * @returns True if the identifier is a property in a member expression.
34
+ * @param value - The value to check.
35
+ * @returns True if the value is valid RuleOptions.
34
36
  */
35
- function isPropertyAccess(node) {
36
- const parent = node.parent;
37
- if (!parent || typeof parent !== "object")
37
+ function isRuleOptions(value) {
38
+ if (!isUnknownRecord(value))
38
39
  return false;
39
- const p = parent;
40
- return p.type === "MemberExpression" && p.property === node;
40
+ return ((!("shorthands" in value) || isStringRecord(value.shorthands)) &&
41
+ (!("allowPropertyAccess" in value) || isStringArray(value.allowPropertyAccess)));
42
+ }
43
+ function normalizeOptions(rawOptions) {
44
+ const mergedShorthands = { ...DEFAULT_OPTIONS.shorthands };
45
+ if (rawOptions?.shorthands)
46
+ for (const [key, value] of Object.entries(rawOptions.shorthands))
47
+ mergedShorthands[key] = value;
48
+ const shorthandsMap = new Map(Object.entries(mergedShorthands));
49
+ const allowPropertyAccessSource = rawOptions?.allowPropertyAccess ?? DEFAULT_OPTIONS.allowPropertyAccess;
50
+ // Build regex selector to only visit identifiers matching shorthand names
51
+ const escapedKeys = Array.from(shorthandsMap.keys()).map((key) => escapeRegex(key));
52
+ const selector = `Identifier[name=/^(${escapedKeys.join("|")})$/]`;
53
+ return {
54
+ allowPropertyAccess: new Set(allowPropertyAccessSource),
55
+ selector,
56
+ shorthands: shorthandsMap,
57
+ };
41
58
  }
42
59
  /**
43
60
  * Bans shorthand variable names in favor of descriptive full names.
@@ -71,61 +88,81 @@ const noShorthandNames = {
71
88
  * @returns The visitor object with AST node handlers.
72
89
  */
73
90
  create(context) {
91
+ const validatedOptions = isRuleOptions(context.options[0]) ? context.options[0] : undefined;
92
+ const normalized = normalizeOptions(validatedOptions);
93
+ const { shorthands, allowPropertyAccess, selector } = normalized;
74
94
  return {
75
- Identifier(node) {
76
- const name = node.name;
77
- // Special case: plr
78
- if (name === "plr") {
79
- // Skip if it's a property access
80
- if (isPropertyAccess(node))
81
- return;
82
- // Check if this is a variable declarator with Players.LocalPlayer
83
- const parent = node.parent;
84
- if (parent?.type === "VariableDeclarator" &&
85
- parent.id === node &&
86
- isPlayersLocalPlayer(parent.init)) {
87
- context.report({
88
- messageId: "useLocalPlayer",
89
- node,
90
- });
91
- return;
92
- }
93
- // Default case: use player
94
- context.report({
95
- messageId: "usePlayer",
96
- node,
97
- });
95
+ [selector](node) {
96
+ const shorthandName = node.name;
97
+ const replacement = shorthands.get(shorthandName);
98
+ if (!replacement)
99
+ return;
100
+ // Cache parent lookup
101
+ const parent = node.parent;
102
+ // Inline property access check
103
+ if (allowPropertyAccess.has(shorthandName) &&
104
+ parent &&
105
+ isUnknownRecord(parent) &&
106
+ parent.type === "MemberExpression" &&
107
+ parent.property === node) {
98
108
  return;
99
109
  }
100
- // Check other shorthands
101
- for (const { messageId, shorthand } of SHORTHANDS) {
102
- if (name === shorthand) {
103
- // Special case: char - skip property access
104
- if (shorthand === "char" && isPropertyAccess(node))
105
- continue;
110
+ // Special case: plr → localPlayer for Players.LocalPlayer
111
+ if (shorthandName === "plr" && parent?.type === "VariableDeclarator" && parent.id === node) {
112
+ const init = parent.init;
113
+ if (init &&
114
+ isUnknownRecord(init) &&
115
+ init.type === "MemberExpression" &&
116
+ init.object &&
117
+ isUnknownRecord(init.object) &&
118
+ init.object.type === "Identifier" &&
119
+ init.object.name === "Players" &&
120
+ init.property &&
121
+ isUnknownRecord(init.property) &&
122
+ init.property.type === "Identifier" &&
123
+ init.property.name === "LocalPlayer") {
106
124
  context.report({
107
- messageId,
125
+ data: { replacement: "localPlayer", shorthand: shorthandName },
126
+ messageId: "useReplacement",
108
127
  node,
109
128
  });
110
129
  return;
111
130
  }
112
131
  }
132
+ context.report({
133
+ data: { replacement, shorthand: shorthandName },
134
+ messageId: "useReplacement",
135
+ node,
136
+ });
113
137
  },
114
138
  };
115
139
  },
116
140
  meta: {
117
141
  docs: {
118
142
  description: "Ban shorthand variable names. Use descriptive full names instead.",
119
- recommended: false,
143
+ recommended: true,
120
144
  },
121
145
  messages: {
122
- useCharacter: "Use 'character' instead of 'char' shorthand",
123
- useDeltaTime: "Use 'deltaTime' instead of 'dt' shorthand",
124
- useLocalPlayer: "Use 'localPlayer' instead of 'plr' when assigning Players.LocalPlayer",
125
- useParameters: "Use 'parameters' instead of 'args' shorthand",
126
- usePlayer: "Use 'player' instead of 'plr' shorthand",
146
+ useReplacement: "Use '{{replacement}}' instead of '{{shorthand}}' shorthand",
127
147
  },
128
- schema: [],
148
+ schema: [
149
+ {
150
+ additionalProperties: false,
151
+ properties: {
152
+ allowPropertyAccess: {
153
+ description: "Shorthand names that are allowed as property access",
154
+ items: { type: "string" },
155
+ type: "array",
156
+ },
157
+ shorthands: {
158
+ description: "Map of shorthand names to their full replacements",
159
+ type: "object",
160
+ additionalProperties: { type: "string" },
161
+ },
162
+ },
163
+ type: "object",
164
+ },
165
+ ],
129
166
  type: "suggestion",
130
167
  },
131
168
  };
@@ -1 +1 @@
1
- {"version":3,"file":"no-shorthand-names.js","sourceRoot":"","sources":["../../src/rules/no-shorthand-names.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"no-shorthand-names.js","sourceRoot":"","sources":["../../src/rules/no-shorthand-names.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ import type { Rule } from "eslint";
2
2
  /**
3
3
  * Bans use of `warn()` function calls. Use `Log` instead.
4
4
  *
5
- * The `warn()` function is deprecated or discouraged in favor of a proper
5
+ * The `warn()` function is not wanted in this codebase and discouraged in favor of a proper
6
6
  * logging system like `Log`.
7
7
  *
8
8
  * @example
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Bans use of `warn()` function calls. Use `Log` instead.
3
3
  *
4
- * The `warn()` function is deprecated or discouraged in favor of a proper
4
+ * The `warn()` function is not wanted in this codebase and discouraged in favor of a proper
5
5
  * logging system like `Log`.
6
6
  *
7
7
  * @example
@@ -22,9 +22,7 @@ const noWarn = {
22
22
  */
23
23
  create(context) {
24
24
  return {
25
- CallExpression(node) {
26
- if (node.callee.type !== "Identifier" || node.callee.name !== "warn")
27
- return;
25
+ 'CallExpression[callee.type="Identifier"][callee.name="warn"]'(node) {
28
26
  context.report({
29
27
  messageId: "useLog",
30
28
  node,
@@ -1 +1 @@
1
- {"version":3,"file":"no-warn.js","sourceRoot":"","sources":["../../src/rules/no-warn.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,GAAoB;IAC/B;;;;;OAKG;IACH,MAAM,CAAC,OAAO;QACb,OAAO;YACN,cAAc,CAAC,IAAI;gBAClB,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM;oBAAE,OAAO;gBAE7E,OAAO,CAAC,MAAM,CAAC;oBACd,SAAS,EAAE,QAAQ;oBACnB,IAAI;iBACJ,CAAC,CAAC;YACJ,CAAC;SACD,CAAC;IACH,CAAC;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
+ {"version":3,"file":"no-warn.js","sourceRoot":"","sources":["../../src/rules/no-warn.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,GAAoB;IAC/B;;;;;OAKG;IACH,MAAM,CAAC,OAAO;QACb,OAAO;YACN,8DAA8D,CAAC,IAAe;gBAC7E,OAAO,CAAC,MAAM,CAAC;oBACd,SAAS,EAAE,QAAQ;oBACnB,IAAI;iBACJ,CAAC,CAAC;YACJ,CAAC;SACD,CAAC;IACH,CAAC;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,3 +1,10 @@
1
+ /**
2
+ * Default configuration values for the rule.
3
+ */
4
+ const DEFAULT_OPTIONS = {
5
+ allowRootKeys: false,
6
+ ignoreCallExpressions: ["ReactTree.mount"],
7
+ };
1
8
  /**
2
9
  * Checks if a JSX element has a key attribute.
3
10
  *
@@ -5,7 +12,11 @@
5
12
  * @returns True if the element has a key attribute.
6
13
  */
7
14
  function hasKeyAttribute(node) {
8
- return node.openingElement.attributes.some((attr) => attr.type === "JSXAttribute" && attr.name.name === "key");
15
+ for (const attr of node.openingElement.attributes) {
16
+ if (attr.type === "JSXAttribute" && attr.name.name === "key")
17
+ return true;
18
+ }
19
+ return false;
9
20
  }
10
21
  /**
11
22
  * Checks if a JSX element is a top-level return from a component.
@@ -14,19 +25,65 @@ function hasKeyAttribute(node) {
14
25
  * @returns True if the element is directly returned from a component.
15
26
  */
16
27
  function isTopLevelReturn(node) {
17
- // Check if this element is a direct child of a return statement
18
28
  let parent = node.parent;
19
29
  if (!parent)
20
30
  return false;
21
31
  // Handle return with parentheses: return (<div>...)
22
32
  if (parent.type === "JSXExpressionContainer")
23
33
  parent = parent.parent;
34
+ if (!parent)
35
+ return false;
24
36
  // Handle direct return
25
- if (parent?.type === "ReturnStatement")
37
+ if (parent.type === "ReturnStatement")
26
38
  return true;
27
39
  // Handle arrow function direct return: () => <div>
28
- if (parent?.type === "ArrowFunctionExpression")
29
- return true;
40
+ return parent.type === "ArrowFunctionExpression" && parent.parent?.type !== "CallExpression";
41
+ }
42
+ /**
43
+ * Checks if a JSX element is an argument to an ignored call expression.
44
+ *
45
+ * @param node - The JSX element or fragment to check.
46
+ * @param ignoreList - List of function names to ignore.
47
+ * @returns True if the element is passed to an ignored function.
48
+ */
49
+ function isIgnoredCallExpression(node, ignoreList) {
50
+ let parent = node.parent;
51
+ if (!parent)
52
+ return false;
53
+ // Handle JSXExpressionContainer wrapper
54
+ if (parent.type === "JSXExpressionContainer") {
55
+ parent = parent.parent;
56
+ if (!parent)
57
+ return false;
58
+ }
59
+ // Traverse up to find CallExpression
60
+ const maxDepth = 10;
61
+ for (let depth = 0; depth < maxDepth && parent; depth++) {
62
+ const { type } = parent;
63
+ // Found CallExpression - check if it's in the ignore list
64
+ if (type === "CallExpression") {
65
+ const { callee } = parent;
66
+ // Simple identifier: mount(...)
67
+ if (callee.type === "Identifier")
68
+ return ignoreList.includes(callee.name);
69
+ // Member expression: ReactTree.mount(...)
70
+ if (callee.type === "MemberExpression" &&
71
+ callee.object.type === "Identifier" &&
72
+ callee.property.type === "Identifier") {
73
+ return ignoreList.includes(`${callee.object.name}.${callee.property.name}`);
74
+ }
75
+ return false;
76
+ }
77
+ // Stop at JSX or function boundaries
78
+ if (type === "JSXElement" ||
79
+ type === "JSXFragment" ||
80
+ type === "FunctionDeclaration" ||
81
+ type === "FunctionExpression" ||
82
+ type === "ArrowFunctionExpression") {
83
+ return false;
84
+ }
85
+ parent = parent.parent;
86
+ }
30
87
  return false;
31
88
  }
32
89
  const requireReactComponentKeys = {
@@ -37,15 +94,29 @@ const requireReactComponentKeys = {
37
94
  * @returns The visitor object with AST node handlers.
38
95
  */
39
96
  create(context) {
40
- const returnStack = new Array();
97
+ const options = {
98
+ ...DEFAULT_OPTIONS,
99
+ ...context.options[0],
100
+ };
41
101
  /**
42
102
  * Checks a JSX element or fragment for required key prop.
43
103
  *
44
104
  * @param node - The JSX element or fragment to check.
45
105
  */
46
106
  function checkElement(node) {
47
- // Top-level return doesn't need key
48
- if (isTopLevelReturn(node))
107
+ const isRoot = isTopLevelReturn(node);
108
+ // Check if root component has a key (and it's not allowed)
109
+ if (isRoot) {
110
+ if (!options.allowRootKeys && node.type === "JSXElement" && hasKeyAttribute(node)) {
111
+ context.report({
112
+ messageId: "rootComponentWithKey",
113
+ node,
114
+ });
115
+ }
116
+ return;
117
+ }
118
+ // Skip key requirement for ignored call expressions
119
+ if (isIgnoredCallExpression(node, options.ignoreCallExpressions))
49
120
  return;
50
121
  // Fragments always need keys when not top-level
51
122
  if (node.type === "JSXFragment") {
@@ -56,21 +127,14 @@ const requireReactComponentKeys = {
56
127
  return;
57
128
  }
58
129
  // Check if element has key
59
- if (hasKeyAttribute(node))
60
- return;
61
- context.report({
62
- messageId: "missingKey",
63
- node,
64
- });
130
+ if (!hasKeyAttribute(node)) {
131
+ context.report({
132
+ messageId: "missingKey",
133
+ node,
134
+ });
135
+ }
65
136
  }
66
137
  return {
67
- // Track function/component boundaries for top-level detection
68
- "FunctionDeclaration, FunctionExpression, ArrowFunctionExpression"(node) {
69
- returnStack.push({ depth: returnStack.length, node });
70
- },
71
- "FunctionDeclaration, FunctionExpression, ArrowFunctionExpression:exit"() {
72
- returnStack.pop();
73
- },
74
138
  // Check JSX elements
75
139
  JSXElement(node) {
76
140
  checkElement(node);
@@ -84,13 +148,32 @@ const requireReactComponentKeys = {
84
148
  meta: {
85
149
  docs: {
86
150
  description: "Enforce key props on all React elements except top-level returns",
87
- recommended: false,
151
+ recommended: true,
88
152
  },
89
153
  fixable: undefined,
90
154
  messages: {
91
155
  missingKey: "All React elements except top-level returns require a key prop",
156
+ rootComponentWithKey: "Root component returns should not have key props",
92
157
  },
93
- schema: [],
158
+ schema: [
159
+ {
160
+ additionalProperties: false,
161
+ properties: {
162
+ allowRootKeys: {
163
+ default: false,
164
+ description: "Allow key props on root component returns",
165
+ type: "boolean",
166
+ },
167
+ ignoreCallExpressions: {
168
+ default: ["ReactTree.mount"],
169
+ description: "Function calls where JSX arguments don't need keys",
170
+ items: { type: "string" },
171
+ type: "array",
172
+ },
173
+ },
174
+ type: "object",
175
+ },
176
+ ],
94
177
  type: "problem",
95
178
  },
96
179
  };
@@ -1 +1 @@
1
- {"version":3,"file":"require-react-component-keys.js","sourceRoot":"","sources":["../../src/rules/require-react-component-keys.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,SAAS,eAAe,CAAC,IAAyB;IACjD,OAAO,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,cAAc,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;AAChH,CAAC;AAED;;;;;GAKG;AACH,SAAS,gBAAgB,CAAC,IAAgD;IACzE,gEAAgE;IAChE,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IACzB,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAE1B,oDAAoD;IACpD,IAAI,MAAM,CAAC,IAAI,KAAK,wBAAwB;QAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAErE,uBAAuB;IACvB,IAAI,MAAM,EAAE,IAAI,KAAK,iBAAiB;QAAE,OAAO,IAAI,CAAC;IAEpD,mDAAmD;IACnD,IAAI,MAAM,EAAE,IAAI,KAAK,yBAAyB;QAAE,OAAO,IAAI,CAAC;IAE5D,OAAO,KAAK,CAAC;AACd,CAAC;AAED,MAAM,yBAAyB,GAAoB;IAClD;;;;;OAKG;IACH,MAAM,CAAC,OAAO;QACb,MAAM,WAAW,GAAG,IAAI,KAAK,EAA0C,CAAC;QAExE;;;;WAIG;QACH,SAAS,YAAY,CAAC,IAAgD;YACrE,oCAAoC;YACpC,IAAI,gBAAgB,CAAC,IAAI,CAAC;gBAAE,OAAO;YAEnC,gDAAgD;YAChD,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;gBACjC,OAAO,CAAC,MAAM,CAAC;oBACd,SAAS,EAAE,YAAY;oBACvB,IAAI;iBACJ,CAAC,CAAC;gBACH,OAAO;YACR,CAAC;YAED,2BAA2B;YAC3B,IAAI,eAAe,CAAC,IAAI,CAAC;gBAAE,OAAO;YAClC,OAAO,CAAC,MAAM,CAAC;gBACd,SAAS,EAAE,YAAY;gBACvB,IAAI;aACJ,CAAC,CAAC;QACJ,CAAC;QAED,OAAO;YACN,8DAA8D;YAC9D,kEAAkE,CAAC,IAAmB;gBACrF,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YACvD,CAAC;YAED,uEAAuE;gBACtE,WAAW,CAAC,GAAG,EAAE,CAAC;YACnB,CAAC;YAED,qBAAqB;YACrB,UAAU,CAAC,IAAI;gBACd,YAAY,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC;YAED,sBAAsB;YACtB,WAAW,CAAC,IAAI;gBACf,YAAY,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC;SACD,CAAC;IACH,CAAC;IACD,IAAI,EAAE;QACL,IAAI,EAAE;YACL,WAAW,EAAE,kEAAkE;YAC/E,WAAW,EAAE,KAAK;SAClB;QACD,OAAO,EAAE,SAAS;QAClB,QAAQ,EAAE;YACT,UAAU,EAAE,gEAAgE;SAC5E;QACD,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,SAAS;KACf;CACD,CAAC;AAEF,eAAe,yBAAyB,CAAC"}
1
+ {"version":3,"file":"require-react-component-keys.js","sourceRoot":"","sources":["../../src/rules/require-react-component-keys.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -60,5 +60,5 @@
60
60
  "sideEffects": false,
61
61
  "type": "module",
62
62
  "types": "./dist/index.d.ts",
63
- "version": "0.1.0"
63
+ "version": "0.2.0"
64
64
  }