From: zhiyuanzmj <260480378@qq.com> Date: Fri, 20 Jun 2025 00:43:15 +0000 (+0800) Subject: fix(compiler-vapor): remove types for expressions (#13395) X-Git-Tag: v3.6.0-alpha.1~16^2~11 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2250d415b92aa4882d592e16676ffc815d55b762;p=thirdparty%2Fvuejs%2Fcore.git fix(compiler-vapor): remove types for expressions (#13395) --- diff --git a/packages/compiler-vapor/__tests__/transforms/__snapshots__/vOn.spec.ts.snap b/packages/compiler-vapor/__tests__/transforms/__snapshots__/vOn.spec.ts.snap index cb1a05d2a4..dd00e55267 100644 --- a/packages/compiler-vapor/__tests__/transforms/__snapshots__/vOn.spec.ts.snap +++ b/packages/compiler-vapor/__tests__/transforms/__snapshots__/vOn.spec.ts.snap @@ -123,6 +123,18 @@ export function render(_ctx, $props, $emit, $attrs, $slots) { }" `; +exports[`v-on > expression with type 1`] = ` +"import { delegateEvents as _delegateEvents, template as _template } from 'vue'; +const t0 = _template("
", true) +_delegateEvents("click") + +export function render(_ctx, $props, $emit, $attrs, $slots) { + const n0 = t0() + n0.$evtclick = e => _ctx.handleClick(e) + return n0 +}" +`; + exports[`v-on > function expression w/ prefixIdentifiers: true 1`] = ` "import { delegateEvents as _delegateEvents, template as _template } from 'vue'; const t0 = _template("
", true) diff --git a/packages/compiler-vapor/__tests__/transforms/vOn.spec.ts b/packages/compiler-vapor/__tests__/transforms/vOn.spec.ts index 1ce2169366..aca88c791b 100644 --- a/packages/compiler-vapor/__tests__/transforms/vOn.spec.ts +++ b/packages/compiler-vapor/__tests__/transforms/vOn.spec.ts @@ -682,4 +682,17 @@ describe('v-on', () => { '_delegate(n0, "click", _withModifiers(e => _ctx.test(e), ["stop"]))', ) }) + + test('expression with type', () => { + const { code } = compileWithVOn( + `
`, + { + bindingMetadata: { + handleClick: BindingTypes.SETUP_CONST, + }, + }, + ) + expect(code).matchSnapshot() + expect(code).include('n0.$evtclick = e => _ctx.handleClick(e)') + }) }) diff --git a/packages/compiler-vapor/src/generators/expression.ts b/packages/compiler-vapor/src/generators/expression.ts index 76b04f58d0..845c8bedd6 100644 --- a/packages/compiler-vapor/src/generators/expression.ts +++ b/packages/compiler-vapor/src/generators/expression.ts @@ -10,6 +10,7 @@ import { NewlineType, type SimpleExpressionNode, type SourceLocation, + TS_NODE_TYPES, advancePositionWithClone, createSimpleExpression, isInDestructureAssignment, @@ -63,6 +64,7 @@ export function genExpression( let hasMemberExpression = false if (ids.length) { const [frag, push] = buildCodeFragment() + const isTSNode = ast && TS_NODE_TYPES.includes(ast.type) ids .sort((a, b) => a.start! - b.start!) .forEach((id, i) => { @@ -71,8 +73,10 @@ export function genExpression( const end = id.end! - 1 const last = ids[i - 1] - const leadingText = content.slice(last ? last.end! - 1 : 0, start) - if (leadingText.length) push([leadingText, NewlineType.Unknown]) + if (!(isTSNode && i === 0)) { + const leadingText = content.slice(last ? last.end! - 1 : 0, start) + if (leadingText.length) push([leadingText, NewlineType.Unknown]) + } const source = content.slice(start, end) const parentStack = parentStackMap.get(id)! @@ -99,7 +103,7 @@ export function genExpression( ), ) - if (i === ids.length - 1 && end < content.length) { + if (i === ids.length - 1 && end < content.length && !isTSNode) { push([content.slice(end), NewlineType.Unknown]) } })