使用tree-sitter-javascript库,我试图从JavaScript代码中获取所有函数名(字符串格式)并将其存储在functionNames数组中。
const Parser = require('tree-sitter');
const JavaScript = require('tree-sitter-javascript');
const parser = new Parser();
parser.setLanguage(JavaScript);
const sourceCode = `function foo() {
console.log('hello world');
}
function bar() {
console.log('bye world');
}`;
const tree = parser.parse(sourceCode);
const functionNames = [];
tree.walk(()=>{
console.log("Node: ", node);
if (node.type === 'function_declaration') {
functionNames.push(node.child(1).text);
}
})
console.log(functionNames);
// Expected output ['foo', 'bar']
// Actual output []
但是,tree.walk()的回调根本没有执行。日志中不会打印任何内容。只是一个空数组[]
这段代码有什么问题?我在官方文档(https://github.com/tree-sitter/tree-sitter-javascript)中找不到太多关于这方面的文档
是否有其他方法可以做到这一点?先谢谢你了
1条答案
按热度按时间qzlgjiam1#
这是因为
parser.parse
已经给出了解析后的结果。该对象上没有.walk()
函数。要获取所有函数名,可以递归遍历rootNode
: