我正在尝试使用 .js 检测 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;
}
这适用于简单的原始变量,但是当引用作为对象的全局变量时,解析器还将这些对象的成员返回为 type Identifier
。这是正确的,但我需要区分顶级标识符和其他类型的标识符,但据我所知,没有办法做到这一点。有人有聪明的解决方法吗?