The library for web and native user interfaces.
Add support for empty XJS expressions
JeffMo committed
Jun 28, 2013 at 12:07 UTC
9c35189ad196b1849d6260a60e3c0e10c5c6a1e4
3 files changed
+14
-11
package.json
+1
-1
@@ -37,7 +37,7 @@
37
"dependencies": {
38
"base62": "~0.1.1",
39
"commoner": "~0.7.0",
40
- "esprima": "https://github.com/facebook/esprima/tarball/ca28795124d45968e62a7b4b336d23a053ac3a84",
40
+ "esprima": "https://github.com/facebook/esprima/tarball/a3e0ea3979eb8d54d8bfade220c272903f928b1e",
41
"recast": "~0.4.8",
42
"source-map": "~0.1.22"
43
},
vendor/fbtransform/transforms/react.js
+5
-4
@@ -24,7 +24,8 @@ var move = require('../lib/utils').move;
24
var getDocblock = require('../lib/utils').getDocblock;
25
26
var FALLBACK_TAGS = require('./xjs').knownTags;
27
-var renderXJSExpression = require('./xjs').renderXJSExpression;
27
+var renderXJSExpressionContainer =
28
+ require('./xjs').renderXJSExpressionContainer;
29
var renderXJSLiteral = require('./xjs').renderXJSLiteral;
30
var quoteAttrName = require('./xjs').quoteAttrName;
31
@@ -121,7 +122,7 @@ function visitReactTag(traverse, object, path, state) {
122
renderXJSLiteral(attr.value, isLast, state);
123
} else {
124
move(attr.value.range[0], state);
124
- renderXJSExpression(traverse, attr.value, isLast, path, state);
125
+ renderXJSExpressionContainer(traverse, attr.value, isLast, path, state);
126
}
127
128
if (isLast) {
@@ -150,8 +151,8 @@ function visitReactTag(traverse, object, path, state) {
151
152
if (child.type === Syntax.Literal) {
153
renderXJSLiteral(child, isLast, state);
153
- } else if (child.type === Syntax.XJSExpression) {
154
- renderXJSExpression(traverse, child, isLast, path, state);
154
+ } else if (child.type === Syntax.XJSExpressionContainer) {
155
+ renderXJSExpressionContainer(traverse, child, isLast, path, state);
156
} else {
157
traverse(child, path, state);
158
if (!isLast) {
vendor/fbtransform/transforms/xjs.js
+8
-6
@@ -15,9 +15,10 @@
15
*/
16
/*global exports:true*/
17
"use strict";
18
-var catchup = require('../lib/utils').catchup;
18
var append = require('../lib/utils').append;
19
+var catchup = require('../lib/utils').catchup;
20
var move = require('../lib/utils').move;
21
+var Syntax = require('esprima').Syntax;
22
23
var knownTags = {
24
a: true,
@@ -255,15 +256,16 @@ function renderXJSLiteral(object, isLast, state, start, end) {
256
move(object.range[1], state);
257
}
258
258
-function renderXJSExpression(traverse, object, isLast, path, state) {
259
+function renderXJSExpressionContainer(traverse, object, isLast, path, state) {
260
// Plus 1 to skip `{`.
261
move(object.range[0] + 1, state);
261
- traverse(object.value, path, state);
262
- if (!isLast) {
262
+ traverse(object.expression, path, state);
263
+ if (!isLast && object.expression.type !== Syntax.XJSEmptyExpression) {
264
// If we need to append a comma, make sure to do so after the expression.
264
- catchup(object.value.range[1], state);
265
+ catchup(object.expression.range[1], state);
266
append(',', state);
267
}
268
+
269
// Minus 1 to skip `}`.
270
catchup(object.range[1] - 1, state);
271
move(object.range[1], state);
@@ -279,6 +281,6 @@ function quoteAttrName(attr) {
281
}
282
283
exports.knownTags = knownTags;
282
-exports.renderXJSExpression = renderXJSExpression;
284
+exports.renderXJSExpressionContainer = renderXJSExpressionContainer;
285
exports.renderXJSLiteral = renderXJSLiteral;
286
exports.quoteAttrName = quoteAttrName;