From 594217ea8a90071ee5867206741b73f0410ccfb1 Mon Sep 17 00:00:00 2001 From: Newbie012 Date: Wed, 14 Dec 2022 02:22:09 +0200 Subject: [PATCH 1/2] fix rule prefer-object-syntax with multilines --- .../prefer-query-object-syntax.test.ts | 27 +++++++++++++++++++ .../prefer-query-object-syntax.ts | 15 ++++------- .../src/utils/ast-utils.ts | 9 ------- 3 files changed, 32 insertions(+), 19 deletions(-) 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 c208d059da..9c29f5083a 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 @@ -287,5 +287,32 @@ ruleTester.run(name, rule, { createQuery({ queryKey: ['data'], queryFn: () => fetchData(), enabled: false }); `, }, + { + code: normalizeIndent` + import { createQuery } from "@tanstack/solid-query"; + createQuery( + ['key'], + () => Promise.resolve('data') + ); + `, + errors: [{ messageId: 'preferObjectSyntax' }], + output: normalizeIndent` + import { createQuery } from "@tanstack/solid-query"; + createQuery({ queryKey: ['key'], queryFn: () => Promise.resolve('data') }); + `, + }, + { + code: normalizeIndent` + import { createQuery } from "@tanstack/solid-query"; + createQuery( + ['key'], () => Promise.resolve('data') + ); + `, + errors: [{ messageId: 'preferObjectSyntax' }], + output: normalizeIndent` + import { createQuery } from "@tanstack/solid-query"; + createQuery({ queryKey: ['key'], queryFn: () => Promise.resolve('data') }); + `, + }, ], }) 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 3ed86f6af9..68e8c847db 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 @@ -216,19 +216,14 @@ function runCheckOnNode(params: { optionsObjectProperties.push(...existingObjectProperties) } - const argumentsRange = ASTUtils.getRangeOfArguments(callNode) + if (callNode.callee.type === AST_NODE_TYPES.Identifier) { + const argsText = `{ ${optionsObjectProperties.join(', ')} }` - if (argumentsRange) { - ruleFixes.push(fixer.removeRange(argumentsRange)) + ruleFixes.push( + fixer.replaceText(callNode, `${callNode.callee.name}(${argsText})`), + ) } - ruleFixes.push( - fixer.insertTextAfterRange( - [callNode.range[0], callNode.range[1] - 1], - `{ ${optionsObjectProperties.join(', ')} }`, - ), - ) - return ruleFixes }, }) diff --git a/packages/eslint-plugin-query/src/utils/ast-utils.ts b/packages/eslint-plugin-query/src/utils/ast-utils.ts index 192718ab19..6475604f8d 100644 --- a/packages/eslint-plugin-query/src/utils/ast-utils.ts +++ b/packages/eslint-plugin-query/src/utils/ast-utils.ts @@ -128,15 +128,6 @@ export const ASTUtils = { return identifier }, - getRangeOfArguments( - node: TSESTree.CallExpression, - ): TSESTree.Range | undefined { - const firstArgument = node.arguments[0] - const lastArgument = node.arguments[node.arguments.length - 1] - return firstArgument && lastArgument - ? [firstArgument.range[0], lastArgument.range[1]] - : undefined - }, getExternalRefs(params: { scopeManager: TSESLint.Scope.ScopeManager node: TSESTree.Node From bfde964c65c31eef21c038753a6c73042213dcbd Mon Sep 17 00:00:00 2001 From: Newbie012 Date: Wed, 14 Dec 2022 02:28:01 +0200 Subject: [PATCH 2/2] simplify --- .../prefer-query-object-syntax.ts | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) 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 68e8c847db..abeb192b4c 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 @@ -185,7 +185,6 @@ function runCheckOnNode(params: { node: callNode, messageId: 'preferObjectSyntax', fix(fixer) { - const ruleFixes: TSESLint.RuleFix[] = [] const optionsObjectProperties: string[] = [] // queryKey @@ -216,15 +215,13 @@ function runCheckOnNode(params: { optionsObjectProperties.push(...existingObjectProperties) } - if (callNode.callee.type === AST_NODE_TYPES.Identifier) { - const argsText = `{ ${optionsObjectProperties.join(', ')} }` - - ruleFixes.push( - fixer.replaceText(callNode, `${callNode.callee.name}(${argsText})`), - ) + if (callNode.callee.type !== AST_NODE_TYPES.Identifier) { + return null } - return ruleFixes + const argsText = `{ ${optionsObjectProperties.join(', ')} }` + + return fixer.replaceText(callNode, `${callNode.callee.name}(${argsText})`) }, }) }