| #!/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; |
| } |