From cebd9c376c170d58b293c9abeba4a1a81d257af1 Mon Sep 17 00:00:00 2001 From: linzhe Date: Tue, 9 Jul 2024 20:42:35 +0800 Subject: [PATCH 1/4] fix(compiler-core): When using v-for and v-bind in a template, if v-bind has no expression, an error should be thrown --- packages/compiler-core/src/transforms/vFor.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/packages/compiler-core/src/transforms/vFor.ts b/packages/compiler-core/src/transforms/vFor.ts index 16c48ede067..409f29f8b5e 100644 --- a/packages/compiler-core/src/transforms/vFor.ts +++ b/packages/compiler-core/src/transforms/vFor.ts @@ -93,6 +93,14 @@ export const transformFor = createStructuralDirectiveTransform( context, ) } + if ( + keyExp && + keyExp.type === NodeTypes.SIMPLE_EXPRESSION && + !keyExp.content.trim() + ) + context.onError( + createCompilerError(ErrorCodes.X_V_BIND_NO_EXPRESSION, keyProp.loc), + ) } const isStableFragment = From 4e078bc48e7e376aaccd180bd7153dc089c1ed65 Mon Sep 17 00:00:00 2001 From: linzhe Date: Tue, 9 Jul 2024 20:49:54 +0800 Subject: [PATCH 2/4] chore: update test --- .../__tests__/transforms/vFor.spec.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/packages/compiler-core/__tests__/transforms/vFor.spec.ts b/packages/compiler-core/__tests__/transforms/vFor.spec.ts index 94f75f2a63b..6989dc8994d 100644 --- a/packages/compiler-core/__tests__/transforms/vFor.spec.ts +++ b/packages/compiler-core/__tests__/transforms/vFor.spec.ts @@ -253,6 +253,20 @@ describe('compiler: v-for', () => { ) }) + test('key property missing expression', () => { + const onError = vi.fn() + parseWithForTransform('', { + onError, + }) + + expect(onError).toHaveBeenCalledTimes(1) + expect(onError).toHaveBeenCalledWith( + expect.objectContaining({ + code: ErrorCodes.X_V_BIND_NO_EXPRESSION, + }), + ) + }) + test('missing source', () => { const onError = vi.fn() parseWithForTransform('', { onError }) From 0c74bf5a3130c380783b94a828342a73ff8e3c31 Mon Sep 17 00:00:00 2001 From: linzhe Date: Fri, 12 Jul 2024 11:24:33 +0800 Subject: [PATCH 3/4] fix(compiler-core): When the user defines a key using v-if/else in a template, a compilation error should be thrown --- .../__tests__/transforms/vIf.spec.ts | 26 +++++++++++++++++++ packages/compiler-core/src/errors.ts | 2 ++ packages/compiler-core/src/transforms/vIf.ts | 20 +++++++++++++- 3 files changed, 47 insertions(+), 1 deletion(-) diff --git a/packages/compiler-core/__tests__/transforms/vIf.spec.ts b/packages/compiler-core/__tests__/transforms/vIf.spec.ts index 2c2fedab0d5..4432daec020 100644 --- a/packages/compiler-core/__tests__/transforms/vIf.spec.ts +++ b/packages/compiler-core/__tests__/transforms/vIf.spec.ts @@ -323,6 +323,32 @@ describe('compiler: v-if', () => { }, ]) }) + + test('error on template key', () => { + const onError = vi.fn() + // dynamic + parseWithIfTransform( + `