Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 2660fb9

Browse files
authored
fix: report delete operation for mutation props (#1942)
1 parent f358817 commit 2660fb9

File tree

2 files changed

+44
-4
lines changed

2 files changed

+44
-4
lines changed

‎lib/utils/index.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1798,6 +1798,16 @@ module.exports = {
17981798
pathNodes
17991799
}
18001800
}
1801+
case 'UnaryExpression': {
1802+
if (target.operator === 'delete') {
1803+
return {
1804+
kind: 'update',
1805+
node: target,
1806+
pathNodes
1807+
}
1808+
}
1809+
break
1810+
}
18011811
case 'CallExpression': {
18021812
if (pathNodes.length > 0 && target.callee === node) {
18031813
const mem = pathNodes[pathNodes.length - 1]

‎tests/lib/rules/no-mutating-props.js

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -370,11 +370,12 @@ ruleTester.run('no-mutating-props', rule, {
370370
<div v-if="this.prop6++ && this.someProp < 10"></div>
371371
<div v-text="this.prop7.shift()"></div>
372372
<div v-text="this.prop8.slice(0).shift()"></div>
373+
<div v-if="delete prop9.a"></div>
373374
</div>
374375
</template>
375376
<script>
376377
export default {
377-
props: ['prop1', 'prop2', 'prop3', 'prop4', 'prop5', 'prop6', 'prop7', 'prop8']
378+
props: ['prop1', 'prop2', 'prop3', 'prop4', 'prop5', 'prop6', 'prop7', 'prop8', 'prop9']
378379
}
379380
</script>
380381
`,
@@ -402,6 +403,10 @@ ruleTester.run('no-mutating-props', rule, {
402403
{
403404
message: 'Unexpected mutation of "prop7" prop.',
404405
line: 10
406+
},
407+
{
408+
message: 'Unexpected mutation of "prop9" prop.',
409+
line: 12
405410
}
406411
]
407412
},
@@ -507,6 +512,7 @@ ruleTester.run('no-mutating-props', rule, {
507512
++this.items
508513
this.todo.type = 'completed'
509514
this.items.push('something')
515+
delete this.todo.type
510516
}
511517
}
512518
}
@@ -524,6 +530,10 @@ ruleTester.run('no-mutating-props', rule, {
524530
{
525531
message: 'Unexpected mutation of "items" prop.',
526532
line: 18
533+
},
534+
{
535+
message: 'Unexpected mutation of "todo" prop.',
536+
line: 19
527537
}
528538
]
529539
},
@@ -651,6 +661,7 @@ ruleTester.run('no-mutating-props', rule, {
651661
props.a ++
652662
props.b = 1
653663
props.c.push(1)
664+
delete props.d
654665
}
655666
}
656667
</script>
@@ -667,6 +678,10 @@ ruleTester.run('no-mutating-props', rule, {
667678
{
668679
message: 'Unexpected mutation of "c" prop.',
669680
line: 7
681+
},
682+
{
683+
message: 'Unexpected mutation of "d" prop.',
684+
line: 8
670685
}
671686
]
672687
},
@@ -681,6 +696,7 @@ ruleTester.run('no-mutating-props', rule, {
681696
c.push(1)
682697
683698
c.x.push(1)
699+
delete c.y
684700
e.foo++
685701
f.foo++
686702
}
@@ -705,12 +721,16 @@ ruleTester.run('no-mutating-props', rule, {
705721
line: 9
706722
},
707723
{
708-
message: 'Unexpected mutation of "d" prop.',
724+
message: 'Unexpected mutation of "c" prop.',
709725
line: 10
710726
},
711727
{
712728
message: 'Unexpected mutation of "d" prop.',
713729
line: 11
730+
},
731+
{
732+
message: 'Unexpected mutation of "d" prop.',
733+
line: 12
714734
}
715735
]
716736
},
@@ -722,6 +742,7 @@ ruleTester.run('no-mutating-props', rule, {
722742
export default {
723743
setup({a: foo, b: [...bar], c: baz = 1}) {
724744
foo.x ++
745+
delete foo.y
725746
bar.x = 1
726747
baz.push(1)
727748
}
@@ -734,12 +755,16 @@ ruleTester.run('no-mutating-props', rule, {
734755
line: 5
735756
},
736757
{
737-
message: 'Unexpected mutation of "b" prop.',
758+
message: 'Unexpected mutation of "a" prop.',
738759
line: 6
739760
},
740761
{
741-
message: 'Unexpected mutation of "c" prop.',
762+
message: 'Unexpected mutation of "b" prop.',
742763
line: 7
764+
},
765+
{
766+
message: 'Unexpected mutation of "c" prop.',
767+
line: 8
743768
}
744769
]
745770
},
@@ -752,6 +777,7 @@ ruleTester.run('no-mutating-props', rule, {
752777
props.a ++
753778
props.b = 1
754779
props.c.push(1)
780+
delete props.d
755781
}
756782
}
757783
</script>
@@ -768,6 +794,10 @@ ruleTester.run('no-mutating-props', rule, {
768794
{
769795
message: 'Unexpected mutation of "c" prop.',
770796
line: 7
797+
},
798+
{
799+
message: 'Unexpected mutation of "d" prop.',
800+
line: 8
771801
}
772802
]
773803
},

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /