diff --git a/.changeset/fuzzy-bobcats-remember.md b/.changeset/fuzzy-bobcats-remember.md new file mode 100644 index 00000000000..c043f588b7f --- /dev/null +++ b/.changeset/fuzzy-bobcats-remember.md @@ -0,0 +1,5 @@ +--- +"@tanstack/eslint-plugin-query": patch +--- + +Fix `no-unstable-deps` false positives for `useSuspenseQueries` results returned from `combine`. diff --git a/packages/eslint-plugin-query/src/__tests__/no-unstable-deps.test.ts b/packages/eslint-plugin-query/src/__tests__/no-unstable-deps.test.ts index b111fc0ed73..be3419242e5 100644 --- a/packages/eslint-plugin-query/src/__tests__/no-unstable-deps.test.ts +++ b/packages/eslint-plugin-query/src/__tests__/no-unstable-deps.test.ts @@ -63,6 +63,24 @@ const baseTestCases = { } `, }, + { + name: `should pass when useSuspenseQueries with combine is passed to ${reactHookAlias} as dependency`, + code: ` + ${reactHookImport} + import { useSuspenseQueries } from "@tanstack/react-query"; + + function Component() { + const queries = useSuspenseQueries({ + queries: [ + { queryKey: ['test'], queryFn: () => 'test' } + ], + combine: (results) => ({ data: results[0]?.data }) + }); + const callback = ${reactHookInvocation}(() => { queries.data }, [queries]); + return; + } + `, + }, ]) .concat([ { diff --git a/packages/eslint-plugin-query/src/rules/no-unstable-deps/no-unstable-deps.rule.ts b/packages/eslint-plugin-query/src/rules/no-unstable-deps/no-unstable-deps.rule.ts index 32e68464682..25d093f6907 100644 --- a/packages/eslint-plugin-query/src/rules/no-unstable-deps/no-unstable-deps.rule.ts +++ b/packages/eslint-plugin-query/src/rules/no-unstable-deps/no-unstable-deps.rule.ts @@ -112,12 +112,13 @@ export const rule = createRule({ allHookNames.includes(node.init.callee.name) && helpers.isTanstackQueryImport(node.init.callee) ) { - // Special case for useQueries with combine property - it's stable + // Special case for useQueries/useSuspenseQueries with combine property - it's stable if ( - node.init.callee.name === 'useQueries' && + (node.init.callee.name === 'useQueries' || + node.init.callee.name === 'useSuspenseQueries') && hasCombineProperty(node.init) ) { - // Don't track useQueries with combine as unstable + // Don't track useQueries/useSuspenseQueries with combine as unstable return } collectVariableNames(node.id, node.init.callee.name)