遗留问题:以下情况该如何统计某方法的使用情况??
let target= {
api: {
logger: {
log: function () {},
debug: function () {},
},
},
};
let a = target.api.logger.log;
a();
a();
使用文本替换,将注释内容都删除,然后通过正则匹配
- 使用
decomment
这个库,它可以去除html
或者纯文本
中的//
和/**/
注释。 - 将文件内容转成
js
,然后将js
转成ast
当目标文件是js
,jsx
,ts
或tsx
,使用@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;
}
网友评论