瀏覽代碼

fix(compiler-sfc): parses correctly when inline mode is off (#8337)

close #6088
白雾三语 2 年之前
父節點
當前提交
ecbd42a144

+ 19 - 0
packages/compiler-sfc/__tests__/compileScript.spec.ts

@@ -804,6 +804,25 @@ describe('SFC compile <script setup>', () => {
       expect(content).toMatch(`"--${mockId}-count": (count.value)`)
       assertCode(content)
     })
+
+    test('the v-for wrapped in parentheses can be correctly parsed & inline is false', () => {
+      expect(() =>
+        compile(
+          `
+        <script setup lang="ts">
+        import { ref } from 'vue'
+        const stacks = ref([])
+        </script>
+        <template>
+            <div v-for="({ file: efile }) of stacks"></div>
+        </template>
+        `,
+          {
+            inlineTemplate: false
+          }
+        )
+      ).not.toThrowError()
+    })
   })
 
   describe('with TypeScript', () => {

+ 3 - 1
packages/compiler-sfc/src/script/importUsageCheck.ts

@@ -83,7 +83,9 @@ function processExp(exp: string, dir?: string): string {
     } else if (dir === 'for') {
       const inMatch = exp.match(forAliasRE)
       if (inMatch) {
-        const [, LHS, RHS] = inMatch
+        let [, LHS, RHS] = inMatch
+        // #6088
+        LHS = LHS.trim().replace(/^\(|\)$/g, '')
         return processExp(`(${LHS})=>{}`) + processExp(RHS)
       }
     }