1.1.3 • Published 9 years ago

ast-replace v1.1.3

Weekly downloads
13,363
License
Unlicensed
Repository
github
Last release
9 years ago

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
		}
	}
}
PropertyTypeDefaultDescription
testFunctiontrueTest whether node found should be replaced. Testing function should return boolean. If omitted, every node will pass the test.
replaceFunction, Node, undefined, nullnullA replacement for a matched node. Replacing function should return a new node or null. undefined is considered as no change.

NPM