oliviertassinari / babel-plugin-transform-react-remove-prop-types

Remove unnecessary React propTypes from the production build. :balloon:
MIT License
897 stars 61 forks source link

Rename wrongly in switch/case statement #194

Open tmhao2005 opened 4 years ago

tmhao2005 commented 4 years ago

I just found out an issue regarding the option "removeImport": true like I got a following snippet function:

function foo(arg, list) {
    switch (arg) {
      case 0: {
        const item = arg.payload;
        return list.some(_item => _item.id === item.id);
      };
      case 1: {
        const item = arg.payload;
        return list.some(_item => _item.id === item.id);
      }
    }    
  }

the results after compile with es5 mode:

function foo(arg, list) {
            switch (arg) {
              case 0:
                {
                  var item = arg.payload;
                  return list.some(function (_item) {
                    return _item.id === item.id;
                  });
                }
                ;

              case 1:
                {
                  var _item = arg.payload;
                  return list.some(function (_item) {
                   /* BUG HERE: it renamed wrongly here 2 vars with same name  */
                   return _item.id === _item.id;
                  });
                }
            }
          }

The issue is at the case 1 where it renames 2 vars with the name name _item in 2 scopes that creating bug.

Seems reprocess the scope causes the issue here:

programPath.scope.crawl()

https://github.com/oliviertassinari/babel-plugin-transform-react-remove-prop-types/blob/master/src/index.js#L364