Skip to content

Commit 07e8e1b

Browse files
committed
Fixing bug when replacement was not deep copied that caused the replacement to become fixed on the first result
1 parent 6bd2303 commit 07e8e1b

File tree

2 files changed

+10
-6
lines changed

2 files changed

+10
-6
lines changed

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.1.0",
4+
"version": "0.1.1",
55
"homepage": "https://github.com/rdio/jsfmt",
66
"main": "index.js",
77
"engines": {

rewrite.js

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@ var falafel = require('falafel');
44
var escodegen = require('escodegen');
55
var _ = require('underscore');
66

7+
function clone(obj) {
8+
return JSON.parse(JSON.stringify(obj));
9+
}
10+
711
function unwrapRewriteNode(node) {
812
if (node.type == 'Program' && node.body.length > 0) {
913
node = unwrapRewriteNode(node.body[0]);
@@ -13,8 +17,8 @@ function unwrapRewriteNode(node) {
1317
return node;
1418
}
1519

16-
function isWildcard(name) {
17-
return /\b[a-z]\b/g.test(name);
20+
function isWildcard(node) {
21+
return node.type == "Identifier" && /\b[a-z]\b/g.test(node.name);
1822
}
1923

2024
function partial(wildcards, patterns, nodes) {
@@ -57,7 +61,7 @@ function match(wildcards, pattern, node) {
5761
return false;
5862
}
5963

60-
if (wildcards != null && pattern.type == 'Identifier' && isWildcard(pattern.name)) {
64+
if (wildcards != null && isWildcard(pattern)) {
6165
if (pattern.name in wildcards) {
6266
return match(null, wildcards[pattern.name], node);
6367
}
@@ -164,7 +168,7 @@ function match(wildcards, pattern, node) {
164168
function replaceWildcards(wildcards, replacement) {
165169
switch (replacement.type) {
166170
case 'Identifier':
167-
if (wildcards != null && isWildcard(replacement.name)) {
171+
if (wildcards != null && isWildcard(replacement)) {
168172
if (replacement.name in wildcards) {
169173
replacement = wildcards[replacement.name];
170174
}
@@ -266,7 +270,7 @@ exports.rewrite = function(js, rewriteRule) {
266270
return falafel(js, parseOptions, function(node) {
267271
var wildcards = {};
268272
if (match(wildcards, pattern, node)) {
269-
node.update(escodegen.generate(replaceWildcards(wildcards, _.clone(replacement))));
273+
node.update(escodegen.generate(replaceWildcards(wildcards, clone(replacement))));
270274
}
271275
});
272276
}

0 commit comments

Comments
 (0)