void visitTree(Node n) { visitSubtree(n, null); checkArgument(n.isScript()); FeatureSet features = (FeatureSet) n.getProp(Node.FEATURE_SET); if (features != null) { // Only add the "lang" load flag if it's not the default (es3), so that // legacy deps files will remain unchanged (i.e. load flags omitted). String version = features.version(); if (!version.equals("es3")) { loadFlags.put("lang", version); } } }
void visitTree(Node n) { visitSubtree(n, null); Preconditions.checkArgument(n.isScript()); FeatureSet features = (FeatureSet) n.getProp(Node.FEATURE_SET); if (features != null) { // Only add the "lang" load flag if it's not the default (es3), so that // legacy deps files will remain unchanged (i.e. load flags omitted). String version = features.version(); if (!version.equals("es3")) { loadFlags.put("lang", version); } } }
private boolean languageOutIsAtLeast(FeatureSet features) { String v = features.version(); if (v.equals("ts")) return languageOutIsAtLeast(LanguageMode.ECMASCRIPT6_TYPED); else if (v.equals("es6") || v.equals("es6-impl")) // TODO(sdh))) support a separate language mode for es6-impl? return languageOutIsAtLeast(LanguageMode.ECMASCRIPT6); else if (v.equals("es5")) return languageOutIsAtLeast(LanguageMode.ECMASCRIPT5); else if (v.equals("es3")) return languageOutIsAtLeast(LanguageMode.ECMASCRIPT3); else return false; }
@Override public ImmutableMap<String, String> getLoadFlags() { if (loadFlags == null) { Map<String, String> loadFlagsBuilder = new TreeMap<>(); loadFlagsBuilder.putAll(delegate.getLoadFlags()); FeatureSet features = ast.getFeatures(compiler); if (features.has(Feature.MODULES)) { String previousModule = loadFlagsBuilder.get("module"); if (previousModule != null && !previousModule.equals("es6")) { compiler.report(JSError.make(ModuleLoader.MODULE_CONFLICT, getName())); } loadFlagsBuilder.put("module", "es6"); } String version = features.version(); if (!version.equals("es3")) { loadFlagsBuilder.put("lang", version); } loadFlags = ImmutableMap.copyOf(loadFlagsBuilder); // Don't preserve the full AST longer than necessary. It can consume a lot of memory. ast = null; } return loadFlags; }
@Override public ImmutableMap<String, String> getLoadFlags() { if (loadFlags == null) { Map<String, String> loadFlagsBuilder = new TreeMap<String, String>(); loadFlagsBuilder.putAll(delegate.getLoadFlags()); FeatureSet features = ((JsAst) ast).getFeatures(compiler); if (features.hasEs6Modules()) { if (loadFlagsBuilder.containsKey("module")) { compiler.report(JSError.make(MODULE_CONFLICT, getName())); } loadFlagsBuilder.put("module", "es6"); } String version = features.version(); if (!version.equals("es3")) { loadFlagsBuilder.put("lang", version); } loadFlags = ImmutableMap.copyOf(loadFlagsBuilder); } return loadFlags; }
JSDocInfo recordJsDoc(SourceRange location, JSDocInfo info) { if (info != null && info.hasTypeInformation()) { hasJsDocTypeAnnotations = true; if (features.version().equals("ts")) { errorReporter.error("Can only have JSDoc or inline type annotations, not both", sourceName, lineno(location.start), charno(location.start)); } } return info; }
private boolean languageOutIsAtLeast(FeatureSet features) { switch (features.version()) { case "ts": return languageOutIsAtLeast(LanguageMode.ECMASCRIPT6_TYPED); case "es9": return languageOutIsAtLeast(LanguageMode.ECMASCRIPT_2018); case "es8": return languageOutIsAtLeast(LanguageMode.ECMASCRIPT_2017); case "es7": return languageOutIsAtLeast(LanguageMode.ECMASCRIPT_2016); case "es6": case "es6-impl": // TODO(sdh): support a separate language mode for es6-impl? return languageOutIsAtLeast(LanguageMode.ECMASCRIPT_2015); case "es5": return languageOutIsAtLeast(LanguageMode.ECMASCRIPT5); case "es3": return languageOutIsAtLeast(LanguageMode.ECMASCRIPT3); default: return false; } }
INSUFFICIENT_OUTPUT_VERSION_ERROR, name, compiler.getOptions().getOutputFeatureSet().version());