From f41a5f59868e795630f75d6da9f54010d653f382 Mon Sep 17 00:00:00 2001 From: Dan Vanderkam Date: Thu, 15 Feb 2024 17:26:42 -0500 Subject: [PATCH] Preserve separators in numeric literals with target=ES2021+ (#57144) --- src/compiler/emitter.ts | 2 +- ...mericSeparators.decimal(target=es2020).js} | 0 ...Separators.decimal(target=es2020).symbols} | 0 ...icSeparators.decimal(target=es2020).types} | 0 ...umericSeparators.decimal(target=es2021).js | 34 ++++++++++++++ ...cSeparators.decimal(target=es2021).symbols | 19 ++++++++ ...ricSeparators.decimal(target=es2021).types | 45 +++++++++++++++++++ ...r.numericSeparators.decimal(target=es5).js | 34 ++++++++++++++ ...ericSeparators.decimal(target=es5).symbols | 19 ++++++++ ...umericSeparators.decimal(target=es5).types | 45 +++++++++++++++++++ .../parser.numericSeparators.decimal.ts | 1 + 11 files changed, 198 insertions(+), 1 deletion(-) rename tests/baselines/reference/{parser.numericSeparators.decimal.js => parser.numericSeparators.decimal(target=es2020).js} (100%) rename tests/baselines/reference/{parser.numericSeparators.decimal.symbols => parser.numericSeparators.decimal(target=es2020).symbols} (100%) rename tests/baselines/reference/{parser.numericSeparators.decimal.types => parser.numericSeparators.decimal(target=es2020).types} (100%) create mode 100644 tests/baselines/reference/parser.numericSeparators.decimal(target=es2021).js create mode 100644 tests/baselines/reference/parser.numericSeparators.decimal(target=es2021).symbols create mode 100644 tests/baselines/reference/parser.numericSeparators.decimal(target=es2021).types create mode 100644 tests/baselines/reference/parser.numericSeparators.decimal(target=es5).js create mode 100644 tests/baselines/reference/parser.numericSeparators.decimal(target=es5).symbols create mode 100644 tests/baselines/reference/parser.numericSeparators.decimal(target=es5).types diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 6842fb1c8c7..f27f9e7247e 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -5657,7 +5657,7 @@ export function createPrinter(printerOptions: PrinterOptions = {}, handlers: Pri const flags = (neverAsciiEscape ? GetLiteralTextFlags.NeverAsciiEscape : 0) | (jsxAttributeEscape ? GetLiteralTextFlags.JsxAttributeEscape : 0) | (printerOptions.terminateUnterminatedLiterals ? GetLiteralTextFlags.TerminateUnterminatedLiterals : 0) - | (printerOptions.target && printerOptions.target === ScriptTarget.ESNext ? GetLiteralTextFlags.AllowNumericSeparator : 0); + | (printerOptions.target && printerOptions.target >= ScriptTarget.ES2021 ? GetLiteralTextFlags.AllowNumericSeparator : 0); return getLiteralText(node, currentSourceFile, flags); } diff --git a/tests/baselines/reference/parser.numericSeparators.decimal.js b/tests/baselines/reference/parser.numericSeparators.decimal(target=es2020).js similarity index 100% rename from tests/baselines/reference/parser.numericSeparators.decimal.js rename to tests/baselines/reference/parser.numericSeparators.decimal(target=es2020).js diff --git a/tests/baselines/reference/parser.numericSeparators.decimal.symbols b/tests/baselines/reference/parser.numericSeparators.decimal(target=es2020).symbols similarity index 100% rename from tests/baselines/reference/parser.numericSeparators.decimal.symbols rename to tests/baselines/reference/parser.numericSeparators.decimal(target=es2020).symbols diff --git a/tests/baselines/reference/parser.numericSeparators.decimal.types b/tests/baselines/reference/parser.numericSeparators.decimal(target=es2020).types similarity index 100% rename from tests/baselines/reference/parser.numericSeparators.decimal.types rename to tests/baselines/reference/parser.numericSeparators.decimal(target=es2020).types diff --git a/tests/baselines/reference/parser.numericSeparators.decimal(target=es2021).js b/tests/baselines/reference/parser.numericSeparators.decimal(target=es2021).js new file mode 100644 index 00000000000..969341f4d2b --- /dev/null +++ b/tests/baselines/reference/parser.numericSeparators.decimal(target=es2021).js @@ -0,0 +1,34 @@ +//// [tests/cases/conformance/parser/ecmascript2021/numericSeparators/parser.numericSeparators.decimal.ts] //// + +//// [parser.numericSeparators.decimal.ts] +1_000_000_000 +1.1_00_01 +1e1_0 +1e+1_0 +1e-1_0 +1.1e10_0 +1.1e+10_0 +1.1e-10_0 +12_34_56 +1_22_333 +1_2.3_4 +1_2.3_4e5_6 +1_2.3_4e+5_6 +1_2.3_4e-5_6 + + +//// [parser.numericSeparators.decimal.js] +1_000_000_000; +1.1_00_01; +1e1_0; +1e+1_0; +1e-1_0; +1.1e10_0; +1.1e+10_0; +1.1e-10_0; +12_34_56; +1_22_333; +1_2.3_4; +1_2.3_4e5_6; +1_2.3_4e+5_6; +1_2.3_4e-5_6; diff --git a/tests/baselines/reference/parser.numericSeparators.decimal(target=es2021).symbols b/tests/baselines/reference/parser.numericSeparators.decimal(target=es2021).symbols new file mode 100644 index 00000000000..d0f3ea53bb8 --- /dev/null +++ b/tests/baselines/reference/parser.numericSeparators.decimal(target=es2021).symbols @@ -0,0 +1,19 @@ +//// [tests/cases/conformance/parser/ecmascript2021/numericSeparators/parser.numericSeparators.decimal.ts] //// + +=== parser.numericSeparators.decimal.ts === + +1_000_000_000 +1.1_00_01 +1e1_0 +1e+1_0 +1e-1_0 +1.1e10_0 +1.1e+10_0 +1.1e-10_0 +12_34_56 +1_22_333 +1_2.3_4 +1_2.3_4e5_6 +1_2.3_4e+5_6 +1_2.3_4e-5_6 + diff --git a/tests/baselines/reference/parser.numericSeparators.decimal(target=es2021).types b/tests/baselines/reference/parser.numericSeparators.decimal(target=es2021).types new file mode 100644 index 00000000000..e9b633bf6f4 --- /dev/null +++ b/tests/baselines/reference/parser.numericSeparators.decimal(target=es2021).types @@ -0,0 +1,45 @@ +//// [tests/cases/conformance/parser/ecmascript2021/numericSeparators/parser.numericSeparators.decimal.ts] //// + +=== parser.numericSeparators.decimal.ts === +1_000_000_000 +>1_000_000_000 : 1000000000 + +1.1_00_01 +>1.1_00_01 : 1.10001 + +1e1_0 +>1e1_0 : 10000000000 + +1e+1_0 +>1e+1_0 : 10000000000 + +1e-1_0 +>1e-1_0 : 1e-10 + +1.1e10_0 +>1.1e10_0 : 1.1e+100 + +1.1e+10_0 +>1.1e+10_0 : 1.1e+100 + +1.1e-10_0 +>1.1e-10_0 : 1.1e-100 + +12_34_56 +>12_34_56 : 123456 + +1_22_333 +>1_22_333 : 122333 + +1_2.3_4 +>1_2.3_4 : 12.34 + +1_2.3_4e5_6 +>1_2.3_4e5_6 : 1.234e+57 + +1_2.3_4e+5_6 +>1_2.3_4e+5_6 : 1.234e+57 + +1_2.3_4e-5_6 +>1_2.3_4e-5_6 : 1.234e-55 + diff --git a/tests/baselines/reference/parser.numericSeparators.decimal(target=es5).js b/tests/baselines/reference/parser.numericSeparators.decimal(target=es5).js new file mode 100644 index 00000000000..ad02bc7c6fc --- /dev/null +++ b/tests/baselines/reference/parser.numericSeparators.decimal(target=es5).js @@ -0,0 +1,34 @@ +//// [tests/cases/conformance/parser/ecmascript2021/numericSeparators/parser.numericSeparators.decimal.ts] //// + +//// [parser.numericSeparators.decimal.ts] +1_000_000_000 +1.1_00_01 +1e1_0 +1e+1_0 +1e-1_0 +1.1e10_0 +1.1e+10_0 +1.1e-10_0 +12_34_56 +1_22_333 +1_2.3_4 +1_2.3_4e5_6 +1_2.3_4e+5_6 +1_2.3_4e-5_6 + + +//// [parser.numericSeparators.decimal.js] +1000000000; +1.10001; +10000000000; +10000000000; +1e-10; +1.1e+100; +1.1e+100; +1.1e-100; +123456; +122333; +12.34; +1.234e+57; +1.234e+57; +1.234e-55; diff --git a/tests/baselines/reference/parser.numericSeparators.decimal(target=es5).symbols b/tests/baselines/reference/parser.numericSeparators.decimal(target=es5).symbols new file mode 100644 index 00000000000..d0f3ea53bb8 --- /dev/null +++ b/tests/baselines/reference/parser.numericSeparators.decimal(target=es5).symbols @@ -0,0 +1,19 @@ +//// [tests/cases/conformance/parser/ecmascript2021/numericSeparators/parser.numericSeparators.decimal.ts] //// + +=== parser.numericSeparators.decimal.ts === + +1_000_000_000 +1.1_00_01 +1e1_0 +1e+1_0 +1e-1_0 +1.1e10_0 +1.1e+10_0 +1.1e-10_0 +12_34_56 +1_22_333 +1_2.3_4 +1_2.3_4e5_6 +1_2.3_4e+5_6 +1_2.3_4e-5_6 + diff --git a/tests/baselines/reference/parser.numericSeparators.decimal(target=es5).types b/tests/baselines/reference/parser.numericSeparators.decimal(target=es5).types new file mode 100644 index 00000000000..e9b633bf6f4 --- /dev/null +++ b/tests/baselines/reference/parser.numericSeparators.decimal(target=es5).types @@ -0,0 +1,45 @@ +//// [tests/cases/conformance/parser/ecmascript2021/numericSeparators/parser.numericSeparators.decimal.ts] //// + +=== parser.numericSeparators.decimal.ts === +1_000_000_000 +>1_000_000_000 : 1000000000 + +1.1_00_01 +>1.1_00_01 : 1.10001 + +1e1_0 +>1e1_0 : 10000000000 + +1e+1_0 +>1e+1_0 : 10000000000 + +1e-1_0 +>1e-1_0 : 1e-10 + +1.1e10_0 +>1.1e10_0 : 1.1e+100 + +1.1e+10_0 +>1.1e+10_0 : 1.1e+100 + +1.1e-10_0 +>1.1e-10_0 : 1.1e-100 + +12_34_56 +>12_34_56 : 123456 + +1_22_333 +>1_22_333 : 122333 + +1_2.3_4 +>1_2.3_4 : 12.34 + +1_2.3_4e5_6 +>1_2.3_4e5_6 : 1.234e+57 + +1_2.3_4e+5_6 +>1_2.3_4e+5_6 : 1.234e+57 + +1_2.3_4e-5_6 +>1_2.3_4e-5_6 : 1.234e-55 + diff --git a/tests/cases/conformance/parser/ecmascript2021/numericSeparators/parser.numericSeparators.decimal.ts b/tests/cases/conformance/parser/ecmascript2021/numericSeparators/parser.numericSeparators.decimal.ts index e8b6d5440cf..d5f020e2059 100644 --- a/tests/cases/conformance/parser/ecmascript2021/numericSeparators/parser.numericSeparators.decimal.ts +++ b/tests/cases/conformance/parser/ecmascript2021/numericSeparators/parser.numericSeparators.decimal.ts @@ -1,3 +1,4 @@ +// @target: es5, es2020, es2021 1_000_000_000 1.1_00_01 1e1_0