From b11dab99d1bd2e84d7059b29fb9a4982f8ff4d5f Mon Sep 17 00:00:00 2001 From: Evan You Date: Mon, 15 Apr 2024 16:06:33 +0800 Subject: [PATCH] chore: more descriptive eslint error messages for restricted syntax --- .eslintrc.cjs | 24 +++++++++++++++++------- rollup.config.js | 4 ++-- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 65653f40da2..0a44fb79aa9 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -26,13 +26,23 @@ module.exports = { 'no-restricted-syntax': [ 'error', banConstEnum, - // since we target ES2015 for baseline support, we need to forbid object - // rest spread usage in destructure as it compiles into a verbose helper. - 'ObjectPattern > RestElement', - // tsc compiles assignment spread into Object.assign() calls, but esbuild - // still generates verbose helpers, so spread assignment is also prohiboted - 'ObjectExpression > SpreadElement', - 'AwaitExpression', + { + selector: 'ObjectPattern > RestElement', + message: + 'Our output target is ES2016, and object rest spread results in ' + + 'verbose helpers and should be avoided.', + }, + { + selector: 'ObjectExpression > SpreadElement', + message: + 'esbuild transpiles object spread into very verbose inline helpers.\n' + + 'Please use the `extend` helper from @vue/shared instead.', + }, + { + selector: 'AwaitExpression', + message: + 'Our output target is ES2016, so async/await syntax should be avoided.', + }, ], 'sort-imports': ['error', { ignoreDeclarationSort: true }], diff --git a/rollup.config.js b/rollup.config.js index 6ab5ca4294a..e8d5984184d 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -331,7 +331,7 @@ function createConfig(format, output, plugins = []) { tsconfig: path.resolve(__dirname, 'tsconfig.json'), sourceMap: output.sourcemap, minify: false, - target: isServerRenderer || isCJSBuild ? 'es2019' : 'es2015', + target: isServerRenderer || isCJSBuild ? 'es2019' : 'es2016', define: resolveDefine(), }), ...resolveNodePlugins(), @@ -367,7 +367,7 @@ function createMinifiedConfig(/** @type {PackageFormat} */ format) { terser({ module: /^esm/.test(format), compress: { - ecma: 2015, + ecma: 2016, pure_getters: true, }, safari10: true,