From 4b99d18ea79c139ee2fd0641fe44cf60daf1f6cb Mon Sep 17 00:00:00 2001 From: Amjad Masad Date: Mon, 7 Dec 2015 10:59:50 -0800 Subject: [PATCH] Only reprint in compact mode --- .../src/generators/expressions.js | 8 +++++++- packages/babel-generator/src/printer.js | 20 +++++++++++++++++++ .../test/fixtures/compact/literals/actual.js | 13 ++++++++++++ .../fixtures/compact/literals/expected.js | 1 + 4 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 packages/babel-generator/test/fixtures/compact/literals/actual.js create mode 100644 packages/babel-generator/test/fixtures/compact/literals/expected.js diff --git a/packages/babel-generator/src/generators/expressions.js b/packages/babel-generator/src/generators/expressions.js index 22853cc6af..f98e6a7b78 100644 --- a/packages/babel-generator/src/generators/expressions.js +++ b/packages/babel-generator/src/generators/expressions.js @@ -221,7 +221,13 @@ export function MemberExpression(node: Object) { this.push("]"); } else { if (t.isLiteral(node.object) && !t.isTemplateLiteral(node.object)) { - let val = this._stringLiteral(node.object); + let val; + if (this.format.compact) { + val = this._stringLiteral(node.object); + } else { + val = this.getPossibleRaw(node.object) || this._stringLiteral(node.object); + } + if (isInteger(+val) && !SCIENTIFIC_NOTATION.test(val) && !ZERO_DECIMAL_INTEGER.test(val) && !this.endsWith(".")) { this.push("."); } diff --git a/packages/babel-generator/src/printer.js b/packages/babel-generator/src/printer.js index effff1d291..f8228805db 100644 --- a/packages/babel-generator/src/printer.js +++ b/packages/babel-generator/src/printer.js @@ -89,7 +89,27 @@ export default class Printer extends Buffer { } } + getPossibleRaw(node) { + let extra = node.extra; + if (extra && extra.raw != null && extra.rawValue != null && node.value === extra.rawValue) { + return extra.raw; + } + } + _print(node, parent) { + // In compact mode we need to produce as little bytes as needed + // and need to make sure that string quoting is consistent. + // That means we have to always reprint as opposed to getting + // the raw value. + if (!this.format.compact) { + let extra = this.getPossibleRaw(node); + if (extra) { + this.push(""); + this._push(extra); + return; + } + } + let printMethod = this[node.type]; printMethod.call(this, node, parent); } diff --git a/packages/babel-generator/test/fixtures/compact/literals/actual.js b/packages/babel-generator/test/fixtures/compact/literals/actual.js new file mode 100644 index 0000000000..8fd940ee69 --- /dev/null +++ b/packages/babel-generator/test/fixtures/compact/literals/actual.js @@ -0,0 +1,13 @@ +5; +5.0; +"foobar"; +'\x20'; +"\n\r"; +/foobar/g; +null; +true; +false; +5.; +0b10; +0o70; +0X1F; diff --git a/packages/babel-generator/test/fixtures/compact/literals/expected.js b/packages/babel-generator/test/fixtures/compact/literals/expected.js new file mode 100644 index 0000000000..a92bb3ad7b --- /dev/null +++ b/packages/babel-generator/test/fixtures/compact/literals/expected.js @@ -0,0 +1 @@ +5;5;"foobar";" ";"\n\r";/foobar/g;null;true;false;5;2;56;31;