diff --git a/packages/language-core/lib/codegen/template/elementEvents.ts b/packages/language-core/lib/codegen/template/elementEvents.ts index e3620c23ed..5f061139f0 100644 --- a/packages/language-core/lib/codegen/template/elementEvents.ts +++ b/packages/language-core/lib/codegen/template/elementEvents.ts @@ -41,7 +41,7 @@ export function* generateElementEvents( if (!options.vueCompilerOptions.strictTemplates) { yield `Record & `; } - yield `Partial<`; + yield `Partial<${newLine}`; yield `__VLS_IsAny<__VLS_AsFunctionOrAny> extends false${newLine}`; yield `? typeof ${propsVar}${newLine}`; yield `: __VLS_IsAny extends false${newLine}`; @@ -58,7 +58,7 @@ export function* generateElementEvents( } yield `: typeof ${propsVar}${newLine}`; yield `> = {${newLine}`; - yield* generateEventArg(options, ctx, prop.arg, true); + yield* generateEventArg(ctx, prop.arg, true); yield `: `; yield* generateEventExpression(options, ctx, prop); yield `}${endOfLine}`; @@ -104,7 +104,6 @@ const eventArgFeatures: VueCodeInformation = { }; export function* generateEventArg( - options: TemplateCodegenOptions, ctx: TemplateCodegenContext, arg: CompilerDOM.SimpleExpressionNode, enableHover: boolean, @@ -115,21 +114,7 @@ export function* generateEventArg( ...eventArgFeatures, } : eventArgFeatures; - if (arg.loc.source.startsWith('[') && arg.loc.source.endsWith(']')) { - yield `[`; - yield* generateInterpolation( - options, - ctx, - arg.loc.source.slice(1, -1), - arg.loc, - arg.loc.start.offset + 1, - ctx.codeFeatures.all, - '', - '', - ); - yield `]`; - } - else if (variableNameRegex.test(camelize(arg.loc.source))) { + if (variableNameRegex.test(camelize(arg.loc.source))) { yield ['', 'template', arg.loc.start.offset, features]; yield `on`; yield* generateCamelized( diff --git a/packages/language-core/lib/codegen/template/elementProps.ts b/packages/language-core/lib/codegen/template/elementProps.ts index 11a0a94861..c18eb69fff 100644 --- a/packages/language-core/lib/codegen/template/elementProps.ts +++ b/packages/language-core/lib/codegen/template/elementProps.ts @@ -42,14 +42,27 @@ export function* generateElementProps( if ( prop.type === CompilerDOM.NodeTypes.DIRECTIVE && prop.name === 'on' + && prop.arg?.type === CompilerDOM.NodeTypes.SIMPLE_EXPRESSION + && !prop.arg.loc.source.startsWith('[') + && !prop.arg.loc.source.endsWith(']') + ) { + yield* generateEventArg(ctx, prop.arg, true); + yield `: `; + yield* generateEventExpression(options, ctx, prop); + yield `,${newLine}`; + } + else if ( + prop.type === CompilerDOM.NodeTypes.DIRECTIVE + && prop.name === 'on' ) { - if (prop.arg?.type === CompilerDOM.NodeTypes.SIMPLE_EXPRESSION) { - yield* generateEventArg(options, ctx, prop.arg, true); - yield `: `; - yield* generateEventExpression(options, ctx, prop); - yield `,${newLine}`; + if ( + prop.arg?.type === CompilerDOM.NodeTypes.SIMPLE_EXPRESSION + && prop.arg.loc.source.startsWith('[') + && prop.arg.loc.source.endsWith(']') + ) { + propsFailedExps?.push(prop.arg); } - else if (prop.exp?.type === CompilerDOM.NodeTypes.SIMPLE_EXPRESSION) { + if (prop.exp?.type === CompilerDOM.NodeTypes.SIMPLE_EXPRESSION) { propsFailedExps?.push(prop.exp); } }