Skip to content

Commit 7c53cd4

Browse files
authored
Fixed wrong autofix in no-deprecated-v-on-number-modifiers rule (#1125)
1 parent e785bdb commit 7c53cd4

File tree

4 files changed

+149
-102
lines changed

4 files changed

+149
-102
lines changed

lib/rules/no-deprecated-v-on-number-modifiers.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
// ------------------------------------------------------------------------------
1010

1111
const utils = require('../utils')
12-
const keyCodeToKey = require('../utils/keycode-to-key.json')
12+
const keyCodeToKey = require('../utils/keycode-to-key')
1313

1414
// ------------------------------------------------------------------------------
1515
// Rule Definition
@@ -48,7 +48,7 @@ module.exports = {
4848
const key = keyCodeToKey[keyCodes]
4949
if (!key) return
5050

51-
return fixer.replaceTextRange(modifier.range, `${key}`)
51+
return fixer.replaceText(modifier, `${key}`)
5252
}
5353
})
5454
}

lib/utils/keycode-to-key.js

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
// https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values
2+
module.exports = {
3+
'8': 'backspace',
4+
'9': 'tab',
5+
'13': 'enter',
6+
'16': 'shift',
7+
'17': 'ctrl',
8+
'18': 'alt',
9+
'19': 'pause', // windows
10+
'20': 'caps-lock',
11+
'27': 'escape',
12+
'32': 'space', // Vue.js specially key name.
13+
'33': 'page-up',
14+
'34': 'page-down',
15+
'35': 'end',
16+
'36': 'home',
17+
'37': 'arrow-left',
18+
'38': 'arrow-up',
19+
'39': 'arrow-right',
20+
'40': 'arrow-down',
21+
'45': 'insert', // windows
22+
'46': 'delete',
23+
24+
// If mistakenly use it in Vue.js 2.x, it will be irreversibly broken. Therefore, it will not be autofix.
25+
// '48': '0',
26+
// '49': '1',
27+
// '50': '2',
28+
// '51': '3',
29+
// '52': '4',
30+
// '53': '5',
31+
// '54': '6',
32+
// '55': '7',
33+
// '56': '8',
34+
// '57': '9',
35+
36+
'65': 'a',
37+
'66': 'b',
38+
'67': 'c',
39+
'68': 'd',
40+
'69': 'e',
41+
'70': 'f',
42+
'71': 'g',
43+
'72': 'h',
44+
'73': 'i',
45+
'74': 'j',
46+
'75': 'k',
47+
'76': 'l',
48+
'77': 'm',
49+
'78': 'n',
50+
'79': 'o',
51+
'80': 'p',
52+
'81': 'q',
53+
'82': 'r',
54+
'83': 's',
55+
'84': 't',
56+
'85': 'u',
57+
'86': 'v',
58+
'87': 'w',
59+
'88': 'x',
60+
'89': 'y',
61+
'90': 'z',
62+
63+
// The key value may change depending on the OS.
64+
// '91': 'meta' ,// Win: 'os'?
65+
// '92': 'meta', // Win: 'meta' Mac: ?
66+
// '93': 'meta', // Win: 'context-menu' Mac: 'meta'
67+
68+
// Cannot determine numpad with key.
69+
// '96': 'numpad-0',
70+
// '97': 'numpad-1',
71+
// '98': 'numpad-2',
72+
// '99': 'numpad-3',
73+
// '100': 'numpad-4',
74+
// '101': 'numpad-5',
75+
// '102': 'numpad-6',
76+
// '103': 'numpad-7',
77+
// '104': 'numpad-8',
78+
// '105': 'numpad-9',
79+
// '106': 'multiply',
80+
// '107': 'add',
81+
// '109': 'subtract',
82+
// '110': 'decimal',
83+
// '111': 'divide',
84+
'112': 'f1',
85+
'113': 'f2',
86+
'114': 'f3',
87+
'115': 'f4',
88+
'116': 'f5',
89+
'117': 'f6',
90+
'118': 'f7',
91+
'119': 'f8',
92+
'120': 'f9',
93+
'121': 'f10',
94+
'122': 'f11',
95+
'123': 'f12',
96+
'144': 'num-lock',
97+
'145': 'scroll-lock'
98+
}

lib/utils/keycode-to-key.json

Lines changed: 0 additions & 100 deletions
This file was deleted.

tests/lib/rules/no-deprecated-v-on-number-modifiers.js

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,55 @@ ruleTester.run('no-deprecated-v-bind-sync', rule, {
169169
code: "<template><input @[dynamicArg].unknown.10='onArrowUp'></template>",
170170
output: null,
171171
errors: ["'KeyboardEvent.keyCode' modifier on 'v-on' directive is deprecated. Using 'KeyboardEvent.key' instead."]
172+
},
173+
{
174+
filename: 'test.vue',
175+
code: `
176+
<template>
177+
<input @keydown.48='onKeydown'>
178+
<input @keydown.57='onKeydown'>
179+
<input @keydown.91='onKeydown'>
180+
<input @keydown.92='onKeydown'>
181+
<input @keydown.93='onKeydown'>
182+
<input @keydown.96='onKeydown'>
183+
<input @keydown.111='onKeydown'>
184+
</template>`,
185+
output: null,
186+
errors: [
187+
"'KeyboardEvent.keyCode' modifier on 'v-on' directive is deprecated. Using 'KeyboardEvent.key' instead.",
188+
"'KeyboardEvent.keyCode' modifier on 'v-on' directive is deprecated. Using 'KeyboardEvent.key' instead.",
189+
"'KeyboardEvent.keyCode' modifier on 'v-on' directive is deprecated. Using 'KeyboardEvent.key' instead.",
190+
"'KeyboardEvent.keyCode' modifier on 'v-on' directive is deprecated. Using 'KeyboardEvent.key' instead.",
191+
"'KeyboardEvent.keyCode' modifier on 'v-on' directive is deprecated. Using 'KeyboardEvent.key' instead.",
192+
"'KeyboardEvent.keyCode' modifier on 'v-on' directive is deprecated. Using 'KeyboardEvent.key' instead.",
193+
"'KeyboardEvent.keyCode' modifier on 'v-on' directive is deprecated. Using 'KeyboardEvent.key' instead."
194+
]
195+
},
196+
{
197+
filename: 'test.vue',
198+
code: `
199+
<template>
200+
<input @keydown.19='onKeydown'>
201+
<input @keydown.37='onKeydown'>
202+
<input @keydown.38='onKeydown'>
203+
<input @keydown.39='onKeydown'>
204+
<input @keydown.40='onKeydown'>
205+
</template>`,
206+
output: `
207+
<template>
208+
<input @keydown.pause='onKeydown'>
209+
<input @keydown.arrow-left='onKeydown'>
210+
<input @keydown.arrow-up='onKeydown'>
211+
<input @keydown.arrow-right='onKeydown'>
212+
<input @keydown.arrow-down='onKeydown'>
213+
</template>`,
214+
errors: [
215+
"'KeyboardEvent.keyCode' modifier on 'v-on' directive is deprecated. Using 'KeyboardEvent.key' instead.",
216+
"'KeyboardEvent.keyCode' modifier on 'v-on' directive is deprecated. Using 'KeyboardEvent.key' instead.",
217+
"'KeyboardEvent.keyCode' modifier on 'v-on' directive is deprecated. Using 'KeyboardEvent.key' instead.",
218+
"'KeyboardEvent.keyCode' modifier on 'v-on' directive is deprecated. Using 'KeyboardEvent.key' instead.",
219+
"'KeyboardEvent.keyCode' modifier on 'v-on' directive is deprecated. Using 'KeyboardEvent.key' instead."
220+
]
172221
}
173222
]
174223
})

0 commit comments

Comments
 (0)