diff --git a/docs/rules/prefer-object-has-own.md b/docs/rules/prefer-object-has-own.md index 782e9e8159e..942a405df7f 100644 --- a/docs/rules/prefer-object-has-own.md +++ b/docs/rules/prefer-object-has-own.md @@ -30,4 +30,4 @@ const hasProperty = Object.hasOwn(object, property); ## Related Material -[MDN Docs](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwn) +[MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwn) diff --git a/lib/rules/prefer-object-has-own.js b/lib/rules/prefer-object-has-own.js index f6bc53f6808..21b04037bac 100644 --- a/lib/rules/prefer-object-has-own.js +++ b/lib/rules/prefer-object-has-own.js @@ -55,7 +55,8 @@ module.exports = { schema: [], messages: { useHasOwn: "Prefer using Object.hasOwn(…) over Object.prototype.hasOwnProperty.call(…)." - } + }, + fixable: "code" }, create(context) { return { @@ -76,7 +77,12 @@ module.exports = { ) { context.report({ node, - messageId: "useHasOwn" + messageId: "useHasOwn", + *fix(fixer) { + yield fixer.replaceText(node.callee, "Object.hasOwn"); + + yield fixer.replaceTextRange([node.arguments[0].range[0], node.arguments[1].range[0]], ""); + } }); } } diff --git a/tests/lib/rules/prefer-object-has-own.js b/tests/lib/rules/prefer-object-has-own.js index b8bea31248e..c1bb4112395 100644 --- a/tests/lib/rules/prefer-object-has-own.js +++ b/tests/lib/rules/prefer-object-has-own.js @@ -84,6 +84,7 @@ ruleTester.run("prefer-object-has-own", rule, { invalid: [ { code: "Object.hasOwnProperty.call(obj, 'foo')", + output: "Object.hasOwn('foo')", errors: [{ messageId: "useHasOwn", line: 1, @@ -92,8 +93,20 @@ ruleTester.run("prefer-object-has-own", rule, { endColumn: 39 }] }, + { + code: "Object.hasOwnProperty.call(obj, property)", + output: "Object.hasOwn(property)", + errors: [{ + messageId: "useHasOwn", + line: 1, + column: 1, + endLine: 1, + endColumn: 42 + }] + }, { code: "Object.prototype.hasOwnProperty.call(obj, 'foo')", + output: "Object.hasOwn('foo')", errors: [{ messageId: "useHasOwn", line: 1, @@ -104,6 +117,7 @@ ruleTester.run("prefer-object-has-own", rule, { }, { code: "({}).hasOwnProperty.call(obj, 'foo')", + output: "Object.hasOwn('foo')", errors: [{ messageId: "useHasOwn", line: 1, @@ -114,6 +128,7 @@ ruleTester.run("prefer-object-has-own", rule, { }, { code: "const hasProperty = Object.prototype.hasOwnProperty.call(object, property);", + output: "const hasProperty = Object.hasOwn(property);", errors: [{ messageId: "useHasOwn", line: 1, @@ -124,6 +139,7 @@ ruleTester.run("prefer-object-has-own", rule, { }, { code: "const hasProperty = (( Object.prototype.hasOwnProperty.call(object, property) ));", + output: "const hasProperty = (( Object.hasOwn(property) ));", errors: [{ messageId: "useHasOwn", line: 1, @@ -134,6 +150,7 @@ ruleTester.run("prefer-object-has-own", rule, { }, { code: "const hasProperty = (( Object.prototype.hasOwnProperty.call ))(object, property);", + output: "const hasProperty = (( Object.hasOwn ))(property);", errors: [{ messageId: "useHasOwn", line: 1, @@ -144,6 +161,7 @@ ruleTester.run("prefer-object-has-own", rule, { }, { code: "const hasProperty = (( Object.prototype.hasOwnProperty )).call(object, property);", + output: "const hasProperty = Object.hasOwn(property);", errors: [{ messageId: "useHasOwn", line: 1, @@ -154,6 +172,7 @@ ruleTester.run("prefer-object-has-own", rule, { }, { code: "const hasProperty = (( Object.prototype )).hasOwnProperty.call(object, property);", + output: "const hasProperty = Object.hasOwn(property);", errors: [{ messageId: "useHasOwn", line: 1, @@ -164,6 +183,7 @@ ruleTester.run("prefer-object-has-own", rule, { }, { code: "const hasProperty = (( Object )).prototype.hasOwnProperty.call(object, property);", + output: "const hasProperty = Object.hasOwn(property);", errors: [{ messageId: "useHasOwn", line: 1, @@ -174,6 +194,7 @@ ruleTester.run("prefer-object-has-own", rule, { }, { code: "const hasProperty = {}.hasOwnProperty.call(object, property);", + output: "const hasProperty = Object.hasOwn(property);", errors: [{ messageId: "useHasOwn", line: 1, @@ -184,6 +205,7 @@ ruleTester.run("prefer-object-has-own", rule, { }, { code: "const hasProperty = (( {}.hasOwnProperty.call(object, property) ));", + output: "const hasProperty = (( Object.hasOwn(property) ));", errors: [{ messageId: "useHasOwn", line: 1, @@ -194,6 +216,7 @@ ruleTester.run("prefer-object-has-own", rule, { }, { code: "const hasProperty = (( {}.hasOwnProperty.call ))(object, property);", + output: "const hasProperty = (( Object.hasOwn ))(property);", errors: [{ messageId: "useHasOwn", line: 1, @@ -204,6 +227,7 @@ ruleTester.run("prefer-object-has-own", rule, { }, { code: "const hasProperty = (( {}.hasOwnProperty )).call(object, property);", + output: "const hasProperty = Object.hasOwn(property);", errors: [{ messageId: "useHasOwn", line: 1, @@ -214,6 +238,7 @@ ruleTester.run("prefer-object-has-own", rule, { }, { code: "const hasProperty = (( {} )).hasOwnProperty.call(object, property);", + output: "const hasProperty = Object.hasOwn(property);", errors: [{ messageId: "useHasOwn", line: 1, @@ -223,13 +248,14 @@ ruleTester.run("prefer-object-has-own", rule, { }] }, { - code: "function foo(){return{}.hasOwnProperty.call(object, property)}", + code: "function foo(){return {}.hasOwnProperty.call(object, property)}", + output: "function foo(){return Object.hasOwn(property)}", errors: [{ messageId: "useHasOwn", line: 1, - column: 22, + column: 23, endLine: 1, - endColumn: 62 + endColumn: 63 }] } ]