From d998998de17b636248055ce7d3963f1a28822cdb Mon Sep 17 00:00:00 2001 From: tbreisacher Date: Fri, 2 Mar 2018 11:42:35 -0800 Subject: [PATCH] Move object rest/spread into ES 2018. It has reached stage 4 which means it will be in the 2018 version of the spec. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=187648209 --- .../google/javascript/jscomp/CompilerOptions.java | 5 +++++ .../google/javascript/jscomp/DefaultPassConfig.java | 3 ++- .../google/javascript/jscomp/parsing/Config.java | 1 + .../javascript/jscomp/parsing/ParserRunner.java | 5 ++--- .../jscomp/parsing/parser/FeatureSet.java | 13 +++++++++---- .../javascript/jscomp/parsing/parser/Parser.java | 3 +-- .../javascript/jscomp/parsing/ParserTest.java | 12 ++++++------ 7 files changed, 26 insertions(+), 16 deletions(-) diff --git a/src/com/google/javascript/jscomp/CompilerOptions.java b/src/com/google/javascript/jscomp/CompilerOptions.java index 0a2718185cd..aff29a3a8cd 100644 --- a/src/com/google/javascript/jscomp/CompilerOptions.java +++ b/src/com/google/javascript/jscomp/CompilerOptions.java @@ -3060,6 +3060,9 @@ public static enum LanguageMode { /** ECMAScript standard approved in 2017. Adds async/await and other syntax */ ECMASCRIPT_2017, + /** ECMAScript standard approved in 2018. Adds "..." in object literals/patterns. */ + ECMASCRIPT_2018, + /** ECMAScript latest draft standard. */ ECMASCRIPT_NEXT, @@ -3112,6 +3115,8 @@ public FeatureSet toFeatureSet() { return FeatureSet.ES7_MODULES; case ECMASCRIPT_2017: return FeatureSet.ES8_MODULES; + case ECMASCRIPT_2018: + return FeatureSet.ES2018_MODULES; case ECMASCRIPT_NEXT: return FeatureSet.ES_NEXT; case ECMASCRIPT6_TYPED: diff --git a/src/com/google/javascript/jscomp/DefaultPassConfig.java b/src/com/google/javascript/jscomp/DefaultPassConfig.java index 33c68f0b1de..cb84236fc50 100644 --- a/src/com/google/javascript/jscomp/DefaultPassConfig.java +++ b/src/com/google/javascript/jscomp/DefaultPassConfig.java @@ -20,6 +20,7 @@ import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkState; import static com.google.javascript.jscomp.PassFactory.createEmptyPass; +import static com.google.javascript.jscomp.parsing.parser.FeatureSet.ES2018; import static com.google.javascript.jscomp.parsing.parser.FeatureSet.ES5; import static com.google.javascript.jscomp.parsing.parser.FeatureSet.ES6; import static com.google.javascript.jscomp.parsing.parser.FeatureSet.ES7; @@ -162,7 +163,7 @@ protected List getTranspileOnlyPasses() { passes.add(dartSuperAccessorsPass); } - if (options.needsTranspilationFrom(ES_NEXT)) { + if (options.needsTranspilationFrom(ES2018)) { TranspilationPasses.addEs2018Passes(passes); passes.add(setFeatureSet(ES8)); } diff --git a/src/com/google/javascript/jscomp/parsing/Config.java b/src/com/google/javascript/jscomp/parsing/Config.java index b479e7b1d4d..6dfbb819d6f 100644 --- a/src/com/google/javascript/jscomp/parsing/Config.java +++ b/src/com/google/javascript/jscomp/parsing/Config.java @@ -52,6 +52,7 @@ public enum LanguageMode { ECMASCRIPT6(FeatureSet.ES6_MODULES), ECMASCRIPT7(FeatureSet.ES7_MODULES), ECMASCRIPT8(FeatureSet.ES8_MODULES), + ECMASCRIPT2018(FeatureSet.ES2018_MODULES), ES_NEXT(FeatureSet.ES_NEXT), TYPESCRIPT(FeatureSet.TYPESCRIPT), ; diff --git a/src/com/google/javascript/jscomp/parsing/ParserRunner.java b/src/com/google/javascript/jscomp/parsing/ParserRunner.java index f66128f54e3..7682767b114 100644 --- a/src/com/google/javascript/jscomp/parsing/ParserRunner.java +++ b/src/com/google/javascript/jscomp/parsing/ParserRunner.java @@ -168,12 +168,11 @@ private static com.google.javascript.jscomp.parsing.parser.Parser.Config newPars break; case ECMASCRIPT6: - parserConfigLanguageMode = Mode.ES6; - break; case ECMASCRIPT7: - parserConfigLanguageMode = Mode.ES7; + parserConfigLanguageMode = Mode.ES6_OR_ES7; break; case ECMASCRIPT8: + case ECMASCRIPT2018: parserConfigLanguageMode = Mode.ES8_OR_GREATER; break; case ES_NEXT: diff --git a/src/com/google/javascript/jscomp/parsing/parser/FeatureSet.java b/src/com/google/javascript/jscomp/parsing/parser/FeatureSet.java index c7082a60f9d..21349b4cc24 100644 --- a/src/com/google/javascript/jscomp/parsing/parser/FeatureSet.java +++ b/src/com/google/javascript/jscomp/parsing/parser/FeatureSet.java @@ -66,7 +66,11 @@ public final class FeatureSet implements Serializable { public static final FeatureSet ES8 = ES8_MODULES.without(Feature.MODULES); - public static final FeatureSet ES_NEXT = ES8_MODULES.with(LangVersion.ES_NEXT.features()); + public static final FeatureSet ES2018_MODULES = ES8_MODULES.with(LangVersion.ES2018.features()); + + public static final FeatureSet ES2018 = ES2018_MODULES.without(Feature.MODULES); + + public static final FeatureSet ES_NEXT = ES2018_MODULES.with(LangVersion.ES_NEXT.features()); public static final FeatureSet TYPESCRIPT = ES_NEXT.with(LangVersion.TYPESCRIPT.features()); @@ -88,6 +92,7 @@ private enum LangVersion { ES6, ES7, ES8, + ES2018, ES_NEXT, TYPESCRIPT; @@ -146,9 +151,9 @@ public enum Feature { ASYNC_FUNCTIONS("async function", LangVersion.ES8), TRAILING_COMMA_IN_PARAM_LIST("trailing comma in param list", LangVersion.ES8), - // features from tc39 https://github.com/tc39/proposal-object-rest-spread - OBJECT_LITERALS_WITH_SPREAD("object literals with spread", LangVersion.ES_NEXT), - OBJECT_PATTERN_REST("object pattern rest", LangVersion.ES_NEXT), + // ES 2018 adds https://github.com/tc39/proposal-object-rest-spread + OBJECT_LITERALS_WITH_SPREAD("object literals with spread", LangVersion.ES2018), + OBJECT_PATTERN_REST("object pattern rest", LangVersion.ES2018), // ES6 typed features that are not at all implemented in browsers ACCESSIBILITY_MODIFIER("accessibility modifier", LangVersion.TYPESCRIPT), diff --git a/src/com/google/javascript/jscomp/parsing/parser/Parser.java b/src/com/google/javascript/jscomp/parsing/parser/Parser.java index 9929c084020..e8b276beb6a 100644 --- a/src/com/google/javascript/jscomp/parsing/parser/Parser.java +++ b/src/com/google/javascript/jscomp/parsing/parser/Parser.java @@ -212,8 +212,7 @@ public static class Config { public static enum Mode { ES3, ES5, - ES6, - ES7, + ES6_OR_ES7, ES8_OR_GREATER, ES_NEXT, TYPESCRIPT, diff --git a/test/com/google/javascript/jscomp/parsing/ParserTest.java b/test/com/google/javascript/jscomp/parsing/ParserTest.java index f63d9c6ed81..3555c432fcf 100644 --- a/test/com/google/javascript/jscomp/parsing/ParserTest.java +++ b/test/com/google/javascript/jscomp/parsing/ParserTest.java @@ -1515,7 +1515,7 @@ public void testObjectDestructuringDeclarationRest() { mode = LanguageMode.ECMASCRIPT6; parseWarning( "var {first, ...rest} = foo();", - getRequiresEsNextMessage(Feature.OBJECT_PATTERN_REST)); + getRequiresEs2018Message(Feature.OBJECT_PATTERN_REST)); } public void testArrayLiteralDeclarationSpread() { @@ -1542,12 +1542,12 @@ public void testObjectLiteralDeclarationSpread() { parseWarning( "var o = {first: 1, ...spread};", getRequiresEs6Message(Feature.SPREAD_EXPRESSIONS), - getRequiresEsNextMessage(Feature.OBJECT_LITERALS_WITH_SPREAD)); + getRequiresEs2018Message(Feature.OBJECT_LITERALS_WITH_SPREAD)); mode = LanguageMode.ECMASCRIPT6; parseWarning( "var o = {first: 1, ...spread};", - getRequiresEsNextMessage(Feature.OBJECT_LITERALS_WITH_SPREAD)); + getRequiresEs2018Message(Feature.OBJECT_LITERALS_WITH_SPREAD)); } public void testArrayDestructuringAssignRest() { @@ -1574,7 +1574,7 @@ public void testObjectDestructuringAssignRest() { mode = LanguageMode.ECMASCRIPT6; parseWarning("var {first, ...rest} = foo();", - getRequiresEsNextMessage(Feature.OBJECT_PATTERN_REST)); + getRequiresEs2018Message(Feature.OBJECT_PATTERN_REST)); } public void testArrayDestructuringAssignRestInvalid() { @@ -3822,8 +3822,8 @@ private static String getRequiresEs6Message(Feature feature) { return requiresLanguageModeMessage(LanguageMode.ECMASCRIPT6, feature); } - private static String getRequiresEsNextMessage(Feature feature) { - return requiresLanguageModeMessage(LanguageMode.ES_NEXT, feature); + private static String getRequiresEs2018Message(Feature feature) { + return requiresLanguageModeMessage(LanguageMode.ECMASCRIPT2018, feature); } private static String requiresLanguageModeMessage(LanguageMode languageMode, Feature feature) {