[~/srcPLgrado/treehugger(master)]$ pwd -P /Users/casiano/local/src/javascript/PLgrado/treehugger
[~/srcPLgrado/treehugger(master)]$ git remote -v origin git@github.com:crguezl/treehugger.git (fetch) origin git@github.com:crguezl/treehugger.git (push)
[~/srcPLgrado/treehugger(master)]$ cat learning.html <!DOCTYPE html> <html> <head> <title>treehugger.js demo</title> <script data-main="lib/demo" src="lib/require.js"></script> <link rel="stylesheet" href="examples/style.css" type="text/css" /> </head> <body> <h1>Treehugger.js playground</h1> <table> <tr> <th>Javascript</th> <th>AST</th> </tr> <tr> <td><textarea id="code" rows="15" cols="42">var a = 10, b; console.log(a, b, c);</textarea></td> <td><textarea id="ast" rows="15" cols="42" readonly style="background-color: #eee;"></textarea></td> </tr> <tr> <th>Analysis code <button id="runbutton">Run</button></th> <th>Output</th> </tr> <tr> <td><textarea id="analysis" rows="15" cols="42">var declared = {console: true}; ast.traverseTopDown( 'VarDecl(x)', function(b) { declared[b.x.value] = true; }, 'VarDeclInit(x, _)', function(b) { declared[b.x.value] = true; }, 'Var(x)', function(b) { if(!declared[b.x.value]) log("Variable " + b.x.value + " is not declared."); } ); </textarea></td> <td><textarea id="output" rows="15" cols="42" readonly style="background-color: #eee;"></textarea></td> </tr> </table> </body> </html>
[~/srcPLgrado/treehugger(master)]$ cat lib/demo.js require({ baseUrl: "lib" }, ["treehugger/tree", "treehugger/traverse", "treehugger/js/parse", "jquery", "treehugger/js/acorn", // Acorn is a JavaScript parser "treehugger/js/acorn_loose" // This module provides an alternative // parser with the same interface as // `parse`, but will try to parse // anything as JavaScript, repairing // syntax error the best it can. ], function(tree, traverse, parsejs, jq, acorn, acorn_loose) { window.acorn_loose = acorn_loose function log(message) { $("#output").val($("#output").val() + message + "\n"); } function exec() { var js = $("#code").val(); var analysisJs = $("#analysis").val(); $("#output").val(""); // https://developer.mozilla.org/en-US/docs/Web/API/Performance.now() var t = performance.now(); var ast = parsejs.parse(js); t -= performance.now(); $("#ast").val(t + "\n" + ast.toPrettyString()); try { eval(analysisJs); } catch(e) { $("#output").val("JS Error"); console.log(e.message) } } tree.Node.prototype.log = function() { $("#output").val(this.toPrettyString()); } require.ready(function() { $("#code").keyup(exec); $("#runbutton").click(exec); exec(); }); } );
Casiano Rodríguez León