使用 Rhino 的 Javascript 解析器,如何获取评论?

Posted

技术标签:

【中文标题】使用 Rhino 的 Javascript 解析器,如何获取评论?【英文标题】:Using Rhino's Javascript parser, how to get the comments? 【发布时间】:2013-03-17 12:25:10 【问题描述】:

我有一些 javascript 文件并使用 Rhino 的 javascript 解析器对其进行解析。

但我买不到 cmets。

如何获得 cmets?

这是我的代码的一部分。

运行此代码,“comment”变量为空。 此外,在运行“astRoot.toSource();”时,它只显示 javascript 代码。不包括评论。它消失了!

[java代码]

public void parser() 
    AstRoot astRoot = new Parser().parse(this.jsString, this.uri, 1);

    List<AstNode> statList = astRoot.getStatements();
    for(Iterator<AstNode> iter = statList.iterator(); iter.hasNext();) 
        FunctionNode fNode = (FunctionNode)iter.next();

        System.out.println("*** function Name : " + fNode.getName() + ", paramCount : " + fNode.getParamCount() + ", depth : " + fNode.depth());

        AstNode bNode = fNode.getBody();
        Block block = (Block)bNode;
        visitBody(block);
    

    System.out.println(astRoot.toSource());
    SortedSet<Comment> comment = astRoot.getComments();
    if(comment == null)
        System.out.println("comment is null");

【问题讨论】:

你用的是什么版本的犀牛? 用的是1.7R4,不过现在我解决了!谢谢! 【参考方案1】:

配置您的CompilerEnvirons 并使用AstRoot.visitAll(NodeVisitor):

import java.io.*;
import org.mozilla.javascript.CompilerEnvirons;
import org.mozilla.javascript.Parser;
import org.mozilla.javascript.ast.*;

public class PrintNodes 
  public static void main(String[] args) throws IOException 
    class Printer implements NodeVisitor 
      @Override public boolean visit(AstNode node) 
        String indent = "%1$Xs".replace("X", String.valueOf(node.depth() + 1));
        System.out.format(indent, "").println(node.getClass());
        return true;
      
    
    String file = "foo.js";
    Reader reader = new FileReader(file);
    try 
      CompilerEnvirons env = new CompilerEnvirons();
      env.setRecordingLocalJsDocComments(true);
      env.setAllowSharpComments(true);
      env.setRecordingComments(true);
      AstRoot node = new Parser(env).parse(reader, file, 1);
      node.visitAll(new Printer());
     finally 
      reader.close();
    
  

Java 6;犀牛1.7R4

【讨论】:

谢谢,麦克道尔。这是 CompilerEnvirons 丢失的问题!现在,工作完美!

以上是关于使用 Rhino 的 Javascript 解析器,如何获取评论?的主要内容,如果未能解决你的问题,请参考以下文章

Java的Javascript解析器[关闭]

使用 require.js 和 Java/Rhino 解析模块

如何使用 Rhino 实现用于远程 javascript 调试的 intelliJ IDEA 插件?

用 Rhino 解释 Java 中的 JavaScript:暂停/恢复脚本

使用 Rhino(Mozilla 的 rhino)的优点

使用 Rhino 代替 ScriptEngine 在 Java 中运行 Javascript 代码