From 0f7ca2b0033c6e8312ba6d5c42635af7e4058baa Mon Sep 17 00:00:00 2001 From: Jason Miller Date: Thu, 12 Feb 2015 08:57:23 -0800 Subject: [PATCH 1/9] Put comma after any non-comments, non-whitespace in XJSEspression Should fix issue #1673 --- .../transforms/__tests__/react-test.js | 11 ++++ vendor/fbtransform/transforms/jsx.js | 64 +++++++++++++++++-- 2 files changed, 70 insertions(+), 5 deletions(-) diff --git a/vendor/fbtransform/transforms/__tests__/react-test.js b/vendor/fbtransform/transforms/__tests__/react-test.js index 44b7b3b76a5..c82af6347fb 100644 --- a/vendor/fbtransform/transforms/__tests__/react-test.js +++ b/vendor/fbtransform/transforms/__tests__/react-test.js @@ -324,6 +324,17 @@ describe('react jsx', function() { expect(transform(code).code).toBe(result); }); + it('handles overparenthesized JS', function() { + var code = + 'Foo {(e+f/* */)\n' + + '} bar\n' + + ''; + var result = 'React.createElement("foo", {a: (b), c: (d)}, "Foo ",(e+f/* */), \n' + + '" bar"\n' + + ')'; + expect(transform(code).code).toBe(result); + }); + it('should transform known hyphenated tags', function() { var code = ';'; var result = 'React.createElement("font-face", null);'; diff --git a/vendor/fbtransform/transforms/jsx.js b/vendor/fbtransform/transforms/jsx.js index 428d80a37ba..9797aed072f 100644 --- a/vendor/fbtransform/transforms/jsx.js +++ b/vendor/fbtransform/transforms/jsx.js @@ -11,6 +11,58 @@ var Syntax = require('jstransform').Syntax; var utils = require('jstransform/src/utils'); +function commaAfterLastParen(value) { + var state = "normal"; + var commaPos = 0; + for (var i=0;i Date: Thu, 12 Feb 2015 09:31:07 -0800 Subject: [PATCH 2/9] Convert switch statements to if/else Requested by @syranide --- vendor/fbtransform/transforms/jsx.js | 68 ++++++++++++---------------- 1 file changed, 30 insertions(+), 38 deletions(-) diff --git a/vendor/fbtransform/transforms/jsx.js b/vendor/fbtransform/transforms/jsx.js index 9797aed072f..9a57c48a0fa 100644 --- a/vendor/fbtransform/transforms/jsx.js +++ b/vendor/fbtransform/transforms/jsx.js @@ -15,46 +15,38 @@ function commaAfterLastParen(value) { var state = "normal"; var commaPos = 0; for (var i=0;i Date: Fri, 13 Feb 2015 09:30:35 -0800 Subject: [PATCH 3/9] Clean up comma-insertion transform This flattens the if/else structure quite a bit. --- vendor/fbtransform/transforms/jsx.js | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/vendor/fbtransform/transforms/jsx.js b/vendor/fbtransform/transforms/jsx.js index 9a57c48a0fa..e6788778580 100644 --- a/vendor/fbtransform/transforms/jsx.js +++ b/vendor/fbtransform/transforms/jsx.js @@ -21,21 +21,17 @@ function commaAfterLastParen(value) { if (value.charAt(i+1) === "/") { state = "singleline"; i+=1; + continue; } - else if (value.charAt(i+1) === "*") { + if (value.charAt(i+1) === "*") { state = "multiline" i+=1; + continue; } - else { - commaPos = i+1; - } - } - else { - commaPos = i+1; } } - else if (value.charAt(i).trim() !== "") { + if (value.charAt(i).trim() !== "") { commaPos = i+1; } } From 11b5da32ee68299063ba1e477f932b6bdd016d20 Mon Sep 17 00:00:00 2001 From: Jason Miller Date: Tue, 17 Feb 2015 21:57:15 -0800 Subject: [PATCH 4/9] Style fixups from zpao Also now ran eslint on this. The part that I added is now clean on eslint (the rest of the file not so much) --- vendor/fbtransform/transforms/jsx.js | 67 +++++++++++++--------------- 1 file changed, 32 insertions(+), 35 deletions(-) diff --git a/vendor/fbtransform/transforms/jsx.js b/vendor/fbtransform/transforms/jsx.js index e6788778580..645722d5f03 100644 --- a/vendor/fbtransform/transforms/jsx.js +++ b/vendor/fbtransform/transforms/jsx.js @@ -12,45 +12,42 @@ var Syntax = require('jstransform').Syntax; var utils = require('jstransform/src/utils'); function commaAfterLastParen(value) { - var state = "normal"; - var commaPos = 0; - for (var i=0;i Date: Thu, 19 Feb 2015 19:02:14 -0800 Subject: [PATCH 5/9] Fixed eslint errors --- .../transforms/__tests__/react-test.js | 14 +++--- vendor/fbtransform/transforms/jsx.js | 44 +++++++++---------- 2 files changed, 28 insertions(+), 30 deletions(-) diff --git a/vendor/fbtransform/transforms/__tests__/react-test.js b/vendor/fbtransform/transforms/__tests__/react-test.js index c82af6347fb..4d8a527ed99 100644 --- a/vendor/fbtransform/transforms/__tests__/react-test.js +++ b/vendor/fbtransform/transforms/__tests__/react-test.js @@ -325,13 +325,13 @@ describe('react jsx', function() { }); it('handles overparenthesized JS', function() { - var code = - 'Foo {(e+f/* */)\n' + - '} bar\n' + - ''; - var result = 'React.createElement("foo", {a: (b), c: (d)}, "Foo ",(e+f/* */), \n' + - '" bar"\n' + - ')'; + var code = + 'Foo {(e+f/* */)\n' + + '} bar\n' + + ''; + var result = 'React.createElement("foo", {a: (b), c: (d)}, "Foo ",(e+f/* */), \n' + + '" bar"\n' + + ')'; expect(transform(code).code).toBe(result); }); diff --git a/vendor/fbtransform/transforms/jsx.js b/vendor/fbtransform/transforms/jsx.js index 645722d5f03..83719945ef5 100644 --- a/vendor/fbtransform/transforms/jsx.js +++ b/vendor/fbtransform/transforms/jsx.js @@ -12,40 +12,39 @@ var Syntax = require('jstransform').Syntax; var utils = require('jstransform/src/utils'); function commaAfterLastParen(value) { - var state = "normal"; + var state = 'normal'; var commaPos = 0; for (var i = 0; i < value.length; ++i) { - if (state === "normal") { - if (value.charAt(i) === "/") { + if (state === 'normal') { + if (value.charAt(i) === '/') { if (i + 1 < value.length) { - if (value.charAt(i + 1) === "/") { - state = "singleline"; + if (value.charAt(i + 1) === '/') { + state = 'singleline'; i += 1; continue; } - if (value.charAt(i + 1) === "*") { - state = "multiline"; + if (value.charAt(i + 1) === '*') { + state = 'multiline'; i += 1; continue; } } } - if (value.charAt(i).trim() !== "") { + if (value.charAt(i).trim() !== '') { commaPos = i + 1; } - } - else if (state === "singleline" && value.charAt(i) === "\n") { - state = "normal"; - } else if (state === "multiline" && - value.charAt(i) === "*" && + } else if (state === 'singleline' && value.charAt(i) === '\n') { + state = 'normal'; + } else if (state === 'multiline' && + value.charAt(i) === '*' && i + 1 < value.length && - value.charAt(i + 1) === "/") { - i += 1; - state = "normal"; - } + value.charAt(i + 1) === '/') { + i += 1; + state = 'normal'; + } } - return value.substring(0, commaPos) + ", " + trimLeft(value.substring(commaPos)); + return value.substring(0, commaPos) + ', ' + trimLeft(value.substring(commaPos)); } function renderJSXLiteral(object, isLast, state, start, end) { @@ -121,12 +120,11 @@ function renderJSXExpressionContainer(traverse, object, isLast, path, state) { if (!isLast && object.expression.type !== Syntax.JSXEmptyExpression) { // If we need to append a comma, make sure to do so after the expression. utils.catchup(object.expression.range[1], state, trimLeft); - utils.catchup(object.range[1] -1, state, commaAfterLastParen) + utils.catchup(object.range[1] - 1, state, commaAfterLastParen); //utils.append(', ', state); - } - else { - // Minus 1 to skip `}`. - utils.catchup(object.range[1] - 1, state, trimLeft); + } else { + // Minus 1 to skip `}`. + utils.catchup(object.range[1] - 1, state, trimLeft); } utils.move(object.range[1], state); return false; From f0a99036ccb3e1a6fc14c78b1c1dd736a0daf7fe Mon Sep 17 00:00:00 2001 From: Jason Miller Date: Thu, 19 Feb 2015 19:05:46 -0800 Subject: [PATCH 6/9] Remove commented out code --- vendor/fbtransform/transforms/jsx.js | 1 - 1 file changed, 1 deletion(-) diff --git a/vendor/fbtransform/transforms/jsx.js b/vendor/fbtransform/transforms/jsx.js index 83719945ef5..11434d1fb5e 100644 --- a/vendor/fbtransform/transforms/jsx.js +++ b/vendor/fbtransform/transforms/jsx.js @@ -121,7 +121,6 @@ function renderJSXExpressionContainer(traverse, object, isLast, path, state) { // If we need to append a comma, make sure to do so after the expression. utils.catchup(object.expression.range[1], state, trimLeft); utils.catchup(object.range[1] - 1, state, commaAfterLastParen); - //utils.append(', ', state); } else { // Minus 1 to skip `}`. utils.catchup(object.range[1] - 1, state, trimLeft); From 26f51e2b0b7993bd6af2a46dcfb35ea9a31cff28 Mon Sep 17 00:00:00 2001 From: Jason Miller Date: Sat, 21 Feb 2015 10:21:52 -0800 Subject: [PATCH 7/9] Test single-line comments as well as multiline --- vendor/fbtransform/transforms/__tests__/react-test.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/vendor/fbtransform/transforms/__tests__/react-test.js b/vendor/fbtransform/transforms/__tests__/react-test.js index 4d8a527ed99..2761fa9982d 100644 --- a/vendor/fbtransform/transforms/__tests__/react-test.js +++ b/vendor/fbtransform/transforms/__tests__/react-test.js @@ -326,10 +326,12 @@ describe('react jsx', function() { it('handles overparenthesized JS', function() { var code = - 'Foo {(e+f/* */)\n' + + 'Foo {(e+f //A line comment\n' + + '/* A multiline comment */)\n' + '} bar\n' + ''; - var result = 'React.createElement("foo", {a: (b), c: (d)}, "Foo ",(e+f/* */), \n' + + var result = 'React.createElement("foo", {a: (b), c: (d)}, "Foo ",(e+f //A line comment\n' + + '/* A multiline comment */), \n' + '" bar"\n' + ')'; expect(transform(code).code).toBe(result); From 41685ffd73c8109f018e5c7c902b8854abda61d7 Mon Sep 17 00:00:00 2001 From: Jason Miller Date: Sat, 21 Feb 2015 10:21:55 -0800 Subject: [PATCH 8/9] Simplify comma transform state machine --- vendor/fbtransform/transforms/jsx.js | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/vendor/fbtransform/transforms/jsx.js b/vendor/fbtransform/transforms/jsx.js index 11434d1fb5e..65a8c6ab41a 100644 --- a/vendor/fbtransform/transforms/jsx.js +++ b/vendor/fbtransform/transforms/jsx.js @@ -16,22 +16,13 @@ function commaAfterLastParen(value) { var commaPos = 0; for (var i = 0; i < value.length; ++i) { if (state === 'normal') { - if (value.charAt(i) === '/') { - if (i + 1 < value.length) { - if (value.charAt(i + 1) === '/') { - state = 'singleline'; - i += 1; - continue; - - } - if (value.charAt(i + 1) === '*') { - state = 'multiline'; - i += 1; - continue; - } - } - } - if (value.charAt(i).trim() !== '') { + if (value.substr(i, 2) === '//') { + state = 'singleline'; + i += 1; + } else if (value.substr(i, 2) === '/*') { + state = 'multiline'; + i += 1; + } else if (value.charAt(i).trim() !== '') { commaPos = i + 1; } } else if (state === 'singleline' && value.charAt(i) === '\n') { From 8e1da6a995e11d77f5bc142b933430e8bdca337e Mon Sep 17 00:00:00 2001 From: Jason Miller Date: Wed, 11 Mar 2015 20:56:54 -0700 Subject: [PATCH 9/9] Add in a missing space --- vendor/fbtransform/transforms/__tests__/react-test.js | 2 +- vendor/fbtransform/transforms/jsx.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/vendor/fbtransform/transforms/__tests__/react-test.js b/vendor/fbtransform/transforms/__tests__/react-test.js index 2761fa9982d..d35a47d63bd 100644 --- a/vendor/fbtransform/transforms/__tests__/react-test.js +++ b/vendor/fbtransform/transforms/__tests__/react-test.js @@ -330,7 +330,7 @@ describe('react jsx', function() { '/* A multiline comment */)\n' + '} bar\n' + ''; - var result = 'React.createElement("foo", {a: (b), c: (d)}, "Foo ",(e+f //A line comment\n' + + var result = 'React.createElement("foo", {a: (b), c: (d)}, "Foo ", (e+f //A line comment\n' + '/* A multiline comment */), \n' + '" bar"\n' + ')'; diff --git a/vendor/fbtransform/transforms/jsx.js b/vendor/fbtransform/transforms/jsx.js index 65a8c6ab41a..b1a1037bbd6 100644 --- a/vendor/fbtransform/transforms/jsx.js +++ b/vendor/fbtransform/transforms/jsx.js @@ -84,7 +84,7 @@ function renderJSXLiteral(object, isLast, state, start, end) { utils.append(end, state); } if (!isLast) { - utils.append(',', state); + utils.append(', ', state); } }