From d261823cc1631c8a121f5e3fbfe49c7b7a64e925 Mon Sep 17 00:00:00 2001 From: Eliya Cohen Date: Wed, 14 Dec 2022 09:10:28 +0200 Subject: [PATCH] fix(eslint-plugin): support rule prefer-object-syntax with multi lines (#4637) * fix rule prefer-object-syntax with multilines * simplify --- .../prefer-query-object-syntax.test.ts | 27 +++++++++++++++++++ .../prefer-query-object-syntax.ts | 16 +++-------- .../src/utils/ast-utils.ts | 9 ------- 3 files changed, 31 insertions(+), 21 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..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,20 +215,13 @@ function runCheckOnNode(params: { optionsObjectProperties.push(...existingObjectProperties) } - const argumentsRange = ASTUtils.getRangeOfArguments(callNode) - - if (argumentsRange) { - ruleFixes.push(fixer.removeRange(argumentsRange)) + if (callNode.callee.type !== AST_NODE_TYPES.Identifier) { + return null } - ruleFixes.push( - fixer.insertTextAfterRange( - [callNode.range[0], callNode.range[1] - 1], - `{ ${optionsObjectProperties.join(', ')} }`, - ), - ) + const argsText = `{ ${optionsObjectProperties.join(', ')} }` - return ruleFixes + return fixer.replaceText(callNode, `${callNode.callee.name}(${argsText})`) }, }) } 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