Jint.Parser.JavaScriptParser: различение идентификаторов верхнего уровня - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь обнаружить все глобальные переменные, на которые ссылается фрагмент кода JavaScript, используя Jint.Parser.JavaScriptParser. Я делаю это, следуя примеру кода из этой проблемы , чтобы получить список токенов и затем удалить имена любых объявленных функций, например так:

private List<string> FindIdentifiers()
{   
    JavaScriptParser parser = new JavaScriptParser();
    Program program = parser.Parse(Source, new ParserOptions { Tokens = true });
    List<string> allTokens = program.Tokens
        .Where(t => t.Type == Jint.Parser.Tokens.Identifier)
        .Select(t => t.Value.ToString())
        .Distinct()
        .ToList();
    foreach (FunctionDeclaration declaration in program.FunctionDeclarations)
    {
        allTokens.Remove(declaration.Id.Name);
    }
    return allTokens;
}

Это прекрасно работает для простые примитивные переменные, но при обращении к глобальной переменной, которая является объектом, анализатор также возвращает элементы этих объектов как имеющие тип Identifier. Это правильно, но мне нужно различать guish между идентификаторами верхнего уровня и другими типами идентификаторов, как это, но, насколько я могу видеть, нет никакого способа сделать это. У кого-нибудь есть умный обходной путь?

...