diff --git a/packages/compiler-core/__tests__/transforms/__snapshots__/transformElement.spec.ts.snap b/packages/compiler-core/__tests__/transforms/__snapshots__/transformElement.spec.ts.snap index 3da778eb6..2be889209 100644 --- a/packages/compiler-core/__tests__/transforms/__snapshots__/transformElement.spec.ts.snap +++ b/packages/compiler-core/__tests__/transforms/__snapshots__/transformElement.spec.ts.snap @@ -45,6 +45,20 @@ return function render(_ctx, _cache) { }" `; +exports[`compiler: v-for > codegen > no whitespace around (in|of) with basic v-for 1`] = ` +"const _Vue = Vue + +return function render(_ctx, _cache) { + with (_ctx) { + const { renderList: _renderList, Fragment: _Fragment, openBlock: _openBlock, createElementBlock: _createElementBlock } = _Vue + + return (_openBlock(true), _createElementBlock(_Fragment, null, _renderList([items], (item) => { + return (_openBlock(), _createElementBlock("span")) + }), 256 /* UNKEYED_FRAGMENT */)) + } +}" +`; + exports[`compiler: v-for > codegen > skipped key 1`] = ` "const _Vue = Vue diff --git a/packages/compiler-core/__tests__/transforms/__snapshots__/vFor.spec.ts.snap b/packages/compiler-core/__tests__/transforms/__snapshots__/vFor.spec.ts.snap index 3da778eb6..2be889209 100644 --- a/packages/compiler-core/__tests__/transforms/__snapshots__/vFor.spec.ts.snap +++ b/packages/compiler-core/__tests__/transforms/__snapshots__/vFor.spec.ts.snap @@ -45,6 +45,20 @@ return function render(_ctx, _cache) { }" `; +exports[`compiler: v-for > codegen > no whitespace around (in|of) with basic v-for 1`] = ` +"const _Vue = Vue + +return function render(_ctx, _cache) { + with (_ctx) { + const { renderList: _renderList, Fragment: _Fragment, openBlock: _openBlock, createElementBlock: _createElementBlock } = _Vue + + return (_openBlock(true), _createElementBlock(_Fragment, null, _renderList([items], (item) => { + return (_openBlock(), _createElementBlock("span")) + }), 256 /* UNKEYED_FRAGMENT */)) + } +}" +`; + exports[`compiler: v-for > codegen > skipped key 1`] = ` "const _Vue = Vue diff --git a/packages/compiler-core/__tests__/transforms/vFor.spec.ts b/packages/compiler-core/__tests__/transforms/vFor.spec.ts index fead2476a..6a5c74382 100644 --- a/packages/compiler-core/__tests__/transforms/vFor.spec.ts +++ b/packages/compiler-core/__tests__/transforms/vFor.spec.ts @@ -218,6 +218,43 @@ describe('compiler: v-for', () => { "state ['my items']", ) }) + + test('no whitespace around (in|of) with simple expression', () => { + const { node: forNode } = parseWithForTransform( + '', + ) + + expect(forNode.keyAlias).toBeUndefined() + expect(forNode.objectIndexAlias).toBeUndefined() + expect((forNode.valueAlias as SimpleExpressionNode).content).toBe('item') + expect((forNode.source as SimpleExpressionNode).content).toBe('[items]') + }) + + test('no whitespace around (in|of) with object de-structured value', () => { + const { node: forNode } = parseWithForTransform( + '', + ) + + expect(forNode.keyAlias).toBeUndefined() + expect(forNode.objectIndexAlias).toBeUndefined() + expect((forNode.valueAlias as SimpleExpressionNode).content).toBe( + '{ id, value }', + ) + expect((forNode.source as SimpleExpressionNode).content).toBe('[item]') + }) + + test('no whitespace around (in|of) with array de-structured value', () => { + const { node: forNode } = parseWithForTransform( + '', + ) + + expect(forNode.keyAlias).toBeUndefined() + expect(forNode.objectIndexAlias).toBeUndefined() + expect((forNode.valueAlias as SimpleExpressionNode).content).toBe( + '[ id ]', + ) + expect((forNode.source as SimpleExpressionNode).content).toBe('[item]') + }) }) describe('errors', () => { @@ -257,6 +294,18 @@ describe('compiler: v-for', () => { ) }) + test('invalid expression containing (in|of)', () => { + const onError = vi.fn() + parseWithForTransform('', { onError }) + + expect(onError).toHaveBeenCalledTimes(1) + expect(onError).toHaveBeenCalledWith( + expect.objectContaining({ + code: ErrorCodes.X_V_FOR_MALFORMED_EXPRESSION, + }), + ) + }) + test('missing source', () => { const onError = vi.fn() parseWithForTransform('', { onError }) @@ -293,6 +342,18 @@ describe('compiler: v-for', () => { ) }) + test('missing source and value', () => { + const onError = vi.fn() + parseWithForTransform('', { onError }) + + expect(onError).toHaveBeenCalledTimes(1) + expect(onError).toHaveBeenCalledWith( + expect.objectContaining({ + code: ErrorCodes.X_V_FOR_MALFORMED_EXPRESSION, + }), + ) + }) + test('