【发布时间】:2019-03-26 10:02:06
【问题描述】:
我正在尝试在打字稿程序中构建变量定义和用法的图表。
我使用打字稿的compiler-api 来实现这一点。通过玩一点,我看到每个节点都与一个Symbol 对象相关联,该对象与一个symbolFlag 相关联。从Node 对象访问此symbolFlag 的正确方法是什么?
这是我迄今为止尝试过的 -
function get_variable_names(node: ts.Node, pgm: ts.Program): void{
var nodes: ts.Node[] = [];
function getNodes(sf: ts.Node): ts.Node[] {
var nodes: ts.Node[] = [];
function allNodes(n: ts.Node) {
ts.forEachChild(n, n => { nodes.push(n); allNodes(n); return false; })
};
allNodes(sf);
return nodes;
}
var id_nodes = getNodes(node).filter(n => n.kind === ts.SyntaxKind.Identifier);
const checker = pgm.getTypeChecker()
const names = id_nodes.map(n => (checker.getSymbolAtLocation(n).getDeclarations()));
// Not really sure here.
console.log(names);
}
此外,我收到一个编译错误,提示 Cannot read property 'getDeclarations' of undefined。
此外,我意识到我可以手动构建一个图形,如果对于每个标识符,我查看它的符号信息并收集它的声明位置,从而推断它是否是一个变量。
但是有没有更快的方法来实现这一点?我怀疑有一种内置的方法可以做到这一点?无法在文档中找到它。
【问题讨论】:
标签: typescript typescript-compiler-api