@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.
- package/README.md +28 -5
- package/lib/index.js +7 -1
- package/lib/rules/consistent-callback-naming.js +26 -0
- package/lib/rules/dynamic-https-errors.js +5 -26
- package/lib/rules/enforce-assert-safe-object-key.js +29 -0
- package/lib/rules/enforce-boolean-naming-prefixes.d.ts +1 -0
- package/lib/rules/enforce-boolean-naming-prefixes.js +86 -119
- package/lib/rules/enforce-dynamic-imports.d.ts +5 -1
- package/lib/rules/enforce-dynamic-imports.js +90 -19
- package/lib/rules/enforce-memoize-async.js +1 -4
- package/lib/rules/enforce-mui-rounded-icons.js +42 -1
- package/lib/rules/enforce-verb-noun-naming.js +3 -0
- package/lib/rules/global-const-style.js +9 -0
- package/lib/rules/logical-top-to-bottom-grouping.js +80 -2
- package/lib/rules/memo-compare-deeply-complex-props.js +167 -3
- package/lib/rules/memo-nested-react-components.js +143 -8
- package/lib/rules/no-array-length-in-deps.js +74 -3
- package/lib/rules/no-circular-references.js +145 -482
- package/lib/rules/no-compositing-layer-props.js +31 -0
- package/lib/rules/no-entire-object-hook-deps.js +132 -97
- package/lib/rules/no-explicit-return-type.js +6 -0
- package/lib/rules/no-hungarian.js +119 -24
- package/lib/rules/no-margin-properties.js +7 -38
- package/lib/rules/no-unnecessary-verb-suffix.js +79 -0
- package/lib/rules/no-unused-props.js +215 -37
- package/lib/rules/no-useless-fragment.js +10 -2
- package/lib/rules/parallelize-async-operations.js +1 -3
- package/lib/rules/prefer-type-alias-over-typeof-constant.js +73 -11
- package/lib/rules/prefer-use-deep-compare-memo.js +8 -14
- package/lib/rules/react-memoize-literals.js +87 -1
- package/lib/rules/require-memo.js +8 -0
- package/lib/rules/require-migration-script-metadata.d.ts +9 -0
- package/lib/rules/require-migration-script-metadata.js +206 -0
- package/lib/rules/warn-https-error-message-user-friendly.d.ts +1 -0
- package/lib/rules/warn-https-error-message-user-friendly.js +239 -0
- package/lib/utils/ASTHelpers.d.ts +15 -0
- package/lib/utils/ASTHelpers.js +48 -0
- package/package.json +7 -6
- package/release-manifest.json +196 -0
- package/lib/rules/prefer-memoized-props.d.ts +0 -3
- package/lib/rules/prefer-memoized-props.js +0 -445
- package/lib/rules/prefer-nullish-coalescing-override.d.ts +0 -7
- package/lib/rules/prefer-nullish-coalescing-override.js +0 -188
- package/lib/rules/require-usememo-object-literals.d.ts +0 -4
- 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
|