From beb8061d3fd70f0f60f9f4b08a940873b537972f Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Tue, 21 Jul 2015 18:43:10 +0100 Subject: [PATCH] better identification of strict directives - cc @jmm --- packages/babel/src/generation/node/whitespace.js | 4 ++-- .../src/transformation/transformers/other/strict.js | 12 +++++++++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/packages/babel/src/generation/node/whitespace.js b/packages/babel/src/generation/node/whitespace.js index 0d828ebbcd..6de75c7b1d 100644 --- a/packages/babel/src/generation/node/whitespace.js +++ b/packages/babel/src/generation/node/whitespace.js @@ -103,8 +103,8 @@ exports.nodes = { * Test if Literal needs whitespace. */ - Literal(node) { - if (node.value === "use strict") { + Literal(node, parent) { + if (t.isExpressionStatement(parent)) { return { after: true }; diff --git a/packages/babel/src/transformation/transformers/other/strict.js b/packages/babel/src/transformation/transformers/other/strict.js index 79467ac27d..07ed970025 100644 --- a/packages/babel/src/transformation/transformers/other/strict.js +++ b/packages/babel/src/transformation/transformers/other/strict.js @@ -6,6 +6,16 @@ export var metadata = { const THIS_BREAK_KEYS = ["FunctionExpression", "FunctionDeclaration", "ClassExpression", "ClassDeclaration"]; +function isUseStrict(node) { + if (!t.isLiteral(node)) return false; + + if (node.raw && node.rawValue === node.value) { + return node.rawValue === "use strict"; + } else { + return node.value === "use strict"; + } +} + /** * [Please add a description.] */ @@ -21,7 +31,7 @@ export var visitor = { var first = program.body[0]; var directive; - if (t.isExpressionStatement(first) && t.isLiteral(first.expression, { value: "use strict" })) { + if (t.isExpressionStatement(first) && isUseStrict(first.expression)) { directive = first; } else { directive = t.expressionStatement(t.literal("use strict"));