【问题标题】:Accessing a symbol table through typescript's compiler-api通过 typescript 的 compiler-api 访问符号表
【发布时间】: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


    【解决方案1】:

    我认为我打开here 的GH问题中的答案可能对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2019-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多