From 767fb286122698c34fc18c88be75b28b2650a256 Mon Sep 17 00:00:00 2001 From: Nitin Kumar Date: Mon, 13 Dec 2021 06:47:22 +0530 Subject: [PATCH] fix: avoid unnecessary space in autofix output --- lib/rules/prefer-object-has-own.js | 24 ++---------------------- tests/lib/rules/prefer-object-has-own.js | 11 +++++++++++ 2 files changed, 13 insertions(+), 22 deletions(-) diff --git a/lib/rules/prefer-object-has-own.js b/lib/rules/prefer-object-has-own.js index 3bb0f99d5dff..a798488d1795 100644 --- a/lib/rules/prefer-object-has-own.js +++ b/lib/rules/prefer-object-has-own.js @@ -40,26 +40,6 @@ function hasLeftHandObject(node) { return false; } -/** - * Checks if the given token is `await` Identefier, `of` Itentifier or a keyword token - * Inspired from eslint-plugin-unicorn/rules/fix/fix-space-around-keywords.js - * @param {Token} token The token to check. - * @returns {boolean} `true` if the token is is `await` Identefier, `of` Itentifier or a keyword token - */ -function isProblematicToken(token) { - const { type, value } = token; - - if ( - (type === "Keyword" && /^[a-z]*$/u.test(value)) || - - // AwaitExpression or ForOfStatement - (type === "Identifier" && (value === "of" || value === "await"))) { - return true; - } - - return false; -} - //------------------------------------------------------------------------------ // Rule Definition //------------------------------------------------------------------------------ @@ -111,10 +91,10 @@ module.exports = { return null; } - const tokenJustBeforeNode = sourceCode.getTokenBefore(node, { includeComments: true }); + const tokenJustBeforeNode = sourceCode.getTokenBefore(node.callee, { includeComments: true }); // for https://github.com/eslint/eslint/pull/15346#issuecomment-991417335 - if (tokenJustBeforeNode && isProblematicToken(tokenJustBeforeNode) && !sourceCode.isSpaceBetween(node, tokenJustBeforeNode)) { + if (tokenJustBeforeNode && !astUtils.canTokensBeAdjacent(tokenJustBeforeNode, "Object.hasOwn") && !sourceCode.isSpaceBetween(node, tokenJustBeforeNode)) { return fixer.replaceText(node.callee, " Object.hasOwn"); } diff --git a/tests/lib/rules/prefer-object-has-own.js b/tests/lib/rules/prefer-object-has-own.js index 64b34eafeed6..d58f7f5c2119 100644 --- a/tests/lib/rules/prefer-object-has-own.js +++ b/tests/lib/rules/prefer-object-has-own.js @@ -380,6 +380,17 @@ ruleTester.run("prefer-object-has-own", rule, { endColumn: 67 }] }, + { + code: "function foo(){return({}.hasOwnProperty.call)(object, property)}", + output: "function foo(){return(Object.hasOwn)(object, property)}", + errors: [{ + messageId: "useHasOwn", + line: 1, + column: 22, + endLine: 1, + endColumn: 64 + }] + }, { code: "Object['prototype']['hasOwnProperty']['call'](object, property);", output: "Object.hasOwn(object, property);",