]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
perf(compiler-sfc): infer ref binding type for more built-in methods
authorEvan You <yyx990803@gmail.com>
Tue, 25 Apr 2023 01:29:30 +0000 (09:29 +0800)
committerEvan You <yyx990803@gmail.com>
Tue, 25 Apr 2023 01:29:30 +0000 (09:29 +0800)
packages/compiler-sfc/__tests__/compileScript.spec.ts
packages/compiler-sfc/__tests__/compileScript/defineProps.spec.ts
packages/compiler-sfc/src/compileScript.ts

index eec434758e8db2c19721771bf22e1f5d967e43dc..afe656b4a2c7ceaa4ebae65fa506ea0e41375ab1 100644 (file)
@@ -1520,4 +1520,19 @@ describe('SFC genDefaultAs', () => {
     )
     assertCode(content)
   })
+
+  test('binding type for edge cases', () => {
+    const { bindings } = compile(
+      `<script setup lang="ts">
+      import { toRef } from 'vue'
+      const props = defineProps<{foo: string}>()
+      const foo = toRef(() => props.foo)
+      </script>`
+    )
+    expect(bindings).toStrictEqual({
+      toRef: BindingTypes.SETUP_CONST,
+      props: BindingTypes.SETUP_REACTIVE_CONST,
+      foo: BindingTypes.SETUP_REF
+    })
+  })
 })
index f52307d41b32bd90a79036f78ba2e5f71acf7fa1..fe5ef293ad4d51f4e2a4784253ec3a39ecb5d98f 100644 (file)
@@ -581,7 +581,7 @@ const props = defineProps({ foo: String })
     </script>
   `)
     expect(bindings).toStrictEqual({
-      bar: BindingTypes.SETUP_MAYBE_REF,
+      bar: BindingTypes.SETUP_REF,
       computed: BindingTypes.SETUP_CONST
     })
   })
index 2fa022ec2d7f34709d4f32afb02eaca3bab990bd..1fbbb8f5c9671ee7468980ae7ae7860d55ba7051 100644 (file)
@@ -1095,8 +1095,16 @@ function walkDeclaration(
             : BindingTypes.SETUP_CONST
         } else if (isConst) {
           if (
-            isCallOf(init, userImportAliases['ref']) ||
-            isCallOf(init, DEFINE_MODEL)
+            isCallOf(
+              init,
+              m =>
+                m === userImportAliases['ref'] ||
+                m === userImportAliases['computed'] ||
+                m === userImportAliases['shallowRef'] ||
+                m === userImportAliases['customRef'] ||
+                m === userImportAliases['toRef'] ||
+                m === DEFINE_MODEL
+            )
           ) {
             bindingType = BindingTypes.SETUP_REF
           } else {