From: Evan You Date: Fri, 16 Apr 2021 15:51:47 +0000 (-0400) Subject: wip: generate codeframe for compiler deprecations X-Git-Tag: v3.1.0-beta.1~59^2~36 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=79cbf21c3e6bba965ad117b027d4a96d2a1d7cf2;p=thirdparty%2Fvuejs%2Fcore.git wip: generate codeframe for compiler deprecations --- diff --git a/packages/compiler-core/src/compat/compatConfig.ts b/packages/compiler-core/src/compat/compatConfig.ts index 92e2c63db4..3c69e00c8f 100644 --- a/packages/compiler-core/src/compat/compatConfig.ts +++ b/packages/compiler-core/src/compat/compatConfig.ts @@ -124,13 +124,8 @@ export function warnDeprecation( typeof message === 'function' ? message(...args) : message }${link ? `\n Details: ${link}` : ``}` - if (loc) { - const err = new SyntaxError(msg) as CompilerError - err.code = key - err.loc = loc - context.onWarn(err) - return - } - - context.onWarn(msg) + const err = new SyntaxError(msg) as CompilerError + err.code = key + if (loc) err.loc = loc + context.onWarn(err) } diff --git a/packages/compiler-core/src/options.ts b/packages/compiler-core/src/options.ts index 62fd2f1cb2..08cb12d89d 100644 --- a/packages/compiler-core/src/options.ts +++ b/packages/compiler-core/src/options.ts @@ -10,7 +10,7 @@ import { CompilerCompatOptions } from './compat/compatConfig' import { ParserPlugin } from '@babel/parser' export interface ErrorHandlingOptions { - onWarn?: (msg: string | CompilerError) => void + onWarn?: (warning: CompilerError) => void onError?: (error: CompilerError) => void } diff --git a/packages/vue-compat/src/index.ts b/packages/vue-compat/src/index.ts index 09036c5d4f..abd669d0cc 100644 --- a/packages/vue-compat/src/index.ts +++ b/packages/vue-compat/src/index.ts @@ -1,7 +1,7 @@ // This entry is the "full-build" that includes both the runtime // and the compiler, and supports on-the-fly compilation of the template option. import { initDev } from './dev' -import { compile, CompilerOptions, CompilerError } from '@vue/compiler-dom' +import { compile, CompilerError, CompilerOptions } from '@vue/compiler-dom' import { registerRuntimeCompiler, RenderFunction, @@ -55,27 +55,32 @@ function compileToFunction( extend( { hoistStatic: true, - onError(err: CompilerError) { + onError(err) { if (__DEV__) { - const message = `Template compilation error: ${err.message}` - const codeFrame = - err.loc && - generateCodeFrame( - template as string, - err.loc.start.offset, - err.loc.end.offset - ) - warn(codeFrame ? `${message}\n${codeFrame}` : message) + onError(err) } else { /* istanbul ignore next */ throw err } - } - }, + }, + onWarn: __DEV__ ? onError : NOOP + } as CompilerOptions, options ) ) + function onError(err: CompilerError) { + const message = `Template compilation error: ${err.message}` + const codeFrame = + err.loc && + generateCodeFrame( + template as string, + err.loc.start.offset, + err.loc.end.offset + ) + warn(codeFrame ? `${message}\n${codeFrame}` : message) + } + // The wildcard import results in a huge object with every export // with keys that cannot be mangled, and can be quite heavy size-wise. // In the global build we know `Vue` is available globally so we can avoid diff --git a/packages/vue/src/index.ts b/packages/vue/src/index.ts index 4874bb0d5f..ced879a928 100644 --- a/packages/vue/src/index.ts +++ b/packages/vue/src/index.ts @@ -49,27 +49,32 @@ function compileToFunction( extend( { hoistStatic: true, - onError(err: CompilerError) { + onError(err) { if (__DEV__) { - const message = `Template compilation error: ${err.message}` - const codeFrame = - err.loc && - generateCodeFrame( - template as string, - err.loc.start.offset, - err.loc.end.offset - ) - warn(codeFrame ? `${message}\n${codeFrame}` : message) + onError(err) } else { /* istanbul ignore next */ throw err } - } - }, + }, + onWarn: __DEV__ ? onError : NOOP + } as CompilerOptions, options ) ) + function onError(err: CompilerError) { + const message = `Template compilation error: ${err.message}` + const codeFrame = + err.loc && + generateCodeFrame( + template as string, + err.loc.start.offset, + err.loc.end.offset + ) + warn(codeFrame ? `${message}\n${codeFrame}` : message) + } + // The wildcard import results in a huge object with every export // with keys that cannot be mangled, and can be quite heavy size-wise. // In the global build we know `Vue` is available globally so we can avoid