From cb87b6213d7b003fa7280712c285c7c9d9f291ca Mon Sep 17 00:00:00 2001 From: Evan You Date: Wed, 7 Feb 2024 12:15:39 +0800 Subject: [PATCH] fix(compiler-core): handle same-name shorthand edge case for in-DOM templates Also add error for invalid arguments for same-name shorthand. close #10280 --- .../__tests__/transforms/vBind.spec.ts | 18 +++++++ packages/compiler-core/src/errors.ts | 2 + .../compiler-core/src/transforms/vBind.ts | 52 ++++++++++++++----- 3 files changed, 59 insertions(+), 13 deletions(-) diff --git a/packages/compiler-core/__tests__/transforms/vBind.spec.ts b/packages/compiler-core/__tests__/transforms/vBind.spec.ts index 84b9ee8ca4..be063b8a9d 100644 --- a/packages/compiler-core/__tests__/transforms/vBind.spec.ts +++ b/packages/compiler-core/__tests__/transforms/vBind.spec.ts @@ -408,4 +408,22 @@ describe('compiler: transform v-bind', () => { }, }) }) + + test('error on invalid argument for same-name shorthand', () => { + const onError = vi.fn() + parseWithVBind(`
`, { onError }) + expect(onError.mock.calls[0][0]).toMatchObject({ + code: ErrorCodes.X_V_BIND_INVALID_SAME_NAME_ARGUMENT, + loc: { + start: { + line: 1, + column: 13, + }, + end: { + line: 1, + column: 18, + }, + }, + }) + }) }) diff --git a/packages/compiler-core/src/errors.ts b/packages/compiler-core/src/errors.ts index 6728a80d44..cd6a443c5c 100644 --- a/packages/compiler-core/src/errors.ts +++ b/packages/compiler-core/src/errors.ts @@ -78,6 +78,7 @@ export enum ErrorCodes { X_V_FOR_MALFORMED_EXPRESSION, X_V_FOR_TEMPLATE_KEY_PLACEMENT, X_V_BIND_NO_EXPRESSION, + X_V_BIND_INVALID_SAME_NAME_ARGUMENT, X_V_ON_NO_EXPRESSION, X_V_SLOT_UNEXPECTED_DIRECTIVE_ON_SLOT_OUTLET, X_V_SLOT_MIXED_SLOT_USAGE, @@ -156,6 +157,7 @@ export const errorMessages: Record = { [ErrorCodes.X_V_FOR_MALFORMED_EXPRESSION]: `v-for has invalid expression.`, [ErrorCodes.X_V_FOR_TEMPLATE_KEY_PLACEMENT]: `