From 938f0e34045779d9fb79f695694563b50da44dfd Mon Sep 17 00:00:00 2001 From: Simon Lydell Date: Wed, 19 Apr 2017 19:24:13 +0200 Subject: [PATCH] Improve regex printing (#1341) - Print the raw regex for Flow, just like for Babylon. - Sort regex flags. Fixes #1334. --- src/printer.js | 14 +++++++++++--- tests/regex/__snapshots__/jsfmt.spec.js.snap | 8 ++++++++ tests/regex/jsfmt.spec.js | 1 + tests/regex/test.js | 1 + 4 files changed, 21 insertions(+), 3 deletions(-) create mode 100644 tests/regex/__snapshots__/jsfmt.spec.js.snap create mode 100644 tests/regex/jsfmt.spec.js create mode 100644 tests/regex/test.js diff --git a/src/printer.js b/src/printer.js index 067933f56..141391c6b 100644 --- a/src/printer.js +++ b/src/printer.js @@ -878,11 +878,13 @@ function genericPrintNoParens(path, options, print, args) { case "ThisExpression": return "this"; case "Super": - return "super"; // Babel 6 Literal split + return "super"; + // Babel 6 Literal split case "NullLiteral": - return "null"; // Babel 6 Literal split + return "null"; + // Babel 6 Literal split case "RegExpLiteral": - return n.extra.raw; + return printRegex(n); // Babel 6 Literal split case "NumericLiteral": return printNumber(n.extra.raw); @@ -892,6 +894,7 @@ function genericPrintNoParens(path, options, print, args) { case "StringLiteral": case "Literal": if (typeof n.value === "number") return printNumber(n.raw); + if (n.regex) return printRegex(n.regex); if (typeof n.value !== "string") return "" + n.value; return nodeStr(n, options); // Babel 6 @@ -3335,6 +3338,11 @@ function makeString(rawContent, enclosingQuote) { return enclosingQuote + newContent + enclosingQuote; } +function printRegex(node) { + const flags = node.flags.split('').sort().join(''); + return `/${node.pattern}/${flags}`; +} + function printNumber(rawNumber) { return ( rawNumber diff --git a/tests/regex/__snapshots__/jsfmt.spec.js.snap b/tests/regex/__snapshots__/jsfmt.spec.js.snap new file mode 100644 index 000000000..c15f8e8d7 --- /dev/null +++ b/tests/regex/__snapshots__/jsfmt.spec.js.snap @@ -0,0 +1,8 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`test.js 1`] = ` +/[/]\\/\\u0aBc/mgi; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +/[/]\\/\\u0aBc/gim; + +`; diff --git a/tests/regex/jsfmt.spec.js b/tests/regex/jsfmt.spec.js new file mode 100644 index 000000000..1840e9d36 --- /dev/null +++ b/tests/regex/jsfmt.spec.js @@ -0,0 +1 @@ +run_spec(__dirname, null, ["babylon"]); diff --git a/tests/regex/test.js b/tests/regex/test.js new file mode 100644 index 000000000..a735122a7 --- /dev/null +++ b/tests/regex/test.js @@ -0,0 +1 @@ +/[/]\/\u0aBc/mgi;