diff --git a/packages/eslint-plugin-query/src/rules/prefer-query-object-syntax/prefer-query-object-syntax.test.ts b/packages/eslint-plugin-query/src/rules/prefer-query-object-syntax/prefer-query-object-syntax.test.ts index d506f9798d..ba28466eb7 100644 --- a/packages/eslint-plugin-query/src/rules/prefer-query-object-syntax/prefer-query-object-syntax.test.ts +++ b/packages/eslint-plugin-query/src/rules/prefer-query-object-syntax/prefer-query-object-syntax.test.ts @@ -40,6 +40,14 @@ ruleTester.run(name, rule, { useQuery(queryKey, queryFn, { enabled }); `, }, + { + code: normalizeIndent` + import { useQuery } from "@tanstack/react-query"; + const getPosts = async () => Promise.resolve([]); + const postsQuery = { queryKey: ["posts"], queryFn: () => getPosts() }; + const usePosts = () => useQuery(postsQuery); + `, + }, ], invalid: [ diff --git a/packages/eslint-plugin-query/src/rules/prefer-query-object-syntax/prefer-query-object-syntax.ts b/packages/eslint-plugin-query/src/rules/prefer-query-object-syntax/prefer-query-object-syntax.ts index 3d4b1d0001..f9ba4556cb 100644 --- a/packages/eslint-plugin-query/src/rules/prefer-query-object-syntax/prefer-query-object-syntax.ts +++ b/packages/eslint-plugin-query/src/rules/prefer-query-object-syntax/prefer-query-object-syntax.ts @@ -34,11 +34,22 @@ export const rule = createRule({ return } - const firstArgument = node.arguments[0] + let firstArgument = node.arguments[0] if (!firstArgument) { return } + const reference = context + .getScope() + .references.find((ref) => ref.identifier === firstArgument) + + if ( + reference?.resolved?.defs[0]?.node.type === 'VariableDeclarator' && + reference.resolved.defs[0].node.init?.type === 'ObjectExpression' + ) { + firstArgument = reference.resolved.defs[0].node.init + } + const hasFirstObjectArgument = firstArgument.type === 'ObjectExpression' if (hasFirstObjectArgument) { return