ast 介绍之统计方法使用情况

遗留问题:以下情况该如何统计某方法的使用情况??
let target= {
    api: {
      logger: {
        log: function () {},
        debug: function () {},
      },
    },
  };
  let a = target.api.logger.log;
  a();
  a();

使用文本替换,将注释内容都删除,然后通过正则匹配

  • 使用decomment这个库,它可以去除html或者纯文本中的///**/注释。
  • 将文件内容转成js,然后将js转成ast

当目标文件是js,jsx,tstsx,使用@babel/parser@babel/generator来进行转换

async function deleteComments(file) {
  let codes = await fs.promises.readFile(file, "utf8");
  let ast = parse(codes, { sourceType: "unambiguous" });
  console.log("ast,", ast);
  let { code } = generate(ast, { comments: false }, codes);
  return code;
}

当目标文件是vue是,需要将vue转换成js,然后使用@babel/parser@babel/generator来进行转换

async function transfromVueToJs(file) {
  let codes = await fs.promises.readFile(file, "utf8");
  const parsed = compiler.parseComponent(codes);
  return parsed.script && parsed.script.content;
}

async function transfromVueToAst(file) {
  let content = await transfromVueToJs(file);
  let ast = parse(content, {
    sourceType: "unambiguous",
    plugins: ["transform-vue-jsx"],
  });
  // console.log('ast,', JSON.stringify(ast));

  fs.writeFile(
    file.replace("vue", "json"),
    JSON.stringify(ast, null, 4),
    (err) => {
      if (err) throw err;
      console.log(`The file ${file} has been created!`);
    }
  );

  let { code } = generate(ast, { comments: false }, content);
  return code;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 这里主要推荐一下自己平时常用,提高效率的一些库和软件。 前端常用 sweetalert2[https://gith...
    安之烟波客阅读 6,225评论 4 4
  • 前言 经历过寒冬之后,你会明白,人才到哪儿都是需要的,而且还是急缺,作为一个自学出来的前端开发工程师,经历了最原始...
    一只大橘阅读 6,151评论 4 59
  • 这篇文章中是对 Creating custom JavaScript syntax with Babel[http...
    il_canto阅读 4,455评论 0 0
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 12,720评论 28 53
  • 信任包括信任自己和信任他人 很多时候,很多事情,失败、遗憾、错过,源于不自信,不信任他人 觉得自己做不成,别人做不...
    吴氵晃阅读 11,342评论 4 8