首页 > 解决方案 > 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。这是正确的,但我需要区分顶级标识符和其他类型的标识符,但据我所知,没有办法做到这一点。有人有聪明的解决方法吗?

标签: javascriptparsingjint

解决方案


推荐阅读