From 4fe3f49dc8df91b0e77b55914ff111cb910561d1 Mon Sep 17 00:00:00 2001 From: qmhc <544022268@qq.com> Date: Mon, 8 Aug 2022 00:05:55 +0800 Subject: [PATCH] fix: report delete operation for mutation props --- lib/utils/index.js | 10 ++++++++ tests/lib/rules/no-mutating-props.js | 38 +++++++++++++++++++++++++--- 2 files changed, 44 insertions(+), 4 deletions(-) diff --git a/lib/utils/index.js b/lib/utils/index.js index 5a423faa4..b76924deb 100644 --- a/lib/utils/index.js +++ b/lib/utils/index.js @@ -1798,6 +1798,16 @@ module.exports = { pathNodes } } + case 'UnaryExpression': { + if (target.operator === 'delete') { + return { + kind: 'update', + node: target, + pathNodes + } + } + break + } case 'CallExpression': { if (pathNodes.length > 0 && target.callee === node) { const mem = pathNodes[pathNodes.length - 1] diff --git a/tests/lib/rules/no-mutating-props.js b/tests/lib/rules/no-mutating-props.js index 5c976baa2..22ef3aaf7 100644 --- a/tests/lib/rules/no-mutating-props.js +++ b/tests/lib/rules/no-mutating-props.js @@ -370,11 +370,12 @@ ruleTester.run('no-mutating-props', rule, {
+
`, @@ -402,6 +403,10 @@ ruleTester.run('no-mutating-props', rule, { { message: 'Unexpected mutation of "prop7" prop.', line: 10 + }, + { + message: 'Unexpected mutation of "prop9" prop.', + line: 12 } ] }, @@ -507,6 +512,7 @@ ruleTester.run('no-mutating-props', rule, { ++this.items this.todo.type = 'completed' this.items.push('something') + delete this.todo.type } } } @@ -524,6 +530,10 @@ ruleTester.run('no-mutating-props', rule, { { message: 'Unexpected mutation of "items" prop.', line: 18 + }, + { + message: 'Unexpected mutation of "todo" prop.', + line: 19 } ] }, @@ -651,6 +661,7 @@ ruleTester.run('no-mutating-props', rule, { props.a ++ props.b = 1 props.c.push(1) + delete props.d } } @@ -667,6 +678,10 @@ ruleTester.run('no-mutating-props', rule, { { message: 'Unexpected mutation of "c" prop.', line: 7 + }, + { + message: 'Unexpected mutation of "d" prop.', + line: 8 } ] }, @@ -681,6 +696,7 @@ ruleTester.run('no-mutating-props', rule, { c.push(1) c.x.push(1) + delete c.y e.foo++ f.foo++ } @@ -705,12 +721,16 @@ ruleTester.run('no-mutating-props', rule, { line: 9 }, { - message: 'Unexpected mutation of "d" prop.', + message: 'Unexpected mutation of "c" prop.', line: 10 }, { message: 'Unexpected mutation of "d" prop.', line: 11 + }, + { + message: 'Unexpected mutation of "d" prop.', + line: 12 } ] }, @@ -722,6 +742,7 @@ ruleTester.run('no-mutating-props', rule, { export default { setup({a: foo, b: [...bar], c: baz = 1}) { foo.x ++ + delete foo.y bar.x = 1 baz.push(1) } @@ -734,12 +755,16 @@ ruleTester.run('no-mutating-props', rule, { line: 5 }, { - message: 'Unexpected mutation of "b" prop.', + message: 'Unexpected mutation of "a" prop.', line: 6 }, { - message: 'Unexpected mutation of "c" prop.', + message: 'Unexpected mutation of "b" prop.', line: 7 + }, + { + message: 'Unexpected mutation of "c" prop.', + line: 8 } ] }, @@ -752,6 +777,7 @@ ruleTester.run('no-mutating-props', rule, { props.a ++ props.b = 1 props.c.push(1) + delete props.d } } @@ -768,6 +794,10 @@ ruleTester.run('no-mutating-props', rule, { { message: 'Unexpected mutation of "c" prop.', line: 7 + }, + { + message: 'Unexpected mutation of "d" prop.', + line: 8 } ] },