$
This commit is contained in:
44
node_modules/recast/example/add-braces
generated
vendored
Normal file
44
node_modules/recast/example/add-braces
generated
vendored
Normal file
@@ -0,0 +1,44 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
var recast = require("recast");
|
||||
var types = recast.types;
|
||||
var n = types.namedTypes;
|
||||
var b = types.builders;
|
||||
|
||||
require("recast").run(function(ast, callback) {
|
||||
recast.visit(ast, {
|
||||
visitIfStatement: function(path) {
|
||||
var stmt = path.node;
|
||||
stmt.consequent = fix(stmt.consequent);
|
||||
|
||||
var alt = stmt.alternate;
|
||||
if (!n.IfStatement.check(alt)) {
|
||||
stmt.alternate = fix(alt);
|
||||
}
|
||||
|
||||
this.traverse(path);
|
||||
},
|
||||
|
||||
visitWhileStatement: visitLoop,
|
||||
visitForStatement: visitLoop,
|
||||
visitForInStatement: visitLoop
|
||||
});
|
||||
|
||||
callback(ast);
|
||||
});
|
||||
|
||||
function visitLoop(path) {
|
||||
var loop = path.node;
|
||||
loop.body = fix(loop.body);
|
||||
this.traverse(path);
|
||||
}
|
||||
|
||||
function fix(clause) {
|
||||
if (clause) {
|
||||
if (!n.BlockStatement.check(clause)) {
|
||||
clause = b.blockStatement([clause]);
|
||||
}
|
||||
}
|
||||
|
||||
return clause;
|
||||
}
|
17
node_modules/recast/example/generic-identity
generated
vendored
Normal file
17
node_modules/recast/example/generic-identity
generated
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
// This script should reprint the contents of the given file without
|
||||
// reusing the original source, but with identical AST structure.
|
||||
|
||||
var recast = require("recast");
|
||||
|
||||
recast.run(function(ast, callback) {
|
||||
recast.visit(ast, {
|
||||
visitNode: function(path) {
|
||||
this.traverse(path);
|
||||
path.node.original = null;
|
||||
}
|
||||
});
|
||||
|
||||
callback(ast);
|
||||
});
|
8
node_modules/recast/example/identity
generated
vendored
Normal file
8
node_modules/recast/example/identity
generated
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
// This script should echo the contents of the given file without
|
||||
// modification.
|
||||
|
||||
require("recast").run(function(ast, callback) {
|
||||
callback(ast);
|
||||
});
|
84
node_modules/recast/example/to-while
generated
vendored
Normal file
84
node_modules/recast/example/to-while
generated
vendored
Normal file
@@ -0,0 +1,84 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
// This script converts for and do-while loops into equivalent while loops.
|
||||
// Note that for-in statements are left unmodified, as they do not have a
|
||||
// simple analogy to while loops. Also note that labeled continue statements
|
||||
// are not correctly handled at this point, and will trigger an assertion
|
||||
// failure if encountered.
|
||||
|
||||
var assert = require("assert");
|
||||
var recast = require("recast");
|
||||
var types = recast.types;
|
||||
var n = types.namedTypes;
|
||||
var b = types.builders;
|
||||
|
||||
recast.run(function(ast, callback) {
|
||||
recast.visit(ast, {
|
||||
visitForStatement: function(path) {
|
||||
var fst = path.node;
|
||||
|
||||
path.replace(
|
||||
fst.init,
|
||||
b.whileStatement(
|
||||
fst.test,
|
||||
insertBeforeLoopback(fst, fst.update)
|
||||
)
|
||||
);
|
||||
|
||||
this.traverse(path);
|
||||
},
|
||||
|
||||
visitDoWhileStatement: function(path) {
|
||||
var dwst = path.node;
|
||||
return b.whileStatement(
|
||||
b.literal(true),
|
||||
insertBeforeLoopback(
|
||||
dwst,
|
||||
b.ifStatement(
|
||||
dwst.test,
|
||||
b.breakStatement()
|
||||
)
|
||||
)
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
callback(ast);
|
||||
});
|
||||
|
||||
function insertBeforeLoopback(loop, toInsert) {
|
||||
var body = loop.body;
|
||||
|
||||
if (!n.Statement.check(toInsert)) {
|
||||
toInsert = b.expressionStatement(toInsert);
|
||||
}
|
||||
|
||||
if (n.BlockStatement.check(body)) {
|
||||
body.body.push(toInsert);
|
||||
} else {
|
||||
body = b.blockStatement([body, toInsert]);
|
||||
loop.body = body;
|
||||
}
|
||||
|
||||
recast.visit(body, {
|
||||
visitContinueStatement: function(path) {
|
||||
var cst = path.node;
|
||||
|
||||
assert.equal(
|
||||
cst.label, null,
|
||||
"Labeled continue statements are not yet supported."
|
||||
);
|
||||
|
||||
path.replace(toInsert, path.node);
|
||||
return false;
|
||||
},
|
||||
|
||||
// Do not descend into nested loops.
|
||||
visitWhileStatement: function() {},
|
||||
visitForStatement: function() {},
|
||||
visitForInStatement: function() {},
|
||||
visitDoWhileStatement: function() {}
|
||||
});
|
||||
|
||||
return body;
|
||||
}
|
Reference in New Issue
Block a user