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_2017,

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

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

Expand Down Expand Up @@ -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:
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.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;
Expand Down Expand Up @@ -162,7 +163,7 @@ protected List<PassFactory> getTranspileOnlyPasses() {
passes.add(dartSuperAccessorsPass);
}

if (options.needsTranspilationFrom(ES_NEXT)) {
if (options.needsTranspilationFrom(ES2018)) {
TranspilationPasses.addEs2018Passes(passes);
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),
ECMASCRIPT7(FeatureSet.ES7_MODULES),
ECMASCRIPT8(FeatureSet.ES8_MODULES),
ECMASCRIPT2018(FeatureSet.ES2018_MODULES),
ES_NEXT(FeatureSet.ES_NEXT),
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;

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:
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 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());

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

Expand Down Expand Up @@ -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),
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 {
ES3,
ES5,
ES6,
ES7,
ES6_OR_ES7,
ES8_OR_GREATER,
ES_NEXT,
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;
parseWarning(
"var {first, ...rest} = foo();",
getRequiresEsNextMessage(Feature.OBJECT_PATTERN_REST));
getRequiresEs2018Message(Feature.OBJECT_PATTERN_REST));
}

public void testArrayLiteralDeclarationSpread() {
Expand All @@ -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() {
Expand All @@ -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() {
Expand Down Expand Up @@ -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) {
Expand Down

0 comments on commit d998998

Please sign in to comment.