mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-02-06 02:33:53 -06:00
Complete grammar checking migration; there are still errors which will be fixed once pull master into the branch
This commit is contained in:
parent
a3e8b6c6d7
commit
8dc9f751a3
@ -7826,6 +7826,11 @@ module ts {
|
||||
}
|
||||
|
||||
function checkBlock(node: Block) {
|
||||
// Grammar checking for SyntaxKind.Block
|
||||
if (node.kind === SyntaxKind.Block) {
|
||||
checkGrammarForStatementInAmbientContext(node);
|
||||
}
|
||||
|
||||
forEach(node.statements, checkSourceElement);
|
||||
if (isFunctionBlock(node) || node.kind === SyntaxKind.ModuleBlock) {
|
||||
checkFunctionExpressionBodies(node);
|
||||
@ -8085,27 +8090,40 @@ module ts {
|
||||
}
|
||||
|
||||
function checkExpressionStatement(node: ExpressionStatement) {
|
||||
// Grammar checking
|
||||
checkGrammarForStatementInAmbientContext(node)
|
||||
|
||||
checkExpression(node.expression);
|
||||
}
|
||||
|
||||
function checkIfStatement(node: IfStatement) {
|
||||
// Grammar checking
|
||||
checkGrammarForStatementInAmbientContext(node);
|
||||
|
||||
checkExpression(node.expression);
|
||||
checkSourceElement(node.thenStatement);
|
||||
checkSourceElement(node.elseStatement);
|
||||
}
|
||||
|
||||
function checkDoStatement(node: DoStatement) {
|
||||
// Grammar checking
|
||||
checkGrammarForStatementInAmbientContext(node);
|
||||
|
||||
checkSourceElement(node.statement);
|
||||
checkExpression(node.expression);
|
||||
}
|
||||
|
||||
function checkWhileStatement(node: WhileStatement) {
|
||||
// Grammar checking
|
||||
checkGrammarForStatementInAmbientContext(node);
|
||||
|
||||
checkExpression(node.expression);
|
||||
checkSourceElement(node.statement);
|
||||
}
|
||||
|
||||
function checkForStatement(node: ForStatement) {
|
||||
// Grammar checking
|
||||
checkGrammarForStatementInAmbientContext(node);
|
||||
checkGrammarVariableDeclarations(node, node.declarations);
|
||||
|
||||
if (node.declarations) forEach(<VariableLikeDeclaration[]>node.declarations, checkVariableLikeDeclaration);
|
||||
@ -8116,7 +8134,9 @@ module ts {
|
||||
}
|
||||
|
||||
function checkForInStatement(node: ForInStatement) {
|
||||
// Grammar checking
|
||||
// Grammar checkingcheck
|
||||
checkGrammarForStatementInAmbientContext(node);
|
||||
|
||||
var declarations = node.declarations;
|
||||
if (!checkGrammarVariableDeclarations(node, declarations)) {
|
||||
if (declarations && declarations.length > 1) {
|
||||
@ -8166,6 +8186,7 @@ module ts {
|
||||
|
||||
function checkBreakOrContinueStatement(node: BreakOrContinueStatement) {
|
||||
// Grammar checking
|
||||
checkGrammarForStatementInAmbientContext(node);
|
||||
checkGrammarBreakOrContinueStatement(node);
|
||||
|
||||
// TODO: Check that target label is valid
|
||||
@ -8177,6 +8198,7 @@ module ts {
|
||||
|
||||
function checkReturnStatement(node: ReturnStatement) {
|
||||
// Grammar checking
|
||||
checkGrammarForStatementInAmbientContext(node);
|
||||
var parent = node.parent;
|
||||
var inFunctionBlock = false;
|
||||
var functionBlock = getContainingFunction(node);
|
||||
@ -8208,6 +8230,8 @@ module ts {
|
||||
|
||||
function checkWithStatement(node: WithStatement) {
|
||||
// Grammar checking for withStatement
|
||||
checkGrammarForStatementInAmbientContext(node);
|
||||
|
||||
if (node.parserContextFlags & ParserContextFlags.StrictMode) {
|
||||
grammarErrorOnFirstToken(node, Diagnostics.with_statements_are_not_allowed_in_strict_mode);
|
||||
}
|
||||
@ -8224,6 +8248,8 @@ module ts {
|
||||
|
||||
function checkSwitchStatement(node: SwitchStatement) {
|
||||
// Grammar checking
|
||||
checkGrammarForStatementInAmbientContext(node);
|
||||
|
||||
var firstDefaultClause: CaseOrDefaultClause;
|
||||
var hasDuplicateDefaultClause = false;
|
||||
|
||||
@ -8258,8 +8284,8 @@ module ts {
|
||||
}
|
||||
|
||||
function checkLabeledStatement(node: LabeledStatement) {
|
||||
// ensure that label is unique
|
||||
// Grammar checking
|
||||
checkGrammarForStatementInAmbientContext(node);
|
||||
var current = node.parent;
|
||||
while (current) {
|
||||
if (isAnyFunction(current)) {
|
||||
@ -8273,10 +8299,15 @@ module ts {
|
||||
current = current.parent;
|
||||
}
|
||||
|
||||
// ensure that label is unique
|
||||
checkSourceElement(node.statement);
|
||||
}
|
||||
|
||||
function checkThrowStatement(node: ThrowStatement) {
|
||||
// Grammar checking
|
||||
checkGrammarForStatementInAmbientContext(node)
|
||||
|
||||
// Type checking
|
||||
if (node.expression === undefined) {
|
||||
grammarErrorAfterFirstToken(node, Diagnostics.Line_break_not_permitted_here);
|
||||
}
|
||||
@ -8287,6 +8318,9 @@ module ts {
|
||||
}
|
||||
|
||||
function checkTryStatement(node: TryStatement) {
|
||||
// Grammar checking
|
||||
checkGrammarForStatementInAmbientContext(node);
|
||||
|
||||
checkBlock(node.tryBlock);
|
||||
var catchClause = node.catchClause;
|
||||
if (catchClause) {
|
||||
@ -9108,6 +9142,10 @@ module ts {
|
||||
return checkImportDeclaration(<ImportDeclaration>node);
|
||||
case SyntaxKind.ExportAssignment:
|
||||
return checkExportAssignment(<ExportAssignment>node);
|
||||
case SyntaxKind.EmptyStatement:
|
||||
return checkGrammarForStatementInAmbientContext(node);
|
||||
case SyntaxKind.DebuggerStatement:
|
||||
return checkGrammarForStatementInAmbientContext(node);
|
||||
}
|
||||
}
|
||||
|
||||
@ -9199,6 +9237,9 @@ module ts {
|
||||
|
||||
// Fully type check a source file and collect the relevant diagnostics.
|
||||
function checkSourceFile(node: SourceFile) {
|
||||
// Grammar checking
|
||||
checkGrammarSourceFile(node);
|
||||
|
||||
var links = getNodeLinks(node);
|
||||
if (!(links.flags & NodeCheckFlags.TypeChecked)) {
|
||||
emitExtends = false;
|
||||
@ -10697,6 +10738,7 @@ module ts {
|
||||
|
||||
function checkGrammarForBodyInAmbientContext(body: Block | Expression, isConstructor: boolean): boolean {
|
||||
if (isInAmbientContext(body) && body && body.kind === SyntaxKind.Block) {
|
||||
|
||||
var diagnostic = isConstructor
|
||||
? Diagnostics.A_constructor_implementation_cannot_be_declared_in_an_ambient_context
|
||||
: Diagnostics.A_function_implementation_cannot_be_declared_in_an_ambient_context;
|
||||
@ -10727,6 +10769,71 @@ module ts {
|
||||
}
|
||||
}
|
||||
|
||||
function checkGrammarTopLevelElementForRequiredDeclareModifier(node: Node): boolean {
|
||||
// A declare modifier is required for any top level .d.ts declaration except export=, interfaces and imports:
|
||||
// categories:
|
||||
//
|
||||
// DeclarationElement:
|
||||
// ExportAssignment
|
||||
// export_opt InterfaceDeclaration
|
||||
// export_opt ImportDeclaration
|
||||
// export_opt ExternalImportDeclaration
|
||||
// export_opt AmbientDeclaration
|
||||
//
|
||||
if (node.kind === SyntaxKind.InterfaceDeclaration ||
|
||||
node.kind === SyntaxKind.ImportDeclaration ||
|
||||
node.kind === SyntaxKind.ExportAssignment ||
|
||||
(node.flags & NodeFlags.Ambient)) {
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return grammarErrorOnFirstToken(node, Diagnostics.A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file);
|
||||
}
|
||||
|
||||
function checkGrammarTopLevelElementsForRequiredDeclareModifier(file: SourceFile): boolean {
|
||||
for (var i = 0, n = file.statements.length; i < n; i++) {
|
||||
var decl = file.statements[i];
|
||||
if (isDeclaration(decl) || decl.kind === SyntaxKind.VariableStatement) {
|
||||
if (checkGrammarTopLevelElementForRequiredDeclareModifier(decl)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function checkGrammarSourceFile(node: SourceFile): boolean {
|
||||
return isInAmbientContext(node) && checkGrammarTopLevelElementsForRequiredDeclareModifier(node);
|
||||
}
|
||||
|
||||
function checkGrammarForStatementInAmbientContext(node: Node): void {
|
||||
if (isInAmbientContext(node)) {
|
||||
// Find containing block which is either Block, ModuleBlock, SourceFile
|
||||
if (isAnyFunction(node.parent)) {
|
||||
grammarErrorOnFirstToken(node, Diagnostics.An_implementation_cannot_be_declared_in_ambient_contexts)
|
||||
return;
|
||||
}
|
||||
|
||||
// We are either parented by another statement, or some sort of block.
|
||||
// If we're in a block, we only want to really report an error once
|
||||
// to prevent noisyness. So use a bit on the block to indicate if
|
||||
// this has already been reported, and don't report if it has.
|
||||
//
|
||||
if (node.parent.kind === SyntaxKind.Block || node.parent.kind === SyntaxKind.ModuleBlock || node.parent.kind === SyntaxKind.SourceFile) {
|
||||
var links = getNodeLinks(node.parent);
|
||||
// Check if the containing block ever report this error
|
||||
if (!links.hasReportedStatementInAmbientContext) {
|
||||
links.hasReportedStatementInAmbientContext = grammarErrorOnFirstToken(node, Diagnostics.Statements_are_not_allowed_in_ambient_contexts);
|
||||
}
|
||||
}
|
||||
else {
|
||||
// We must be parented by a statement. If so, there's no need
|
||||
// to report the error as our parent will have already done it.
|
||||
// Debug.assert(isStatement(node.parent));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function grammarErrorAfterFirstToken(node: Node, message: DiagnosticMessage, arg0?: any, arg1?: any, arg2?: any): boolean {
|
||||
var sourceFile = getSourceFileOfNode(node);
|
||||
if (!hasParseDiagnostics(sourceFile)) {
|
||||
|
||||
@ -144,6 +144,7 @@ module ts {
|
||||
Array_element_destructuring_pattern_expected: { code: 1181, category: DiagnosticCategory.Error, key: "Array element destructuring pattern expected." },
|
||||
A_destructuring_declaration_must_have_an_initializer: { code: 1182, category: DiagnosticCategory.Error, key: "A destructuring declaration must have an initializer.", isEarly: true },
|
||||
Destructuring_declarations_are_not_allowed_in_ambient_contexts: { code: 1183, category: DiagnosticCategory.Error, key: "Destructuring declarations are not allowed in ambient contexts.", isEarly: true },
|
||||
An_implementation_cannot_be_declared_in_ambient_contexts: { code: 1184, category: DiagnosticCategory.Error, key: "An implementation cannot be declared in ambient contexts.", isEarly: true },
|
||||
Duplicate_identifier_0: { code: 2300, category: DiagnosticCategory.Error, key: "Duplicate identifier '{0}'." },
|
||||
Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor: { code: 2301, category: DiagnosticCategory.Error, key: "Initializer of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor." },
|
||||
Static_members_cannot_reference_class_type_parameters: { code: 2302, category: DiagnosticCategory.Error, key: "Static members cannot reference class type parameters." },
|
||||
|
||||
@ -10,7 +10,7 @@
|
||||
"'{0}' expected.": {
|
||||
"category": "Error",
|
||||
"code": 1005,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"A file cannot have a reference to itself.": {
|
||||
"category": "Error",
|
||||
@ -19,7 +19,7 @@
|
||||
"Trailing comma not allowed.": {
|
||||
"category": "Error",
|
||||
"code": 1009,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"'*/' expected.": {
|
||||
"category": "Error",
|
||||
@ -32,57 +32,57 @@
|
||||
"Catch clause parameter cannot have a type annotation.": {
|
||||
"category": "Error",
|
||||
"code": 1013,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"A rest parameter must be last in a parameter list.": {
|
||||
"category": "Error",
|
||||
"code": 1014,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"Parameter cannot have question mark and initializer.": {
|
||||
"category": "Error",
|
||||
"code": 1015,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"A required parameter cannot follow an optional parameter.": {
|
||||
"category": "Error",
|
||||
"code": 1016,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"An index signature cannot have a rest parameter.": {
|
||||
"category": "Error",
|
||||
"code": 1017,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"An index signature parameter cannot have an accessibility modifier.": {
|
||||
"category": "Error",
|
||||
"code": 1018,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"An index signature parameter cannot have a question mark.": {
|
||||
"category": "Error",
|
||||
"code": 1019,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"An index signature parameter cannot have an initializer.": {
|
||||
"category": "Error",
|
||||
"code": 1020,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"An index signature must have a type annotation.": {
|
||||
"category": "Error",
|
||||
"code": 1021,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"An index signature parameter must have a type annotation.": {
|
||||
"category": "Error",
|
||||
"code": 1022,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"An index signature parameter type must be 'string' or 'number'.": {
|
||||
"category": "Error",
|
||||
"code": 1023,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"A class or interface declaration can only have one 'extends' clause.": {
|
||||
"category": "Error",
|
||||
@ -103,22 +103,22 @@
|
||||
"Accessibility modifier already seen.": {
|
||||
"category": "Error",
|
||||
"code": 1028,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"'{0}' modifier must precede '{1}' modifier.": {
|
||||
"category": "Error",
|
||||
"code": 1029,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"'{0}' modifier already seen.": {
|
||||
"category": "Error",
|
||||
"code": 1030,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"'{0}' modifier cannot appear on a class element.": {
|
||||
"category": "Error",
|
||||
"code": 1031,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"An interface declaration cannot have an 'implements' clause.": {
|
||||
"category": "Error",
|
||||
@ -131,37 +131,37 @@
|
||||
"Only ambient modules can use quoted names.": {
|
||||
"category": "Error",
|
||||
"code": 1035,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"Statements are not allowed in ambient contexts.": {
|
||||
"category": "Error",
|
||||
"code": 1036,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"A function implementation cannot be declared in an ambient context.": {
|
||||
"category": "Error",
|
||||
"code": 1037,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"A 'declare' modifier cannot be used in an already ambient context.": {
|
||||
"category": "Error",
|
||||
"code": 1038,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"Initializers are not allowed in ambient contexts.": {
|
||||
"category": "Error",
|
||||
"code": 1039,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"'{0}' modifier cannot appear on a module element.": {
|
||||
"category": "Error",
|
||||
"code": 1044,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"A 'declare' modifier cannot be used with an interface declaration.": {
|
||||
"category": "Error",
|
||||
"code": 1045,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"A 'declare' modifier is required for a top level declaration in a .d.ts file.": {
|
||||
"category": "Error",
|
||||
@ -170,57 +170,57 @@
|
||||
"A rest parameter cannot be optional.": {
|
||||
"category": "Error",
|
||||
"code": 1047,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"A rest parameter cannot have an initializer.": {
|
||||
"category": "Error",
|
||||
"code": 1048,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"A 'set' accessor must have exactly one parameter.": {
|
||||
"category": "Error",
|
||||
"code": 1049,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"A 'set' accessor cannot have an optional parameter.": {
|
||||
"category": "Error",
|
||||
"code": 1051,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"A 'set' accessor parameter cannot have an initializer.": {
|
||||
"category": "Error",
|
||||
"code": 1052,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"A 'set' accessor cannot have rest parameter.": {
|
||||
"category": "Error",
|
||||
"code": 1053,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"A 'get' accessor cannot have parameters.": {
|
||||
"category": "Error",
|
||||
"code": 1054,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"Accessors are only available when targeting ECMAScript 5 and higher.": {
|
||||
"category": "Error",
|
||||
"code": 1056,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"Enum member must have initializer.": {
|
||||
"category": "Error",
|
||||
"code": 1061,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"An export assignment cannot be used in an internal module.": {
|
||||
"category": "Error",
|
||||
"code": 1063,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"Ambient enum elements can only have integer literal initializers.": {
|
||||
"category": "Error",
|
||||
"code": 1066,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"Unexpected token. A constructor, method, accessor, or property was expected.": {
|
||||
"category": "Error",
|
||||
@ -237,107 +237,107 @@
|
||||
"Octal literals are not available when targeting ECMAScript 5 and higher.": {
|
||||
"category": "Error",
|
||||
"code": 1085,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"An accessor cannot be declared in an ambient context.": {
|
||||
"category": "Error",
|
||||
"code": 1086,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"'{0}' modifier cannot appear on a constructor declaration.": {
|
||||
"category": "Error",
|
||||
"code": 1089,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"'{0}' modifier cannot appear on a parameter.": {
|
||||
"category": "Error",
|
||||
"code": 1090,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"Only a single variable declaration is allowed in a 'for...in' statement.": {
|
||||
"category": "Error",
|
||||
"code": 1091,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"Type parameters cannot appear on a constructor declaration.": {
|
||||
"category": "Error",
|
||||
"code": 1092,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"Type annotation cannot appear on a constructor declaration.": {
|
||||
"category": "Error",
|
||||
"code": 1093,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"An accessor cannot have type parameters.": {
|
||||
"category": "Error",
|
||||
"code": 1094,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"A 'set' accessor cannot have a return type annotation.": {
|
||||
"category": "Error",
|
||||
"code": 1095,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"An index signature must have exactly one parameter.": {
|
||||
"category": "Error",
|
||||
"code": 1096,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"'{0}' list cannot be empty.": {
|
||||
"category": "Error",
|
||||
"code": 1097,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"Type parameter list cannot be empty.": {
|
||||
"category": "Error",
|
||||
"code": 1098,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"Type argument list cannot be empty.": {
|
||||
"category": "Error",
|
||||
"code": 1099,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"Invalid use of '{0}' in strict mode.": {
|
||||
"category": "Error",
|
||||
"code": 1100,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"'with' statements are not allowed in strict mode.": {
|
||||
"category": "Error",
|
||||
"code": 1101,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"'delete' cannot be called on an identifier in strict mode.": {
|
||||
"category": "Error",
|
||||
"code": 1102,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"A 'continue' statement can only be used within an enclosing iteration statement.": {
|
||||
"category": "Error",
|
||||
"code": 1104,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"A 'break' statement can only be used within an enclosing iteration or switch statement.": {
|
||||
"category": "Error",
|
||||
"code": 1105,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"Jump target cannot cross function boundary.": {
|
||||
"category": "Error",
|
||||
"code": 1107,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"A 'return' statement can only be used within a function body.": {
|
||||
"category": "Error",
|
||||
"code": 1108,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"Expression expected.": {
|
||||
"category": "Error",
|
||||
"code": 1109,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"Type expected.": {
|
||||
"category": "Error",
|
||||
@ -347,67 +347,67 @@
|
||||
"A constructor implementation cannot be declared in an ambient context.": {
|
||||
"category": "Error",
|
||||
"code": 1111,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"A class member cannot be declared optional.": {
|
||||
"category": "Error",
|
||||
"code": 1112,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"A 'default' clause cannot appear more than once in a 'switch' statement.": {
|
||||
"category": "Error",
|
||||
"code": 1113,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"Duplicate label '{0}'": {
|
||||
"category": "Error",
|
||||
"code": 1114,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"A 'continue' statement can only jump to a label of an enclosing iteration statement.": {
|
||||
"category": "Error",
|
||||
"code": 1115,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"A 'break' statement can only jump to a label of an enclosing statement.": {
|
||||
"category": "Error",
|
||||
"code": 1116,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"An object literal cannot have multiple properties with the same name in strict mode.": {
|
||||
"category": "Error",
|
||||
"code": 1117,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"An object literal cannot have multiple get/set accessors with the same name.": {
|
||||
"category": "Error",
|
||||
"code": 1118,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"An object literal cannot have property and accessor with the same name.": {
|
||||
"category": "Error",
|
||||
"code": 1119,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"An export assignment cannot have modifiers.": {
|
||||
"category": "Error",
|
||||
"code": 1120,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"Octal literals are not allowed in strict mode.": {
|
||||
"category": "Error",
|
||||
"code": 1121,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"A tuple type element list cannot be empty.": {
|
||||
"category": "Error",
|
||||
"code": 1122,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"Variable declaration list cannot be empty.": {
|
||||
"category": "Error",
|
||||
"code": 1123,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"Digit expected.": {
|
||||
"category": "Error",
|
||||
@ -456,7 +456,7 @@
|
||||
"Argument expression expected.": {
|
||||
"category": "Error",
|
||||
"code": 1135,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"Property assignment expected.": {
|
||||
"category": "Error",
|
||||
@ -481,7 +481,7 @@
|
||||
"String literal expected.": {
|
||||
"category": "Error",
|
||||
"code": 1141,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"Line break not permitted here.": {
|
||||
"category": "Error",
|
||||
@ -495,7 +495,7 @@
|
||||
"Modifiers not permitted on index signature members.": {
|
||||
"category": "Error",
|
||||
"code": 1145,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"Declaration expected.": {
|
||||
"category": "Error",
|
||||
@ -504,7 +504,7 @@
|
||||
"Import declarations in an internal module cannot reference an external module.": {
|
||||
"category": "Error",
|
||||
"code": 1147,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"Cannot compile external modules unless the '--module' flag is provided.": {
|
||||
"category": "Error",
|
||||
@ -517,7 +517,7 @@
|
||||
"'new T[]' cannot be used to create an array. Use 'new Array<T>()' instead.": {
|
||||
"category": "Error",
|
||||
"code": 1150,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"'var', 'let' or 'const' expected.": {
|
||||
"category": "Error",
|
||||
@ -526,32 +526,32 @@
|
||||
"'let' declarations are only available when targeting ECMAScript 6 and higher.": {
|
||||
"category": "Error",
|
||||
"code": 1153,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"'const' declarations are only available when targeting ECMAScript 6 and higher.": {
|
||||
"category": "Error",
|
||||
"code": 1154,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"'const' declarations must be initialized": {
|
||||
"category": "Error",
|
||||
"code": 1155,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"'const' declarations can only be declared inside a block.": {
|
||||
"category": "Error",
|
||||
"code": 1156,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"'let' declarations can only be declared inside a block.": {
|
||||
"category": "Error",
|
||||
"code": 1157,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"Tagged templates are only available when targeting ECMAScript 6 and higher.": {
|
||||
"category": "Error",
|
||||
"code": 1159,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"Unterminated template literal.": {
|
||||
"category": "Error",
|
||||
@ -564,48 +564,47 @@
|
||||
"An object member cannot be declared optional.": {
|
||||
"category": "Error",
|
||||
"code": 1162,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"'yield' expression must be contained_within a generator declaration."
|
||||
: {
|
||||
"'yield' expression must be contained_within a generator declaration.": {
|
||||
"category": "Error",
|
||||
"code": 1163,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"Computed property names are not allowed in enums.": {
|
||||
"category": "Error",
|
||||
"code": 1164,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"Computed property names are not allowed in an ambient context.": {
|
||||
"category": "Error",
|
||||
"code": 1165,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"Computed property names are not allowed in class property declarations.": {
|
||||
"category": "Error",
|
||||
"code": 1166,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"Computed property names are only available when targeting ECMAScript 6 and higher.": {
|
||||
"category": "Error",
|
||||
"code": 1167,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"Computed property names are not allowed in method overloads.": {
|
||||
"category": "Error",
|
||||
"code": 1168,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"Computed property names are not allowed in interfaces.": {
|
||||
"category": "Error",
|
||||
"code": 1169,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"Computed property names are not allowed in type literals.": {
|
||||
"category": "Error",
|
||||
"code": 1170,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"A comma expression is not allowed in a computed property name.": {
|
||||
"category": "Error",
|
||||
@ -614,27 +613,27 @@
|
||||
"'extends' clause already seen.": {
|
||||
"category": "Error",
|
||||
"code": 1172,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"'extends' clause must precede 'implements' clause.": {
|
||||
"category": "Error",
|
||||
"code": 1173,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"Classes can only extend a single class.": {
|
||||
"category": "Error",
|
||||
"code": 1174,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"'implements' clause already seen.": {
|
||||
"category": "Error",
|
||||
"code": 1175,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"Interface declaration cannot have 'implements' clause.": {
|
||||
"category": "Error",
|
||||
"code": 1176,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"Binary digit expected.": {
|
||||
"category": "Error",
|
||||
@ -659,11 +658,16 @@
|
||||
"A destructuring declaration must have an initializer.": {
|
||||
"category": "Error",
|
||||
"code": 1182,
|
||||
"isEarly": true
|
||||
"isEarly": true
|
||||
},
|
||||
"Destructuring declarations are not allowed in ambient contexts.": {
|
||||
"category": "Error",
|
||||
"code": 1183,
|
||||
"isEarly": true
|
||||
},
|
||||
"An implementation cannot be declared in ambient contexts.": {
|
||||
"category": "Error",
|
||||
"code": 1184,
|
||||
"isEarly": true
|
||||
},
|
||||
|
||||
|
||||
@ -4625,7 +4625,7 @@ module ts {
|
||||
|
||||
function checkNode(node: Node, nodeKind: SyntaxKind): boolean {
|
||||
// Now do node specific checks.
|
||||
switch (nodeKind) {
|
||||
//switch (nodeKind) {
|
||||
//case SyntaxKind.BreakStatement:
|
||||
//case SyntaxKind.ContinueStatement:
|
||||
//return checkBreakOrContinueStatement(<BreakOrContinueStatement>node);
|
||||
@ -4667,7 +4667,7 @@ module ts {
|
||||
//return checkProperty(<PropertyDeclaration>node);
|
||||
//case SyntaxKind.ReturnStatement: return checkReturnStatement(<ReturnStatement>node);
|
||||
//case SyntaxKind.SetAccessor: return checkSetAccessor(<MethodDeclaration>node);
|
||||
case SyntaxKind.SourceFile: return checkSourceFile(<SourceFile>node);
|
||||
//case SyntaxKind.SourceFile: return checkSourceFile(<SourceFile>node);
|
||||
//case SyntaxKind.ShorthandPropertyAssignment: return checkShorthandPropertyAssignment(<ShorthandPropertyAssignment>node);
|
||||
//case SyntaxKind.SwitchStatement: return checkSwitchStatement(<SwitchStatement>node);
|
||||
//case SyntaxKind.TaggedTemplateExpression: return checkTaggedTemplateExpression(<TaggedTemplateExpression>node);
|
||||
@ -4677,7 +4677,9 @@ module ts {
|
||||
//case SyntaxKind.VariableStatement: return checkVariableStatement(<VariableStatement>node);
|
||||
//case SyntaxKind.WithStatement: return checkWithStatement(<WithStatement>node);
|
||||
//case SyntaxKind.YieldExpression: return checkYieldExpression(<YieldExpression>node);
|
||||
}
|
||||
//return false
|
||||
//}
|
||||
return false;
|
||||
}
|
||||
|
||||
function scanToken(pos: number) {
|
||||
@ -4721,23 +4723,23 @@ module ts {
|
||||
|
||||
function checkForStatementInAmbientContext(node: Node, kind: SyntaxKind): boolean {
|
||||
switch (kind) {
|
||||
case SyntaxKind.Block:
|
||||
//case SyntaxKind.Block:
|
||||
case SyntaxKind.EmptyStatement:
|
||||
case SyntaxKind.IfStatement:
|
||||
case SyntaxKind.DoStatement:
|
||||
case SyntaxKind.WhileStatement:
|
||||
case SyntaxKind.ForStatement:
|
||||
case SyntaxKind.ForInStatement:
|
||||
case SyntaxKind.ContinueStatement:
|
||||
case SyntaxKind.BreakStatement:
|
||||
case SyntaxKind.ReturnStatement:
|
||||
case SyntaxKind.WithStatement:
|
||||
case SyntaxKind.SwitchStatement:
|
||||
case SyntaxKind.ThrowStatement:
|
||||
case SyntaxKind.TryStatement:
|
||||
//case SyntaxKind.IfStatement:
|
||||
//case SyntaxKind.DoStatement:
|
||||
//case SyntaxKind.WhileStatement:
|
||||
//case SyntaxKind.ForStatement:
|
||||
//case SyntaxKind.ForInStatement:
|
||||
//case SyntaxKind.ContinueStatement:
|
||||
//case SyntaxKind.BreakStatement:
|
||||
//case SyntaxKind.ReturnStatement:
|
||||
//case SyntaxKind.WithStatement:
|
||||
//case SyntaxKind.SwitchStatement:
|
||||
//case SyntaxKind.ThrowStatement:
|
||||
//case SyntaxKind.TryStatement:
|
||||
case SyntaxKind.DebuggerStatement:
|
||||
case SyntaxKind.LabeledStatement:
|
||||
case SyntaxKind.ExpressionStatement:
|
||||
//case SyntaxKind.LabeledStatement:
|
||||
//case SyntaxKind.ExpressionStatement:
|
||||
return grammarErrorOnFirstToken(node, Diagnostics.Statements_are_not_allowed_in_ambient_contexts);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1214,6 +1214,7 @@ module ts {
|
||||
isVisible?: boolean; // Is this node visible
|
||||
localModuleName?: string; // Local name for module instance
|
||||
assignmentChecks?: Map<boolean>; // Cache of assignment checks
|
||||
hasReportedStatementInAmbientContext?: boolean; // Cache boolean if we report statements in ambient context
|
||||
}
|
||||
|
||||
export const enum TypeFlags {
|
||||
|
||||
@ -1,22 +1,24 @@
|
||||
tests/cases/conformance/ambient/ambientErrors.ts(2,15): error TS1039: Initializers are not allowed in ambient contexts.
|
||||
tests/cases/conformance/ambient/ambientErrors.ts(6,1): error TS2382: Specialized overload signature is not assignable to any non-specialized signature.
|
||||
tests/cases/conformance/ambient/ambientErrors.ts(17,22): error TS2371: A parameter initializer is only allowed in a function or constructor implementation.
|
||||
tests/cases/conformance/ambient/ambientErrors.ts(20,24): error TS1036: Statements are not allowed in ambient contexts.
|
||||
tests/cases/conformance/ambient/ambientErrors.ts(20,24): error TS1037: A function implementation cannot be declared in an ambient context.
|
||||
tests/cases/conformance/ambient/ambientErrors.ts(24,5): error TS1066: Ambient enum elements can only have integer literal initializers.
|
||||
tests/cases/conformance/ambient/ambientErrors.ts(29,5): error TS1066: Ambient enum elements can only have integer literal initializers.
|
||||
tests/cases/conformance/ambient/ambientErrors.ts(34,11): error TS1039: Initializers are not allowed in ambient contexts.
|
||||
tests/cases/conformance/ambient/ambientErrors.ts(35,19): error TS1036: Statements are not allowed in ambient contexts.
|
||||
tests/cases/conformance/ambient/ambientErrors.ts(35,19): error TS1037: A function implementation cannot be declared in an ambient context.
|
||||
tests/cases/conformance/ambient/ambientErrors.ts(37,20): error TS1039: Initializers are not allowed in ambient contexts.
|
||||
tests/cases/conformance/ambient/ambientErrors.ts(38,13): error TS1039: Initializers are not allowed in ambient contexts.
|
||||
tests/cases/conformance/ambient/ambientErrors.ts(39,23): error TS1111: A constructor implementation cannot be declared in an ambient context.
|
||||
tests/cases/conformance/ambient/ambientErrors.ts(40,14): error TS1037: A function implementation cannot be declared in an ambient context.
|
||||
tests/cases/conformance/ambient/ambientErrors.ts(41,22): error TS1037: A function implementation cannot be declared in an ambient context.
|
||||
tests/cases/conformance/ambient/ambientErrors.ts(6,1): error TS2382: Specialized overload signature is not assignable to any non-specialized signature.
|
||||
tests/cases/conformance/ambient/ambientErrors.ts(17,22): error TS2371: A parameter initializer is only allowed in a function or constructor implementation.
|
||||
tests/cases/conformance/ambient/ambientErrors.ts(24,5): error TS1066: Ambient enum elements can only have integer literal initializers.
|
||||
tests/cases/conformance/ambient/ambientErrors.ts(29,5): error TS1066: Ambient enum elements can only have integer literal initializers.
|
||||
tests/cases/conformance/ambient/ambientErrors.ts(47,20): error TS2435: Ambient external modules cannot be nested in other modules.
|
||||
tests/cases/conformance/ambient/ambientErrors.ts(51,16): error TS2436: Ambient external module declaration cannot specify relative module name.
|
||||
tests/cases/conformance/ambient/ambientErrors.ts(57,5): error TS2309: An export assignment cannot be used in a module with other exported elements.
|
||||
|
||||
|
||||
==== tests/cases/conformance/ambient/ambientErrors.ts (16 errors) ====
|
||||
==== tests/cases/conformance/ambient/ambientErrors.ts (18 errors) ====
|
||||
// Ambient variable with an initializer
|
||||
declare var x = 4;
|
||||
~
|
||||
@ -44,6 +46,8 @@ tests/cases/conformance/ambient/ambientErrors.ts(57,5): error TS2309: An export
|
||||
// Ambient function with function body
|
||||
declare function fn4() { };
|
||||
~
|
||||
!!! error TS1036: Statements are not allowed in ambient contexts.
|
||||
~
|
||||
!!! error TS1037: A function implementation cannot be declared in an ambient context.
|
||||
|
||||
// Ambient enum with non - integer literal constant member
|
||||
@ -67,6 +71,8 @@ tests/cases/conformance/ambient/ambientErrors.ts(57,5): error TS2309: An export
|
||||
!!! error TS1039: Initializers are not allowed in ambient contexts.
|
||||
function fn() { }
|
||||
~
|
||||
!!! error TS1036: Statements are not allowed in ambient contexts.
|
||||
~
|
||||
!!! error TS1037: A function implementation cannot be declared in an ambient context.
|
||||
class C {
|
||||
static x = 3;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user