Skip to content

scrapjs/ast-replace

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

About

Replace nodes in AST by rules

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages