From 8c66e44db15dd324d44dbbe8ef1f3bafa91825db Mon Sep 17 00:00:00 2001 From: Davy Duperron Date: Sat, 4 Feb 2017 22:16:24 +0100 Subject: [PATCH] Fix use strict as expression statement (#602) * Add parentheses if node is StringLiteral surrounded by ExpressionStatement :tools:. * Add new test. * Update tests to run against Babylon, plus no regression case. * Split actual test and no regression test in two files. * Disable Flow till facebook/flow#3234 is merged. --- src/fast-path.js | 5 +++++ .../__snapshots__/jsfmt.spec.js.snap | 18 ++++++++++++++++++ tests/expression_statement/jsfmt.spec.js | 2 ++ tests/expression_statement/no_regression.js | 2 ++ tests/expression_statement/use_strict.js | 2 ++ 5 files changed, 29 insertions(+) create mode 100644 tests/expression_statement/__snapshots__/jsfmt.spec.js.snap create mode 100755 tests/expression_statement/jsfmt.spec.js create mode 100644 tests/expression_statement/no_regression.js create mode 100755 tests/expression_statement/use_strict.js diff --git a/src/fast-path.js b/src/fast-path.js index 53ef717c..d4dbca3a 100644 --- a/src/fast-path.js +++ b/src/fast-path.js @@ -497,6 +497,11 @@ FPp.needsParens = function(assumeExpressionContext) { return name === "object" && parent.object === node; } + case "StringLiteral": + if (parent.type === "ExpressionStatement") { + return true; + } + default: if ( parent.type === "NewExpression" && diff --git a/tests/expression_statement/__snapshots__/jsfmt.spec.js.snap b/tests/expression_statement/__snapshots__/jsfmt.spec.js.snap new file mode 100644 index 00000000..54a281bd --- /dev/null +++ b/tests/expression_statement/__snapshots__/jsfmt.spec.js.snap @@ -0,0 +1,18 @@ +exports[`test no_regression.js 1`] = ` +"// Ensure no regression. +\"use strict\"; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Ensure no regression. +\"use strict\"; + +" +`; + +exports[`test use_strict.js 1`] = ` +"// Parentheses around expression statement should be preserved in this case. +(\"use strict\"); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Parentheses around expression statement should be preserved in this case. +(\"use strict\"); +" +`; diff --git a/tests/expression_statement/jsfmt.spec.js b/tests/expression_statement/jsfmt.spec.js new file mode 100755 index 00000000..67caec39 --- /dev/null +++ b/tests/expression_statement/jsfmt.spec.js @@ -0,0 +1,2 @@ +// TODO: Re-enable Flow when the following fix is merged facebook/flow#3234. +run_spec(__dirname, {parser: 'babylon'}); diff --git a/tests/expression_statement/no_regression.js b/tests/expression_statement/no_regression.js new file mode 100644 index 00000000..8a5e0f44 --- /dev/null +++ b/tests/expression_statement/no_regression.js @@ -0,0 +1,2 @@ +// Ensure no regression. +"use strict"; diff --git a/tests/expression_statement/use_strict.js b/tests/expression_statement/use_strict.js new file mode 100755 index 00000000..31bce868 --- /dev/null +++ b/tests/expression_statement/use_strict.js @@ -0,0 +1,2 @@ +// Parentheses around expression statement should be preserved in this case. +("use strict");