Nashorn comment nodes in the syntax tree

Sundararajan Athijegannathan sundararajan.athijegannathan at oracle.com
Fri Jul 15 03:19:21 UTC 2016


Hi,

Sorry for the delayed response. I'm yet to check your test. I'll file a
bug once I reproduce/check this at my end and let you know the bug id.

Thanks,

-Sundar


On 7/12/2016 2:51 PM, Emilian Bold wrote:
> Yes, it must be a bug: comments are certainly swallowed in the nodes
> on my JRE. I see this for FunctionNode but also for IdentNode and
> perhaps more.
>
> It makes getting actual offsets a pain and I would strip-out comments
> from the text before sending it to the parser, but I need those too.
>
> $ uname -a
> Darwin mac.local 15.5.0 Darwin Kernel Version 15.5.0: Tue Apr 19
> 18:36:36 PDT 2016; root:xnu-3248.50.21~8/RELEASE_X86_64 x86_64
>
> $ java -version
> java version "1.8.0_66"
> Java(TM) SE Runtime Environment (build 1.8.0_66-b17)
> Java HotSpot(TM) 64-Bit Server VM (build 25.66-b17, mixed mode)
>
> Java 1.8.0_66
>
> Script text:
> --begin--
> function hello(){ 
>  return 'world';
> }
>
> //some comment
> hello();
> --end--
>
> [<unknown>] function {U%}hello()
> Function text:
> --begin--
> { 
>  return 'world';
> }
>
> //some comment
> --end-
>
>
> junit.framework.AssertionFailedError: The function should not swallow
> the comment
>
>
> Test:
> package com; import jdk.nashorn.internal.ir.FunctionNode; import
> jdk.nashorn.internal.ir.LexicalContext; import
> jdk.nashorn.internal.ir.visitor.NodeVisitor; import
> jdk.nashorn.internal.runtime.ErrorManager; import
> jdk.nashorn.internal.runtime.ScriptEnvironment; import
> jdk.nashorn.internal.runtime.Source; import
> jdk.nashorn.internal.runtime.options.Options; import
> junit.framework.TestCase; import java.io.PrintWriter; public class
> NashornCommentBugTest extends TestCase { public void testComment(){
> System.out.println("Java " + System.getProperty("java.version"));
> System.out.println(); String text = "function hello(){ \n" + " return
> 'world';\n" + "}\n\n" + "" + "//some comment\n" + "hello();"; Source
> source = Source.sourceFor("test.js", text); //NOI18N Options options =
> new Options("nashorn"); // NOI18N options.process(new String[]{
> "--parse-only=true", // NOI18N "--empty-statements=true", // NOI18N
> "--debug-lines=false"}); // NOI18N ScriptEnvironment env = new
> ScriptEnvironment(options, new PrintWriter(System.out), new
> PrintWriter(System.err)); ErrorManager errorManager = new
> ErrorManager(); jdk.nashorn.internal.parser.Parser parser = new
> jdk.nashorn.internal.parser.Parser(env, source, errorManager);
> FunctionNode root = parser.parse(); System.out.println("Script
> text:\n--begin--\n" + text+"\n--end--\n"); root.accept(new
> NodeVisitor<LexicalContext>(new LexicalContext()) { @Override public
> boolean enterFunctionNode(FunctionNode functionNode) { if
> (!functionNode.getKind().equals(FunctionNode.Kind.SCRIPT)) {
> System.out.println(functionNode.toString()); String functionText =
> text.substring(functionNode.getStart(), functionNode.getFinish());
> System.out.println("Function text:\n--begin--\n" +
> functionText+"\n--end-\n"); assertFalse("The function should not
> swallow the comment", functionText.contains("some comment")); } return
> super.enterFunctionNode(functionNode); } }); } }
>
>
>
>
>
> --emi
>
> On Mon, Jun 13, 2016 at 6:31 AM, Sundararajan Athijegannathan
> <sundararajan.athijegannathan at oracle.com
> <mailto:sundararajan.athijegannathan at oracle.com>> wrote:
>
>     start and finish should not include comments around. If it does,
>     it is a bug. Please do file a bug and send us test case here and
>     we'll file a bug
>
>     Thanks,
>
>     -Sundar
>
>
>     On 6/10/2016 9:05 PM, Emilian Bold wrote:
>>     BTW, jdk.nashorn.internal.ir.IdentNode (and other classes) seem
>>     to have the habit of "absorbing" the nearby comments and have
>>     incorrect start/finish offsets.
>>
>>     Is this intentional or a bug?
>>
>>     I haven't tested yet but I wonder if it propagates to the TreeAPI
>>     (ie. does IdentifierTree also swallow adjacent comments?)
>>
>>
>>
>>     --emi
>>
>>     On Wed, Apr 27, 2016 at 5:18 PM, Sundararajan Athijegannathan
>>     <sundararajan.athijegannathan at oracle.com
>>     <mailto:sundararajan.athijegannathan at oracle.com>> wrote:
>>
>>         Hi,
>>
>>         I filed an enhancement request:
>>         https://bugs.openjdk.java.net/browse/JDK-8155242
>>
>>         Thanks,
>>
>>         -Sundar
>>
>>
>>         On 4/27/2016 12:40 AM, Emilian Bold wrote:
>>         > Hello,
>>         >
>>         > NetBeans used a modified Rhino that had useful features for
>>         an IDE like
>>         > comment nodes and parser-level sanitization.
>>         >
>>         > As far as I know there is no way to get the comments in the
>>         Nashorn Tree
>>         > API (created as part of JEP 236) or in the
>>         jdk.nashorn.internal.ir <http://jdk.nashorn.internal.ir> Node
>>         > subclasses.
>>         >
>>         > Obviously having access to comment contents and comment
>>         offsets is very
>>         > useful. An IDE, for example, would provide code folding for
>>         the multiline
>>         > comment.
>>         >
>>         > Am I missing some proper way to get this information?
>>         >
>>         > I believe an extra option for Parser.create() would be nice
>>         (plus a
>>         > CommentTree and a visitComment method).
>>         >
>>         > --emi
>>
>>
>
>



More information about the nashorn-dev mailing list