]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(compiler-sfc): fix using imported ref as template ref during dev (#7593)
authorvaakian X <vaakian@gmail.com>
Tue, 11 Jul 2023 09:26:31 +0000 (17:26 +0800)
committerGitHub <noreply@github.com>
Tue, 11 Jul 2023 09:26:31 +0000 (17:26 +0800)
close #7567

packages/compiler-sfc/__tests__/__snapshots__/compileScript.spec.ts.snap
packages/compiler-sfc/__tests__/compileScript.spec.ts
packages/compiler-sfc/src/script/importUsageCheck.ts

index 18b5d90eaf60352c43e9969934f05f6fb49994d4..de19ec5aaf29d12e200501fb31b3700581f3f131 100644 (file)
@@ -775,6 +775,21 @@ return { get FooBaz() { return FooBaz }, get Last() { return Last } }
 })"
 `;
 
+exports[`SFC compile <script setup> > dev mode import usage check > template ref 1`] = `
+"import { defineComponent as _defineComponent } from 'vue'
+import { foo, bar, Baz } from './foo'
+        
+export default /*#__PURE__*/_defineComponent({
+  setup(__props, { expose: __expose }) {
+  __expose();
+
+          
+return { get foo() { return foo }, get bar() { return bar }, get Baz() { return Baz } }
+}
+
+})"
+`;
+
 exports[`SFC compile <script setup> > dev mode import usage check > vue interpolations 1`] = `
 "import { defineComponent as _defineComponent } from 'vue'
 import { x, y, z, x$y } from './x'
index 6da274dd8a5506f67f8aeeaccd98cf9625118421..57c3adfc3a0804bfe23e98876764ae1bd1151f01 100644 (file)
@@ -513,6 +513,23 @@ describe('SFC compile <script setup>', () => {
       </template>
       `)
     })
+
+    test('template ref', () => {
+      const { content } = compile(`
+        <script setup lang="ts">
+          import { foo, bar, Baz } from './foo'
+        </script>
+        <template>
+          <div ref="foo"></div>
+          <div ref=""></div>
+          <Baz ref="bar" />
+        </template>
+        `)
+      expect(content).toMatch(
+        'return { get foo() { return foo }, get bar() { return bar }, get Baz() { return Baz } }'
+      )
+      assertCode(content)
+    })
   })
 
   describe('inlineTemplate mode', () => {
index b42397d573b267d46476b107a190ede5ad6fcef3..28456a45bbabde7fb1ad91b709a0b6179462e54a 100644 (file)
@@ -57,6 +57,9 @@ function resolveTemplateUsageCheckString(sfc: SFCDescriptor) {
                 )}`
               }
             }
+            if (prop.type === NodeTypes.ATTRIBUTE && prop.name === 'ref' && prop.value?.content) {
+              code += `,${prop.value.content}`
+            }
           }
         } else if (node.type === NodeTypes.INTERPOLATION) {
           code += `,${processExp(