Skip to content

Commit

Permalink
fix(eslint-plugin-query): run exhaustive dep check on referenced quer…
Browse files Browse the repository at this point in the history
…y key (#4480)

* run exhaustive dep check on referenced query key

* fix various eslint issues
  • Loading branch information
Newbie012 committed Nov 11, 2022
1 parent 67ddf17 commit 82adc95
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -56,13 +56,26 @@ export const rule = createRule({
return
}

if (queryKey.value.type !== AST_NODE_TYPES.ArrayExpression) {
let queryKeyNode = queryKey.value

if (queryKeyNode.type === AST_NODE_TYPES.Identifier) {
const expression = ASTUtils.getReferencedExpressionByIdentifier({
context,
node: queryKeyNode,
})

if (expression?.type === AST_NODE_TYPES.ArrayExpression) {
queryKeyNode = expression
}
}

if (queryKeyNode.type !== AST_NODE_TYPES.ArrayExpression) {
// TODO support query key factory
return
}

const sourceCode = context.getSourceCode()
const queryKeyValue = queryKey.value
const queryKeyValue = queryKeyNode
const refs = ASTUtils.getExternalRefs({
scopeManager,
node: queryFn.value,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,7 @@ ruleTester.run('exhaustive-deps', rule, {
suggestions: [
{
messageId: 'fixTo',
// eslint-disable-next-line no-template-curly-in-string
data: { result: '["entity/${id}", id]' },
output: normalizeIndent`
const id = 1;
Expand All @@ -205,6 +206,7 @@ ruleTester.run('exhaustive-deps', rule, {
suggestions: [
{
messageId: 'fixTo',
// eslint-disable-next-line no-template-curly-in-string
data: { result: '[`entity/${a}`, b]' },
output: normalizeIndent`
const a = 1;
Expand Down Expand Up @@ -343,5 +345,32 @@ ruleTester.run('exhaustive-deps', rule, {
},
],
},
{
name: 'should fail when a queryKey is a reference of an array expression with a missing dep',
code: normalizeIndent`
const x = 5;
const queryKey = ['foo']
useQuery({ queryKey, queryFn: () => x })
`,
errors: [
{
messageId: 'missingDeps',
data: { deps: 'x' },
suggestions: [
{
messageId: 'fixTo',
data: {
result: "['foo', x]",
},
output: normalizeIndent`
const x = 5;
const queryKey = ['foo', x]
useQuery({ queryKey, queryFn: () => x })
`,
},
],
},
],
},
],
})
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ export function detectTanstackQueryImports(create: EnhancedCreate): Create {
if (specifier.type === 'ImportSpecifier') {
return node.name === specifier.local.name
}

return false
})
},
}
Expand Down

0 comments on commit 82adc95

Please sign in to comment.