version 2.0), that has more tolerance in it than the stock Esprima
does.
It
might provide the level of recovery you are looking for.
Our recovery is done in a few ways:
1. we catch and record all exceptions, to make it far less 'throwy'
2. we perform node fill-ins when an exception would leave the AST
is bad
state
3. in some cases we rewind and try again based on state / tokens /
and
line endings
Our version can be found here:
http://git.eclipse.org/c/orion/org.eclipse.orion.client.git/tree/bundles/org.eclipse.orion.client.javascript/web/esprima/esprima.js
The tests we run on it (to give an idea of the kinds of things we
can
recover from):
http://git.eclipse.org/c/orion/org.eclipse.orion.client.git/tree/bundles/org.eclipse.orion.client.javascript/web/js-tests/javascript/esprimaTolerantTests.js
And lastly, the bug for us to upgrade to the latest version of
Esprima:
https://bugs.eclipse.org/bugs/show_bug.cgi?id=473765
Michael Rennie
----- Original message -----
From: Eugene Melekhov <e...@mail.ru>
Sent by: wtp-dev-boun...@eclipse.org
To: "General discussion of project-wide or architectural issues." <
wtp-dev@eclipse.org>
Cc:
Subject: Re: [wtp-dev] JSDT Parser
Date: Sat, Mar 12, 2016 10:31 AM
Angelo,
Yes, sure, I used that option. The problem is that esprima actually
throws
a lot of syntax exceptions:
grep -c throwUnexpectedToken esprima.js
56
grep -c tolerateUnexpectedToken esprima.js
29
That means that in 2/3 error cases it throws exception and tolerate
only
1/3. Shift meanwhile doesn't throws exceptions
in "Early Error" cases like this 0=0, which is tolerated by
esprima. I
have a suspicion that most of esprima
"tolerated errors" are from that "Early Error" category, which
means that
in fact Shift behaves like esprima :-)
I thought that it would be interesting to compare shift and esprima
behavior on large enough set of erroneous code
fragments. It might happen that they are very close actually :-)
I'm not a big expert with esprima, but do you use tolerant option
like
explained at http://esprima.org/doc/ ?
2016-03-12 10:25 GMT+01:00 Eugene Melekhov <e...@mail.ru>:
Angelo,
One more thing about parser tolerance. esprima for example throws
an
exception parsing this "relatively simple"
declarations:
//function foo(a, b {}
//function foo(a, b, c,) {}
//function foo(a, b, {} {}
Yes sure, but it seems that Shift doesn't support tolerant parser
which is very required for a JS editor. See
https://github.com/shapesecurity/shift-java/issues/93
--
Eugene Melekhov
_______________________________________________
wtp-dev mailing list
wtp-dev@eclipse.org
To change your delivery options, retrieve your password, or
unsubscribe
from this list, visit
https://dev.eclipse.org/mailman/listinfo/wtp-dev
--
Eugene Melekhov
_______________________________________________
wtp-dev mailing list
wtp-dev@eclipse.org
To change your delivery options, retrieve your password, or
unsubscribe
from this list, visit
https://dev.eclipse.org/mailman/listinfo/wtp-dev
_______________________________________________
wtp-dev mailing list
wtp-dev@eclipse.org
To change your delivery options, retrieve your password, or
unsubscribe
from this list, visit
https://dev.eclipse.org/mailman/listinfo/wtp-dev
_______________________________________________