소스 검색

wip: refactor

Evan You 5 년 전
부모
커밋
1390ece04f
3개의 변경된 파일24개의 추가작업 그리고 33개의 파일을 삭제
  1. 21 14
      packages/compiler-core/src/parse.ts
  2. 3 3
      packages/compiler-core/src/transforms/transformElement.ts
  3. 0 16
      packages/compiler-core/src/transforms/vBind.ts

+ 21 - 14
packages/compiler-core/src/parse.ts

@@ -748,20 +748,27 @@ function parseAttribute(
     const modifiers = match[3] ? match[3].substr(1).split('.') : []
 
     // 2.x compat v-bind:foo.sync -> v-model:foo
-    if (
-      __COMPAT__ &&
-      dirName === 'bind' &&
-      arg &&
-      modifiers.includes('sync') &&
-      checkCompatEnabled(
-        CompilerDeprecationTypes.COMPILER_V_BIND_SYNC,
-        context,
-        loc,
-        arg.loc.source
-      )
-    ) {
-      dirName = 'model'
-      modifiers.splice(modifiers.indexOf('sync'), 1)
+    if (__COMPAT__ && dirName === 'bind' && arg) {
+      if (
+        modifiers.includes('sync') &&
+        checkCompatEnabled(
+          CompilerDeprecationTypes.COMPILER_V_BIND_SYNC,
+          context,
+          loc,
+          arg.loc.source
+        )
+      ) {
+        dirName = 'model'
+        modifiers.splice(modifiers.indexOf('sync'), 1)
+      }
+
+      if (__DEV__ && modifiers.includes('prop')) {
+        checkCompatEnabled(
+          CompilerDeprecationTypes.COMPILER_V_BIND_PROP,
+          context,
+          loc
+        )
+      }
     }
 
     return {

+ 3 - 3
packages/compiler-core/src/transforms/transformElement.ts

@@ -92,6 +92,7 @@ export const transformElement: NodeTransform = (node, context) => {
       ? resolveComponentType(node as ComponentNode, context)
       : `"${tag}"`
 
+    // 2.x <template> with no directives compat
     if (
       __COMPAT__ &&
       tag === 'template' &&
@@ -261,9 +262,7 @@ export function resolveComponentType(
       // if not <component>, only is value that starts with "vue:" will be
       // treated as component by the parse phase and reach here, unless it's
       // compat mode where all is values are considered components
-      tag = __COMPAT__
-        ? isProp.value!.content.replace(/^vue:/, '')
-        : isProp.value!.content.slice(4)
+      tag = isProp.value!.content.replace(/^vue:/, '')
     } else {
       const exp =
         isProp.type === NodeTypes.ATTRIBUTE
@@ -509,6 +508,7 @@ export function buildProps(
           }
           if (isVBind) {
             if (__COMPAT__) {
+              // 2.x v-bind object order compat
               if (__DEV__) {
                 const hasOverridableKeys = mergeArgs.some(arg => {
                   if (arg.type === NodeTypes.JS_OBJECT_EXPRESSION) {

+ 0 - 16
packages/compiler-core/src/transforms/vBind.ts

@@ -3,10 +3,6 @@ import { createObjectProperty, createSimpleExpression, NodeTypes } from '../ast'
 import { createCompilerError, ErrorCodes } from '../errors'
 import { camelize } from '@vue/shared'
 import { CAMELIZE } from '../runtimeHelpers'
-import {
-  checkCompatEnabled,
-  CompilerDeprecationTypes
-} from '../compat/compatConfig'
 
 // v-bind without arg is handled directly in ./transformElements.ts due to it affecting
 // codegen for the entire props object. This transform here is only for v-bind
@@ -37,18 +33,6 @@ export const transformBind: DirectiveTransform = (dir, _node, context) => {
     }
   }
 
-  if (__COMPAT__) {
-    if (modifiers.includes('prop')) {
-      checkCompatEnabled(
-        CompilerDeprecationTypes.COMPILER_V_BIND_PROP,
-        context,
-        loc
-      )
-    }
-    // .sync handling is performed directly in the parse phase to transform
-    // it into v-model:arg equivalent.
-  }
-
   if (
     !exp ||
     (exp.type === NodeTypes.SIMPLE_EXPRESSION && !exp.content.trim())