@agilebot/eslint-plugin 0.5.2 → 0.5.3
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/index.js +41 -5
- package/package.json +2 -2
package/dist/index.js
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license @agilebot/eslint-plugin v0.5.
|
2
|
+
* @license @agilebot/eslint-plugin v0.5.3
|
3
3
|
*
|
4
4
|
* Copyright (c) Agilebot, Inc. and its affiliates.
|
5
5
|
*
|
@@ -792,6 +792,14 @@ var reactBetterExhaustiveDeps = {
|
|
792
792
|
enableDangerousAutofixThisMayCauseInfiniteLoops: {
|
793
793
|
type: 'boolean'
|
794
794
|
},
|
795
|
+
customHooks: {
|
796
|
+
type: 'object',
|
797
|
+
additionalProperties: {
|
798
|
+
callbackIndex: {
|
799
|
+
type: 'number'
|
800
|
+
}
|
801
|
+
}
|
802
|
+
},
|
795
803
|
staticHooks: {
|
796
804
|
type: 'object',
|
797
805
|
additionalProperties: {
|
@@ -819,11 +827,13 @@ var reactBetterExhaustiveDeps = {
|
|
819
827
|
create(context) {
|
820
828
|
const additionalHooks = context.options && context.options[0] && context.options[0].additionalHooks ? new RegExp(context.options[0].additionalHooks) : undefined;
|
821
829
|
const enableDangerousAutofixThisMayCauseInfiniteLoops = context.options && context.options[0] && context.options[0].enableDangerousAutofixThisMayCauseInfiniteLoops || false;
|
830
|
+
const customHooks = context.options && context.options[0] && context.options[0].customHooks || {};
|
822
831
|
const staticHooks = context.options && context.options[0] && context.options[0].staticHooks || {};
|
823
832
|
const checkMemoizedVariableIsStatic = context.options && context.options[0] && context.options[0].checkMemoizedVariableIsStatic || false;
|
824
833
|
const options = {
|
825
834
|
additionalHooks,
|
826
835
|
enableDangerousAutofixThisMayCauseInfiniteLoops,
|
836
|
+
customHooks,
|
827
837
|
staticHooks,
|
828
838
|
checkMemoizedVariableIsStatic
|
829
839
|
};
|
@@ -861,10 +871,20 @@ var reactBetterExhaustiveDeps = {
|
|
861
871
|
}
|
862
872
|
function visitFunctionWithDependencies(node, declaredDependenciesNode, reactiveHook, reactiveHookName, isEffect) {
|
863
873
|
if (isEffect && node.async) {
|
864
|
-
|
865
|
-
|
866
|
-
|
867
|
-
|
874
|
+
let isCustomHook = false;
|
875
|
+
if (options.customHooks) {
|
876
|
+
Object.entries(options.customHooks).forEach(([key, customParts]) => {
|
877
|
+
if (typeof customParts === 'object' && new RegExp(key).test(reactiveHookName)) {
|
878
|
+
isCustomHook = true;
|
879
|
+
}
|
880
|
+
});
|
881
|
+
}
|
882
|
+
if (!isCustomHook) {
|
883
|
+
reportProblem({
|
884
|
+
node: node,
|
885
|
+
message: "Effect callbacks are synchronous to prevent race conditions. " + "Put the async function inside:\n\n" + 'useEffect(() => {\n' + ' async function fetchData() {\n' + ' // You can await here\n' + ' const response = await MyAPI.getData(someId);\n' + ' // ...\n' + ' }\n' + ' fetchData();\n' + "}, [someId]); // Or [] if effect doesn't need props or state\n\n" + 'Learn more about data fetching with Hooks: https://reactjs.org/link/hooks-data-fetching'
|
886
|
+
});
|
887
|
+
}
|
868
888
|
}
|
869
889
|
const scope = scopeManager.acquire(node);
|
870
890
|
const pureScopes = new Set();
|
@@ -1904,6 +1924,22 @@ function getReactiveHookCallbackIndex(calleeNode, options) {
|
|
1904
1924
|
case 'useImperativeHandle':
|
1905
1925
|
return 1;
|
1906
1926
|
default:
|
1927
|
+
if (node === calleeNode && options && options.customHooks) {
|
1928
|
+
let name;
|
1929
|
+
try {
|
1930
|
+
name = analyzePropertyChain(node, null);
|
1931
|
+
} catch (err) {
|
1932
|
+
if (/Unsupported node type/.test(err.message)) {
|
1933
|
+
return 0;
|
1934
|
+
}
|
1935
|
+
throw err;
|
1936
|
+
}
|
1937
|
+
for (const [key, customParts] of Object.entries(options.customHooks)) {
|
1938
|
+
if (typeof customParts === 'object' && typeof customParts.callbackIndex === 'number' && new RegExp(key).test(name)) {
|
1939
|
+
return customParts.callbackIndex;
|
1940
|
+
}
|
1941
|
+
}
|
1942
|
+
}
|
1907
1943
|
if (node === calleeNode && options && options.additionalHooks) {
|
1908
1944
|
let name;
|
1909
1945
|
try {
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@agilebot/eslint-plugin",
|
3
|
-
"version": "0.5.
|
3
|
+
"version": "0.5.3",
|
4
4
|
"description": "Agilebot's ESLint plugin",
|
5
5
|
"main": "dist/index.js",
|
6
6
|
"types": "dist/index.d.ts",
|
@@ -23,7 +23,7 @@
|
|
23
23
|
"eslint-plugin-deprecation": "^3.0.0",
|
24
24
|
"eslint-plugin-react": "^7.35.0",
|
25
25
|
"eslint-plugin-react-hooks": "^4.6.2",
|
26
|
-
"@agilebot/eslint-utils": "0.5.
|
26
|
+
"@agilebot/eslint-utils": "0.5.3"
|
27
27
|
},
|
28
28
|
"peerDependencies": {
|
29
29
|
"eslint": "^7.0.0 || ^8.0.0 || ^9.0.0"
|