diff --git a/packages/babel-generator/src/generators/types.js b/packages/babel-generator/src/generators/types.js
index 873154968a..3c5954c5fe 100644
--- a/packages/babel-generator/src/generators/types.js
+++ b/packages/babel-generator/src/generators/types.js
@@ -115,11 +115,11 @@ export function NumericLiteral(node: Object) {
this.push(node.value + "");
}
-export function StringLiteral(node: Object) {
- this.push(this._stringLiteral(node.value));
+export function StringLiteral(node: Object, parent: Object) {
+ this.push(this._stringLiteral(node.value, parent));
}
-export function _stringLiteral(val: string): string {
+export function _stringLiteral(val: string, parent: Object): string {
val = JSON.stringify(val);
// escape illegal js but valid json unicode characters
@@ -127,7 +127,7 @@ export function _stringLiteral(val: string): string {
return "\\u" + ("0000" + c.charCodeAt(0).toString(16)).slice(-4);
});
- if (this.format.quotes === "single") {
+ if (this.format.quotes === "single" && !t.isJSX(parent)) {
// remove double quotes
val = val.slice(1, -1);
diff --git a/packages/babel-generator/test/fixtures/auto-string/jsx/actual.js b/packages/babel-generator/test/fixtures/auto-string/jsx/actual.js
new file mode 100644
index 0000000000..1d2c1244a5
--- /dev/null
+++ b/packages/babel-generator/test/fixtures/auto-string/jsx/actual.js
@@ -0,0 +1,9 @@
+var single = 'quotes';
+var outnumber = 'double';
+var moreSingleQuotesThanDouble = '!';
+
+React.createClass({
+ render() {
+ return ;
+ }
+});
diff --git a/packages/babel-generator/test/fixtures/auto-string/jsx/expected.js b/packages/babel-generator/test/fixtures/auto-string/jsx/expected.js
new file mode 100644
index 0000000000..1d2c1244a5
--- /dev/null
+++ b/packages/babel-generator/test/fixtures/auto-string/jsx/expected.js
@@ -0,0 +1,9 @@
+var single = 'quotes';
+var outnumber = 'double';
+var moreSingleQuotesThanDouble = '!';
+
+React.createClass({
+ render() {
+ return ;
+ }
+});