Comparing version 0.0.8 to 0.0.9
@@ -178,2 +178,5 @@ /** | ||
var matchers = { | ||
"not": notMatcher, | ||
"or": orMatcher, | ||
"and": andMatcher, | ||
"var": varMatcher, | ||
@@ -245,2 +248,64 @@ "return": returnMatcher, | ||
/** | ||
#### (not pattern) | ||
Matches when `pattern` doesn't match. | ||
*/ | ||
function notMatcher(pattern) { | ||
assert("not", 1, arguments); | ||
pattern = pattern || "?"; | ||
var patternMatcher = matcher(pattern); | ||
return function (node) { | ||
return patternMatcher(node) ? undefined : {}; | ||
}; | ||
} | ||
/** | ||
#### (or pattern1 pattern2...) | ||
Matches if any pattern matches, returns first match. | ||
*/ | ||
function orMatcher() { | ||
var args = _.toArray(arguments); | ||
var argsMatchers = args.map(matcher); | ||
return function (node) { | ||
for (var i = 0; i < argsMatchers.length; i++) { | ||
var m = argsMatchers[i](node); | ||
if (m) { | ||
return m; | ||
} | ||
} | ||
return undefined; | ||
}; | ||
} | ||
/** | ||
#### (and pattern1 pattern2...) | ||
Matches if all pattern matches, returns combinedMatch | ||
*/ | ||
function andMatcher() { | ||
var args = _.toArray(arguments); | ||
var argsMatchers = args.map(matcher); | ||
return function (node) { | ||
var res = {}; | ||
for (var i = 0; i < argsMatchers.length; i++) { | ||
var m = argsMatchers[i](node); | ||
if (m === undefined) { | ||
return undefined; | ||
} | ||
res = _.extend(res, m); | ||
} | ||
return res; | ||
}; | ||
} | ||
/** | ||
#### (null-node) | ||
@@ -725,2 +790,3 @@ | ||
- 0.0.9 Boolean patterns | ||
- 0.0.8 Even more rands | ||
@@ -727,0 +793,0 @@ - unary and update expressions |
{ | ||
"name": "jsstana", | ||
"description": "s-expression match patterns for Mozilla Parser AST", | ||
"version": "0.0.8", | ||
"version": "0.0.9", | ||
"homepage": "https://github.com/phadej/jsstana", | ||
@@ -6,0 +6,0 @@ "author": { |
@@ -39,2 +39,14 @@ # jsstana [![Build Status](https://secure.travis-ci.org/phadej/jsstana.png?branch=master)](http://travis-ci.org/phadej/jsstana) | ||
#### (not pattern) | ||
Matches when `pattern` doesn't match. | ||
#### (or pattern1 pattern2...) | ||
Matches if any pattern matches, returns first match. | ||
#### (and pattern1 pattern2...) | ||
Matches if all pattern matches, returns combinedMatch | ||
#### (null-node) | ||
@@ -141,2 +153,3 @@ | ||
- 0.0.9 Boolean patterns | ||
- 0.0.8 Even more rands | ||
@@ -143,0 +156,0 @@ - unary and update expressions |
85094
31
2177
176