void maybeReportTrailingComma(Token commaToken) { if (commaToken != null) { recordFeatureUsed(Feature.TRAILING_COMMA); if (config.warnTrailingCommas) { // In ES3 mode warn about trailing commas which aren't accepted by // older browsers (such as IE8). errorReporter.reportWarning(commaToken.location.start, "Trailing comma is not legal in an ECMA-262 object initializer"); } } }
private ParseTree parseObjectPattern(PatternKind kind) { SourcePosition start = getTreeStartLocation(); ImmutableList.Builder<ParseTree> fields = ImmutableList.builder(); eat(TokenType.OPEN_CURLY); while (peekObjectPatternField()) { fields.add(parseObjectPatternField(kind)); if (peek(TokenType.COMMA)) { // Consume the comma separator eat(TokenType.COMMA); } else { // Otherwise we must be done break; } } if (peek(TokenType.SPREAD)) { recordFeatureUsed(Feature.OBJECT_PATTERN_REST); fields.add(parsePatternRest(kind)); } eat(TokenType.CLOSE_CURLY); return new ObjectPatternTree(getTreeLocation(start), fields.build()); }
private FormalParameterListTree parseFormalParameterList(ParamContext context) { SourcePosition listStart = getTreeStartLocation(); eat(TokenType.OPEN_PAREN); ImmutableList.Builder<ParseTree> result = ImmutableList.builder(); while (peekParameter(context)) { result.add(parseParameter(context)); if (!peek(TokenType.CLOSE_PAREN)) { Token comma = eat(TokenType.COMMA); if (peek(TokenType.CLOSE_PAREN)) { recordFeatureUsed(Feature.TRAILING_COMMA_IN_PARAM_LIST); if (!config.atLeast8) { reportError(comma, "Invalid trailing comma in formal parameter list"); } } } } eat(TokenType.CLOSE_PAREN); return new FormalParameterListTree( getTreeLocation(listStart), result.build()); }
private ArgumentListTree parseArguments() { // ArgumentList : // AssignmentOrSpreadExpression // ArgumentList , AssignmentOrSpreadExpression // // AssignmentOrSpreadExpression : // ... AssignmentExpression // AssignmentExpression SourcePosition start = getTreeStartLocation(); ImmutableList.Builder<ParseTree> arguments = ImmutableList.builder(); eat(TokenType.OPEN_PAREN); while (peekAssignmentOrSpread()) { arguments.add(parseAssignmentOrSpread()); if (!peek(TokenType.CLOSE_PAREN)) { Token comma = eat(TokenType.COMMA); if (peek(TokenType.CLOSE_PAREN)) { recordFeatureUsed(Feature.TRAILING_COMMA_IN_PARAM_LIST); if (!config.atLeast8) { reportError(comma, "Invalid trailing comma in arguments list"); } } } } eat(TokenType.CLOSE_PAREN); return new ArgumentListTree(getTreeLocation(start), arguments.build()); }
} else { if (peek(TokenType.SPREAD)) { recordFeatureUsed(Feature.SPREAD_EXPRESSIONS); elements.add(parseSpreadExpression()); } else {
recordFeatureUsed(Feature.ARRAY_PATTERN_REST); elements.add(parsePatternRest(kind));
private ParseTree parseSetAccessor(PartialClassElement partial) { eatPredefinedString(PredefinedName.SET); if (peekPropertyName(0)) { Token propertyName = eatObjectLiteralPropertyName(); FormalParameterListTree parameter = parseSetterParameterList(); ParseTree returnType = maybeParseColonType(); if (returnType != null) { reportError(scanner.peekToken(), "setter should not have any returns"); } BlockTree body = parseFunctionBody(); recordFeatureUsed(Feature.SETTER); return new SetAccessorTree( getTreeLocation(partial.start), propertyName, partial.isStatic, parameter, body); } else { ParseTree property = parseComputedPropertyName(); FormalParameterListTree parameter = parseSetterParameterList(); BlockTree body = parseFunctionBody(); recordFeatureUsed(Feature.SETTER); return new ComputedPropertySetterTree( getTreeLocation(partial.start), property, partial.isStatic, partial.accessModifier, parameter, body); } }
private ParseTree parseGetAccessor(PartialClassElement partial) { eatPredefinedString(PredefinedName.GET); if (peekPropertyName(0)) { Token propertyName = eatObjectLiteralPropertyName(); eat(TokenType.OPEN_PAREN); eat(TokenType.CLOSE_PAREN); ParseTree returnType = maybeParseColonType(); BlockTree body = parseFunctionBody(); recordFeatureUsed(Feature.GETTER); return new GetAccessorTree( getTreeLocation(partial.start), propertyName, partial.isStatic, returnType, body); } else { ParseTree property = parseComputedPropertyName(); eat(TokenType.OPEN_PAREN); eat(TokenType.CLOSE_PAREN); ParseTree returnType = maybeParseColonType(); BlockTree body = parseFunctionBody(); recordFeatureUsed(Feature.GETTER); return new ComputedPropertyGetterTree( getTreeLocation(partial.start), property, partial.isStatic, partial.accessModifier, returnType, body); } }
return parsePropertyAssignmentGenerator(); } else if (peek(TokenType.SPREAD)) { recordFeatureUsed(Feature.OBJECT_LITERALS_WITH_SPREAD); return parseSpreadExpression(); } else if (type == TokenType.STRING
name = eatIdOrKeywordAsId(); if (Keywords.isKeyword(name.value, /* includeTypeScriptKeywords= */ false)) { recordFeatureUsed(Feature.KEYWORDS_AS_PROPERTIES);