From a05b00094869ee7c1a893b9fc5e454045f50db28 Mon Sep 17 00:00:00 2001 From: Evan You Date: Fri, 21 Jan 2022 07:48:41 +0800 Subject: [PATCH] fix(reactivity-transform): apply transform for labelled variable declarations ref https://github.com/vuejs/core/issues/5298#issuecomment-1017970061 --- .../__snapshots__/reactivityTransform.spec.ts.snap | 4 +++- .../__tests__/reactivityTransform.spec.ts | 10 +++++++--- .../reactivity-transform/src/reactivityTransform.ts | 5 +++++ 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/packages/reactivity-transform/__tests__/__snapshots__/reactivityTransform.spec.ts.snap b/packages/reactivity-transform/__tests__/__snapshots__/reactivityTransform.spec.ts.snap index 793ee307632..73b5db93ee6 100644 --- a/packages/reactivity-transform/__tests__/__snapshots__/reactivityTransform.spec.ts.snap +++ b/packages/reactivity-transform/__tests__/__snapshots__/reactivityTransform.spec.ts.snap @@ -10,6 +10,7 @@ exports[`$ unwrapping 1`] = ` })) let c = () => {} let d + label: var e = (ref()) " `; @@ -34,12 +35,13 @@ exports[`$ref & $shallowRef declarations 1`] = ` "import { ref as _ref, shallowRef as _shallowRef } from 'vue' let foo = _ref() - let a = _ref(1) + export let a = _ref(1) let b = _shallowRef({ count: 0 }) let c = () => {} let d + label: var e = _ref() " `; diff --git a/packages/reactivity-transform/__tests__/reactivityTransform.spec.ts b/packages/reactivity-transform/__tests__/reactivityTransform.spec.ts index 916bd5a7d59..9f24d2663e5 100644 --- a/packages/reactivity-transform/__tests__/reactivityTransform.spec.ts +++ b/packages/reactivity-transform/__tests__/reactivityTransform.spec.ts @@ -25,6 +25,7 @@ test('$ unwrapping', () => { })) let c = () => {} let d + label: var e = $(ref()) `) expect(code).not.toMatch(`$(ref())`) expect(code).not.toMatch(`$(ref(1))`) @@ -39,19 +40,21 @@ test('$ unwrapping', () => { // normal declarations left untouched expect(code).toMatch(`let c = () => {}`) expect(code).toMatch(`let d`) - expect(rootRefs).toStrictEqual(['foo', 'a', 'b']) + expect(code).toMatch(`label: var e = (ref())`) + expect(rootRefs).toStrictEqual(['foo', 'a', 'b', 'e']) assertCode(code) }) test('$ref & $shallowRef declarations', () => { const { code, rootRefs, importedHelpers } = transform(` let foo = $ref() - let a = $ref(1) + export let a = $ref(1) let b = $shallowRef({ count: 0 }) let c = () => {} let d + label: var e = $ref() `) expect(code).toMatch( `import { ref as _ref, shallowRef as _shallowRef } from 'vue'` @@ -69,7 +72,8 @@ test('$ref & $shallowRef declarations', () => { // normal declarations left untouched expect(code).toMatch(`let c = () => {}`) expect(code).toMatch(`let d`) - expect(rootRefs).toStrictEqual(['foo', 'a', 'b']) + expect(code).toMatch(`label: var e = _ref()`) + expect(rootRefs).toStrictEqual(['foo', 'a', 'b', 'e']) expect(importedHelpers).toStrictEqual(['ref', 'shallowRef']) assertCode(code) }) diff --git a/packages/reactivity-transform/src/reactivityTransform.ts b/packages/reactivity-transform/src/reactivityTransform.ts index be6ceb75693..a67d843280d 100644 --- a/packages/reactivity-transform/src/reactivityTransform.ts +++ b/packages/reactivity-transform/src/reactivityTransform.ts @@ -235,6 +235,11 @@ export function transformAST( stmt.declaration.type === 'VariableDeclaration' ) { walkVariableDeclaration(stmt.declaration, isRoot) + } else if ( + stmt.type === 'LabeledStatement' && + stmt.body.type === 'VariableDeclaration' + ) { + walkVariableDeclaration(stmt.body, isRoot) } } }