diff --git a/lib/rules/prefer-object-has-own.js b/lib/rules/prefer-object-has-own.js index 3bb0f99d5df..b21f98ee500 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.callee, 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 64b34eafeed..d58f7f5c211 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);",