boolean isEs5OrBetterMode() { return config.languageMode().featureSet.contains(FeatureSet.ES5); }
boolean isSupportedForInputLanguageMode(Feature feature) { return config.languageMode().featureSet.has(feature); }
/** Reports an illegal getter and returns true if the language mode is too low. */ boolean maybeReportGetter(ParseTree node) { features = features.with(Feature.GETTER); if (config.languageMode() == LanguageMode.ECMASCRIPT3) { errorReporter.error( GETTER_ERROR_MESSAGE, sourceName, lineno(node), 0); return true; } return false; }
/** Reports an illegal setter and returns true if the language mode is too low. */ boolean maybeReportSetter(ParseTree node) { features = features.with(Feature.SETTER); if (config.languageMode() == LanguageMode.ECMASCRIPT3) { errorReporter.error( SETTER_ERROR_MESSAGE, sourceName, lineno(node), 0); return true; } return false; }
private void maybeWarnReservedKeyword(IdentifierToken token) { String identifier = token.value; boolean isIdentifier = false; if (TokenStream.isKeyword(identifier)) { features = features.with(Feature.ES3_KEYWORDS_AS_IDENTIFIERS); isIdentifier = config.languageMode() == LanguageMode.ECMASCRIPT3; } if (reservedKeywords != null && reservedKeywords.contains(identifier)) { features = features.with(Feature.KEYWORDS_AS_PROPERTIES); isIdentifier = config.languageMode() == LanguageMode.ECMASCRIPT3; } if (isIdentifier) { errorReporter.error( "identifier is a reserved word", sourceName, lineno(token.location.start), charno(token.location.start)); } }
private static com.google.javascript.jscomp.parsing.parser.Parser.Config newParserConfig( Config config) { LanguageMode languageMode = config.languageMode(); boolean isStrictMode = config.strictMode().isStrict(); Mode parserConfigLanguageMode = null; switch (languageMode) { case TYPESCRIPT: parserConfigLanguageMode = Mode.TYPESCRIPT; break; case ECMASCRIPT3: parserConfigLanguageMode = Mode.ES3; break; case ECMASCRIPT5: parserConfigLanguageMode = Mode.ES5; break; case ECMASCRIPT6: case ECMASCRIPT7: parserConfigLanguageMode = Mode.ES6_OR_ES7; break; case ECMASCRIPT8: case ECMASCRIPT_2018: parserConfigLanguageMode = Mode.ES8_OR_GREATER; break; case ES_NEXT: parserConfigLanguageMode = Mode.ES_NEXT; break; } return new com.google.javascript.jscomp.parsing.parser.Parser.Config( checkNotNull(parserConfigLanguageMode), isStrictMode); }
void maybeWarnTypeSyntax(ParseTree node, Feature feature) { if (config.languageMode() != LanguageMode.TYPESCRIPT) { errorReporter.warning( "type syntax is only supported in ES6 typed mode: " + feature, sourceName, lineno(node), charno(node)); } features = features.with(feature); recordTypeSyntax(node.location); }
private void maybeWarnKeywordProperty(Node node) { if (TokenStream.isKeyword(node.getString())) { features = features.with(Feature.KEYWORDS_AS_PROPERTIES); if (config.languageMode() == LanguageMode.ECMASCRIPT3) { errorReporter.warning(INVALID_ES3_PROP_NAME, sourceName, node.getLineno(), node.getCharno()); } } }
private IRFactory(String sourceString, StaticSourceFile sourceFile, Config config, ErrorReporter errorReporter, ImmutableList<Comment> comments) { this.sourceString = sourceString; this.nextCommentIter = comments.iterator(); this.currentComment = skipNonJsDoc(nextCommentIter); this.sourceFile = sourceFile; // The template node properties are applied to all nodes in this transform. this.templateNode = createTemplateNode(); this.fileLevelJsDocBuilder = new JSDocInfoBuilder(config.jsDocParsingMode().shouldParseDescriptions()); // Sometimes this will be null in tests. this.sourceName = sourceFile == null ? null : sourceFile.getName(); this.config = config; this.errorReporter = errorReporter; this.transformDispatcher = new TransformDispatcher(); if (config.strictMode().isStrict()) { reservedKeywords = ES5_STRICT_RESERVED_KEYWORDS; } else if (config.languageMode() == LanguageMode.ECMASCRIPT3) { reservedKeywords = null; // use TokenStream.isKeyword instead } else { reservedKeywords = ES5_RESERVED_KEYWORDS; } }
@Override public boolean equals(Object o) { if (o == this) { return true; } if (o instanceof Config) { Config that = (Config) o; return (this.languageMode.equals(that.languageMode())) && (this.strictMode.equals(that.strictMode())) && (this.jsDocParsingMode.equals(that.jsDocParsingMode())) && (this.runMode.equals(that.runMode())) && (this.annotations.equals(that.annotations())) && (this.suppressionNames.equals(that.suppressionNames())) && (this.parseInlineSourceMaps == that.parseInlineSourceMaps()); } return false; }