Skip to content

Commit 41116cb

Browse files
committed
Merge pull request #81 from jimfleming/unary
Adding support for UnaryExpression
2 parents 1271496 + a06d8cb commit 41116cb

File tree

5 files changed

+30
-2
lines changed

5 files changed

+30
-2
lines changed

README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,11 @@ Links
187187
Changelog
188188
---
189189

190+
### v0.3.2
191+
192+
- Adding support for `UnaryExpression`
193+
- Fixing bug where rewrite types were not being set properly
194+
190195
### v0.3.1
191196

192197
- Fixed bug when searching for expressions within BlockStatement or Program body

lib/rewrite.js

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,11 @@ function match(wildcards, pattern, node) {
129129
var matchedObject = match(wildcards, pattern.object, node.object);
130130
var matchedProperty = match(wildcards, pattern.property, node.property);
131131
return matchedObject && matchedProperty;
132+
case 'UnaryExpression':
133+
if (pattern.operator != node.operator) {
134+
return false;
135+
}
136+
return match(wildcards, pattern.argument, node.argument);
132137
case 'ArrayExpression':
133138
return partial(wildcards, pattern.elements, node.elements);
134139
case 'ObjectExpression':
@@ -288,6 +293,9 @@ function replaceWildcards(wildcards, replacement) {
288293
replacement.left = replaceWildcards(wildcards, replacement.left);
289294
replacement.right = replaceWildcards(wildcards, replacement.right);
290295
break;
296+
case 'UnaryExpression':
297+
replacement.argument = replaceWildcards(wildcards, replacement.argument);
298+
break;
291299
case 'VariableDeclaration':
292300
for (i = 0; i < replacement.declarations.length; i++) {
293301
replacement.declarations[i] = replaceWildcards(wildcards, replacement.declarations[i]);
@@ -366,7 +374,9 @@ exports.rewrite = function(js, rewriteRule) {
366374

367375
// Set replacement node type to match original node type. This is to
368376
// account for cases when two nodes are comparable but not equal.
369-
clonedReplacement.type = node.type;
377+
if (comparable(clonedReplacement, node)) {
378+
clonedReplacement.type = node.type;
379+
}
370380

371381
var updatedNode = replaceWildcards(wildcards, clonedReplacement);
372382
var generated = escodegen.generate(updatedNode);

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "jsfmt",
33
"description": "gofmt for javascript",
4-
"version": "0.3.1",
4+
"version": "0.3.2",
55
"homepage": "https://github.com/rdio/jsfmt",
66
"main": "./lib/index.js",
77
"engines": {

tests/rewrite.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,4 +53,9 @@ describe('jsfmt.rewrite', function() {
5353
'_.map(a, b) -> a.map(b)')
5454
.toString().should.eql('function test() { return [\n 0,\n 1,\n 2\n].map(function (val) {\n return val * val;\n}); }');
5555
});
56+
57+
it('should be able to rewrite unary expression', function() {
58+
jsfmt.rewrite('var test = !0;', '!0 -> true').toString().should.eql('var test = true;');
59+
jsfmt.rewrite('var test = !0;', '!0 -> !1').toString().should.eql('var test = !1;');
60+
});
5661
});

tests/search.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,12 @@ describe('jsfmt.search', function() {
3333
'_.map(a, b)');
3434
results.length.should.eql(1);
3535
});
36+
37+
it('should be able to search for unary expression', function() {
38+
var resultsA = jsfmt.search('!0', '!0');
39+
resultsA.length.should.eql(1);
40+
41+
var resultsB = jsfmt.search('var test = !0;', '!0');
42+
resultsB.length.should.eql(1);
43+
});
3644
});

0 commit comments

Comments
 (0)