@blumintinc/eslint-plugin-blumint 1.15.0 → 1.16.1

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 (45) hide show
  1. package/README.md +28 -5
  2. package/lib/index.js +7 -1
  3. package/lib/rules/consistent-callback-naming.js +26 -0
  4. package/lib/rules/dynamic-https-errors.js +5 -26
  5. package/lib/rules/enforce-assert-safe-object-key.js +29 -0
  6. package/lib/rules/enforce-boolean-naming-prefixes.d.ts +1 -0
  7. package/lib/rules/enforce-boolean-naming-prefixes.js +86 -119
  8. package/lib/rules/enforce-dynamic-imports.d.ts +5 -1
  9. package/lib/rules/enforce-dynamic-imports.js +90 -19
  10. package/lib/rules/enforce-memoize-async.js +1 -4
  11. package/lib/rules/enforce-mui-rounded-icons.js +42 -1
  12. package/lib/rules/enforce-verb-noun-naming.js +3 -0
  13. package/lib/rules/global-const-style.js +9 -0
  14. package/lib/rules/logical-top-to-bottom-grouping.js +80 -2
  15. package/lib/rules/memo-compare-deeply-complex-props.js +167 -3
  16. package/lib/rules/memo-nested-react-components.js +143 -8
  17. package/lib/rules/no-array-length-in-deps.js +74 -3
  18. package/lib/rules/no-circular-references.js +145 -482
  19. package/lib/rules/no-compositing-layer-props.js +31 -0
  20. package/lib/rules/no-entire-object-hook-deps.js +132 -97
  21. package/lib/rules/no-explicit-return-type.js +6 -0
  22. package/lib/rules/no-hungarian.js +119 -24
  23. package/lib/rules/no-margin-properties.js +7 -38
  24. package/lib/rules/no-unnecessary-verb-suffix.js +79 -0
  25. package/lib/rules/no-unused-props.js +215 -37
  26. package/lib/rules/no-useless-fragment.js +10 -2
  27. package/lib/rules/parallelize-async-operations.js +1 -3
  28. package/lib/rules/prefer-type-alias-over-typeof-constant.js +73 -11
  29. package/lib/rules/prefer-use-deep-compare-memo.js +8 -14
  30. package/lib/rules/react-memoize-literals.js +87 -1
  31. package/lib/rules/require-memo.js +8 -0
  32. package/lib/rules/require-migration-script-metadata.d.ts +9 -0
  33. package/lib/rules/require-migration-script-metadata.js +206 -0
  34. package/lib/rules/warn-https-error-message-user-friendly.d.ts +1 -0
  35. package/lib/rules/warn-https-error-message-user-friendly.js +239 -0
  36. package/lib/utils/ASTHelpers.d.ts +15 -0
  37. package/lib/utils/ASTHelpers.js +48 -0
  38. package/package.json +7 -6
  39. package/release-manifest.json +196 -0
  40. package/lib/rules/prefer-memoized-props.d.ts +0 -3
  41. package/lib/rules/prefer-memoized-props.js +0 -445
  42. package/lib/rules/prefer-nullish-coalescing-override.d.ts +0 -7
  43. package/lib/rules/prefer-nullish-coalescing-override.js +0 -188
  44. package/lib/rules/require-usememo-object-literals.d.ts +0 -4
  45. package/lib/rules/require-usememo-object-literals.js +0 -64
@@ -1,64 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.requireUseMemoObjectLiterals = void 0;
4
- const createRule_1 = require("../utils/createRule");
5
- const ASTHelpers_1 = require("../utils/ASTHelpers");
6
- exports.requireUseMemoObjectLiterals = (0, createRule_1.createRule)({
7
- name: 'require-usememo-object-literals',
8
- meta: {
9
- type: 'suggestion',
10
- docs: {
11
- description: "Enforce using useMemo for inline object/array literals passed as props to JSX components to prevent unnecessary re-renders. When object/array literals are defined inline in JSX, they create new references on every render, causing child components to re-render even if the values haven't changed. Wrap them in useMemo to maintain referential equality.",
12
- recommended: 'error',
13
- },
14
- messages: {
15
- requireUseMemo: 'Inline {{literalType}} literal passed to {{componentName}} prop "{{propName}}" is recreated on every render, producing a new reference that forces child components to re-render even when values stay the same. Wrap the literal in useMemo (or hoist a memoized constant) so the prop reference remains stable between renders.',
16
- },
17
- schema: [],
18
- },
19
- defaultOptions: [],
20
- create(context) {
21
- return {
22
- JSXAttribute(node) {
23
- // Skip if the value is not an expression
24
- if (!node.value || node.value.type !== 'JSXExpressionContainer') {
25
- return;
26
- }
27
- // Skip if the prop name is 'sx' or ends with 'Sx'
28
- const propName = node.name.name;
29
- if (typeof propName === 'string' &&
30
- (propName === 'sx' || propName.endsWith('Sx'))) {
31
- return;
32
- }
33
- const { expression } = node.value;
34
- // Check if the expression is an object or array literal
35
- if ((expression.type === 'ObjectExpression' ||
36
- expression.type === 'ArrayExpression') &&
37
- // Ensure we're in a function component context
38
- ASTHelpers_1.ASTHelpers.getAncestors(context, node).some((ancestor) => ancestor.type === 'FunctionDeclaration' ||
39
- ancestor.type === 'ArrowFunctionExpression' ||
40
- ancestor.type === 'FunctionExpression')) {
41
- // Check if the parent component name starts with an uppercase letter
42
- // to ensure it's a React component
43
- const jsxElement = node.parent;
44
- const elementName = jsxElement.name.type === 'JSXIdentifier'
45
- ? jsxElement.name.name
46
- : '';
47
- if (elementName && /^[A-Z]/.test(elementName)) {
48
- const literalType = expression.type === 'ObjectExpression' ? 'object' : 'array';
49
- context.report({
50
- node: expression,
51
- messageId: 'requireUseMemo',
52
- data: {
53
- literalType,
54
- propName: typeof propName === 'string' ? propName : 'prop',
55
- componentName: elementName,
56
- },
57
- });
58
- }
59
- }
60
- },
61
- };
62
- },
63
- });
64
- //# sourceMappingURL=require-usememo-object-literals.js.map