]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(compiler-vapor): source map position
author三咲智子 Kevin Deng <sxzz@sxzz.moe>
Wed, 31 Jan 2024 07:43:37 +0000 (15:43 +0800)
committer三咲智子 Kevin Deng <sxzz@sxzz.moe>
Wed, 31 Jan 2024 07:43:37 +0000 (15:43 +0800)
packages/compiler-vapor/src/generate.ts
packages/compiler-vapor/src/generators/expression.ts
packages/compiler-vapor/src/generators/prop.ts

index 1b26c7a025ed3f5b4f5b1034549d03d6528037e1..04ba18b04253d517fd7358606879bbc77d92b63a 100644 (file)
@@ -193,9 +193,7 @@ export function generate(
 
 function genCodeFragment(context: CodegenContext) {
   let codegen = ''
-  let line = 1
-  let column = 1
-  let offset = 0
+  const pos = { line: 1, column: 1, offset: 0 }
 
   for (let frag of context.code) {
     if (!frag) continue
@@ -208,10 +206,10 @@ function genCodeFragment(context: CodegenContext) {
       if (loc) addMapping(loc.start, name)
       if (newlineIndex === NewlineType.Unknown) {
         // multiple newlines, full iteration
-        advancePositionWithMutation({ line, column, offset }, code)
+        advancePositionWithMutation(pos, code)
       } else {
         // fast paths
-        offset += code.length
+        pos.offset += code.length
         if (newlineIndex === NewlineType.None) {
           // no newlines; fast path to avoid newline detection
           if (__TEST__ && code.includes('\n')) {
@@ -220,7 +218,7 @@ function genCodeFragment(context: CodegenContext) {
                 `newlines: ${code.replace(/\n/g, '\\n')}`,
             )
           }
-          column += code.length
+          pos.column += code.length
         } else {
           // single newline at known index
           if (newlineIndex === NewlineType.End) {
@@ -237,8 +235,8 @@ function genCodeFragment(context: CodegenContext) {
                 `but does not conform: ${code.replace(/\n/g, '\\n')}`,
             )
           }
-          line++
-          column = code.length - newlineIndex
+          pos.line++
+          pos.column = code.length - newlineIndex
         }
       }
       if (loc && loc !== locStub) {
@@ -258,8 +256,8 @@ function genCodeFragment(context: CodegenContext) {
     _mappings.add({
       originalLine: loc.line,
       originalColumn: loc.column - 1, // source-map column is 0 based
-      generatedLine: line,
-      generatedColumn: column - 1,
+      generatedLine: pos.line,
+      generatedColumn: pos.column - 1,
       source: context.options.filename,
       // @ts-expect-error it is possible to be null
       name,
index ba8c1d71f355d73e06a5c57044c4ce2c1cfd234a..742811ea866728dedd70570a604beec856fdc66f 100644 (file)
@@ -84,7 +84,7 @@ export function genExpression(
     })
     return frag
   } else {
-    return [[rawExpr, NewlineType.Unknown]]
+    return [[rawExpr, NewlineType.Unknown, loc]]
   }
 }
 
index 0387d10499e389ac96d3ecd67e652e5e35664199..6c326da350305a53ca5bec05f4135a135ab79bed 100644 (file)
@@ -10,7 +10,8 @@ export function genSetProp(
   const { call, newline, vaporHelper, helper } = context
 
   const element = `n${oper.element}`
-  const expr = genExpression(oper.key, context)
+  const key = genExpression(oper.key, context)
+  const value = genExpression(oper.value, context)
 
   // fast path for static props
   if (isString(oper.key) || oper.key.isStatic) {
@@ -31,33 +32,23 @@ export function genSetProp(
     if (helperName) {
       return [
         newline(),
-        ...call(
-          vaporHelper(helperName),
-          element,
-          omitKey ? false : expr,
-          genExpression(oper.value, context),
-        ),
+        ...call(vaporHelper(helperName), element, omitKey ? false : key, value),
       ]
     }
   }
 
   return [
     newline(),
-    ...call(
-      vaporHelper('setDynamicProp'),
-      element,
-      genDynamicKey(),
-      genExpression(oper.value, context),
-    ),
+    ...call(vaporHelper('setDynamicProp'), element, genDynamicKey(), value),
   ]
 
   function genDynamicKey(): CodeFragment[] {
     if (oper.runtimeCamelize) {
-      return call(helper('camelize'), expr)
+      return call(helper('camelize'), key)
     } else if (oper.modifier) {
-      return [`\`${oper.modifier}\${`, ...expr, `}\``]
+      return [`\`${oper.modifier}\${`, ...key, `}\``]
     } else {
-      return expr
+      return key
     }
   }
 }