]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(runtime-core): fix component name inference in warnings
authorEvan You <yyx990803@gmail.com>
Fri, 26 Jun 2020 13:28:15 +0000 (09:28 -0400)
committerEvan You <yyx990803@gmail.com>
Fri, 26 Jun 2020 13:28:15 +0000 (09:28 -0400)
Should not pollute component definition name property
fix #1418

packages/runtime-core/src/component.ts
packages/runtime-core/src/helpers/resolveAssets.ts
packages/runtime-core/src/profiling.ts
packages/runtime-core/src/warning.ts

index 2e8e56aa8b1d319c632cd49b68ee5a8362300d1e..ebd46ae6d575d5c524e885d804b447004ea30538 100644 (file)
@@ -682,6 +682,7 @@ const classify = (str: string): string =>
   str.replace(classifyRE, c => c.toUpperCase()).replace(/[-_]/g, '')
 
 export function formatComponentName(
+  instance: ComponentInternalInstance | null,
   Component: Component,
   isRoot = false
 ): string {
@@ -694,5 +695,17 @@ export function formatComponentName(
       name = match[1]
     }
   }
+
+  if (!name && instance && instance.parent) {
+    // try to infer the name based on local resolution
+    const registry = instance.parent.components
+    for (const key in registry) {
+      if (registry[key] === Component) {
+        name = key
+        break
+      }
+    }
+  }
+
   return name ? classify(name) : isRoot ? `App` : `Anonymous`
 }
index 3f11cc9aa71ef453e1b078058840880ca3eeb559..268de161c36c63d4c6a2114c69fdc9e1dc774c34 100644 (file)
@@ -82,19 +82,8 @@ function resolveAsset(
         res = self
       }
     }
-    if (__DEV__) {
-      if (res) {
-        // in dev, infer anonymous component's name based on registered name
-        if (
-          type === COMPONENTS &&
-          isObject(res) &&
-          !(res as ComponentOptions).name
-        ) {
-          ;(res as ComponentOptions).name = name
-        }
-      } else if (warnMissing) {
-        warn(`Failed to resolve ${type.slice(0, -1)}: ${name}`)
-      }
+    if (__DEV__ && warnMissing && !res) {
+      warn(`Failed to resolve ${type.slice(0, -1)}: ${name}`)
     }
     return res
   } else if (__DEV__) {
index 4dd77f14a3024009f268987c0184a3304b810697..6dbc8c29627259bed0c578c230411e6b92749bb8 100644 (file)
@@ -17,11 +17,7 @@ export function endMeasure(instance: ComponentInternalInstance, type: string) {
     const startTag = `vue-${type}-${instance.uid}`
     const endTag = startTag + `:end`
     perf.mark(endTag)
-    perf.measure(
-      `<${formatComponentName(instance.type)}> ${type}`,
-      startTag,
-      endTag
-    )
+    perf.measure(`<${formatComponentName(instance)}> ${type}`, startTag, endTag)
     perf.clearMarks(startTag)
     perf.clearMarks(endTag)
   }
index aeeefe3988d8207dc15443b4bfd43d9066760680..07f8a27b7f9157e693170baf75f19e15c8c99cb5 100644 (file)
@@ -48,7 +48,9 @@ export function warn(msg: string, ...args: any[]) {
         msg + args.join(''),
         instance && instance.proxy,
         trace
-          .map(({ vnode }) => `at <${formatComponentName(vnode.type)}>`)
+          .map(
+            ({ vnode }) => `at <${formatComponentName(instance, vnode.type)}>`
+          )
           .join('\n'),
         trace
       ]
@@ -109,7 +111,11 @@ function formatTraceEntry({ vnode, recurseCount }: TraceEntry): any[] {
   const postfix =
     recurseCount > 0 ? `... (${recurseCount} recursive calls)` : ``
   const isRoot = vnode.component ? vnode.component.parent == null : false
-  const open = ` at <${formatComponentName(vnode.type, isRoot)}`
+  const open = ` at <${formatComponentName(
+    vnode.component,
+    vnode.type,
+    isRoot
+  )}`
   const close = `>` + postfix
   return vnode.props
     ? [open, ...formatProps(vnode.props), close]