From 7c53cd4c34fe10c8b4073e33355bb083add5a72b Mon Sep 17 00:00:00 2001 From: Yosuke Ota Date: Fri, 15 May 2020 09:09:06 +0900 Subject: [PATCH] Fixed wrong autofix in no-deprecated-v-on-number-modifiers rule (#1125) --- .../no-deprecated-v-on-number-modifiers.js | 4 +- lib/utils/keycode-to-key.js | 98 +++++++++++++++++ lib/utils/keycode-to-key.json | 100 ------------------ .../no-deprecated-v-on-number-modifiers.js | 49 +++++++++ 4 files changed, 149 insertions(+), 102 deletions(-) create mode 100644 lib/utils/keycode-to-key.js delete mode 100644 lib/utils/keycode-to-key.json diff --git a/lib/rules/no-deprecated-v-on-number-modifiers.js b/lib/rules/no-deprecated-v-on-number-modifiers.js index c9794c13e..971ffdc07 100644 --- a/lib/rules/no-deprecated-v-on-number-modifiers.js +++ b/lib/rules/no-deprecated-v-on-number-modifiers.js @@ -9,7 +9,7 @@ // ------------------------------------------------------------------------------ const utils = require('../utils') -const keyCodeToKey = require('../utils/keycode-to-key.json') +const keyCodeToKey = require('../utils/keycode-to-key') // ------------------------------------------------------------------------------ // Rule Definition @@ -48,7 +48,7 @@ module.exports = { const key = keyCodeToKey[keyCodes] if (!key) return - return fixer.replaceTextRange(modifier.range, `${key}`) + return fixer.replaceText(modifier, `${key}`) } }) } diff --git a/lib/utils/keycode-to-key.js b/lib/utils/keycode-to-key.js new file mode 100644 index 000000000..6f20a93b2 --- /dev/null +++ b/lib/utils/keycode-to-key.js @@ -0,0 +1,98 @@ +// https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values +module.exports = { + '8': 'backspace', + '9': 'tab', + '13': 'enter', + '16': 'shift', + '17': 'ctrl', + '18': 'alt', + '19': 'pause', // windows + '20': 'caps-lock', + '27': 'escape', + '32': 'space', // Vue.js specially key name. + '33': 'page-up', + '34': 'page-down', + '35': 'end', + '36': 'home', + '37': 'arrow-left', + '38': 'arrow-up', + '39': 'arrow-right', + '40': 'arrow-down', + '45': 'insert', // windows + '46': 'delete', + + // If mistakenly use it in Vue.js 2.x, it will be irreversibly broken. Therefore, it will not be autofix. + // '48': '0', + // '49': '1', + // '50': '2', + // '51': '3', + // '52': '4', + // '53': '5', + // '54': '6', + // '55': '7', + // '56': '8', + // '57': '9', + + '65': 'a', + '66': 'b', + '67': 'c', + '68': 'd', + '69': 'e', + '70': 'f', + '71': 'g', + '72': 'h', + '73': 'i', + '74': 'j', + '75': 'k', + '76': 'l', + '77': 'm', + '78': 'n', + '79': 'o', + '80': 'p', + '81': 'q', + '82': 'r', + '83': 's', + '84': 't', + '85': 'u', + '86': 'v', + '87': 'w', + '88': 'x', + '89': 'y', + '90': 'z', + + // The key value may change depending on the OS. + // '91': 'meta' ,// Win: 'os'? + // '92': 'meta', // Win: 'meta' Mac: ? + // '93': 'meta', // Win: 'context-menu' Mac: 'meta' + + // Cannot determine numpad with key. + // '96': 'numpad-0', + // '97': 'numpad-1', + // '98': 'numpad-2', + // '99': 'numpad-3', + // '100': 'numpad-4', + // '101': 'numpad-5', + // '102': 'numpad-6', + // '103': 'numpad-7', + // '104': 'numpad-8', + // '105': 'numpad-9', + // '106': 'multiply', + // '107': 'add', + // '109': 'subtract', + // '110': 'decimal', + // '111': 'divide', + '112': 'f1', + '113': 'f2', + '114': 'f3', + '115': 'f4', + '116': 'f5', + '117': 'f6', + '118': 'f7', + '119': 'f8', + '120': 'f9', + '121': 'f10', + '122': 'f11', + '123': 'f12', + '144': 'num-lock', + '145': 'scroll-lock' +} diff --git a/lib/utils/keycode-to-key.json b/lib/utils/keycode-to-key.json deleted file mode 100644 index 43f480302..000000000 --- a/lib/utils/keycode-to-key.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "8": "backspace", - "9": "tab", - "13": "enter", - "16": "shift", - "17": "ctrl", - "18": "alt", - "19": "pause-break", - "20": "caps-lock", - "27": "escape", - "33": "page-up", - "34": "page-down", - "35": "end", - "36": "home", - "37": "left-arrow", - "38": "up-arrow", - "39": "right-arrow", - "40": "down-arrow", - "45": "insert", - "46": "delete", - "48": "0", - "49": "1", - "50": "2", - "51": "3", - "52": "4", - "53": "5", - "54": "6", - "55": "7", - "56": "8", - "57": "9", - "65": "a", - "66": "b", - "67": "c", - "68": "d", - "69": "e", - "70": "f", - "71": "g", - "72": "h", - "73": "i", - "74": "j", - "75": "k", - "76": "l", - "77": "m", - "78": "n", - "79": "o", - "80": "p", - "81": "q", - "82": "r", - "83": "s", - "84": "t", - "85": "u", - "86": "v", - "87": "w", - "88": "x", - "89": "y", - "90": "z", - "91": "left-window-key", - "92": "right-window-key", - "93": "select-key", - "96": "numpad-0", - "97": "numpad-1", - "98": "numpad-2", - "99": "numpad-3", - "100": "numpad-4", - "101": "numpad-5", - "102": "numpad-6", - "103": "numpad-7", - "104": "numpad-8", - "105": "numpad-9", - "106": "multiply", - "107": "add", - "109": "subtract", - "110": "decimal-point", - "111": "divide", - "112": "f1", - "113": "f2", - "114": "f3", - "115": "f4", - "116": "f5", - "117": "f6", - "118": "f7", - "119": "f8", - "120": "f9", - "121": "f10", - "122": "f11", - "123": "f12", - "144": "num-lock", - "145": "scroll-lock", - "186": "semi-colon", - "187": "equal-sign", - "188": "comma", - "189": "dash", - "190": "period", - "191": "forward-slash", - "192": "grave-accent", - "219": "open-bracket", - "220": "back-slash", - "221": "close-braket", - "222": "single-quote" -} diff --git a/tests/lib/rules/no-deprecated-v-on-number-modifiers.js b/tests/lib/rules/no-deprecated-v-on-number-modifiers.js index 8c6d72698..f2e119069 100644 --- a/tests/lib/rules/no-deprecated-v-on-number-modifiers.js +++ b/tests/lib/rules/no-deprecated-v-on-number-modifiers.js @@ -169,6 +169,55 @@ ruleTester.run('no-deprecated-v-bind-sync', rule, { code: "", output: null, errors: ["'KeyboardEvent.keyCode' modifier on 'v-on' directive is deprecated. Using 'KeyboardEvent.key' instead."] + }, + { + filename: 'test.vue', + code: ` + `, + output: null, + errors: [ + "'KeyboardEvent.keyCode' modifier on 'v-on' directive is deprecated. Using 'KeyboardEvent.key' instead.", + "'KeyboardEvent.keyCode' modifier on 'v-on' directive is deprecated. Using 'KeyboardEvent.key' instead.", + "'KeyboardEvent.keyCode' modifier on 'v-on' directive is deprecated. Using 'KeyboardEvent.key' instead.", + "'KeyboardEvent.keyCode' modifier on 'v-on' directive is deprecated. Using 'KeyboardEvent.key' instead.", + "'KeyboardEvent.keyCode' modifier on 'v-on' directive is deprecated. Using 'KeyboardEvent.key' instead.", + "'KeyboardEvent.keyCode' modifier on 'v-on' directive is deprecated. Using 'KeyboardEvent.key' instead.", + "'KeyboardEvent.keyCode' modifier on 'v-on' directive is deprecated. Using 'KeyboardEvent.key' instead." + ] + }, + { + filename: 'test.vue', + code: ` + `, + output: ` + `, + errors: [ + "'KeyboardEvent.keyCode' modifier on 'v-on' directive is deprecated. Using 'KeyboardEvent.key' instead.", + "'KeyboardEvent.keyCode' modifier on 'v-on' directive is deprecated. Using 'KeyboardEvent.key' instead.", + "'KeyboardEvent.keyCode' modifier on 'v-on' directive is deprecated. Using 'KeyboardEvent.key' instead.", + "'KeyboardEvent.keyCode' modifier on 'v-on' directive is deprecated. Using 'KeyboardEvent.key' instead.", + "'KeyboardEvent.keyCode' modifier on 'v-on' directive is deprecated. Using 'KeyboardEvent.key' instead." + ] } ] })