From: 三咲智子 Kevin Deng Date: Wed, 31 Jan 2024 07:43:37 +0000 (+0800) Subject: fix(compiler-vapor): source map position X-Git-Tag: v3.6.0-alpha.1~16^2~624 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7b036fd4c0522f4a4e96ed83b6461673f1f355f1;p=thirdparty%2Fvuejs%2Fcore.git fix(compiler-vapor): source map position --- diff --git a/packages/compiler-vapor/src/generate.ts b/packages/compiler-vapor/src/generate.ts index 1b26c7a025..04ba18b042 100644 --- a/packages/compiler-vapor/src/generate.ts +++ b/packages/compiler-vapor/src/generate.ts @@ -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, diff --git a/packages/compiler-vapor/src/generators/expression.ts b/packages/compiler-vapor/src/generators/expression.ts index ba8c1d71f3..742811ea86 100644 --- a/packages/compiler-vapor/src/generators/expression.ts +++ b/packages/compiler-vapor/src/generators/expression.ts @@ -84,7 +84,7 @@ export function genExpression( }) return frag } else { - return [[rawExpr, NewlineType.Unknown]] + return [[rawExpr, NewlineType.Unknown, loc]] } } diff --git a/packages/compiler-vapor/src/generators/prop.ts b/packages/compiler-vapor/src/generators/prop.ts index 0387d10499..6c326da350 100644 --- a/packages/compiler-vapor/src/generators/prop.ts +++ b/packages/compiler-vapor/src/generators/prop.ts @@ -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 } } }