ast-replace
Replace each matched ast-node passing a test.
Usage
$ npm install --save ast-replace
var parse = require('esprima').parse;
var generate = require('escodegen').generate;
var replace = require('ast-replace');
//add rule to replace all `foo` assignments with `bar`.
var ast = replace(parse('foo = 1;'), {
AssignmentExpression: {
test: function(node){
if (node.operator !== '=') return false;
return node.left.name === 'foo';
},
replace: function(node){
node.left.name = 'bar';
return node;
}
}
});
generate(ast); //'bar = 1;'
API
replace(Node, replacement) → Node
Replace node matching criterias. Replacement object defines rules to apply replacements:
var replacement = {
AssignmentExpression: {
test: function (node) {
this === replacement; //true
//returning `undefined` means test is passed
},
replace: function (node) {
this === replacement; //true
//returning `null` replaces node
return null;
}
},
//supertype, matched after specific types
Expression: {
replace: function (node) {
//returning `undefined` keeps node the same
}
}
}
Property | Type | Default | Description |
---|---|---|---|
test | Function | true |
Test whether node found should be replaced. Testing function should return boolean. If omitted, every node will pass the test. |
replace | Function, Node, undefined, null | null |
A replacement for a matched node. Replacing function should return a new node or null . undefined is considered as no change. |