@blumintinc/eslint-plugin-blumint 0.1.15 → 0.1.16
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/docs/rules/require-memo.md +6 -3
- package/lib/index.js +1 -1
- package/lib/rules/require-memo.js +5 -2
- package/package.json +1 -1
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
<!-- end auto-generated rule header -->
|
|
4
4
|
|
|
5
|
-
This rule enforces that React components (that are not pure) to be memoized.
|
|
5
|
+
This rule enforces that React components (that are not pure) to be memoized. If the component name includes "Unmemoized", then this rule is ignored.
|
|
6
6
|
|
|
7
7
|
## Rule Details
|
|
8
8
|
|
|
9
9
|
Examples of **incorrect** code for this rule:
|
|
10
10
|
|
|
11
11
|
```jsx
|
|
12
|
-
const
|
|
12
|
+
const Component = ({foo, bar}) => return (
|
|
13
13
|
<SomeOtherComponent>{foo}{bar}</SomeOtherComponent>
|
|
14
14
|
)
|
|
15
15
|
```
|
|
@@ -17,10 +17,13 @@ const UnmemoizedComponent = ({foo, bar}) => return (
|
|
|
17
17
|
Examples of **correct** code for this rule:
|
|
18
18
|
|
|
19
19
|
```jsx
|
|
20
|
-
const MemoizedComponent = memo(function
|
|
20
|
+
const MemoizedComponent = memo(function BigComponent({foo, bar}) {
|
|
21
21
|
return (
|
|
22
22
|
<SomeOtherComponent>{foo}{bar}</SomeOtherComponent>
|
|
23
23
|
)
|
|
24
24
|
})
|
|
25
|
+
const ComponentUnmemoized = ({foo, bar}) => return (
|
|
26
|
+
<SomeOtherComponent>{foo}{bar}</SomeOtherComponent>
|
|
27
|
+
)
|
|
25
28
|
```
|
|
26
29
|
|
package/lib/index.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.requireMemo = void 0;
|
|
4
4
|
const ASTHelpers_1 = require("../utils/ASTHelpers");
|
|
5
|
+
const isComponentExplicitlyUnmemoized = (componentName) => componentName.toLowerCase().includes('unmemoized');
|
|
5
6
|
function isMemoCallExpression(node) {
|
|
6
7
|
if (node.type !== 'CallExpression')
|
|
7
8
|
return false;
|
|
@@ -46,12 +47,14 @@ function checkFunction(context, node) {
|
|
|
46
47
|
}
|
|
47
48
|
if (ASTHelpers_1.ASTHelpers.returnsJSX(node.body) && ASTHelpers_1.ASTHelpers.hasParameters(node)) {
|
|
48
49
|
if (currentNode.type === 'VariableDeclarator' &&
|
|
49
|
-
currentNode.id.type === 'Identifier'
|
|
50
|
+
currentNode.id.type === 'Identifier' &&
|
|
51
|
+
!isComponentExplicitlyUnmemoized(currentNode.id.name)) {
|
|
50
52
|
context.report({ node, messageId: 'requireMemo' });
|
|
51
53
|
}
|
|
52
54
|
else if (node.type === 'FunctionDeclaration' &&
|
|
53
55
|
currentNode.type === 'Program' &&
|
|
54
|
-
node.id
|
|
56
|
+
node.id &&
|
|
57
|
+
!isComponentExplicitlyUnmemoized(node.id.name)) {
|
|
55
58
|
context.report({ node, messageId: 'requireMemo' });
|
|
56
59
|
}
|
|
57
60
|
}
|