Skip to content

Commit

Permalink
feat: add fixer for prefer-object-has-own rule
Browse files Browse the repository at this point in the history
  • Loading branch information
snitin315 committed Dec 2, 2021
1 parent b738771 commit c3ac824
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 6 deletions.
2 changes: 1 addition & 1 deletion docs/rules/prefer-object-has-own.md
Expand Up @@ -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)
10 changes: 8 additions & 2 deletions lib/rules/prefer-object-has-own.js
Expand Up @@ -55,7 +55,8 @@ module.exports = {
schema: [],
messages: {
useHasOwn: "Prefer using Object.hasOwn(…) over Object.prototype.hasOwnProperty.call(…)."
}
},
fixable: "code"
},
create(context) {
return {
Expand All @@ -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]], "");
}
});
}
}
Expand Down
32 changes: 29 additions & 3 deletions tests/lib/rules/prefer-object-has-own.js
Expand Up @@ -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,
Expand All @@ -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,
Expand All @@ -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,
Expand All @@ -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,
Expand All @@ -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,
Expand All @@ -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,
Expand All @@ -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,
Expand All @@ -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,
Expand All @@ -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,
Expand All @@ -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,
Expand All @@ -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,
Expand All @@ -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,
Expand All @@ -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,
Expand All @@ -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,
Expand All @@ -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
}]
}
]
Expand Down

0 comments on commit c3ac824

Please sign in to comment.