utils.* is now used everywhere
Andreas Svensson committed
Nov 9, 2013 at 01:08 UTC
a39b8fda70bdad652373223faeaba2d6ca8770ba
2 files changed
+35
-42
vendor/fbtransform/transforms/react.js
+31
-36
@@ -17,12 +17,7 @@
17
"use strict";
18
19
var Syntax = require('esprima-fb').Syntax;
20
-
21
-var catchup = require('jstransform/src/utils').catchup;
22
-var catchupWhiteSpace = require('jstransform/src/utils').catchupWhiteSpace;
23
-var append = require('jstransform/src/utils').append;
24
-var move = require('jstransform/src/utils').move;
25
-var getDocblock = require('jstransform/src/utils').getDocblock;
20
+var utils = require('jstransform/src/utils');
21
22
var FALLBACK_TAGS = require('./xjs').knownTags;
23
var renderXJSExpressionContainer =
@@ -56,9 +51,9 @@ var JSX_ATTRIBUTE_TRANSFORMS = {
51
};
52
53
function visitReactTag(traverse, object, path, state) {
59
- var jsxObjIdent = getDocblock(state).jsx;
54
+ var jsxObjIdent = utils.getDocblock(state).jsx;
55
61
- catchup(object.openingElement.range[0], state);
56
+ utils.catchup(object.openingElement.range[0], state);
57
58
if (object.name.namespace) {
59
throw new Error(
@@ -66,12 +61,12 @@ function visitReactTag(traverse, object, path, state) {
61
}
62
63
var isFallbackTag = FALLBACK_TAGS[object.name.name];
69
- append(
64
+ utils.append(
65
(isFallbackTag ? jsxObjIdent + '.' : '') + (object.name.name) + '(',
66
state
67
);
68
74
- move(object.name.range[1], state);
69
+ utils.move(object.name.range[1], state);
70
71
var childrenToRender = object.children.filter(function(child) {
72
return !(child.type === Syntax.Literal && !child.value.match(/\S/));
@@ -79,12 +74,12 @@ function visitReactTag(traverse, object, path, state) {
74
75
// if we don't have any attributes, pass in null
76
if (object.attributes.length === 0) {
82
- append('null', state);
77
+ utils.append('null', state);
78
}
79
80
// write attributes
81
object.attributes.forEach(function(attr, index) {
87
- catchup(attr.range[0], state);
82
+ utils.catchup(attr.range[0], state);
83
if (attr.name.namespace) {
84
throw new Error(
85
'Namespace attributes are not supported. ReactJSX is not XML.');
@@ -94,27 +89,27 @@ function visitReactTag(traverse, object, path, state) {
89
var isLast = index === object.attributes.length - 1;
90
91
if (isFirst) {
97
- append('{', state);
92
+ utils.append('{', state);
93
}
94
100
- append(quoteAttrName(name), state);
101
- append(':', state);
95
+ utils.append(quoteAttrName(name), state);
96
+ utils.append(':', state);
97
98
if (!attr.value) {
99
state.g.buffer += 'true';
100
state.g.position = attr.name.range[1];
101
if (!isLast) {
107
- append(',', state);
102
+ utils.append(',', state);
103
}
104
} else {
110
- move(attr.name.range[1], state);
105
+ utils.move(attr.name.range[1], state);
106
// Use catchupWhiteSpace to skip over the '=' in the attribute
112
- catchupWhiteSpace(attr.value.range[0], state);
107
+ utils.catchupWhiteSpace(attr.value.range[0], state);
108
if (JSX_ATTRIBUTE_TRANSFORMS[attr.name.name]) {
114
- append(JSX_ATTRIBUTE_TRANSFORMS[attr.name.name](attr), state);
115
- move(attr.value.range[1], state);
109
+ utils.append(JSX_ATTRIBUTE_TRANSFORMS[attr.name.name](attr), state);
110
+ utils.move(attr.value.range[1], state);
111
if (!isLast) {
117
- append(',', state);
112
+ utils.append(',', state);
113
}
114
} else if (attr.value.type === Syntax.Literal) {
115
renderXJSLiteral(attr.value, isLast, state);
@@ -124,26 +119,26 @@ function visitReactTag(traverse, object, path, state) {
119
}
120
121
if (isLast) {
127
- append('}', state);
122
+ utils.append('}', state);
123
}
124
130
- catchup(attr.range[1], state);
125
+ utils.catchup(attr.range[1], state);
126
});
127
128
if (!object.selfClosing) {
134
- catchup(object.openingElement.range[1] - 1, state);
135
- move(object.openingElement.range[1], state);
129
+ utils.catchup(object.openingElement.range[1] - 1, state);
130
+ utils.move(object.openingElement.range[1], state);
131
}
132
133
// filter out whitespace
134
if (childrenToRender.length > 0) {
140
- append(', ', state);
135
+ utils.append(', ', state);
136
137
object.children.forEach(function(child) {
138
if (child.type === Syntax.Literal && !child.value.match(/\S/)) {
139
return;
140
}
146
- catchup(child.range[0], state);
141
+ utils.catchup(child.range[0], state);
142
143
var isLast = child === childrenToRender[childrenToRender.length - 1];
144
@@ -152,34 +147,34 @@ function visitReactTag(traverse, object, path, state) {
147
} else if (child.type === Syntax.XJSExpressionContainer) {
148
renderXJSExpressionContainer(traverse, child, isLast, path, state);
149
} else {
155
- traverse(child, path, state);
150
+ utils.traverse(child, path, state);
151
if (!isLast) {
157
- append(',', state);
152
+ utils.append(',', state);
153
state.g.buffer = state.g.buffer.replace(/(\s*),$/, ',$1');
154
}
155
}
156
162
- catchup(child.range[1], state);
157
+ utils.catchup(child.range[1], state);
158
});
159
}
160
161
if (object.selfClosing) {
162
// everything up to />
168
- catchup(object.openingElement.range[1] - 2, state);
169
- move(object.openingElement.range[1], state);
163
+ utils.catchup(object.openingElement.range[1] - 2, state);
164
+ utils.move(object.openingElement.range[1], state);
165
} else {
166
// everything up to </ sdflksjfd>
172
- catchup(object.closingElement.range[0], state);
173
- move(object.closingElement.range[1], state);
167
+ utils.catchup(object.closingElement.range[0], state);
168
+ utils.move(object.closingElement.range[1], state);
169
}
170
176
- append(')', state);
171
+ utils.append(')', state);
172
return false;
173
}
174
175
visitReactTag.test = function(object, path, state) {
176
// only run react when react @jsx namespace is specified in docblock
182
- var jsx = getDocblock(state).jsx;
177
+ var jsx = utils.getDocblock(state).jsx;
178
return object.type === Syntax.XJSElement && jsx && jsx.length;
179
};
180
vendor/fbtransform/transforms/reactDisplayName.js
+4
-6
@@ -17,9 +17,7 @@
17
"use strict";
18
19
var Syntax = require('esprima-fb').Syntax;
20
-var catchup = require('jstransform/src/utils').catchup;
21
-var append = require('jstransform/src/utils').append;
22
-var getDocblock = require('jstransform/src/utils').getDocblock;
20
+var utils = require('jstransform/src/utils');
21
22
/**
23
* Transforms the following:
@@ -48,8 +46,8 @@ function visitReactDisplayName(traverse, object, path, state) {
46
object.init['arguments'][0].type === Syntax.ObjectExpression) {
47
48
var displayName = object.id.name;
51
- catchup(object.init['arguments'][0].range[0] + 1, state);
52
- append("displayName: '" + displayName + "',", state);
49
+ utils.catchup(object.init['arguments'][0].range[0] + 1, state);
50
+ utils.append("displayName: '" + displayName + "',", state);
51
}
52
}
53
@@ -57,7 +55,7 @@ function visitReactDisplayName(traverse, object, path, state) {
55
* Will only run on @jsx files for now.
56
*/
57
visitReactDisplayName.test = function(object, path, state) {
60
- return object.type === Syntax.VariableDeclarator && !!getDocblock(state).jsx;
58
+ return object.type === Syntax.VariableDeclarator && !!utils.getDocblock(state).jsx;
59
};
60
61
exports.visitReactDisplayName = visitReactDisplayName;