@samitouri / QOS-React-2 / commits / 9c35189ad1
Fork 0

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;