Skip to content

Commit 72e3c31

Browse files
committed
feat: address comments
1 parent d1479f2 commit 72e3c31

File tree

6 files changed

+77
-29
lines changed

6 files changed

+77
-29
lines changed

docs/rules/index.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ Rules in this category are enabled for all presets provided by eslint-plugin-vue
4848
| [vue/no-computed-properties-in-data](./no-computed-properties-in-data.md) | disallow accessing computed properties in `data` | | :three::two::warning: |
4949
| [vue/no-custom-modifiers-on-v-model](./no-custom-modifiers-on-v-model.md) | disallow custom modifiers on v-model used on the component | | :two::warning: |
5050
| [vue/no-deprecated-data-object-declaration](./no-deprecated-data-object-declaration.md) | disallow using deprecated object declaration on data (in Vue.js 3.0.0+) | :wrench: | :three::warning: |
51-
| [vue/no-deprecated-delete-set](./no-deprecated-delete-set.md) | disallow using deprecated `$delete` and `$set` (in Vue.js 3.0.0+) | | :three::warning: |
5251
| [vue/no-deprecated-destroyed-lifecycle](./no-deprecated-destroyed-lifecycle.md) | disallow using deprecated `destroyed` and `beforeDestroy` lifecycle hooks (in Vue.js 3.0.0+) | :wrench: | :three::warning: |
5352
| [vue/no-deprecated-dollar-listeners-api](./no-deprecated-dollar-listeners-api.md) | disallow using deprecated `$listeners` (in Vue.js 3.0.0+) | | :three::warning: |
5453
| [vue/no-deprecated-dollar-scopedslots-api](./no-deprecated-dollar-scopedslots-api.md) | disallow using deprecated `$scopedSlots` (in Vue.js 3.0.0+) | :wrench: | :three::warning: |

docs/rules/no-deprecated-delete-set.md

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ description: disallow using deprecated `$delete` and `$set` (in Vue.js 3.0.0+)
1010
> disallow using deprecated `$delete` and `$set` (in Vue.js 3.0.0+)
1111
1212
- :exclamation: <badge text="This rule has not been released yet." vertical="middle" type="error"> _**This rule has not been released yet.**_ </badge>
13-
- :gear: This rule is included in all of `"plugin:vue/vue3-essential"`, `*.configs["flat/essential"]`, `"plugin:vue/vue3-strongly-recommended"`, `*.configs["flat/strongly-recommended"]`, `"plugin:vue/vue3-recommended"` and `*.configs["flat/recommended"]`.
1413

1514
## :book: Rule Details
1615

@@ -20,7 +19,7 @@ This rule reports use of deprecated `$delete` and `$set`. (in Vue.js 3.0.0+).
2019

2120
```vue
2221
<script>
23-
import { set as st, delete as del } from 'vue'
22+
import { set, del } from 'vue'
2423
export default {
2524
mounted () {
2625
/* ✗ BAD */
@@ -30,7 +29,7 @@ This rule reports use of deprecated `$delete` and `$set`. (in Vue.js 3.0.0+).
3029
Vue.set(obj, key, value)
3130
Vue.delete(obj, key)
3231
33-
st(obj, key, value)
32+
set(obj, key, value)
3433
del(obj, key)
3534
}
3635
}
@@ -43,6 +42,10 @@ This rule reports use of deprecated `$delete` and `$set`. (in Vue.js 3.0.0+).
4342

4443
Nothing.
4544

45+
## :books: Further Reading
46+
47+
- [Migration Guide - Removed APIs](https://v3-migration.vuejs.org/breaking-changes/#removed-apis)
48+
4649
## :mag: Implementation
4750

4851
- [Rule source](https://github.com/vuejs/eslint-plugin-vue/blob/master/lib/rules/no-deprecated-delete-set.js)

lib/configs/flat/vue3-essential.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ module.exports = [
1717
'vue/no-child-content': 'error',
1818
'vue/no-computed-properties-in-data': 'error',
1919
'vue/no-deprecated-data-object-declaration': 'error',
20-
'vue/no-deprecated-delete-set': 'error',
2120
'vue/no-deprecated-destroyed-lifecycle': 'error',
2221
'vue/no-deprecated-dollar-listeners-api': 'error',
2322
'vue/no-deprecated-dollar-scopedslots-api': 'error',

lib/configs/vue3-essential.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ module.exports = {
1212
'vue/no-child-content': 'error',
1313
'vue/no-computed-properties-in-data': 'error',
1414
'vue/no-deprecated-data-object-declaration': 'error',
15-
'vue/no-deprecated-delete-set': 'error',
1615
'vue/no-deprecated-destroyed-lifecycle': 'error',
1716
'vue/no-deprecated-dollar-listeners-api': 'error',
1817
'vue/no-deprecated-dollar-scopedslots-api': 'error',

lib/rules/no-deprecated-delete-set.js

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@
77
const utils = require('../utils')
88
const { findVariable } = require('@eslint-community/eslint-utils')
99

10-
const DeprecatedApis = ['set', 'delete']
11-
const DeprecatedDollarApis = new Set(DeprecatedApis.map((item) => `$${item}`))
10+
const deprecatedApis = ['set', 'delete']
11+
const deprecatedImportApis = new Set(['set', 'del'])
12+
const deprecatedDollarApis = new Set(deprecatedApis.map((item) => `$${item}`))
1213

1314
/**
1415
* @param {Expression|Super} node
@@ -23,7 +24,7 @@ module.exports = {
2324
docs: {
2425
description:
2526
'disallow using deprecated `$delete` and `$set` (in Vue.js 3.0.0+)',
26-
categories: ['vue3-essential'],
27+
categories: [],
2728
url: 'https://eslint.vuejs.org/rules/no-deprecated-delete-set.html'
2829
},
2930
fixable: null,
@@ -42,7 +43,7 @@ module.exports = {
4243
function getVueDeprecatedCallExpression(identifier, context) {
4344
// Instance API: this.$set()
4445
if (
45-
DeprecatedDollarApis.has(identifier.name) &&
46+
deprecatedDollarApis.has(identifier.name) &&
4647
identifier.parent.type === 'MemberExpression' &&
4748
utils.isThis(identifier.parent.object, context) &&
4849
identifier.parent.parent.type === 'CallExpression' &&
@@ -53,7 +54,7 @@ module.exports = {
5354

5455
// Vue 2 Global API: Vue.set()
5556
if (
56-
DeprecatedApis.includes(identifier.name) &&
57+
deprecatedApis.includes(identifier.name) &&
5758
identifier.parent.type === 'MemberExpression' &&
5859
isVue(identifier.parent.object) &&
5960
identifier.parent.parent.type === 'CallExpression' &&
@@ -80,7 +81,7 @@ module.exports = {
8081
def.type === 'ImportBinding' &&
8182
def.node.type === 'ImportSpecifier' &&
8283
def.node.imported.type === 'Identifier' &&
83-
DeprecatedApis.includes(def.node.imported.name) &&
84+
deprecatedImportApis.has(def.node.imported.name) &&
8485
def.node.parent.type === 'ImportDeclaration' &&
8586
def.node.parent.source.value === 'vue'
8687
) {
@@ -104,7 +105,7 @@ module.exports = {
104105
if (
105106
prop.type === 'Property' &&
106107
prop.key.type === 'Identifier' &&
107-
DeprecatedApis.includes(prop.key.name) &&
108+
deprecatedImportApis.has(prop.key.name) &&
108109
prop.value.type === 'Identifier' &&
109110
prop.value.name === identifier.name
110111
) {

tests/lib/rules/no-deprecated-delete-set.js

Lines changed: 63 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@ tester.run('no-deprecated-delete-set', rule, {
2020
{
2121
filename: 'test.js',
2222
code: `
23+
const another = function () {
24+
this.$set(obj, key, value)
25+
this.$delete(obj, key)
26+
}
27+
2328
createApp({
2429
mounted () {
2530
this.$emit('start')
@@ -33,18 +38,15 @@ tester.run('no-deprecated-delete-set', rule, {
3338
`
3439
},
3540
{
36-
filename: 'test.js',
41+
filename: 'test.vue',
3742
code: `
38-
const another = function () {
39-
this.$set(obj, key, value)
40-
this.$delete(obj, key)
41-
}
42-
43-
createApp({
44-
mounted () {
45-
this.$emit('start')
43+
<script>
44+
export default {
45+
mounted () {
46+
this.$nextTick()
47+
}
4648
}
47-
})
49+
</script>
4850
`
4951
},
5052
{
@@ -104,10 +106,10 @@ tester.run('no-deprecated-delete-set', rule, {
104106
filename: 'test.vue',
105107
code: `
106108
<script>
107-
const { nextTick: nt, provide: del } = require('vue')
109+
const { nextTick: set, provide: del } = require('vue')
108110
export default {
109111
mounted () {
110-
nt()
112+
set()
111113
del(key, value)
112114
}
113115
}
@@ -218,7 +220,7 @@ tester.run('no-deprecated-delete-set', rule, {
218220
filename: 'test.vue',
219221
code: `
220222
<script>
221-
import { set, delete as del } from 'vue'
223+
import { set, del } from 'vue'
222224
export default {
223225
mounted () {
224226
set(obj, key, value)
@@ -242,7 +244,7 @@ tester.run('no-deprecated-delete-set', rule, {
242244
filename: 'test.vue',
243245
code: `
244246
<script setup>
245-
import { set, delete as del } from 'vue'
247+
import { set, del } from 'vue'
246248
247249
set(obj, key, value)
248250
del(obj, key)
@@ -259,11 +261,32 @@ tester.run('no-deprecated-delete-set', rule, {
259261
}
260262
]
261263
},
264+
{
265+
filename: 'test.vue',
266+
code: `
267+
<script setup>
268+
import { set as s, del as d } from 'vue'
269+
270+
s(obj, key, value)
271+
d(obj, key)
272+
</script>
273+
`,
274+
errors: [
275+
{
276+
messageId: 'deprecated',
277+
line: 5
278+
},
279+
{
280+
messageId: 'deprecated',
281+
line: 6
282+
}
283+
]
284+
},
262285
{
263286
filename: 'test.vue',
264287
code: `
265288
<script>
266-
const { set, delete: del } = require('vue')
289+
const { set, del } = require('vue')
267290
export default {
268291
mounted () {
269292
set(obj, key, value)
@@ -283,11 +306,35 @@ tester.run('no-deprecated-delete-set', rule, {
283306
}
284307
]
285308
},
309+
{
310+
filename: 'test.vue',
311+
code: `
312+
<script>
313+
const { set: s, del: d } = require('vue')
314+
export default {
315+
mounted () {
316+
s(obj, key, value)
317+
d(obj, key)
318+
}
319+
}
320+
</script>
321+
`,
322+
errors: [
323+
{
324+
messageId: 'deprecated',
325+
line: 6
326+
},
327+
{
328+
messageId: 'deprecated',
329+
line: 7
330+
}
331+
]
332+
},
286333
{
287334
filename: 'test.vue',
288335
code: `
289336
<script setup>
290-
const { set, delete: del } = require('vue')
337+
const { set, del } = require('vue')
291338
292339
set(obj, key, value)
293340
del(obj, key)

0 commit comments

Comments
 (0)