Доступ к таблице символов через компилятор-api машинописного текста - PullRequest
0 голосов
/ 04 ноября 2018

Я пытаюсь построить график определения и использования переменных в программе для машинописи.

Я использовал машинопись compiler-api для достижения этой цели. Немного поиграв, я вижу, что каждый узел связан с объектом Symbol, который ассоциирует с ним symbolFlag. Как правильно получить доступ к этому symbolFlag из Node объекта?

Это то, что я пробовал до сих пор -

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.

Кроме того, я понимаю, что могу вручную построить график, если для каждого идентификатора я посмотрю на его символьную информацию и пойму, где он был объявлен, это будет выводом, является ли это переменной.

Но есть ли более быстрый способ достичь этого? Я подозреваю, что есть встроенный способ сделать это? Не удалось обнаружить это в документации.

1 Ответ

0 голосов
/ 26 марта 2019

Я думаю, что ответ в открывшемся вопросе GH здесь может помочь вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...