fix(compiler-vapor): source map position

This commit is contained in:
三咲智子 Kevin Deng 2024-01-31 15:43:37 +08:00
parent f7642ab77c
commit 7b036fd4c0
No known key found for this signature in database
GPG Key ID: 69992F2250DFD93E
3 changed files with 16 additions and 27 deletions

View 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,

View File

@ -84,7 +84,7 @@ export function genExpression(
})
return frag
} else {
return [[rawExpr, NewlineType.Unknown]]
return [[rawExpr, NewlineType.Unknown, loc]]
}
}

View 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
}
}
}