ast-check

1.0.10 • Public • Published

ast-check

Check ast for specified pattern.

Usage

var matcher = require('ast-check').matcher;
 
var m = matcher();
 
m.
  // We define goals to match some code
  goal('init.var').
    code('var i = "#var.value"'). // "#fragment.name" will be replaced
                                  //   with fragment's code on matching
    assign('var.value', 'value.answer').
  // Several goals may be defined to inherit code
  goal('init.var.parrots').
    // Just take another goal
    takes('init.var').
    // And reassign some of fragments
    assign('var.value', 'value.parrots').
  goal('init.var.variants').
    takes('init.var').
    // When several variants are possible..
    assign('var.value', 'value.variants').
  goal('init.var.anything').
    // When we need wildcard in init part
    assign('var.value', 'builtin.anything').
  fragment('value.answer').
    code('42').
  fragment('value.parrots').
    code('38').
  fragment('value.variants').
    code('38', '42'); // fragment's code may have several variants
 
m.match('init.var')('var i = 42'); // => true
m.match('init.var')('var i = 38'); // => false
 
m.match('init.var.parrots')('var i = 42'); // => false
m.match('init.var.parrots')('var i = 38'); // => true
 
m.match('init.var.variants')('var i = 38'); // => true
m.match('init.var.variants')('var i = 42'); // => true
 
m.match('init.var.anything')('var i = 404'); // => true

Limitations

You should avoid situations when two builtin.anything are placed sequentally. In this case matching will not work as expected.

Dependencies

Dependencies (2)

Dev Dependencies (3)

Package Sidebar

Install

npm i ast-check

Weekly Downloads

1

Version

1.0.10

License

MIT

Last publish

Collaborators

  • kaineer