From 3a0c314a4eb58ec65c2c59a0a1b67b3ede5204fe Mon Sep 17 00:00:00 2001 From: Reaper Gelera Date: Sat, 13 Apr 2024 18:46:44 +0530 Subject: [PATCH 1/3] fix: simplify check for supported hooks --- src/lib/utils.js | 15 +++++++-------- tests/StateSnapshot.test.js | 14 ++++++++++++++ 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/lib/utils.js b/src/lib/utils.js index 1908df0..2fe71bf 100644 --- a/src/lib/utils.js +++ b/src/lib/utils.js @@ -167,17 +167,16 @@ export function isInReactHooks(node, returnHook = false) { return hookDef ? true : false } -function isReactPrimitive(node) { - if ( - node.type === 'Identifier' && - (node.name === 'useEffect' || node.name === 'useCallback') - ) { - return true +function isInSupportedReactPrimitives(node) { + const supportedPrimitives = ['useEffect', 'useCallback', 'useMemo'] + + if (node.type === 'Identifier') { + return supportedPrimitives.includes(node.name) } if (node.type === 'MemberExpression') { const flatExpr = flattenMemberExpression(node) - return flatExpr.endsWith('useEffect') || flatExpr.endsWith('useCallback') + return supportedPrimitives.some((d) => flatExpr.endsWith(d)) } return false @@ -191,7 +190,7 @@ export function getNearestHook(node) { return false } - if (!isReactPrimitive(parentCaller.callee)) { + if (!isInSupportedReactPrimitives(parentCaller.callee)) { return getNearestHook(parentCaller) } diff --git a/tests/StateSnapshot.test.js b/tests/StateSnapshot.test.js index 5076e65..4409844 100644 --- a/tests/StateSnapshot.test.js +++ b/tests/StateSnapshot.test.js @@ -298,6 +298,20 @@ ruleTester.run('state-snapshot-rule', rule, { ); })`, + ` + function useExample2(s) { + const {b: {c} } = useSnapshot(s.a1); + const val = useMemo(()=>{ + return s.a1.b.c + },[s.a1.b.c]) + }`, + ` + const foo = proxy({ foo: 123 }); + function useExample2(s) { + const val = useMemo(()=>{ + return foo.foo + },[foo.foo]) + }`, ], invalid: [ { From 9eaa9704b35f3807928f17fd28c2532aff20340b Mon Sep 17 00:00:00 2001 From: Reaper Gelera Date: Mon, 27 May 2024 23:23:53 +0530 Subject: [PATCH 2/3] trigger build From 312e571d34739a7a7fe3219dbc8ef93d342669e2 Mon Sep 17 00:00:00 2001 From: Reaper Gelera Date: Mon, 10 Jun 2024 13:32:05 +0530 Subject: [PATCH 3/3] test: add additional cases for memo --- tests/StateSnapshot.test.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tests/StateSnapshot.test.js b/tests/StateSnapshot.test.js index 4409844..b7b8b48 100644 --- a/tests/StateSnapshot.test.js +++ b/tests/StateSnapshot.test.js @@ -306,12 +306,27 @@ ruleTester.run('state-snapshot-rule', rule, { },[s.a1.b.c]) }`, ` + function useExample3(s) { + const {b: {c} } = useSnapshot(s.a1); + const val = useMemo(()=>{ + return c + },[c]) + }`, + ` const foo = proxy({ foo: 123 }); function useExample2(s) { const val = useMemo(()=>{ return foo.foo },[foo.foo]) }`, + ` + const foo = proxy({ foo: 123 }); + function useExample2(s) { + const val = useMemo(()=>{ + return foo.foo + },[foo]) + } + `, ], invalid: [ {