Skip to content

Commit

Permalink
Move object rest/spread into ES 2018.
Browse files Browse the repository at this point in the history
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
  • Loading branch information
tbreisacher committed Mar 3, 2018
1 parent fa3f4b3 commit d998998
Show file tree
Hide file tree
Showing 7 changed files with 26 additions and 16 deletions.
5 changes: 5 additions & 0 deletions src/com/google/javascript/jscomp/CompilerOptions.java
Expand Up @@ -3060,6 +3060,9 @@ public static enum LanguageMode {
/** ECMAScript standard approved in 2017. Adds async/await and other syntax */ /** ECMAScript standard approved in 2017. Adds async/await and other syntax */
ECMASCRIPT_2017, ECMASCRIPT_2017,


/** ECMAScript standard approved in 2018. Adds "..." in object literals/patterns. */
ECMASCRIPT_2018,

/** ECMAScript latest draft standard. */ /** ECMAScript latest draft standard. */
ECMASCRIPT_NEXT, ECMASCRIPT_NEXT,


Expand Down Expand Up @@ -3112,6 +3115,8 @@ public FeatureSet toFeatureSet() {
return FeatureSet.ES7_MODULES; return FeatureSet.ES7_MODULES;
case ECMASCRIPT_2017: case ECMASCRIPT_2017:
return FeatureSet.ES8_MODULES; return FeatureSet.ES8_MODULES;
case ECMASCRIPT_2018:
return FeatureSet.ES2018_MODULES;
case ECMASCRIPT_NEXT: case ECMASCRIPT_NEXT:
return FeatureSet.ES_NEXT; return FeatureSet.ES_NEXT;
case ECMASCRIPT6_TYPED: case ECMASCRIPT6_TYPED:
Expand Down
3 changes: 2 additions & 1 deletion src/com/google/javascript/jscomp/DefaultPassConfig.java
Expand Up @@ -20,6 +20,7 @@
import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Preconditions.checkState; import static com.google.common.base.Preconditions.checkState;
import static com.google.javascript.jscomp.PassFactory.createEmptyPass; 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.ES5;
import static com.google.javascript.jscomp.parsing.parser.FeatureSet.ES6; import static com.google.javascript.jscomp.parsing.parser.FeatureSet.ES6;
import static com.google.javascript.jscomp.parsing.parser.FeatureSet.ES7; import static com.google.javascript.jscomp.parsing.parser.FeatureSet.ES7;
Expand Down Expand Up @@ -162,7 +163,7 @@ protected List<PassFactory> getTranspileOnlyPasses() {
passes.add(dartSuperAccessorsPass); passes.add(dartSuperAccessorsPass);
} }


if (options.needsTranspilationFrom(ES_NEXT)) { if (options.needsTranspilationFrom(ES2018)) {
TranspilationPasses.addEs2018Passes(passes); TranspilationPasses.addEs2018Passes(passes);
passes.add(setFeatureSet(ES8)); passes.add(setFeatureSet(ES8));
} }
Expand Down
1 change: 1 addition & 0 deletions src/com/google/javascript/jscomp/parsing/Config.java
Expand Up @@ -52,6 +52,7 @@ public enum LanguageMode {
ECMASCRIPT6(FeatureSet.ES6_MODULES), ECMASCRIPT6(FeatureSet.ES6_MODULES),
ECMASCRIPT7(FeatureSet.ES7_MODULES), ECMASCRIPT7(FeatureSet.ES7_MODULES),
ECMASCRIPT8(FeatureSet.ES8_MODULES), ECMASCRIPT8(FeatureSet.ES8_MODULES),
ECMASCRIPT2018(FeatureSet.ES2018_MODULES),
ES_NEXT(FeatureSet.ES_NEXT), ES_NEXT(FeatureSet.ES_NEXT),
TYPESCRIPT(FeatureSet.TYPESCRIPT), TYPESCRIPT(FeatureSet.TYPESCRIPT),
; ;
Expand Down
5 changes: 2 additions & 3 deletions src/com/google/javascript/jscomp/parsing/ParserRunner.java
Expand Up @@ -168,12 +168,11 @@ private static com.google.javascript.jscomp.parsing.parser.Parser.Config newPars
break; break;


case ECMASCRIPT6: case ECMASCRIPT6:
parserConfigLanguageMode = Mode.ES6;
break;
case ECMASCRIPT7: case ECMASCRIPT7:
parserConfigLanguageMode = Mode.ES7; parserConfigLanguageMode = Mode.ES6_OR_ES7;
break; break;
case ECMASCRIPT8: case ECMASCRIPT8:
case ECMASCRIPT2018:
parserConfigLanguageMode = Mode.ES8_OR_GREATER; parserConfigLanguageMode = Mode.ES8_OR_GREATER;
break; break;
case ES_NEXT: case ES_NEXT:
Expand Down
13 changes: 9 additions & 4 deletions src/com/google/javascript/jscomp/parsing/parser/FeatureSet.java
Expand Up @@ -66,7 +66,11 @@ public final class FeatureSet implements Serializable {


public static final FeatureSet ES8 = ES8_MODULES.without(Feature.MODULES); 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()); public static final FeatureSet TYPESCRIPT = ES_NEXT.with(LangVersion.TYPESCRIPT.features());


Expand All @@ -88,6 +92,7 @@ private enum LangVersion {
ES6, ES6,
ES7, ES7,
ES8, ES8,
ES2018,
ES_NEXT, ES_NEXT,
TYPESCRIPT; TYPESCRIPT;


Expand Down Expand Up @@ -146,9 +151,9 @@ public enum Feature {
ASYNC_FUNCTIONS("async function", LangVersion.ES8), ASYNC_FUNCTIONS("async function", LangVersion.ES8),
TRAILING_COMMA_IN_PARAM_LIST("trailing comma in param list", 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 // ES 2018 adds https://github.com/tc39/proposal-object-rest-spread
OBJECT_LITERALS_WITH_SPREAD("object literals with spread", LangVersion.ES_NEXT), OBJECT_LITERALS_WITH_SPREAD("object literals with spread", LangVersion.ES2018),
OBJECT_PATTERN_REST("object pattern rest", LangVersion.ES_NEXT), OBJECT_PATTERN_REST("object pattern rest", LangVersion.ES2018),


// ES6 typed features that are not at all implemented in browsers // ES6 typed features that are not at all implemented in browsers
ACCESSIBILITY_MODIFIER("accessibility modifier", LangVersion.TYPESCRIPT), ACCESSIBILITY_MODIFIER("accessibility modifier", LangVersion.TYPESCRIPT),
Expand Down
3 changes: 1 addition & 2 deletions src/com/google/javascript/jscomp/parsing/parser/Parser.java
Expand Up @@ -212,8 +212,7 @@ public static class Config {
public static enum Mode { public static enum Mode {
ES3, ES3,
ES5, ES5,
ES6, ES6_OR_ES7,
ES7,
ES8_OR_GREATER, ES8_OR_GREATER,
ES_NEXT, ES_NEXT,
TYPESCRIPT, TYPESCRIPT,
Expand Down
12 changes: 6 additions & 6 deletions test/com/google/javascript/jscomp/parsing/ParserTest.java
Expand Up @@ -1515,7 +1515,7 @@ public void testObjectDestructuringDeclarationRest() {
mode = LanguageMode.ECMASCRIPT6; mode = LanguageMode.ECMASCRIPT6;
parseWarning( parseWarning(
"var {first, ...rest} = foo();", "var {first, ...rest} = foo();",
getRequiresEsNextMessage(Feature.OBJECT_PATTERN_REST)); getRequiresEs2018Message(Feature.OBJECT_PATTERN_REST));
} }


public void testArrayLiteralDeclarationSpread() { public void testArrayLiteralDeclarationSpread() {
Expand All @@ -1542,12 +1542,12 @@ public void testObjectLiteralDeclarationSpread() {
parseWarning( parseWarning(
"var o = {first: 1, ...spread};", "var o = {first: 1, ...spread};",
getRequiresEs6Message(Feature.SPREAD_EXPRESSIONS), getRequiresEs6Message(Feature.SPREAD_EXPRESSIONS),
getRequiresEsNextMessage(Feature.OBJECT_LITERALS_WITH_SPREAD)); getRequiresEs2018Message(Feature.OBJECT_LITERALS_WITH_SPREAD));


mode = LanguageMode.ECMASCRIPT6; mode = LanguageMode.ECMASCRIPT6;
parseWarning( parseWarning(
"var o = {first: 1, ...spread};", "var o = {first: 1, ...spread};",
getRequiresEsNextMessage(Feature.OBJECT_LITERALS_WITH_SPREAD)); getRequiresEs2018Message(Feature.OBJECT_LITERALS_WITH_SPREAD));
} }


public void testArrayDestructuringAssignRest() { public void testArrayDestructuringAssignRest() {
Expand All @@ -1574,7 +1574,7 @@ public void testObjectDestructuringAssignRest() {


mode = LanguageMode.ECMASCRIPT6; mode = LanguageMode.ECMASCRIPT6;
parseWarning("var {first, ...rest} = foo();", parseWarning("var {first, ...rest} = foo();",
getRequiresEsNextMessage(Feature.OBJECT_PATTERN_REST)); getRequiresEs2018Message(Feature.OBJECT_PATTERN_REST));
} }


public void testArrayDestructuringAssignRestInvalid() { public void testArrayDestructuringAssignRestInvalid() {
Expand Down Expand Up @@ -3822,8 +3822,8 @@ private static String getRequiresEs6Message(Feature feature) {
return requiresLanguageModeMessage(LanguageMode.ECMASCRIPT6, feature); return requiresLanguageModeMessage(LanguageMode.ECMASCRIPT6, feature);
} }


private static String getRequiresEsNextMessage(Feature feature) { private static String getRequiresEs2018Message(Feature feature) {
return requiresLanguageModeMessage(LanguageMode.ES_NEXT, feature); return requiresLanguageModeMessage(LanguageMode.ECMASCRIPT2018, feature);
} }


private static String requiresLanguageModeMessage(LanguageMode languageMode, Feature feature) { private static String requiresLanguageModeMessage(LanguageMode languageMode, Feature feature) {
Expand Down

0 comments on commit d998998

Please sign in to comment.