ast-replace

1.1.3 • Public • Published

ast-replace Build Status unstable

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.

NPM

Package Sidebar

Install

npm i ast-replace

Weekly Downloads

86

Version

1.1.3

License

Unlicensed

Last publish

Collaborators

  • dfcreative