JS 哪个module可以计算js或ts文件中function的数目和branch的数目
时间: 2025-06-29 14:13:51 浏览: 8
### JavaScript 模块实现函数和分支计数
为了满足统计 JS 或 TS 文件中函数数量和分支数量的需求,可以创建一个基于 Node.js 的工具模块。此模块利用抽象语法树 (AST) 解析器来分析源代码结构。
#### 使用 `@babel/parser` 和 `recast`
通过使用 [@babel/parser][^1] 可以解析 JavaScript/TypeScript 代码并生成 AST 表示形式。Recast 是另一个有用的库,它允许安全地转换 JavaScript 抽象语法树而不会破坏格式化或注释[^2]。
```javascript
const parser = require('@babel/parser');
const traverse = require('@babel/traverse').default;
const fs = require('fs');
function analyzeFile(filePath) {
const content = fs.readFileSync(filePath, 'utf8');
// 创建 AST
const ast = parser.parse(content, { sourceType: "module", plugins: ["typescript"] });
let functionCount = 0;
let branchCount = 0;
// 遍历 AST 节点
traverse(ast, {
FunctionDeclaration(path) {
functionCount++;
},
IfStatement(path) {
branchCount++;
},
SwitchStatement(path) {
branchCount++; // switch 自身算作一次分支
path.node.cases.forEach(() => branchCount++);
}
});
console.log(`文件 ${filePath} 中有 ${functionCount} 个函数定义`);
console.log(`文件 ${filePath} 中有 ${branchCount} 个条件分支`);
return { functionCount, branchCount };
}
```
这段脚本会读取指定路径下的 .js/.ts 文件内容,并调用 Babel Parser 将其转化为可遍历的 AST 形式。随后借助 @babel/traverse 提供的方法访问各个节点,在遇到特定类型的语句时增加相应的计数值。
对于更复杂的场景,比如处理异步函数、箭头函数或是 try-catch 结构中的 catch 块作为潜在的异常处理分支等情况,则需要进一步扩展上述逻辑以覆盖更多情况。
阅读全文
相关推荐
















