Я пытаюсь обнаружить все глобальные переменные, на которые ссылается фрагмент кода 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 между идентификаторами верхнего уровня и другими типами идентификаторов, как это, но, насколько я могу видеть, нет никакого способа сделать это. У кого-нибудь есть умный обходной путь?