DXR JS Analysis: Difference between revisions

no edit summary
No edit summary
No edit summary
Line 1: Line 1:
Existing work:
= Requirements for DxR =
* https://github.com/marijnh/tern/blob/master/lib/infer.js
 
* https://github.com/mook/komodo-codeintel2/blob/master/lang_javascript.py
* Must work with lastest version of ecmascript (6 as of this writing)
* Produce all symbols and locations
* Produce a call graph
 
== Bonus Features ==
 
* Type Inference
 
= Existing work: =
 
See: <https://wiki.mozilla.org/Security/B2G/JavaScript_code_analysis>
 
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
 
<tr>
<th scope="col" class="left">Framework</th>
<th scope="col" class="left">ES6+</th>
<th scope="col" class="left">Interface</th>
<th scope="col" class="left">Function References (Call Graph or Something)</th>
<th scope="col" class="left">Type Inference</th>
<th scope="col" class="left">Other Notes</th>
</tr>
 
<tr>
<td class="left">JSWebTools</td>
<td class="left">No</td>
<td class="left">&#xa0;</td>
<td class="left">&#xa0;</td>
<td class="left">&#xa0;</td>
<td class="left">&#xa0;</td>
</tr>
 
 
<tr>
<td class="left">Esprima</td>
<td class="left">Partial</td>
<td class="left">JS</td>
<td class="left">&#xa0;</td>
<td class="left">&#xa0;</td>
<td class="left">&#xa0;</td>
</tr>
 
 
<tr>
<td class="left">Ternjs</td>
<td class="left">No</td>
<td class="left">JS or http+json</td>
<td class="left">&#xa0;</td>
<td class="left">&#xa0;</td>
<td class="left">&#xa0;</td>
</tr>
 
 
<tr>
<td class="left">Doctorjs</td>
<td class="left">No</td>
<td class="left">JS</td>
<td class="left">&#xa0;</td>
<td class="left">&#xa0;</td>
<td class="left">&#xa0;</td>
</tr>
 
 
<tr>
<td class="left">Safe</td>
<td class="left">No</td>
<td class="left">Java</td>
<td class="left">&#xa0;</td>
<td class="left">&#xa0;</td>
<td class="left">&#xa0;</td>
</tr>
 
 
<tr>
<td class="left">JSAI</td>
<td class="left">&#xa0;</td>
<td class="left">Coffee Script (from paper)</td>
<td class="left">&#xa0;</td>
<td class="left">&#xa0;</td>
<td class="left">couldn't find code</td>
</tr>
 
== Algorithms and Techniques ==
 
=== k-CFA ===
 
=== Anderson's Points-To Analysis ===
 
=== Use Analysis ===
 
=== CFA2 ===
 
=== Inlining Eval ===
 
=== Removing the with Statement ===
 
= Ways to get the AST =
 
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
 
<tr>
<th scope="col" class="left">Name</th>
<th scope="col" class="left">Interface</th>
<th scope="col" class="left">Compatible with Mozilla Parser API</th>
<th scope="col" class="left">Other Pros</th>
<th scope="col" class="left">Other Cons</th>
</tr>
 
<tr>
<td class="left">Spidermonkey Reflect.parse</td>
<td class="left">JS</td>
<td class="left">Yes (by construction)</td>
<td class="left">Full ES6 support</td>
<td class="left">&#xa0;</td>
</tr>
 
 
<tr>
<td class="left">Acorn.js</td>
<td class="left">JS</td>
<td class="left">yes</td>
<td class="left">&#xa0;</td>
<td class="left">&#xa0;</td>
</tr>
 
 
<tr>
<td class="left">Sweet.js</td>
<td class="left">JS</td>
<td class="left">yes</td>
<td class="left">support for macros</td>
<td class="left">might be hard for the analysis</td>
</tr>
 
 
<tr>
<td class="left">Esprima</td>
<td class="left">JS</td>
<td class="left">yes</td>
<td class="left">Partial ES6 support</td>
<td class="left">&#xa0;</td>
</tr>
14

edits