]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(compiler-sfc): handle empty strings during template usage analysis of setup bindi...
authorThorsten Lünborg <t.luenborg@googlemail.com>
Thu, 16 Sep 2021 17:47:11 +0000 (19:47 +0200)
committerGitHub <noreply@github.com>
Thu, 16 Sep 2021 17:47:11 +0000 (13:47 -0400)
fix #4599

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

index e7ffb34450b7b9c0374fc4b3f0baeeca87f318ac..c613cf50217351949e6ab8cce7bee12100c8c66c 100644 (file)
@@ -202,6 +202,22 @@ return { props, a, emit }
 }"
 `;
 
+exports[`SFC compile <script setup> dev mode import usage check attribute expressions 1`] = `
+"import { defineComponent as _defineComponent } from 'vue'
+import { bar, baz } from './x'
+        
+export default /*#__PURE__*/_defineComponent({
+  setup(__props, { expose }) {
+  expose()
+
+        const cond = true
+        
+return { cond, bar, baz }
+}
+
+})"
+`;
+
 exports[`SFC compile <script setup> dev mode import usage check components 1`] = `
 "import { defineComponent as _defineComponent } from 'vue'
 import { FooBar, FooBaz, FooQux, foo } from './x'
index bd654dfe9ee6e960d364eee326dae1da61d24464..35ad4876bad03ef7e568afc7f59787c1e52ef8fe 100644 (file)
@@ -342,6 +342,21 @@ defineExpose({ foo: 123 })
       assertCode(content)
     })
 
+    // https://github.com/vuejs/vue-next/issues/4599
+    test('attribute expressions', () => {
+      const { content } = compile(`
+        <script setup lang="ts">
+        import { bar, baz } from './x'
+        const cond = true
+        </script>
+        <template>
+          <div :class="[cond ? '' : bar(), 'default']" :style="baz"></div>
+        </template>
+        `)
+      expect(content).toMatch(`return { cond, bar, baz }`)
+      assertCode(content)
+    })
+
     test('vue interpolations', () => {
       const { content } = compile(`
       <script setup lang="ts">
index 3cc9705f730428da18867277edc5cde7c906bf24..cd189be5c8f5d3a9259175429489ad10d2fa590a 100644 (file)
@@ -1826,7 +1826,7 @@ function resolveTemplateUsageCheckString(sfc: SFCDescriptor) {
 
 function stripStrings(exp: string) {
   return exp
-    .replace(/'[^']+'|"[^"]+"/g, '')
+    .replace(/'[^']*'|"[^"]*"/g, '')
     .replace(/`[^`]+`/g, stripTemplateString)
 }