如何使用Babel删除未使用的自引用绑定

How to remove unused binding with self-reference using Babel

本文关键字:自引用 绑定 未使用 删除 何使用 Babel      更新时间:2023-09-26

给定此输入:

const NOT_REFERENCED = 'abc';
class NotReferencedEither extends React.Component {
  static something() {
    // ...
  }
  someMethod() {
    NotReferencedEither.something();
  }
  render() {
    return <span>Foo</span>;
  }
}

这个巴别塔插件:

export default function ({types: t}) {
  return {
    visitor: {
      Program(path, state) {
        Object.keys(path.scope.bindings).forEach(bindingName => {
          const binding = path.scope.bindings[bindingName];
          if (!binding.referenced) {
            binding.path.remove();
          }
        });
      },
    }
  };
}

我希望最后得到一个空文件。不幸的是,由于NotReferencedEither有对其自身的引用,因此无法通过删除测试。

我如何增强这个插件,使只有对自身引用的NotReferencedEither也被删除?

现场示例:http://astexplorer.net/#/SvYcw6Xggc/4

我不完全确定为什么这是有效的,因为它是未记录的,但如果您在删除路径之前调用binding.path.scope.crawl(),它会像这里所示的那样正常工作。