美文网首页
ast 介绍之统计方法使用情况

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

作者: 努力学习的小丸子 | 来源:发表于2021-07-06 23:52 被阅读0次
    遗留问题:以下情况该如何统计某方法的使用情况??
    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;
    }
    

    相关文章

      网友评论

          本文标题:ast 介绍之统计方法使用情况

          本文链接:https://www.haomeiwen.com/subject/xkubultx.html