javascript - Jint.Parser.JavaScriptParser:区分顶级标识符
问题描述
我正在尝试使用 .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
。这是正确的,但我需要区分顶级标识符和其他类型的标识符,但据我所知,没有办法做到这一点。有人有聪明的解决方法吗?
解决方案
推荐阅读
- python - 将无限线程作为函数传递
- gmail - Gmail 的 iCalendar 小部件未呈现超过 1 个事件
- image-processing - 在多个图像上查找未更改的区域
- android - Android 调试模式下的 shadow$_klass_ 是什么?
- jquery - 在元素之前只插入一个结束标签?
- robotjs - RobotJS,如何在 Mac 上执行 shift 单击或命令单击?
- javascript - 如果更新失败,猫鼬 findByIdAndUpdate 会返回什么?
- regex - 如何正确处理和解析来自 rsyslog 的多行日志
- web-scraping - 如何在一个单元格中获取 IMPORTXML/IMPORTHTML 结果数据?
- javascript - 如何在打字稿中获取递归对象的类型作为函数参数?