Skip to content

smallhelm/estree-builder

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

77 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

estree-builder

build status dependency status JavaScript Style Guide

Handy functions for building estree nodes

Example

var e = require('estree-builder')

var estree = e.number(1)
// -> { type: 'Literal', value: 1 }

//let's use astring to convert the estree into js code
var astring = require('astring').generate

astring(estree)
// -> '1'

estree = e.fn(['a', 'b'], [
  e('return', e('+', e.id('a'), e.id('b')))
], 'add')

astring(estree)
// -> 'function add(a, b) {return a + b}'

Usage

There are 3 ways to call a builder

e.number(1)
e['number'](1)
e('number', 1)

All builders can take a location object as the last argument. (i.e. for generating source maps)

var loc = {
  source: "some-file.js"
  start: { line: 1, column: 0 },
  end: { line: 1, column: 1 }
}

e('number', 1, loc)

List of builders

building block values

e('number', val) //aliases: 'num', 'float'
e('string', val) //aliases: 'str'
e('true')
e('false')
e('null')
e('undefined') //aliases: 'nil'
e('array', elements) //aliases: 'arr'
e('object-raw', pairs) //aliases: 'obj-raw'
e('object-property', key, value) //aliases: 'obj-prop'
e('object', obj) //aliases: 'obj'

given some json object, build the tree

e('json', val)

variables

e('var', id, val)
e('let', id, val)
e('const', id, val)
e('identifier', name) //aliases: 'id'

control flow

e('if', test, consequent, alternate)
e('ternary', test, consequent, alternate) //aliases: '?'
e('switch', discriminant, cases)
e('case', test, consequent)
e('default', consequent)
e('while', test, body)
e('for', init, test, update, body)
e('for-in', left, right, body)
e('for-of', left, right, body)
e('break')
e('continue')
e('return', arg)
e('throw', arg)
e('try', body, catchVar, catchStmt, finallyStmt)

functions

e('function', args, body, id) //aliases: 'fn', 'lambda'
e('call', callee, args)
e('arrow', args, body)

property access

e('.', obj, prop)
e('get', obj, prop)
e('get-in', obj, path) //aliases: '..'

language stuff

e('arguments') //aliases: 'args'
e('this')
e('statement', expr) //aliases: ';'
e('block', body)
e('new', callee, args)

infix operators

e('==', left, right)
e('!=', left, right)
e('===', left, right)
e('!==', left, right)
e('<', left, right)
e('<=', left, right)
e('>', left, right)
e('>=', left, right)
e('<<', left, right)
e('>>', left, right)
e('>>>', left, right)
e('*', left, right)
e('/', left, right)
e('%', left, right)
e('|', left, right)
e('^', left, right)
e('&', left, right)
e('in', left, right)
e('instanceof', left, right)
e('&&', left, right)
e('||', left, right)
e('+', a, b)
e('-', a, b)

unary operators

e('!', arg)
e('~', arg)
e('typeof', arg)
e('void', arg)
e('delete', arg)
e('++', arg)
e('--', arg)

assignments

e('=', left, right)
e('+=', left, right)
e('-=', left, right)
e('*=', left, right)
e('/=', left, right)
e('%=', left, right)
e('<<=', left, right)
e('>>=', left, right)
e('>>>=', left, right)
e('|=', left, right)
e('^=', left, right)
e('&=', left, right)

destructuring

e('assign', left, right)
e('assign-property', key, value) //aliases: 'assign-prop'
e('obj-pattern', properties)
e('arr-pattern', elements)

generator functions

e('genfn', args, body, id)
e('yield', arg, delegate)

classes

e('class', name, superClass, methods)
e('method', key, value, kind, computed, isStatic)

Contributing

Add tests to tests.js, run them like this:

$ npm test

or to automatically re-run them whenever you make a change

$ npm start

Re-generate the docs (README.md between the GEN-DOCS-BEGIN|END comments)

$ npm run build

License

MIT

About

Handy functions for building estree nodes

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published