Explorar o código

wip: generate codeframe for compiler deprecations

Evan You %!s(int64=5) %!d(string=hai) anos
pai
achega
79cbf21c3e

+ 4 - 9
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)
 }

+ 1 - 1
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
 }
 

+ 18 - 13
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

+ 17 - 12
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