Преглед изворни кода

fix(reactivity-transform): should not rewrite catch param (#5711)

fix #5709
edison пре 4 година
родитељ
комит
1f14f19439

+ 5 - 0
packages/reactivity-transform/__tests__/__snapshots__/reactivityTransform.spec.ts.snap

@@ -216,6 +216,11 @@ exports[`should not rewrite scope variable 1`] = `
         console.log(d.value)
         console.log(e)
       }
+      let err = _ref(null)
+      try {
+      } catch (err) {
+        console.log(err)
+      }
     "
 `;
 

+ 6 - 0
packages/reactivity-transform/__tests__/reactivityTransform.spec.ts

@@ -222,12 +222,18 @@ test('should not rewrite scope variable', () => {
         console.log(d)
         console.log(e)
       }
+      let err = $ref(null)
+      try {
+      } catch (err) {
+        console.log(err)
+      }
     `)
   expect(code).toMatch('console.log(a)')
   expect(code).toMatch('console.log(b.value)')
   expect(code).toMatch('console.log(c)')
   expect(code).toMatch('console.log(d.value)')
   expect(code).toMatch('console.log(e)')
+  expect(code).toMatch('console.log(err)')
   assertCode(code)
 })
 

+ 10 - 0
packages/reactivity-transform/src/reactivityTransform.ts

@@ -566,6 +566,16 @@ export function transformAST(
         return
       }
 
+      // catch param
+      if (node.type === 'CatchClause') {
+        scopeStack.push((currentScope = {}))
+        if (node.param && node.param.type === 'Identifier') {
+          registerBinding(node.param)
+        }
+        walkScope(node.body)
+        return
+      }
+
       // non-function block scopes
       if (node.type === 'BlockStatement' && !isFunctionType(parent!)) {
         scopeStack.push((currentScope = {}))