diff --git a/Jakefile b/Jakefile index 207cfce2e7f40..16330305b6a08 100644 --- a/Jakefile +++ b/Jakefile @@ -366,7 +366,7 @@ desc("Builds the test infrastructure using the built compiler"); task("tests", ["local", run].concat(libraryTargets)); function exec(cmd, completeHandler) { - var ex = jake.createExec([cmd]); + var ex = jake.createExec([cmd], {windowsVerbatimArguments: true}); // Add listeners for output and error ex.addListener("stdout", function(output) { process.stdout.write(output); @@ -488,18 +488,25 @@ task("runtests-browser", ["tests", "browserify", builtLocalDirectory], function( exec(cmd); }, {async: true}); +function getDiffTool() { + var program = process.env['DIFF'] + if (!program) { + fail("Add the 'DIFF' environment variable to the path of the program you want to use.") + } + return program; +} // Baseline Diff -desc("Diffs the compiler baselines using the diff tool specified by the %DIFF% environment variable"); +desc("Diffs the compiler baselines using the diff tool specified by the 'DIFF' environment variable"); task('diff', function () { - var cmd = "%DIFF% " + refBaseline + ' ' + localBaseline; + var cmd = '"' + getDiffTool() + '" ' + refBaseline + ' ' + localBaseline; console.log(cmd) exec(cmd); }, {async: true}); -desc("Diffs the RWC baselines using the diff tool specified by the %DIFF% environment variable"); +desc("Diffs the RWC baselines using the diff tool specified by the 'DIFF' environment variable"); task('diff-rwc', function () { - var cmd = "%DIFF% " + refRwcBaseline + ' ' + localRwcBaseline; + var cmd = '"' + getDiffTool() + '" ' + refRwcBaseline + ' ' + localRwcBaseline; console.log(cmd) exec(cmd); }, {async: true}); diff --git a/src/compiler/binder.ts b/src/compiler/binder.ts index 575b20d3d838b..1dfe3babfd093 100644 --- a/src/compiler/binder.ts +++ b/src/compiler/binder.ts @@ -423,7 +423,12 @@ module ts { bindDeclaration(node, SymbolFlags.Signature, 0, /*isBlockScopeContainer*/ false); break; case SyntaxKind.Method: - bindDeclaration(node, SymbolFlags.Method | ((node).questionToken ? SymbolFlags.Optional : 0), SymbolFlags.MethodExcludes, /*isBlockScopeContainer*/ true); + // If this is an ObjectLiteralExpression method, then it sits in the same space + // as other properties in the object literal. So we use SymbolFlags.PropertyExcludes + // so that it will conflict with any other object literal members with the same + // name. + bindDeclaration(node, SymbolFlags.Method | ((node).questionToken ? SymbolFlags.Optional : 0), + isObjectLiteralMethod(node) ? SymbolFlags.PropertyExcludes : SymbolFlags.MethodExcludes, /*isBlockScopeContainer*/ true); break; case SyntaxKind.FunctionDeclaration: bindDeclaration(node, SymbolFlags.Function, SymbolFlags.FunctionExcludes, /*isBlockScopeContainer*/ true); diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 413737d9b3fe5..9cbb9f2599000 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -85,8 +85,7 @@ module ts { getDiagnostics, getDeclarationDiagnostics, getGlobalDiagnostics, - getParentOfSymbol, - getNarrowedTypeOfSymbol, + getTypeOfSymbolAtLocation, getDeclaredTypeOfSymbol, getPropertiesOfType, getPropertyOfType, @@ -94,9 +93,9 @@ module ts { getIndexTypeOfType, getReturnTypeOfSignature, getSymbolsInScope, - getSymbolInfo, + getSymbolAtLocation, getShorthandAssignmentValueSymbol, - getTypeOfNode, + getTypeAtLocation, typeToString, getSymbolDisplayBuilder, symbolToString, @@ -1004,7 +1003,7 @@ module ts { var symbol = resolveName(enclosingDeclaration, (firstIdentifier).text, meaning, /*nodeNotFoundErrorMessage*/ undefined, /*nameArg*/ undefined); // Verify if the symbol is accessible - return hasVisibleDeclarations(symbol) || { + return (symbol && hasVisibleDeclarations(symbol)) || { accessibility: SymbolAccessibility.NotAccessible, errorSymbolName: getTextOfNode(firstIdentifier), errorNode: firstIdentifier @@ -1024,10 +1023,6 @@ module ts { writer.writePunctuation(tokenToString(kind)); } - function writeOperator(writer: SymbolWriter, kind: SyntaxKind) { - writer.writeOperator(tokenToString(kind)); - } - function writeSpace(writer: SymbolWriter) { writer.writeSpace(" "); } @@ -1303,6 +1298,17 @@ module ts { buildSymbolDisplay(type.symbol, writer, enclosingDeclaration, SymbolFlags.Value); } + function getIndexerParameterName(type: ObjectType, indexKind: IndexKind, fallbackName: string): string { + var declaration = getIndexDeclarationOfSymbol(type.symbol, indexKind); + if (!declaration) { + // declaration might not be found if indexer was added from the contextual type. + // in this case use fallback name + return fallbackName; + } + Debug.assert(declaration.parameters.length !== 0); + return declarationNameToString(declaration.parameters[0].name); + } + function writeLiteralType(type: ObjectType, flags: TypeFormatFlags) { var resolved = resolveObjectOrUnionTypeMembers(type); if (!resolved.properties.length && !resolved.stringIndexType && !resolved.numberIndexType) { @@ -1355,7 +1361,7 @@ module ts { if (resolved.stringIndexType) { // [x: string]: writePunctuation(writer, SyntaxKind.OpenBracketToken); - writer.writeParameter("x"); + writer.writeParameter(getIndexerParameterName(resolved, IndexKind.String, /*fallbackName*/"x")); writePunctuation(writer, SyntaxKind.ColonToken); writeSpace(writer); writeKeyword(writer, SyntaxKind.StringKeyword); @@ -1369,7 +1375,7 @@ module ts { if (resolved.numberIndexType) { // [x: number]: writePunctuation(writer, SyntaxKind.OpenBracketToken); - writer.writeParameter("x"); + writer.writeParameter(getIndexerParameterName(resolved, IndexKind.Number, /*fallbackName*/"x")); writePunctuation(writer, SyntaxKind.ColonToken); writeSpace(writer); writeKeyword(writer, SyntaxKind.NumberKeyword); @@ -2933,7 +2939,7 @@ module ts { // The expression is processed as an identifier expression (section 4.3) // or property access expression(section 4.10), // the widened type(section 3.9) of which becomes the result. - links.resolvedType = getWidenedType(checkExpression(node.exprName)); + links.resolvedType = getWidenedType(checkExpressionOrQualifiedName(node.exprName)); } return links.resolvedType; } @@ -3334,26 +3340,35 @@ module ts { // Returns true if the given expression contains (at any level of nesting) a function or arrow expression // that is subject to contextual typing. - function isContextSensitiveExpression(node: Expression): boolean { + function isContextSensitive(node: Expression | MethodDeclaration | ObjectLiteralElement): boolean { + Debug.assert(node.kind !== SyntaxKind.Method || isObjectLiteralMethod(node)); switch (node.kind) { case SyntaxKind.FunctionExpression: case SyntaxKind.ArrowFunction: - return !(node).typeParameters && !forEach((node).parameters, p => p.type); + return isContextSensitiveFunctionLikeDeclaration(node); case SyntaxKind.ObjectLiteralExpression: - return forEach((node).properties, p => - p.kind === SyntaxKind.PropertyAssignment && isContextSensitiveExpression((p).initializer)); + return forEach((node).properties, isContextSensitive); case SyntaxKind.ArrayLiteralExpression: - return forEach((node).elements, e => isContextSensitiveExpression(e)); + return forEach((node).elements, isContextSensitive); case SyntaxKind.ConditionalExpression: - return isContextSensitiveExpression((node).whenTrue) || - isContextSensitiveExpression((node).whenFalse); + return isContextSensitive((node).whenTrue) || + isContextSensitive((node).whenFalse); case SyntaxKind.BinaryExpression: return (node).operator === SyntaxKind.BarBarToken && - (isContextSensitiveExpression((node).left) || isContextSensitiveExpression((node).right)); + (isContextSensitive((node).left) || isContextSensitive((node).right)); + case SyntaxKind.PropertyAssignment: + return isContextSensitive((node).initializer); + case SyntaxKind.Method: + return isContextSensitiveFunctionLikeDeclaration(node); } + return false; } + function isContextSensitiveFunctionLikeDeclaration(node: FunctionLikeDeclaration) { + return !node.typeParameters && !forEach(node.parameters, p => p.type); + } + function getTypeWithoutConstructors(type: Type): Type { if (type.flags & TypeFlags.ObjectType) { var resolved = resolveObjectOrUnionTypeMembers(type); @@ -4555,6 +4570,47 @@ module ts { } } + function resolveLocation(node: Node) { + // Resolve location from top down towards node if it is a context sensitive expression + // That helps in making sure not assigning types as any when resolved out of order + var containerNodes: Node[] = []; + for (var parent = node.parent; parent; parent = parent.parent) { + if ((isExpression(parent) || isObjectLiteralMethod(node)) && + isContextSensitive(parent)) { + containerNodes.unshift(parent); + } + } + + ts.forEach(containerNodes, node => { getTypeOfNode(node); }); + } + + function getSymbolAtLocation(node: Node): Symbol { + resolveLocation(node); + return getSymbolInfo(node); + } + + function getTypeAtLocation(node: Node): Type { + resolveLocation(node); + return getTypeOfNode(node); + } + + function getTypeOfSymbolAtLocation(symbol: Symbol, node: Node): Type { + resolveLocation(node); + // Get the narrowed type of symbol at given location instead of just getting + // the type of the symbol. + // eg. + // function foo(a: string | number) { + // if (typeof a === "string") { + // a/**/ + // } + // } + // getTypeOfSymbol for a would return type of parameter symbol string | number + // Unless we provide location /**/, checker wouldn't know how to narrow the type + // By using getNarrowedTypeOfSymbol would return string since it would be able to narrow + // it by typeguard in the if true condition + return getNarrowedTypeOfSymbol(symbol, node); + } + // Get the narrowed type of a given symbol at a given location function getNarrowedTypeOfSymbol(symbol: Symbol, node: Node) { var type = getTypeOfSymbol(symbol); @@ -4918,7 +4974,7 @@ module ts { function getContextuallyTypedParameterType(parameter: ParameterDeclaration): Type { if (isFunctionExpressionOrArrowFunction(parameter.parent)) { var func = parameter.parent; - if (isContextSensitiveExpression(func)) { + if (isContextSensitive(func)) { var contextualSignature = getContextualSignature(func); if (contextualSignature) { @@ -5065,12 +5121,21 @@ module ts { // In an object literal contextually typed by a type T, the contextual type of a property assignment is the type of // the matching property in T, if one exists. Otherwise, it is the type of the numeric index signature in T, if one // exists. Otherwise, it is the type of the string index signature in T, if one exists. - function getContextualTypeForPropertyExpression(node: Expression): Type { - var declaration = node.parent; - var objectLiteral = declaration.parent; + function getContextualTypeForObjectLiteralMethod(node: MethodDeclaration): Type { + Debug.assert(isObjectLiteralMethod(node)); + if (isInsideWithStatementBody(node)) { + // We cannot answer semantic questions within a with block, do not proceed any further + return undefined; + } + + return getContextualTypeForObjectLiteralElement(node); + } + + function getContextualTypeForObjectLiteralElement(element: ObjectLiteralElement) { + var objectLiteral = element.parent; var type = getContextualType(objectLiteral); // TODO(jfreeman): Handle this case for computed names and symbols - var name = (declaration.name).text; + var name = (element.name).text; if (type && name) { return getTypeOfPropertyOfContextualType(type, name) || isNumericName(name) && getIndexTypeOfContextualType(type, IndexKind.Number) || @@ -5126,7 +5191,7 @@ module ts { case SyntaxKind.BinaryExpression: return getContextualTypeForBinaryOperand(node); case SyntaxKind.PropertyAssignment: - return getContextualTypeForPropertyExpression(node); + return getContextualTypeForObjectLiteralElement(parent); case SyntaxKind.ArrayLiteralExpression: return getContextualTypeForElementExpression(node); case SyntaxKind.ConditionalExpression: @@ -5161,8 +5226,11 @@ module ts { // If the contextual type is a union type, get the signature from each type possible and if they are // all identical ignoring their return type, the result is same signature but with return type as // union type of return types from these signatures - function getContextualSignature(node: FunctionExpression): Signature { - var type = getContextualType(node); + function getContextualSignature(node: FunctionExpression | MethodDeclaration): Signature { + Debug.assert(node.kind !== SyntaxKind.Method || isObjectLiteralMethod(node)); + var type = isObjectLiteralMethod(node) + ? getContextualTypeForObjectLiteralMethod(node) + : getContextualType(node); if (!type) { return undefined; } @@ -5276,16 +5344,17 @@ module ts { for (var id in members) { if (hasProperty(members, id)) { var member = members[id]; - if (member.flags & SymbolFlags.Property) { - // TODO(andersh): Use PropertyAssignment for both - // var type = checkExpression((member.declarations[0]).initializer, contextualMapper); - var memberDecl = member.declarations[0]; + if (member.flags & SymbolFlags.Property || isObjectLiteralMethod(member.declarations[0])) { + var memberDecl = member.declarations[0]; if (memberDecl.kind === SyntaxKind.PropertyAssignment) { - var type = checkExpression(memberDecl.initializer, contextualMapper); + var type = checkExpression((memberDecl).initializer, contextualMapper); + } + else if (memberDecl.kind === SyntaxKind.Method) { + var type = checkObjectLiteralMethod(memberDecl, contextualMapper); } else { Debug.assert(memberDecl.kind === SyntaxKind.ShorthandPropertyAssignment); - type = memberDecl.name.kind === SyntaxKind.ComputedPropertyName + var type = memberDecl.name.kind === SyntaxKind.ComputedPropertyName ? unknownType : checkExpression(memberDecl.name, contextualMapper); } @@ -5293,7 +5362,10 @@ module ts { var prop = createSymbol(SymbolFlags.Property | SymbolFlags.Transient | member.flags, member.name); prop.declarations = member.declarations; prop.parent = member.parent; - if (member.valueDeclaration) prop.valueDeclaration = member.valueDeclaration; + if (member.valueDeclaration) { + prop.valueDeclaration = member.valueDeclaration; + } + prop.type = type; prop.target = member; member = prop; @@ -5399,7 +5471,7 @@ module ts { } function checkPropertyAccessExpressionOrQualifiedName(node: PropertyAccessExpression | QualifiedName, left: Expression | QualifiedName, right: Identifier) { - var type = checkExpression(left); + var type = checkExpressionOrQualifiedName(left); if (type === unknownType) return type; if (type !== anyType) { var apparentType = getApparentType(getWidenedType(type)); @@ -5440,7 +5512,7 @@ module ts { ? (node).expression : (node).left; - var type = checkExpression(left); + var type = checkExpressionOrQualifiedName(left); if (type !== unknownType && type !== anyType) { var prop = getPropertyOfType(getWidenedType(type), propertyName); if (prop && prop.parent && prop.parent.flags & SymbolFlags.Class) { @@ -5796,7 +5868,7 @@ module ts { // because it represents a TemplateStringsArray. var excludeArgument: boolean[]; for (var i = isTaggedTemplate ? 1 : 0; i < args.length; i++) { - if (isContextSensitiveExpression(args[i])) { + if (isContextSensitive(args[i])) { if (!excludeArgument) { excludeArgument = new Array(args.length); } @@ -6219,7 +6291,7 @@ module ts { function getReturnTypeFromBody(func: FunctionLikeDeclaration, contextualMapper?: TypeMapper): Type { var contextualSignature = getContextualSignatureForFunctionLikeDeclaration(func); - if (func.body.kind !== SyntaxKind.FunctionBlock) { + if (func.body.kind !== SyntaxKind.Block) { var type = checkExpressionCached(func.body, contextualMapper); } else { @@ -6284,7 +6356,7 @@ module ts { } // If all we have is a function signature, or an arrow function with an expression body, then there is nothing to check. - if (!func.body || func.body.kind !== SyntaxKind.FunctionBlock) { + if (!func.body || func.body.kind !== SyntaxKind.Block) { return; } @@ -6306,7 +6378,9 @@ module ts { error(func.type, Diagnostics.A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_or_consist_of_a_single_throw_statement); } - function checkFunctionExpression(node: FunctionExpression, contextualMapper?: TypeMapper): Type { + function checkFunctionExpressionOrObjectLiteralMethod(node: FunctionExpression | MethodDeclaration, contextualMapper?: TypeMapper): Type { + Debug.assert(node.kind !== SyntaxKind.Method || isObjectLiteralMethod(node)); + // The identityMapper object is used to indicate that function expressions are wildcards if (contextualMapper === identityMapper) { return anyFunctionType; @@ -6323,7 +6397,7 @@ module ts { links.flags |= NodeCheckFlags.ContextChecked; if (contextualSignature) { var signature = getSignaturesOfType(type, SignatureKind.Call)[0]; - if (isContextSensitiveExpression(node)) { + if (isContextSensitive(node)) { assignContextualParameterTypes(signature, contextualSignature, contextualMapper || identityMapper); } if (!node.type) { @@ -6338,27 +6412,31 @@ module ts { } } - if (fullTypeCheck) { - checkCollisionWithCapturedSuperVariable(node, node.name); - checkCollisionWithCapturedThisVariable(node, node.name); + if (fullTypeCheck && node.kind !== SyntaxKind.Method) { + checkCollisionWithCapturedSuperVariable(node, (node).name); + checkCollisionWithCapturedThisVariable(node,(node).name); } return type; } - function checkFunctionExpressionBody(node: FunctionExpression) { + function checkFunctionExpressionOrObjectLiteralMethodBody(node: FunctionExpression | MethodDeclaration) { + Debug.assert(node.kind !== SyntaxKind.Method || isObjectLiteralMethod(node)); if (node.type) { checkIfNonVoidFunctionHasReturnExpressionsOrSingleThrowStatment(node, getTypeFromTypeNode(node.type)); } - if (node.body.kind === SyntaxKind.FunctionBlock) { - checkSourceElement(node.body); - } - else { - var exprType = checkExpression(node.body); - if (node.type) { - checkTypeAssignableTo(exprType, getTypeFromTypeNode(node.type), node.body, /*headMessage*/ undefined); + + if (node.body) { + if (node.body.kind === SyntaxKind.Block) { + checkSourceElement(node.body); + } + else { + var exprType = checkExpression(node.body); + if (node.type) { + checkTypeAssignableTo(exprType, getTypeFromTypeNode(node.type), node.body, /*headMessage*/ undefined); + } + checkFunctionExpressionBodies(node.body); } - checkFunctionExpressionBodies(node.body); } } @@ -6545,13 +6623,13 @@ module ts { var p = properties[i]; if (p.kind === SyntaxKind.PropertyAssignment || p.kind === SyntaxKind.ShorthandPropertyAssignment) { // TODO(andersh): Computed property support - var name = (p).name; + var name = (p).name; var type = sourceType.flags & TypeFlags.Any ? sourceType : getTypeOfPropertyOfType(sourceType, name.text) || isNumericName(name.text) && getIndexTypeOfType(sourceType, IndexKind.Number) || getIndexTypeOfType(sourceType, IndexKind.String); if (type) { - checkDestructuringAssignment((p).initializer || name, type); + checkDestructuringAssignment((p).initializer || name, type); } else { error(name, Diagnostics.Type_0_has_no_property_1_and_no_string_index_signature, typeToString(sourceType), declarationNameToString(name)); @@ -6798,28 +6876,49 @@ module ts { return links.resolvedType; } - // Checks an expression and returns its type. The contextualMapper parameter serves two purposes: When - // contextualMapper is not undefined and not equal to the identityMapper function object it indicates that the - // expression is being inferentially typed (section 4.12.2 in spec) and provides the type mapper to use in - // conjunction with the generic contextual type. When contextualMapper is equal to the identityMapper function - // object, it serves as an indicator that all contained function and arrow expressions should be considered to - // have the wildcard function type; this form of type check is used during overload resolution to exclude - // contextually typed function and arrow expressions in the initial phase. - function checkExpression(node: Expression | QualifiedName, contextualMapper?: TypeMapper): Type { - var type = checkExpressionNode(node, contextualMapper); - if (contextualMapper && contextualMapper !== identityMapper && node.kind !== SyntaxKind.QualifiedName) { + function checkObjectLiteralMethod(node: MethodDeclaration, contextualMapper?: TypeMapper): Type { + var uninstantiatedType = checkFunctionExpressionOrObjectLiteralMethod(node, contextualMapper); + return instantiateTypeWithSingleGenericCallSignature(node, uninstantiatedType, contextualMapper); + } + + function instantiateTypeWithSingleGenericCallSignature(node: Expression | MethodDeclaration, type: Type, contextualMapper?: TypeMapper) { + if (contextualMapper && contextualMapper !== identityMapper) { var signature = getSingleCallSignature(type); if (signature && signature.typeParameters) { var contextualType = getContextualType(node); if (contextualType) { var contextualSignature = getSingleCallSignature(contextualType); if (contextualSignature && !contextualSignature.typeParameters) { - type = getOrCreateTypeFromSignature(instantiateSignatureInContextOf(signature, contextualSignature, contextualMapper)); + return getOrCreateTypeFromSignature(instantiateSignatureInContextOf(signature, contextualSignature, contextualMapper)); } } } } + return type; + } + + function checkExpression(node: Expression, contextualMapper?: TypeMapper): Type { + return checkExpressionOrQualifiedName(node, contextualMapper); + } + + // Checks an expression and returns its type. The contextualMapper parameter serves two purposes: When + // contextualMapper is not undefined and not equal to the identityMapper function object it indicates that the + // expression is being inferentially typed (section 4.12.2 in spec) and provides the type mapper to use in + // conjunction with the generic contextual type. When contextualMapper is equal to the identityMapper function + // object, it serves as an indicator that all contained function and arrow expressions should be considered to + // have the wildcard function type; this form of type check is used during overload resolution to exclude + // contextually typed function and arrow expressions in the initial phase. + function checkExpressionOrQualifiedName(node: Expression | QualifiedName, contextualMapper?: TypeMapper): Type { + var type: Type; + if (node.kind == SyntaxKind.QualifiedName) { + type = checkQualifiedName(node); + } + else { + var uninstantiatedType = checkExpressionWorker(node, contextualMapper); + type = instantiateTypeWithSingleGenericCallSignature(node, uninstantiatedType, contextualMapper); + } + if (isConstEnumObjectType(type)) { // enum object type for const enums are only permitted in: // - 'left' in property access @@ -6837,7 +6936,7 @@ module ts { return type; } - function checkExpressionNode(node: Expression | QualifiedName, contextualMapper: TypeMapper): Type { + function checkExpressionWorker(node: Expression, contextualMapper: TypeMapper): Type { switch (node.kind) { case SyntaxKind.Identifier: return checkIdentifier(node); @@ -6859,8 +6958,6 @@ module ts { return stringType; case SyntaxKind.RegularExpressionLiteral: return globalRegExpType; - case SyntaxKind.QualifiedName: - return checkQualifiedName(node); case SyntaxKind.ArrayLiteralExpression: return checkArrayLiteral(node, contextualMapper); case SyntaxKind.ObjectLiteralExpression: @@ -6880,7 +6977,7 @@ module ts { return checkExpression((node).expression); case SyntaxKind.FunctionExpression: case SyntaxKind.ArrowFunction: - return checkFunctionExpression(node, contextualMapper); + return checkFunctionExpressionOrObjectLiteralMethod(node, contextualMapper); case SyntaxKind.TypeOfExpression: return checkTypeOfExpression(node); case SyntaxKind.DeleteExpression: @@ -7554,6 +7651,9 @@ module ts { function checkBlock(node: Block) { forEach(node.statements, checkSourceElement); + if (isFunctionBlock(node) || node.kind === SyntaxKind.ModuleBlock) { + checkFunctionExpressionBodies(node); + } } function checkCollisionWithArgumentsInGeneratedCode(node: SignatureDeclaration) { @@ -7922,7 +8022,9 @@ module ts { } function checkThrowStatement(node: ThrowStatement) { - checkExpression(node.expression); + if (node.expression) { + checkExpression(node.expression); + } } function checkTryStatement(node: TryStatement) { @@ -8061,7 +8163,7 @@ module ts { } // Check that base type can be evaluated as expression - checkExpression(baseTypeNode.typeName); + checkExpressionOrQualifiedName(baseTypeNode.typeName); } var implementedTypeNodes = getClassImplementedTypeNodes(node); @@ -8550,7 +8652,7 @@ module ts { // ensure it can be evaluated as an expression var moduleName = getFirstIdentifier(node.moduleReference); if (resolveEntityName(node, moduleName, SymbolFlags.Value | SymbolFlags.Namespace).flags & SymbolFlags.Namespace) { - checkExpression(node.moduleReference); + checkExpressionOrQualifiedName(node.moduleReference); } else { error(moduleName, Diagnostics.Module_0_is_hidden_by_a_local_declaration_with_the_same_name, declarationNameToString(moduleName)); @@ -8648,10 +8750,8 @@ module ts { case SyntaxKind.FunctionDeclaration: return checkFunctionDeclaration(node); case SyntaxKind.Block: - return checkBlock(node); - case SyntaxKind.FunctionBlock: case SyntaxKind.ModuleBlock: - return checkBody(node); + return checkBlock(node); case SyntaxKind.VariableStatement: return checkVariableStatement(node); case SyntaxKind.ExpressionStatement: @@ -8715,9 +8815,14 @@ module ts { case SyntaxKind.FunctionExpression: case SyntaxKind.ArrowFunction: forEach((node).parameters, checkFunctionExpressionBodies); - checkFunctionExpressionBody(node); + checkFunctionExpressionOrObjectLiteralMethodBody(node); break; case SyntaxKind.Method: + forEach((node).parameters, checkFunctionExpressionBodies); + if (isObjectLiteralMethod(node)) { + checkFunctionExpressionOrObjectLiteralMethodBody(node); + } + break; case SyntaxKind.Constructor: case SyntaxKind.GetAccessor: case SyntaxKind.SetAccessor: @@ -8750,7 +8855,6 @@ module ts { case SyntaxKind.BinaryExpression: case SyntaxKind.ConditionalExpression: case SyntaxKind.Block: - case SyntaxKind.FunctionBlock: case SyntaxKind.ModuleBlock: case SyntaxKind.VariableStatement: case SyntaxKind.ExpressionStatement: @@ -8781,11 +8885,6 @@ module ts { } } - function checkBody(node: Block) { - checkBlock(node); - checkFunctionExpressionBodies(node); - } - // Fully type check a source file and collect the relevant diagnostics. function checkSourceFile(node: SourceFile) { var links = getNodeLinks(node); @@ -8849,20 +8948,6 @@ module ts { // Language service support - function getNodeAtPosition(sourceFile: SourceFile, position: number): Node { - function findChildAtPosition(parent: Node): Node { - var child = forEachChild(parent, node => { - if (position >= node.pos && position <= node.end && position >= getTokenPosOfNode(node)) { - return findChildAtPosition(node); - } - }); - return child || parent; - } - if (position < sourceFile.pos) position = sourceFile.pos; - if (position > sourceFile.end) position = sourceFile.end; - return findChildAtPosition(sourceFile); - } - function isInsideWithStatementBody(node: Node): boolean { if (node) { while (node.parent) { @@ -9183,7 +9268,7 @@ module ts { // This is necessary as an identifier in short-hand property assignment can contains two meaning: // property name and property value. if (location && location.kind === SyntaxKind.ShorthandPropertyAssignment) { - return resolveEntityName(location, (location).name, SymbolFlags.Value); + return resolveEntityName(location, (location).name, SymbolFlags.Value); } return undefined; } diff --git a/src/compiler/core.ts b/src/compiler/core.ts index 6bbf9a13d034a..8dfc0d59ea9f7 100644 --- a/src/compiler/core.ts +++ b/src/compiler/core.ts @@ -28,15 +28,15 @@ module ts { export interface StringSet extends Map { } export function forEach(array: T[], callback: (element: T) => U): U { - var result: U; if (array) { for (var i = 0, len = array.length; i < len; i++) { - if (result = callback(array[i])) { - break; + var result = callback(array[i]); + if (result) { + return result; } } } - return result; + return undefined; } export function contains(array: T[], value: T): boolean { diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 18db6c6d7f6f7..c7edacaba354f 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -2,6 +2,7 @@ /// /// /// +/// module ts { interface EmitTextWriter { @@ -2281,27 +2282,31 @@ module ts { emit(node.expression); write("]"); } - - function emitPropertyAssignment(node: PropertyDeclaration) { + + function emitMethod(node: MethodDeclaration) { + if (!isObjectLiteralMethod(node)) { + return; + } emitLeadingComments(node); emit(node.name); - write(": "); - emit(node.initializer); + if (compilerOptions.target < ScriptTarget.ES6) { + write(": function "); + } + emitSignatureAndBody(node); emitTrailingComments(node); } - function emitDownlevelShorthandPropertyAssignment(node: ShorthandPropertyDeclaration) { + function emitPropertyAssignment(node: PropertyDeclaration) { emitLeadingComments(node); - // Emit identifier as an identifier emit(node.name); write(": "); - // Even though this is stored as identifier treat it as an expression - // Short-hand, { x }, is equivalent of normal form { x: x } - emitExpressionIdentifier(node.name); + emit(node.initializer); emitTrailingComments(node); } - function emitShorthandPropertyAssignment(node: ShorthandPropertyDeclaration) { + function emitShorthandPropertyAssignment(node: ShorthandPropertyAssignment) { + emitLeadingComments(node); + emit(node.name); // If short-hand property has a prefix, then regardless of the target version, we will emit it as normal property assignment. For example: // module m { // export var y; @@ -2310,16 +2315,14 @@ module ts { // export var obj = { y }; // } // The short-hand property in obj need to emit as such ... = { y : m.y } regardless of the TargetScript version - var prefix = resolver.getExpressionNamePrefix(node.name); - if (prefix) { - emitDownlevelShorthandPropertyAssignment(node); - } - // If short-hand property has no prefix, emit it as short-hand. - else { - emitLeadingComments(node); - emit(node.name); - emitTrailingComments(node); + if (compilerOptions.target < ScriptTarget.ES6 || resolver.getExpressionNamePrefix(node.name)) { + // Emit identifier as an identifier + write(": "); + // Even though this is stored as identifier treat it as an expression + // Short-hand, { x }, is equivalent of normal form { x: x } + emitExpressionIdentifier(node.name); } + emitTrailingComments(node); } function tryEmitConstantValue(node: PropertyAccessExpression | ElementAccessExpression): boolean { @@ -2868,8 +2871,8 @@ module ts { var p = properties[i]; if (p.kind === SyntaxKind.PropertyAssignment || p.kind === SyntaxKind.ShorthandPropertyAssignment) { // TODO(andersh): Computed property support - var propName = ((p).name); - emitDestructuringAssignment((p).initializer || propName, createPropertyAccess(value, propName)); + var propName = ((p).name); + emitDestructuringAssignment((p).initializer || propName, createPropertyAccess(value, propName)); } } } @@ -3139,17 +3142,17 @@ module ts { scopeEmitStart(node); increaseIndent(); - emitDetachedComments(node.body.kind === SyntaxKind.FunctionBlock ? (node.body).statements : node.body); + emitDetachedComments(node.body.kind === SyntaxKind.Block ? (node.body).statements : node.body); var startIndex = 0; - if (node.body.kind === SyntaxKind.FunctionBlock) { + if (node.body.kind === SyntaxKind.Block) { startIndex = emitDirectivePrologues((node.body).statements, /*startWithNewLine*/ true); } var outPos = writer.getTextPos(); emitCaptureThisForNodeIfNecessary(node); emitDefaultValueAssignments(node); emitRestParameter(node); - if (node.body.kind !== SyntaxKind.FunctionBlock && outPos === writer.getTextPos()) { + if (node.body.kind !== SyntaxKind.Block && outPos === writer.getTextPos()) { decreaseIndent(); write(" "); emitStart(node.body); @@ -3164,7 +3167,7 @@ module ts { emitEnd(node.body); } else { - if (node.body.kind === SyntaxKind.FunctionBlock) { + if (node.body.kind === SyntaxKind.Block) { emitLinesStartingAt((node.body).statements, startIndex); } else { @@ -3177,7 +3180,7 @@ module ts { } emitTempDeclarations(/*newLine*/ true); writeLine(); - if (node.body.kind === SyntaxKind.FunctionBlock) { + if (node.body.kind === SyntaxKind.Block) { emitLeadingCommentsOfPosition((node.body).statements.end); decreaseIndent(); emitToken(SyntaxKind.CloseBraceToken,(node.body).statements.end); @@ -3812,6 +3815,8 @@ module ts { return emitIdentifier(node); case SyntaxKind.Parameter: return emitParameter(node); + case SyntaxKind.Method: + return emitMethod(node); case SyntaxKind.GetAccessor: case SyntaxKind.SetAccessor: return emitAccessor(node); @@ -3849,6 +3854,8 @@ module ts { return emitObjectLiteral(node); case SyntaxKind.PropertyAssignment: return emitPropertyAssignment(node); + case SyntaxKind.ShorthandPropertyAssignment: + return emitShorthandPropertyAssignment(node); case SyntaxKind.ComputedPropertyName: return emitComputedPropertyName(node); case SyntaxKind.PropertyAccessExpression: @@ -3888,7 +3895,6 @@ module ts { case SyntaxKind.Block: case SyntaxKind.TryBlock: case SyntaxKind.FinallyBlock: - case SyntaxKind.FunctionBlock: case SyntaxKind.ModuleBlock: return emitBlock(node); case SyntaxKind.VariableStatement: @@ -3944,23 +3950,6 @@ module ts { case SyntaxKind.SourceFile: return emitSourceFile(node); } - - // Emit node which needs to be emitted differently depended on ScriptTarget - if (compilerOptions.target < ScriptTarget.ES6) { - // Emit node down-level - switch (node.kind) { - case SyntaxKind.ShorthandPropertyAssignment: - return emitDownlevelShorthandPropertyAssignment(node); - } - } - else { - // Emit node natively - Debug.assert(compilerOptions.target >= ScriptTarget.ES6, "Invalid ScriptTarget. We should emit as ES6 or above"); - switch (node.kind) { - case SyntaxKind.ShorthandPropertyAssignment: - return emitShorthandPropertyAssignment(node); - } - } } function hasDetachedComments(pos: number) { diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index f803a1efa823f..c1c2ebbef2ba5 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -9,6 +9,33 @@ module ts { return node.end - node.pos; } + function hasFlag(val: number, flag: number): boolean { + return (val & flag) !== 0; + } + + // Returns true if this node contains a parse error anywhere underneath it. + export function containsParseError(node: Node): boolean { + if (!hasFlag(node.parserContextFlags, ParserContextFlags.HasPropagatedChildContainsErrorFlag)) { + // A node is considered to contain a parse error if: + // a) the parser explicitly marked that it had an error + // b) any of it's children reported that it had an error. + var val = hasFlag(node.parserContextFlags, ParserContextFlags.ContainsError) || + forEachChild(node, containsParseError); + + // If so, mark ourselves accordingly. + if (val) { + node.parserContextFlags |= ParserContextFlags.ContainsError; + } + + // Also mark that we've propogated the child information to this node. This way we can + // always consult the bit directly on this node without needing to check its children + // again. + node.parserContextFlags |= ParserContextFlags.HasPropagatedChildContainsErrorFlag; + } + + return hasFlag(node.parserContextFlags, ParserContextFlags.ContainsError); + } + export function getNodeConstructor(kind: SyntaxKind): new () => Node { return nodeConstructors[kind] || (nodeConstructors[kind] = objectAllocator.getNodeConstructor(kind)); } @@ -39,21 +66,34 @@ module ts { return node.pos; } + export function isMissingNode(node: Node) { + return node.pos === node.end && node.kind !== SyntaxKind.EndOfFileToken; + } + export function getTokenPosOfNode(node: Node, sourceFile?: SourceFile): number { // With nodes that have no width (i.e. 'Missing' nodes), we actually *don't* // want to skip trivia because this will launch us forward to the next token. - if (node.pos === node.end) { + if (isMissingNode(node)) { return node.pos; } + return skipTrivia((sourceFile || getSourceFileOfNode(node)).text, node.pos); } export function getSourceTextOfNodeFromSourceFile(sourceFile: SourceFile, node: Node): string { + if (isMissingNode(node)) { + return ""; + } + var text = sourceFile.text; return text.substring(skipTrivia(text, node.pos), node.end); } export function getTextOfNodeFromSourceText(sourceText: string, node: Node): string { + if (isMissingNode(node)) { + return ""; + } + return sourceText.substring(skipTrivia(sourceText, node.pos), node.end); } @@ -192,19 +232,29 @@ module ts { // a truthy value, iteration stops and that value is returned. Otherwise, undefined is returned. export function forEachChild(node: Node, cbNode: (node: Node) => T, cbNodes?: (nodes: Node[]) => T): T { function child(node: Node): T { - if (node) return cbNode(node); + if (node) { + return cbNode(node); + } } function children(nodes: Node[]) { if (nodes) { - if (cbNodes) return cbNodes(nodes); - var result: T; + if (cbNodes) { + return cbNodes(nodes); + } + for (var i = 0, len = nodes.length; i < len; i++) { - if (result = cbNode(nodes[i])) break; + var result = cbNode(nodes[i]) + if (result) { + return result; + } } - return result; + + return undefined; } } - if (!node) return; + if (!node) { + return; + } switch (node.kind) { case SyntaxKind.QualifiedName: return child((node).left) || @@ -309,7 +359,6 @@ module ts { case SyntaxKind.Block: case SyntaxKind.TryBlock: case SyntaxKind.FinallyBlock: - case SyntaxKind.FunctionBlock: case SyntaxKind.ModuleBlock: return children((node).statements); case SyntaxKind.SourceFile: @@ -428,7 +477,6 @@ module ts { case SyntaxKind.ReturnStatement: return visitor(node); case SyntaxKind.Block: - case SyntaxKind.FunctionBlock: case SyntaxKind.IfStatement: case SyntaxKind.DoStatement: case SyntaxKind.WhileStatement: @@ -470,6 +518,14 @@ module ts { return false; } + export function isFunctionBlock(node: Node) { + return node && node.kind === SyntaxKind.Block && isAnyFunction(node.parent); + } + + export function isObjectLiteralMethod(node: Node) { + return node && node.kind === SyntaxKind.Method && node.parent.kind === SyntaxKind.ObjectLiteralExpression; + } + export function getContainingFunction(node: Node): FunctionLikeDeclaration { while (true) { node = node.parent; @@ -871,12 +927,6 @@ module ts { } }; - const enum LookAheadMode { - NotLookingAhead, - NoErrorYet, - Error - } - export interface ReferencePathMatchResult { fileReference?: FileReference diagnosticMessage?: DiagnosticMessage @@ -953,17 +1003,13 @@ module ts { } export function createSourceFile(filename: string, sourceText: string, languageVersion: ScriptTarget, version: string, isOpen: boolean = false): SourceFile { - var scanner: Scanner; var token: SyntaxKind; var parsingContext: ParsingContext; - var commentRanges: TextRange[]; var identifiers: Map = {}; var identifierCount = 0; var nodeCount = 0; var lineStarts: number[]; - var lookAheadMode = LookAheadMode.NotLookingAhead; - // Flags that dictate what parsing context we're in. For example: // Whether or not we are in strict parsing mode. All that changes in strict parsing mode is // that some tokens that would be considered identifiers may be considered keywords. When @@ -1007,8 +1053,41 @@ module ts { // // Getting this all correct is tricky and requires careful reading of the grammar to // understand when these values should be changed versus when they should be inherited. + // + // Note: it should not be necessary to save/restore these flags during speculative/lookahead + // parsing. These context flags are naturally stored and restored through normal recursive + // descent parsing and unwinding. var contextFlags: ParserContextFlags = 0; + // Whether or not we've had a parse error since creating the last AST node. If we have + // encountered an error, it will be stored on the next AST node we create. Parse errors + // can be broken down into three categories: + // + // 1) An error that occurred during scanning. For example, an unterminated literal, or a + // character that was completely not understood. + // + // 2) A token was expected, but was not present. This type of error is commonly produced + // by the 'parseExpected' function. + // + // 3) A token was present that no parsing function was able to consume. This type of error + // only occurs in the 'abortParsingListOrMoveToNextToken' function when the parser + // decides to skip the token. + // + // In all of these cases, we want to mark the next node as having had an error before it. + // With this mark, we can know in incremental settings if this node can be reused, or if + // we have to reparse it. If we don't keep this information around, we may just reuse the + // node. in that event we would then not produce the same errors as we did before, causing + // significant confusion problems. + // + // Note: it is necessary that this value be saved/restored during speculative/lookahead + // parsing. During lookahead parsing, we will often create a node. That node will have + // this value attached, and then this value will be set back to 'false'. If we decide to + // rewind, we must get back to the same value we had prior to the lookahead. + // + // Note: any errors at the end of the file that do not precede a regular node, should get + // attached to the EOF token. + var parseErrorBeforeNextFinishedNode = false; + function setContextFlag(val: Boolean, flag: ParserContextFlags) { if (val) { contextFlags |= flag; @@ -1110,27 +1189,23 @@ module ts { return getPositionFromLineAndCharacter(getLineStarts(), line, character); } - function parseErrorAtCurrentToken(message: DiagnosticMessage, arg0?: any, arg1?: any, arg2?: any): void { + function parseErrorAtCurrentToken(message: DiagnosticMessage, arg0?: any): void { var start = scanner.getTokenPos(); var length = scanner.getTextPos() - start; - parseErrorAtPosition(start, length, message, arg0, arg1, arg2); + parseErrorAtPosition(start, length, message, arg0); } - function parseErrorAtPosition(start: number, length: number, message: DiagnosticMessage, arg0?: any, arg1?: any, arg2?: any): void { - var lastErrorPosition = sourceFile.parseDiagnostics.length - ? sourceFile.parseDiagnostics[sourceFile.parseDiagnostics.length - 1].start - : -1; - + function parseErrorAtPosition(start: number, length: number, message: DiagnosticMessage, arg0?: any): void { // Don't report another error if it would just be at the same position as the last error. - if (start !== lastErrorPosition) { - var diagnostic = createFileDiagnostic(sourceFile, start, length, message, arg0, arg1, arg2); - sourceFile.parseDiagnostics.push(diagnostic); + var lastError = lastOrUndefined(sourceFile.parseDiagnostics); + if (!lastError || start !== lastError.start) { + sourceFile.parseDiagnostics.push(createFileDiagnostic(sourceFile, start, length, message, arg0)); } - if (lookAheadMode === LookAheadMode.NoErrorYet) { - lookAheadMode = LookAheadMode.Error; - } + // Mark that we've encountered an error. We'll set an appropriate bit on the next + // node we finish so that it can't be reused incrementally. + parseErrorBeforeNextFinishedNode = true; } function scanError(message: DiagnosticMessage) { @@ -1138,10 +1213,6 @@ module ts { parseErrorAtPosition(pos, 0, message); } - function onComment(pos: number, end: number) { - if (commentRanges) commentRanges.push({ pos: pos, end: end }); - } - function getNodePos(): number { return scanner.getStartPos(); } @@ -1170,57 +1241,52 @@ module ts { return token = scanner.reScanTemplateToken(); } - function lookAheadHelper(callback: () => T, alwaysResetState: boolean): T { + function speculationHelper(callback: () => T, isLookAhead: boolean): T { // Keep track of the state we'll need to rollback to if lookahead fails (or if the // caller asked us to always reset our state). var saveToken = token; - var saveSyntacticErrorsLength = sourceFile.parseDiagnostics.length; - - // Keep track of the current look ahead mode (this matters if we have nested - // speculative parsing). - var saveLookAheadMode = lookAheadMode; - - // Mark that we're in speculative parsing and then try to parse out whatever code - // the callback wants. - lookAheadMode = LookAheadMode.NoErrorYet; - var result = callback(); - - // If we switched from 1 to -1 then a parse error occurred during the callback. - // If that's the case, then we want to act as if we never got any result at all. - Debug.assert(lookAheadMode === LookAheadMode.Error || lookAheadMode === LookAheadMode.NoErrorYet); - if (lookAheadMode === LookAheadMode.Error) { - result = undefined; - } - - // Now restore as appropriate. - lookAheadMode = saveLookAheadMode; - if (!result || alwaysResetState) { + var saveParseDiagnosticsLength = sourceFile.parseDiagnostics.length; + var saveParseErrorBeforeNextFinishedNode = parseErrorBeforeNextFinishedNode; + + // Note: it is not actually necessary to save/restore the context flags here. That's + // because the saving/restorating of these flags happens naturally through the recursive + // descent nature of our parser. However, we still store this here just so we can + // assert that that invariant holds. + var saveContextFlags = contextFlags; + + // If we're only looking ahead, then tell the scanner to only lookahead as well. + // Otherwise, if we're actually speculatively parsing, then tell the scanner to do the + // same. + var result = isLookAhead + ? scanner.lookAhead(callback) + : scanner.tryScan(callback); + + Debug.assert(saveContextFlags === contextFlags); + + // If our callback returned something 'falsy' or we're just looking ahead, + // then unconditionally restore us to where we were. + if (!result || isLookAhead) { token = saveToken; - sourceFile.parseDiagnostics.length = saveSyntacticErrorsLength; + sourceFile.parseDiagnostics.length = saveParseDiagnosticsLength; + parseErrorBeforeNextFinishedNode = saveParseErrorBeforeNextFinishedNode; } return result; } + // Invokes the provided callback then unconditionally restores the parser to the state it + // was in immediately prior to invoking the callback. The result of invoking the callback + // is returned from this function. function lookAhead(callback: () => T): T { - var result: T; - scanner.tryScan(() => { - result = lookAheadHelper(callback, /*alwaysResetState:*/ true); - - // Returning false here indicates to the scanner that it should always jump - // back to where it started. This makes sense as 'lookahead' acts as if - // neither the parser nor scanner was affected by the operation. - // - // Note: the rewinding of the parser state is already handled in lookAheadHelper - // (because we passed 'true' for alwaysResetState). - return false; - }); - - return result; + return speculationHelper(callback, /*isLookAhead:*/ true); } - + + // Invokes the provided callback. If the callback returns something falsy, then it restores + // the parser to the state it was in immediately prior to invoking the callback. If the + // callback returns something truthy, then the parser state is not rolled back. The result + // of invoking the callback is returned from this function. function tryParse(callback: () => T): T { - return scanner.tryScan(() => lookAheadHelper(callback, /*alwaysResetState:*/ false)); + return speculationHelper(callback, /*isLookAhead:*/ false); } function isIdentifier(): boolean { @@ -1311,6 +1377,14 @@ module ts { node.parserContextFlags = contextFlags; } + // Keep track on the node if we encountered an error while parsing it. If we did, then + // we cannot reuse the node incrementally. Once we've marked this node, clear out the + // flag so that we don't mark any subsequent nodes. + if (parseErrorBeforeNextFinishedNode) { + parseErrorBeforeNextFinishedNode = false; + node.parserContextFlags |= ParserContextFlags.ContainsError; + } + return node; } @@ -1322,10 +1396,6 @@ module ts { parseErrorAtCurrentToken(diagnosticMessage, arg0); } - return createMissingNodeWithoutError(kind); - } - - function createMissingNodeWithoutError(kind: SyntaxKind) { var result = createNode(kind, scanner.getStartPos()); (result).text = ""; return finishNode(result); @@ -1822,7 +1892,7 @@ module ts { var node = createNode(SyntaxKind.TypeReference); node.typeName = parseEntityName(/*allowReservedWords*/ false, Diagnostics.Type_expected); if (!scanner.hasPrecedingLineBreak() && token === SyntaxKind.LessThanToken) { - node.typeArguments = parseTypeArguments(); + node.typeArguments = parseBracketedList(ParsingContext.TypeArguments, parseType, SyntaxKind.LessThanToken, SyntaxKind.GreaterThanToken); } return finishNode(node); } @@ -1929,19 +1999,14 @@ module ts { return parseInitializer(/*inParameter*/ true); } - function parseSignature(yieldAndGeneratorParameterContext: boolean): ParsedSignature { - var signature = {}; - fillSignature(SyntaxKind.ColonToken, yieldAndGeneratorParameterContext, signature); - return signature; - } - function fillSignature( returnToken: SyntaxKind, yieldAndGeneratorParameterContext: boolean, - signature: ParsedSignature): void { + requireCompleteParameterList: boolean, + signature: SignatureDeclaration): void { var returnTokenRequired = returnToken === SyntaxKind.EqualsGreaterThanToken; signature.typeParameters = parseTypeParameters(); - signature.parameters = parseParameterList(yieldAndGeneratorParameterContext); + signature.parameters = parseParameterList(yieldAndGeneratorParameterContext, requireCompleteParameterList); if (returnTokenRequired) { parseExpected(returnToken); @@ -1956,7 +2021,7 @@ module ts { // have 'Yield' And 'GeneratorParameter' not in sync. i.e. any production calling // this FormalParameters production either always sets both to true, or always sets // both to false. As such we only have a single parameter to represent both. - function parseParameterList(yieldAndGeneratorParameterContext: boolean) { + function parseParameterList(yieldAndGeneratorParameterContext: boolean, requireCompleteParameterList: boolean) { // FormalParameters[Yield,GeneratorParameter] : // ... // @@ -1979,15 +2044,23 @@ module ts { setGeneratorParameterContext(yieldAndGeneratorParameterContext); var result = parseDelimitedList(ParsingContext.Parameters, parseParameter); - parseExpected(SyntaxKind.CloseParenToken); setYieldContext(savedYieldContext); setGeneratorParameterContext(savedGeneratorParameterContext); + if (!parseExpected(SyntaxKind.CloseParenToken) && requireCompleteParameterList) { + // Caller insisted that we had to end with a ) We didn't. So just return + // undefined here. + return undefined; + } + return result; } - return createMissingList(); + // We didn't even have an open paren. If the caller requires a complete parameter list, + // we definitely can't provide that. However, if they're ok with an incomplete one, + // then just return an empty set of parameters. + return requireCompleteParameterList ? undefined : createMissingList(); } function parseSignatureMember(kind: SyntaxKind): SignatureDeclaration { @@ -1995,7 +2068,7 @@ module ts { if (kind === SyntaxKind.ConstructSignature) { parseExpected(SyntaxKind.NewKeyword); } - fillSignature(SyntaxKind.ColonToken, /*yieldAndGeneratorParameterContext:*/ false, node); + fillSignature(SyntaxKind.ColonToken, /*yieldAndGeneratorParameterContext:*/ false, /*requireCompleteParameterList:*/ false, node); parseSemicolon(); return finishNode(node); } @@ -2084,7 +2157,7 @@ module ts { // Method signatues don't exist in expression contexts. So they have neither // [Yield] nor [GeneratorParameter] - fillSignature(SyntaxKind.ColonToken, /*yieldAndGeneratorParameterContext:*/ false, method); + fillSignature(SyntaxKind.ColonToken, /*yieldAndGeneratorParameterContext:*/ false, /*requireCompleteParameterList:*/ false, method); parseSemicolon(); return finishNode(method); @@ -2185,7 +2258,7 @@ module ts { if (kind === SyntaxKind.ConstructorType) { parseExpected(SyntaxKind.NewKeyword); } - fillSignature(SyntaxKind.EqualsGreaterThanToken, /*yieldAndGeneratorParameterContext:*/ false, node); + fillSignature(SyntaxKind.EqualsGreaterThanToken, /*yieldAndGeneratorParameterContext:*/ false, /*requireCompleteParameterList:*/ false, node); return finishNode(node); } @@ -2682,7 +2755,18 @@ module ts { function parseParenthesizedArrowFunctionExpressionHead(allowAmbiguity: boolean): FunctionExpression { var node = createNode(SyntaxKind.ArrowFunction); // Arrow functions are never generators. - fillSignature(SyntaxKind.ColonToken, /*yieldAndGeneratorParameterContext:*/ false, node); + // + // If we're speculatively parsing a signature for a parenthesized arrow function, then + // we have to have a complete parameter list. Otherwise we might see something like + // a => (b => c) + // And think that "(b =>" was actually a parenthesized arrow function with a missing + // close paren. + fillSignature(SyntaxKind.ColonToken, /*yieldAndGeneratorParameterContext:*/ false, /*requireCompleteParameterList:*/ !allowAmbiguity, node); + + // If we couldn't get parameters, we definitely could not parse out an arrow function. + if (!node.parameters) { + return undefined; + } // Parsing a signature isn't enough. // Parenthesized arrow signatures often look like other valid expressions. @@ -3053,8 +3137,11 @@ module ts { expression = parseMemberExpressionRest(expression); if (token === SyntaxKind.LessThanToken) { - // Might be arithmetic, or it might be a type argument list. - var typeArguments = tryParse(parseTypeArgumentsAndOpenParen); + // See if this is the start of a generic invocation. If so, consume it and + // keep checking for postfix expressions. Otherwise, it's just a '<' that's + // part of an arithmetic expression. Break out so we consume it higher in the + // stack. + var typeArguments = tryParse(parseTypeArgumentsInExpression); if (!typeArguments) { return expression; } @@ -3062,18 +3149,14 @@ module ts { var callExpr = createNode(SyntaxKind.CallExpression, expression.pos); callExpr.expression = expression; callExpr.typeArguments = typeArguments; - callExpr.arguments = parseDelimitedList(ParsingContext.ArgumentExpressions, parseArgumentExpression); - parseExpected(SyntaxKind.CloseParenToken); + callExpr.arguments = parseArgumentList(); expression = finishNode(callExpr); continue; } - - if (token === SyntaxKind.OpenParenToken) { + else if (token === SyntaxKind.OpenParenToken) { var callExpr = createNode(SyntaxKind.CallExpression, expression.pos); callExpr.expression = expression; - parseExpected(SyntaxKind.OpenParenToken); - callExpr.arguments = parseDelimitedList(ParsingContext.ArgumentExpressions, parseArgumentExpression); - parseExpected(SyntaxKind.CloseParenToken); + callExpr.arguments = parseArgumentList(); expression = finishNode(callExpr); continue; } @@ -3082,33 +3165,64 @@ module ts { } } - function parseTypeArgumentsAndOpenParen(): NodeArray { - var result = parseTypeArguments(); + function parseArgumentList() { parseExpected(SyntaxKind.OpenParenToken); + var result = parseDelimitedList(ParsingContext.ArgumentExpressions, parseArgumentExpression); + parseExpected(SyntaxKind.CloseParenToken); return result; } - function parseTypeArguments(): NodeArray { - // We pass parseSingleTypeArgument instead of parseType as the element parser - // because parseSingleTypeArgument knows how to parse a missing type argument. - // This is useful for signature help. parseType has the disadvantage that when - // it sees a missing type, it changes the LookAheadMode to Error, and the result - // is a broken binary expression, which breaks signature help. - return parseBracketedList(ParsingContext.TypeArguments, parseSingleTypeArgument, SyntaxKind.LessThanToken, SyntaxKind.GreaterThanToken); - } + function parseTypeArgumentsInExpression() { + if (!parseOptional(SyntaxKind.LessThanToken)) { + return undefined; + } - function parseSingleTypeArgument(): TypeNode { - // Be resilient to something like: Foo<,,>(); - // We want to parse this out as a type argument list (esp. for signature help), and we - // don't want to rollback just because we were missing a type arg. The grammar checker - // will report the actual error later on. - if (token === SyntaxKind.CommaToken) { - var result = createNode(SyntaxKind.TypeReference); - result.typeName = createMissingNodeWithoutError(SyntaxKind.Identifier); - return finishNode(result); + var typeArguments = parseDelimitedList(ParsingContext.TypeArguments, parseType); + if (!parseExpected(SyntaxKind.GreaterThanToken)) { + // If it doesn't have the closing > then it's definitely not an type argument list. + return undefined; } - return parseType(); + // If we have a '<', then only parse this as a arugment list if the type arguments + // are complete and we have an open paren. if we don't, rewind and return nothing. + return typeArguments && canFollowTypeArgumentsInExpression() + ? typeArguments + : undefined; + } + + function canFollowTypeArgumentsInExpression(): boolean { + switch (token) { + case SyntaxKind.OpenParenToken: // foo( + // this case are the only case where this token can legally follow a type argument + // list. So we definitely want to treat this as a type arg list. + + case SyntaxKind.DotToken: // foo. + case SyntaxKind.CloseParenToken: // foo) + case SyntaxKind.CloseBracketToken: // foo] + case SyntaxKind.ColonToken: // foo: + case SyntaxKind.SemicolonToken: // foo; + case SyntaxKind.CommaToken: // foo, + case SyntaxKind.QuestionToken: // foo? + case SyntaxKind.EqualsEqualsToken: // foo == + case SyntaxKind.EqualsEqualsEqualsToken: // foo === + case SyntaxKind.ExclamationEqualsToken: // foo != + case SyntaxKind.ExclamationEqualsEqualsToken: // foo !== + case SyntaxKind.AmpersandAmpersandToken: // foo && + case SyntaxKind.BarBarToken: // foo || + case SyntaxKind.CaretToken: // foo ^ + case SyntaxKind.AmpersandToken: // foo & + case SyntaxKind.BarToken: // foo | + case SyntaxKind.CloseBraceToken: // foo } + case SyntaxKind.EndOfFileToken: // foo + // these cases can't legally follow a type arg list. However, they're not legal + // expressions either. The user is probably in the middle of a generic type. So + // treat it as such. + return true; + + default: + // Anything else treat as an expression. + return false; + } } function parsePrimaryExpression(): PrimaryExpression { @@ -3177,26 +3291,21 @@ module ts { return finishNode(node); } - function parsePropertyAssignment(): Declaration { - var nodePos = scanner.getStartPos(); + function parseObjectLiteralElement(): ObjectLiteralElement { + var fullStart = scanner.getStartPos(); + var initialToken = token; + + if (parseContextualModifier(SyntaxKind.GetKeyword) || parseContextualModifier(SyntaxKind.SetKeyword)) { + var kind = initialToken === SyntaxKind.GetKeyword ? SyntaxKind.GetAccessor : SyntaxKind.SetAccessor; + return parseAccessorDeclaration(kind, fullStart, /*modifiers*/undefined); + } + var asteriskToken = parseOptionalToken(SyntaxKind.AsteriskToken); var tokenIsIdentifier = isIdentifier(); var nameToken = token; var propertyName = parsePropertyName(); - var node: Declaration; if (asteriskToken || token === SyntaxKind.OpenParenToken || token === SyntaxKind.LessThanToken) { - node = createNode(SyntaxKind.PropertyAssignment, nodePos); - node.name = propertyName; - var sig = parseSignature(/*yieldAndGeneratorParameterContext:*/ !!asteriskToken); - - var body = parseFunctionBlock(!!asteriskToken, /* ignoreMissingOpenBrace */ false); - // do not propagate property name as name for function expression - // for scenarios like - // var x = 1; - // var y = { x() { } } - // otherwise this will bring y.x into the scope of x which is incorrect - (node).initializer = makeFunctionExpression(SyntaxKind.FunctionExpression, node.pos, asteriskToken, undefined, sig, body); - return finishNode(node); + return parseMethodDeclaration(fullStart, /*modifiers:*/ undefined, asteriskToken, propertyName, /*questionToken:*/ undefined, /*requireBlock:*/ true); } // Disallowing of optional property assignments happens in the grammar checker. @@ -3204,31 +3313,21 @@ module ts { // Parse to check if it is short-hand property assignment or normal property assignment if ((token === SyntaxKind.CommaToken || token === SyntaxKind.CloseBraceToken) && tokenIsIdentifier) { - var shorthandDeclaration = createNode(SyntaxKind.ShorthandPropertyAssignment, nodePos); + var shorthandDeclaration = createNode(SyntaxKind.ShorthandPropertyAssignment, fullStart); shorthandDeclaration.name = propertyName; shorthandDeclaration.questionToken = questionToken; return finishNode(shorthandDeclaration); } else { - var propertyDeclaration = createNode(SyntaxKind.PropertyAssignment, nodePos); - propertyDeclaration.name = propertyName; - propertyDeclaration.questionToken = questionToken; + var propertyAssignment = createNode(SyntaxKind.PropertyAssignment, fullStart); + propertyAssignment.name = propertyName; + propertyAssignment.questionToken = questionToken; parseExpected(SyntaxKind.ColonToken); - propertyDeclaration.initializer = allowInAnd(parseAssignmentExpressionOrHigher); - return finishNode(propertyDeclaration); + propertyAssignment.initializer = allowInAnd(parseAssignmentExpressionOrHigher); + return finishNode(propertyAssignment); } } - function parseObjectLiteralMember(): Declaration { - var initialPos = getNodePos(); - var initialToken = token; - if (parseContextualModifier(SyntaxKind.GetKeyword) || parseContextualModifier(SyntaxKind.SetKeyword)) { - var kind = initialToken === SyntaxKind.GetKeyword ? SyntaxKind.GetAccessor : SyntaxKind.SetAccessor; - return parseMemberAccessorDeclaration(kind, initialPos, /*modifiers*/ undefined); - } - return parsePropertyAssignment(); - } - function parseObjectLiteralExpression(): ObjectLiteralExpression { var node = createNode(SyntaxKind.ObjectLiteralExpression); parseExpected(SyntaxKind.OpenBraceToken); @@ -3236,7 +3335,7 @@ module ts { node.flags |= NodeFlags.MultiLine; } - node.properties = parseDelimitedList(ParsingContext.ObjectLiteralMembers, parseObjectLiteralMember); + node.properties = parseDelimitedList(ParsingContext.ObjectLiteralMembers, parseObjectLiteralElement); parseExpected(SyntaxKind.CloseBraceToken); return finishNode(node); } @@ -3250,7 +3349,7 @@ module ts { parseExpected(SyntaxKind.FunctionKeyword); node.asteriskToken = parseOptionalToken(SyntaxKind.AsteriskToken); node.name = node.asteriskToken ? doInYieldContext(parseOptionalIdentifier) : parseOptionalIdentifier(); - fillSignature(SyntaxKind.ColonToken, /*yieldAndGeneratorParameterContext:*/ !!node.asteriskToken, node); + fillSignature(SyntaxKind.ColonToken, /*yieldAndGeneratorParameterContext:*/ !!node.asteriskToken, /*requireCompleteParameterList:*/ false, node); node.body = parseFunctionBlock(/*allowYield:*/ !!node.asteriskToken, /* ignoreMissingOpenBrace */ false); return finishNode(node); } @@ -3259,29 +3358,15 @@ module ts { return isIdentifier() ? parseIdentifier() : undefined; } - function makeFunctionExpression(kind: SyntaxKind, pos: number, asteriskToken: Node, name: Identifier, sig: ParsedSignature, body: Block | Expression): FunctionExpression { - var node = createNode(kind, pos); - node.asteriskToken = asteriskToken; - node.name = name; - node.typeParameters = sig.typeParameters; - node.parameters = sig.parameters; - node.type = sig.type; - node.body = body; - return finishNode(node); - } - function parseNewExpression(): NewExpression { var node = createNode(SyntaxKind.NewExpression); parseExpected(SyntaxKind.NewKeyword); node.expression = parseMemberExpressionOrHigher(); - if (token === SyntaxKind.LessThanToken) { - node.typeArguments = tryParse(parseTypeArgumentsAndOpenParen); + node.typeArguments = tryParse(parseTypeArgumentsInExpression); + if (node.typeArguments || token === SyntaxKind.OpenParenToken) { + node.arguments = parseArgumentList(); } - if (node.typeArguments || parseOptional(SyntaxKind.OpenParenToken)) { - node.arguments = parseDelimitedList(ParsingContext.ArgumentExpressions, parseArgumentExpression); - parseExpected(SyntaxKind.CloseParenToken); - } return finishNode(node); } @@ -3302,7 +3387,7 @@ module ts { var savedYieldContext = inYieldContext(); setYieldContext(allowYield); - var block = parseBlock(SyntaxKind.FunctionBlock, ignoreMissingOpenBrace, /*checkForStrictMode*/ true); + var block = parseBlock(SyntaxKind.Block, ignoreMissingOpenBrace, /*checkForStrictMode*/ true); setYieldContext(savedYieldContext); @@ -3635,7 +3720,6 @@ module ts { case SyntaxKind.OpenBraceToken: return parseBlock(SyntaxKind.Block, /* ignoreMissingOpenBrace */ false, /*checkForStrictMode*/ false); case SyntaxKind.VarKeyword: - case SyntaxKind.LetKeyword: case SyntaxKind.ConstKeyword: // const here should always be parsed as const declaration because of check in 'isStatement' return parseVariableStatement(scanner.getStartPos(), /*modifiers:*/ undefined); @@ -3670,6 +3754,12 @@ module ts { return parseTryStatement(); case SyntaxKind.DebuggerKeyword: return parseDebuggerStatement(); + case SyntaxKind.LetKeyword: + // If let follows identifier on the same line, it is declaration parse it as variable statement + if (isLetDeclaration()) { + return parseVariableStatement(scanner.getStartPos(), /*modifiers:*/ undefined); + } + // Else parse it like identifier - fall through default: return isLabel() ? parseLabeledStatement() @@ -3679,7 +3769,7 @@ module ts { function parseFunctionBlockOrSemicolon(isGenerator: boolean): Block { if (token === SyntaxKind.OpenBraceToken) { - return parseFunctionBlock(isGenerator, /* ignoreMissingOpenBrace */ false); + return parseFunctionBlock(isGenerator, /*ignoreMissingOpenBrace:*/ false); } parseSemicolon(Diagnostics.or_expected); @@ -3797,7 +3887,7 @@ module ts { parseExpected(SyntaxKind.FunctionKeyword); node.asteriskToken = parseOptionalToken(SyntaxKind.AsteriskToken); node.name = parseIdentifier(); - fillSignature(SyntaxKind.ColonToken, /*yieldAndGeneratorParameterContext:*/ !!node.asteriskToken, node); + fillSignature(SyntaxKind.ColonToken, /*yieldAndGeneratorParameterContext:*/ !!node.asteriskToken, /*requireCompleteParameterList:*/ false, node); node.body = parseFunctionBlockOrSemicolon(!!node.asteriskToken); return finishNode(node); } @@ -3806,12 +3896,23 @@ module ts { var node = createNode(SyntaxKind.Constructor, pos); setModifiers(node, modifiers); parseExpected(SyntaxKind.ConstructorKeyword); - fillSignature(SyntaxKind.ColonToken, /*yieldAndGeneratorParameterContext:*/ false, node); + fillSignature(SyntaxKind.ColonToken, /*yieldAndGeneratorParameterContext:*/ false, /*requireCompleteParameterList:*/ false, node); node.body = parseFunctionBlockOrSemicolon(/*isGenerator:*/ false); return finishNode(node); } - function parsePropertyMemberDeclaration(fullStart: number, modifiers: ModifiersArray): ClassElement { + function parseMethodDeclaration(fullStart: number, modifiers: ModifiersArray, asteriskToken: Node, name: DeclarationName, questionToken: Node, requireBlock: boolean): MethodDeclaration { + var method = createNode(SyntaxKind.Method, fullStart); + setModifiers(method, modifiers); + method.asteriskToken = asteriskToken; + method.name = name; + method.questionToken = questionToken; + fillSignature(SyntaxKind.ColonToken, /*yieldAndGeneratorParameterContext:*/ !!asteriskToken, /*requireCompleteParameterList:*/ false, method); + method.body = requireBlock ? parseFunctionBlock(!!asteriskToken, /*ignoreMissingOpenBrace:*/ false) : parseFunctionBlockOrSemicolon(!!asteriskToken); + return finishNode(method); + } + + function parsePropertyOrMethodDeclaration(fullStart: number, modifiers: ModifiersArray): ClassElement { var asteriskToken = parseOptionalToken(SyntaxKind.AsteriskToken); var name = parsePropertyName(); @@ -3819,14 +3920,7 @@ module ts { // report an error in the grammar checker. var questionToken = parseOptionalToken(SyntaxKind.QuestionToken); if (asteriskToken || token === SyntaxKind.OpenParenToken || token === SyntaxKind.LessThanToken) { - var method = createNode(SyntaxKind.Method, fullStart); - setModifiers(method, modifiers); - method.asteriskToken = asteriskToken; - method.name = name; - method.questionToken = questionToken; - fillSignature(SyntaxKind.ColonToken, /*yieldAndGeneratorParameterContext:*/ !!asteriskToken, method); - method.body = parseFunctionBlockOrSemicolon(!!asteriskToken); - return finishNode(method); + return parseMethodDeclaration(fullStart, modifiers, asteriskToken, name, questionToken, /*requireBlock:*/ false); } else { var property = createNode(SyntaxKind.Property, fullStart); @@ -3844,11 +3938,11 @@ module ts { return parseInitializer(/*inParameter*/ false); } - function parseMemberAccessorDeclaration(kind: SyntaxKind, fullStart: number, modifiers: ModifiersArray): MethodDeclaration { - var node = createNode(kind, fullStart); + function parseAccessorDeclaration(kind: SyntaxKind, fullStart: number, modifiers: ModifiersArray): AccessorDeclaration { + var node = createNode(kind, fullStart); setModifiers(node, modifiers); node.name = parsePropertyName(); - fillSignature(SyntaxKind.ColonToken, /*yieldAndGeneratorParameterContext:*/ false, node); + fillSignature(SyntaxKind.ColonToken, /*yieldAndGeneratorParameterContext:*/ false, /*requireCompleteParameterList:*/ false, node); node.body = parseFunctionBlockOrSemicolon(/*isGenerator:*/ false); return finishNode(node); } @@ -3936,10 +4030,10 @@ module ts { var fullStart = getNodePos(); var modifiers = parseModifiers(); if (parseContextualModifier(SyntaxKind.GetKeyword)) { - return parseMemberAccessorDeclaration(SyntaxKind.GetAccessor, fullStart, modifiers); + return parseAccessorDeclaration(SyntaxKind.GetAccessor, fullStart, modifiers); } if (parseContextualModifier(SyntaxKind.SetKeyword)) { - return parseMemberAccessorDeclaration(SyntaxKind.SetAccessor, fullStart, modifiers); + return parseAccessorDeclaration(SyntaxKind.SetAccessor, fullStart, modifiers); } if (token === SyntaxKind.ConstructorKeyword) { return parseConstructorDeclaration(fullStart, modifiers); @@ -3951,7 +4045,7 @@ module ts { // the [ token can start an index signature or a computed property name if (isIdentifierOrKeyword() || token === SyntaxKind.StringLiteral || token === SyntaxKind.NumericLiteral || token === SyntaxKind.AsteriskToken || token === SyntaxKind.OpenBracketToken) { - return parsePropertyMemberDeclaration(fullStart, modifiers); + return parsePropertyOrMethodDeclaration(fullStart, modifiers); } // 'isClassMemberStart' should have hinted not to attempt parsing. @@ -4159,14 +4253,21 @@ module ts { parseSemicolon(); return finishNode(node); } + + function isLetDeclaration() { + // It is let declaration if in strict mode or next token is identifier on same line. + // otherwise it needs to be treated like identifier + return inStrictModeContext() || lookAhead(nextTokenIsIdentifierOnSameLine); + } function isDeclarationStart(): boolean { switch (token) { case SyntaxKind.VarKeyword: - case SyntaxKind.LetKeyword: case SyntaxKind.ConstKeyword: case SyntaxKind.FunctionKeyword: return true; + case SyntaxKind.LetKeyword: + return isLetDeclaration(); case SyntaxKind.ClassKeyword: case SyntaxKind.InterfaceKeyword: case SyntaxKind.EnumKeyword: @@ -4267,14 +4368,25 @@ module ts { } function processReferenceComments(): ReferenceComments { + var triviaScanner = createScanner(languageVersion, /*skipTrivia*/false, sourceText); var referencedFiles: FileReference[] = []; var amdDependencies: string[] = []; var amdModuleName: string; - commentRanges = []; - token = scanner.scan(); - for (var i = 0; i < commentRanges.length; i++) { - var range = commentRanges[i]; + // Keep scanning all the leading trivia in the file until we get to something that + // isn't trivia. Any single line comment will be analyzed to see if it is a + // reference comment. + while (true) { + var kind = triviaScanner.scan(); + if (kind === SyntaxKind.WhitespaceTrivia || kind === SyntaxKind.NewLineTrivia || kind === SyntaxKind.MultiLineCommentTrivia) { + continue; + } + if (kind !== SyntaxKind.SingleLineCommentTrivia) { + break; + } + + var range = { pos: triviaScanner.getTokenPos(), end: triviaScanner.getTextPos() }; + var comment = sourceText.substring(range.pos, range.end); var referencePathMatchResult = getFileReferenceFromReferencePath(comment, range); if (referencePathMatchResult) { @@ -4305,7 +4417,7 @@ module ts { } } } - commentRanges = undefined; + return { referencedFiles, amdDependencies, @@ -4341,9 +4453,10 @@ module ts { return syntacticDiagnostics; } - scanner = createScanner(languageVersion, /*skipTrivia*/ true, sourceText, scanError, onComment); + var scanner = createScanner(languageVersion, /*skipTrivia*/ true, sourceText, scanError); var sourceFile = createNode(SyntaxKind.SourceFile); + if (fileExtensionIs(filename, ".d.ts")) { sourceFile.flags = NodeFlags.DeclarationFile; } @@ -4366,6 +4479,9 @@ module ts { sourceFile.amdDependencies = referenceComments.amdDependencies; sourceFile.amdModuleName = referenceComments.amdModuleName; + // Prime the scanner before parsing the source elements + nextToken(); + sourceFile.statements = parseList(ParsingContext.SourceElements, /*checkForStrictMode*/ true, parseSourceElement); Debug.assert(token === SyntaxKind.EndOfFileToken); sourceFile.endOfFileToken = parseTokenNode(); @@ -4435,7 +4551,7 @@ module ts { if (!checkModifiers(node)) { var savedInFunctionBlock = inFunctionBlock; - if (node.kind === SyntaxKind.FunctionBlock) { + if (isFunctionBlock(node)) { inFunctionBlock = true; } @@ -4479,7 +4595,7 @@ module ts { case SyntaxKind.ConstructorType: case SyntaxKind.ConstructSignature: case SyntaxKind.FunctionType: - return checkAnyParsedSignature(node); + return checkAnySignatureDeclaration(node); case SyntaxKind.BreakStatement: case SyntaxKind.ContinueStatement: return checkBreakOrContinueStatement(node); @@ -4507,6 +4623,7 @@ module ts { case SyntaxKind.IndexSignature: return checkIndexSignature(node); case SyntaxKind.InterfaceDeclaration: return checkInterfaceDeclaration(node); case SyntaxKind.LabeledStatement: return checkLabeledStatement(node); + case SyntaxKind.PropertyAssignment: return checkPropertyAssignment(node); case SyntaxKind.Method: return checkMethod(node); case SyntaxKind.ModuleDeclaration: return checkModuleDeclaration(node); case SyntaxKind.ObjectLiteralExpression: return checkObjectLiteralExpression(node); @@ -4515,11 +4632,10 @@ module ts { case SyntaxKind.PostfixUnaryExpression: return checkPostfixUnaryExpression(node); case SyntaxKind.PrefixUnaryExpression: return checkPrefixUnaryExpression(node); case SyntaxKind.Property: return checkProperty(node); - case SyntaxKind.PropertyAssignment: return checkPropertyAssignment(node); case SyntaxKind.ReturnStatement: return checkReturnStatement(node); case SyntaxKind.SetAccessor: return checkSetAccessor(node); case SyntaxKind.SourceFile: return checkSourceFile(node); - case SyntaxKind.ShorthandPropertyAssignment: return checkShorthandPropertyAssignment(node); + case SyntaxKind.ShorthandPropertyAssignment: return checkShorthandPropertyAssignment(node); case SyntaxKind.SwitchStatement: return checkSwitchStatement(node); case SyntaxKind.TaggedTemplateExpression: return checkTaggedTemplateExpression(node); case SyntaxKind.ThrowStatement: return checkThrowStatement(node); @@ -4595,7 +4711,7 @@ module ts { } } - function checkAnyParsedSignature(node: ParsedSignature): boolean { + function checkAnySignatureDeclaration(node: SignatureDeclaration): boolean { return checkTypeParameterList(node.typeParameters) || checkParameterList(node.parameters); } @@ -4706,8 +4822,7 @@ module ts { function checkTypeArguments(typeArguments: NodeArray) { return checkForDisallowedTrailingComma(typeArguments) || - checkForAtLeastOneTypeArgument(typeArguments) || - checkForMissingTypeArgument(typeArguments); + checkForAtLeastOneTypeArgument(typeArguments); } function checkForOmittedArgument(arguments: NodeArray) { @@ -4721,17 +4836,6 @@ module ts { } } - function checkForMissingTypeArgument(typeArguments: NodeArray) { - if (typeArguments) { - for (var i = 0, n = typeArguments.length; i < n; i++) { - var arg = typeArguments[i]; - if (arg.kind === SyntaxKind.TypeReference && getFullWidth((arg).typeName) === 0) { - return grammarErrorAtPos(arg.pos, 0, Diagnostics.Type_expected); - } - } - } - } - function checkForAtLeastOneTypeArgument(typeArguments: NodeArray) { if (typeArguments && typeArguments.length === 0) { var start = typeArguments.pos - "<".length; @@ -4809,7 +4913,7 @@ module ts { } function checkConstructor(node: ConstructorDeclaration) { - return checkAnyParsedSignature(node) || + return checkAnySignatureDeclaration(node) || checkConstructorTypeParameters(node) || checkConstructorTypeAnnotation(node) || checkForBodyInAmbientContext(node.body, /*isConstructor:*/ true); @@ -4917,7 +5021,7 @@ module ts { } function checkFunctionDeclaration(node: FunctionLikeDeclaration) { - return checkAnyParsedSignature(node) || + return checkAnySignatureDeclaration(node) || checkFunctionName(node.name) || checkForBodyInAmbientContext(node.body, /*isConstructor:*/ false) || checkForGenerator(node); @@ -4930,7 +5034,7 @@ module ts { } function checkFunctionExpression(node: FunctionExpression) { - return checkAnyParsedSignature(node) || + return checkAnySignatureDeclaration(node) || checkFunctionName(node.name) || checkForGenerator(node); } @@ -4944,7 +5048,7 @@ module ts { } function checkGetAccessor(node: MethodDeclaration) { - return checkAnyParsedSignature(node) || + return checkAnySignatureDeclaration(node) || checkAccessor(node); } @@ -5042,11 +5146,12 @@ module ts { } function checkMethod(node: MethodDeclaration) { - if (checkAnyParsedSignature(node) || + if (checkAnySignatureDeclaration(node) || checkForBodyInAmbientContext(node.body, /*isConstructor:*/ false) || checkForGenerator(node)) { return true; } + if (node.parent.kind === SyntaxKind.ClassDeclaration) { if (checkForInvalidQuestionMark(node, node.questionToken, Diagnostics.A_class_member_cannot_be_declared_optional)) { return true; @@ -5072,7 +5177,7 @@ module ts { } function checkForBodyInAmbientContext(body: Block | Expression, isConstructor: boolean): boolean { - if (inAmbientContext && body && body.kind === SyntaxKind.FunctionBlock) { + if (inAmbientContext && 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; @@ -5132,10 +5237,9 @@ module ts { // d.IsAccessorDescriptor(previous) is true and IsAccessorDescriptor(propId.descriptor) is true // and either both previous and propId.descriptor have[[Get]] fields or both previous and propId.descriptor have[[Set]] fields var currentKind: number; - if (prop.kind === SyntaxKind.PropertyAssignment) { - currentKind = Property; - } - else if (prop.kind === SyntaxKind.ShorthandPropertyAssignment) { + if (prop.kind === SyntaxKind.PropertyAssignment || + prop.kind === SyntaxKind.ShorthandPropertyAssignment || + prop.kind === SyntaxKind.Method) { currentKind = Property; } else if (prop.kind === SyntaxKind.GetAccessor) { @@ -5436,7 +5540,7 @@ module ts { } } - function checkPropertyAssignment(node: PropertyDeclaration) { + function checkPropertyAssignment(node: PropertyAssignment) { return checkForInvalidQuestionMark(node, node.questionToken, Diagnostics.An_object_member_cannot_be_declared_optional); } @@ -5453,7 +5557,7 @@ module ts { } function checkSetAccessor(node: MethodDeclaration) { - return checkAnyParsedSignature(node) || + return checkAnySignatureDeclaration(node) || checkAccessor(node); } @@ -5536,7 +5640,7 @@ module ts { return grammarErrorOnFirstToken(node, Diagnostics.A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file); } - function checkShorthandPropertyAssignment(node: ShorthandPropertyDeclaration): boolean { + function checkShorthandPropertyAssignment(node: ShorthandPropertyAssignment): boolean { return checkForInvalidQuestionMark(node, node.questionToken, Diagnostics.An_object_member_cannot_be_declared_optional); } diff --git a/src/compiler/scanner.ts b/src/compiler/scanner.ts index fcb8c9b0c3182..c80a6f68d026f 100644 --- a/src/compiler/scanner.ts +++ b/src/compiler/scanner.ts @@ -29,6 +29,15 @@ module ts { scan(): SyntaxKind; setText(text: string): void; setTextPos(textPos: number): void; + // Invokes the provided callback then unconditionally restores the scanner to the state it + // was in immediately prior to invoking the callback. The result of invoking the callback + // is returned from this function. + lookAhead(callback: () => T): T; + + // Invokes the provided callback. If the callback returns something falsy, then it restores + // the scanner to the state it was in immediately prior to invoking the callback. If the + // callback returns something truthy, then the scanner state is not rolled back. The result + // of invoking the callback is returned from this function. tryScan(callback: () => T): T; } @@ -463,7 +472,7 @@ module ts { ch > CharacterCodes.maxAsciiCharacter && isUnicodeIdentifierPart(ch, languageVersion); } - export function createScanner(languageVersion: ScriptTarget, skipTrivia: boolean, text?: string, onError?: ErrorCallback, onComment?: CommentCallback): Scanner { + export function createScanner(languageVersion: ScriptTarget, skipTrivia: boolean, text?: string, onError?: ErrorCallback): Scanner { var pos: number; // Current position (end position of text of current token) var len: number; // Length of text var startPos: number; // Start position of whitespace before current token @@ -899,9 +908,6 @@ module ts { pos++; } - if (onComment) { - onComment(tokenPos, pos); - } if (skipTrivia) { continue; @@ -934,10 +940,6 @@ module ts { error(Diagnostics.Asterisk_Slash_expected); } - if (onComment) { - onComment(tokenPos, pos); - } - if (skipTrivia) { continue; } @@ -1174,7 +1176,7 @@ module ts { return token = scanTemplateAndSetTokenValue(); } - function tryScan(callback: () => T): T { + function speculationHelper(callback: () => T, isLookahead: boolean): T { var savePos = pos; var saveStartPos = startPos; var saveTokenPos = tokenPos; @@ -1182,7 +1184,10 @@ module ts { var saveTokenValue = tokenValue; var savePrecedingLineBreak = precedingLineBreak; var result = callback(); - if (!result) { + + // If our callback returned something 'falsy' or we're just looking ahead, + // then unconditionally restore us to where we were. + if (!result || isLookahead) { pos = savePos; startPos = saveStartPos; tokenPos = saveTokenPos; @@ -1193,6 +1198,14 @@ module ts { return result; } + function lookAhead(callback: () => T): T { + return speculationHelper(callback, /*isLookahead:*/ true); + } + + function tryScan(callback: () => T): T { + return speculationHelper(callback, /*isLookahead:*/ false); + } + function setText(newText: string) { text = newText || ""; len = text.length; @@ -1228,6 +1241,7 @@ module ts { setText, setTextPos, tryScan, + lookAhead, }; } } diff --git a/src/compiler/types.ts b/src/compiler/types.ts index b2bd418926db6..3bf3e2af6c26b 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -216,7 +216,6 @@ module ts { DebuggerStatement, VariableDeclaration, FunctionDeclaration, - FunctionBlock, ClassDeclaration, InterfaceDeclaration, TypeAliasDeclaration, @@ -238,6 +237,7 @@ module ts { // Property assignments PropertyAssignment, ShorthandPropertyAssignment, + // Enum EnumMember, // Top-level nodes @@ -298,10 +298,27 @@ module ts { export const enum ParserContextFlags { // Set if this node was parsed in strict mode. Used for grammar error checks, as well as // checking if the node can be reused in incremental settings. - StrictMode = 1 << 0, - DisallowIn = 1 << 1, - Yield = 1 << 2, - GeneratorParameter = 1 << 3, + StrictMode = 1 << 0, + + // If this node was parsed in a context where 'in-expressions' are not allowed. + DisallowIn = 1 << 1, + + // If this node was parsed in the 'yield' context created when parsing a generator. + Yield = 1 << 2, + + // If this node was parsed in the parameters of a generator. + GeneratorParameter = 1 << 3, + + // If the parser encountered an error when parsing the code that created this node. Note + // the parser only sets this directly on the node it creates right after encountering the + // error. We then propagate that flag upwards to parent nodes during incremental parsing. + ContainsError = 1 << 4, + + // Used during incremental parsing to determine if we need to visit this node to see if + // any of its children had an error. Once we compute that once, we can set this bit on the + // node to know that we never have to do it again. From that point on, we can just check + // the node directly for 'ContainsError'. + HasPropagatedChildContainsErrorFlag = 1 << 5 } export interface Node extends TextRange { @@ -339,12 +356,6 @@ module ts { export type EntityName = Identifier | QualifiedName; - export interface ParsedSignature { - typeParameters?: NodeArray; - parameters: NodeArray; - type?: TypeNode; - } - export type DeclarationName = Identifier | LiteralExpression | ComputedPropertyName | BindingPattern; export interface Declaration extends Node { @@ -364,7 +375,10 @@ module ts { expression?: Expression; } - export interface SignatureDeclaration extends Declaration, ParsedSignature { + export interface SignatureDeclaration extends Declaration { + typeParameters?: NodeArray; + parameters: NodeArray; + type?: TypeNode; } // SyntaxKind.VariableDeclaration @@ -392,7 +406,6 @@ module ts { } // SyntaxKind.Property - // SyntaxKind.PropertyAssignment export interface PropertyDeclaration extends Declaration, ClassElement { name: DeclarationName; // Declared property name questionToken?: Node; // Present on optional property @@ -400,8 +413,20 @@ module ts { initializer?: Expression; // Optional initializer } + export interface ObjectLiteralElement extends Declaration { + _objectLiteralBrandBrand: any; + } + + // SyntaxKind.PropertyAssignment + export interface PropertyAssignment extends ObjectLiteralElement { + _propertyAssignmentBrand: any; + name: DeclarationName; + questionToken?: Node; + initializer: Expression; + } + // SyntaxKind.ShorthandPropertyAssignment - export interface ShorthandPropertyDeclaration extends Declaration { + export interface ShorthandPropertyAssignment extends ObjectLiteralElement { name: Identifier; questionToken?: Node; } @@ -447,7 +472,16 @@ module ts { body?: Block; } - export interface MethodDeclaration extends FunctionLikeDeclaration, ClassElement { + // Note that a MethodDeclaration is considered both a ClassElement and an ObjectLiteralElement. + // Both the grammars for ClassDeclaration and ObjectLiteralExpression allow for MethodDeclarations + // as child elements, and so a MethodDeclaration satisfies both interfaces. This avoids the + // alternative where we would need separate kinds/types for ClassMethodDeclaration and + // ObjectLiteralMethodDeclaration, which would look identical. + // + // Because of this, it may be necessary to determine what sort of MethodDeclaration you have + // at later stages of the compiler pipeline. In that case, you can either check the parent kind + // of the method, or use helpers like isObjectLiteralMethodDeclaration + export interface MethodDeclaration extends FunctionLikeDeclaration, ClassElement, ObjectLiteralElement { body?: Block; } @@ -455,8 +489,11 @@ module ts { body?: Block; } - export interface AccessorDeclaration extends FunctionLikeDeclaration, ClassElement { - body?: Block; + // See the comment on MethodDeclaration for the intuition behind AccessorDeclaration being a + // ClassElement and an ObjectLiteralElement. + export interface AccessorDeclaration extends FunctionLikeDeclaration, ClassElement, ObjectLiteralElement { + _accessorDeclarationBrand: any; + body: Block; } export interface IndexSignatureDeclaration extends SignatureDeclaration, ClassElement { @@ -613,7 +650,7 @@ module ts { // An ObjectLiteralExpression is the declaration node for an anonymous symbol. export interface ObjectLiteralExpression extends PrimaryExpression, Declaration { - properties: NodeArray; + properties: NodeArray; } export interface PropertyAccessExpression extends MemberExpression { @@ -920,8 +957,7 @@ module ts { getSymbolCount(): number; getTypeCount(): number; emitFiles(targetSourceFile?: SourceFile): EmitResult; - getParentOfSymbol(symbol: Symbol): Symbol; - getNarrowedTypeOfSymbol(symbol: Symbol, node: Node): Type; + getTypeOfSymbolAtLocation(symbol: Symbol, node: Node): Type; getDeclaredTypeOfSymbol(symbol: Symbol): Type; getPropertiesOfType(type: Type): Symbol[]; getPropertyOfType(type: Type, propertyName: string): Symbol; @@ -929,16 +965,16 @@ module ts { getIndexTypeOfType(type: Type, kind: IndexKind): Type; getReturnTypeOfSignature(signature: Signature): Type; getSymbolsInScope(location: Node, meaning: SymbolFlags): Symbol[]; - getSymbolInfo(node: Node): Symbol; + getSymbolAtLocation(node: Node): Symbol; getShorthandAssignmentValueSymbol(location: Node): Symbol; - getTypeOfNode(node: Node): Type; + getTypeAtLocation(node: Node): Type; typeToString(type: Type, enclosingDeclaration?: Node, flags?: TypeFormatFlags): string; symbolToString(symbol: Symbol, enclosingDeclaration?: Node, meaning?: SymbolFlags): string; getSymbolDisplayBuilder(): SymbolDisplayBuilder; getFullyQualifiedName(symbol: Symbol): string; getAugmentedPropertiesOfType(type: Type): Symbol[]; getRootSymbols(symbol: Symbol): Symbol[]; - getContextualType(node: Node): Type; + getContextualType(node: Expression): Type; getResolvedSignature(node: CallLikeExpression, candidatesOutArray?: Signature[]): Signature; getSignatureFromDeclaration(declaration: SignatureDeclaration): Signature; isImplementationOfOverload(node: FunctionLikeDeclaration): boolean; diff --git a/src/harness/fourslash.ts b/src/harness/fourslash.ts index 7e364730ede8f..0114d213398b0 100644 --- a/src/harness/fourslash.ts +++ b/src/harness/fourslash.ts @@ -769,7 +769,7 @@ module FourSlash { return "\nActual " + name + ":\n\t" + actualValue + "\nExpected value:\n\t" + expectedValue; } - public verifyQuickInfo(negative: boolean, expectedText?: string, expectedDocumentation?: string) { + public verifyQuickInfoString(negative: boolean, expectedText?: string, expectedDocumentation?: string) { [expectedText, expectedDocumentation].forEach(str => { if (str) { this.scenarioActions.push(''); @@ -798,6 +798,39 @@ module FourSlash { } } + + public verifyQuickInfoDisplayParts(kind: string, kindModifiers: string, textSpan: { start: number; length: number; }, + displayParts: ts.SymbolDisplayPart[], + documentation: ts.SymbolDisplayPart[]) { + this.scenarioActions.push(''); + this.scenarioActions.push(''); + + function getDisplayPartsJson(displayParts: ts.SymbolDisplayPart[]) { + var result = ""; + ts.forEach(displayParts, part => { + if (result) { + result += ",\n "; + } + else { + result = "[\n "; + } + result += JSON.stringify(part); + }); + if (result) { + result += "\n]"; + } + + return result; + } + + var actualQuickInfo = this.languageService.getQuickInfoAtPosition(this.activeFile.fileName, this.currentCaretPosition); + assert.equal(actualQuickInfo.kind, kind, this.messageAtLastKnownMarker("QuickInfo kind")); + assert.equal(actualQuickInfo.kindModifiers, kindModifiers, this.messageAtLastKnownMarker("QuickInfo kindModifiers")); + assert.equal(JSON.stringify(actualQuickInfo.textSpan), JSON.stringify(textSpan), this.messageAtLastKnownMarker("QuickInfo textSpan")); + assert.equal(getDisplayPartsJson(actualQuickInfo.displayParts), getDisplayPartsJson(displayParts), this.messageAtLastKnownMarker("QuickInfo displayParts")); + assert.equal(getDisplayPartsJson(actualQuickInfo.documentation), getDisplayPartsJson(documentation), this.messageAtLastKnownMarker("QuickInfo documentation")); + } + public verifyRenameLocations(findInStrings: boolean, findInComments: boolean) { var renameInfo = this.languageService.getRenameInfo(this.activeFile.fileName, this.currentCaretPosition); if (renameInfo.canRename) { diff --git a/src/harness/test262Runner.ts b/src/harness/test262Runner.ts index 5527b9383d128..756ff82ef9792 100644 --- a/src/harness/test262Runner.ts +++ b/src/harness/test262Runner.ts @@ -26,6 +26,30 @@ class Test262BaselineRunner extends RunnerBase { return (ts).SyntaxKind[k] } + function getFlagName(flags: any, f: number): any { + if (f === 0) return 0; + var result = ""; + ts.forEach(Object.getOwnPropertyNames(flags),(v: any) => { + if (isFinite(v)) { + v = +v; + if (f === +v) { + result = flags[v]; + return true; + } + else if ((f & v) > 0) { + if (result.length) + result += " | "; + result += flags[v]; + return false; + } + } + }); + return result; + } + + function getNodeFlagName(f: number) { return getFlagName((ts).NodeFlags, f); } + function getParserContextFlagName(f: number) { return getFlagName((ts).ParserContextFlags, f); } + function serializeNode(n: ts.Node): any { var o = { kind: getKindName(n.kind) }; ts.forEach(Object.getOwnPropertyNames(n), i => { @@ -39,13 +63,24 @@ class Test262BaselineRunner extends RunnerBase { case "parseDiagnostics": case "grammarDiagnostics": return undefined; + + case "flags": + (o)[i] = getNodeFlagName(n.flags); + return undefined; + + case "parserContextFlags": + (o)[i] = getParserContextFlagName(n.parserContextFlags); + return undefined; + case "nextContainer": if (n.nextContainer) { - (o)[i] = { kind: getKindName(n.nextContainer.kind), pos: n.nextContainer.pos, end: n.nextContainer.end }; + (o)[i] = { kind: n.nextContainer.kind, pos: n.nextContainer.pos, end: n.nextContainer.end }; return undefined; } + case "text": if (n.kind === ts.SyntaxKind.SourceFile) return undefined; + default: (o)[i] = ((n)[i]); } diff --git a/src/harness/typeWriter.ts b/src/harness/typeWriter.ts index 83aaaaf920a7c..44888059ff3bf 100644 --- a/src/harness/typeWriter.ts +++ b/src/harness/typeWriter.ts @@ -94,7 +94,7 @@ class TypeWriterWalker { } private getTypeOfNode(node: ts.Node): ts.Type { - var type = this.checker.getTypeOfNode(node); + var type = this.checker.getTypeAtLocation(node); ts.Debug.assert(type !== undefined, "type doesn't exist"); return type; } diff --git a/src/lib/es6.d.ts b/src/lib/es6.d.ts index 0940f26cac5ba..b666b11b96946 100644 --- a/src/lib/es6.d.ts +++ b/src/lib/es6.d.ts @@ -1,4 +1,4 @@ -declare type PropertyKey = string | number | Symbol; +declare type PropertyKey = string | number | Symbol; interface Symbol { /** Returns a string representation of an object. */ @@ -211,7 +211,7 @@ interface NumberConstructor { * Converts a string to a floating-point number. * @param string A string that contains a floating-point number. */ - parseFloat(string: string); + parseFloat(string: string): number; /** * Converts A string to an integer. @@ -438,7 +438,7 @@ interface StringConstructor { * @param template A well-formed template string call site representation. * @param substitutions A set of substitution values. */ - raw(template: TemplateStringsArray, ...substitutions: any[]); + raw(template: TemplateStringsArray, ...substitutions: any[]): string; } interface IteratorResult { @@ -472,8 +472,8 @@ declare var GeneratorFunction: GeneratorFunctionConstructor; interface Generator extends Iterator { next(value?: any): IteratorResult; - throw (exception: any); - return (value: T); + throw (exception: any): IteratorResult; + return (value: T): IteratorResult; // [Symbol.toStringTag]: string; } @@ -874,7 +874,7 @@ interface DataView { } interface DataViewConstructor { - new (buffer: ArrayBuffer, byteOffset?: number, byteLength?: number); + new (buffer: ArrayBuffer, byteOffset?: number, byteLength?: number): DataView; } declare var DataView: DataViewConstructor; diff --git a/src/services/breakpoints.ts b/src/services/breakpoints.ts index a67a89dd82fa4..260fa5892aa8b 100644 --- a/src/services/breakpoints.ts +++ b/src/services/breakpoints.ts @@ -101,10 +101,11 @@ module ts.BreakpointResolver { case SyntaxKind.ArrowFunction: return spanInFunctionDeclaration(node); - case SyntaxKind.FunctionBlock: - return spanInFunctionBlock(node); - case SyntaxKind.Block: + if (isFunctionBlock(node)) { + return spanInFunctionBlock(node); + } + // Fall through case SyntaxKind.TryBlock: case SyntaxKind.FinallyBlock: case SyntaxKind.ModuleBlock: @@ -414,13 +415,18 @@ module ts.BreakpointResolver { return undefined; } - case SyntaxKind.FunctionBlock: case SyntaxKind.EnumDeclaration: case SyntaxKind.ClassDeclaration: // Span on close brace token return textSpan(node); case SyntaxKind.Block: + if (isFunctionBlock(node.parent)) { + // Span on close brace token + return textSpan(node); + } + // fall through. + case SyntaxKind.TryBlock: case SyntaxKind.CatchClause: case SyntaxKind.FinallyBlock: diff --git a/src/services/formatting.ts b/src/services/formatting.ts index 3322ea1e65b0c..9660d9af6df61 100644 --- a/src/services/formatting.ts +++ b/src/services/formatting.ts @@ -897,7 +897,7 @@ module ts.formatting { function isSomeBlock(kind: SyntaxKind): boolean { switch (kind) { case SyntaxKind.Block: - case SyntaxKind.FunctionBlock: + case SyntaxKind.Block: case SyntaxKind.TryBlock: case SyntaxKind.FinallyBlock: case SyntaxKind.ModuleBlock: diff --git a/src/services/formatting/rules.ts b/src/services/formatting/rules.ts index 2723b50af7bb3..5dc446503462d 100644 --- a/src/services/formatting/rules.ts +++ b/src/services/formatting/rules.ts @@ -526,7 +526,6 @@ module ts.formatting { case SyntaxKind.ObjectLiteralExpression: case SyntaxKind.TryBlock: case SyntaxKind.FinallyBlock: - case SyntaxKind.FunctionBlock: case SyntaxKind.ModuleBlock: return true; } @@ -582,7 +581,6 @@ module ts.formatting { case SyntaxKind.TryBlock: case SyntaxKind.CatchClause: case SyntaxKind.FinallyBlock: - case SyntaxKind.FunctionBlock: case SyntaxKind.ModuleBlock: case SyntaxKind.SwitchStatement: return true; diff --git a/src/services/navigationBar.ts b/src/services/navigationBar.ts index 219b5866ce5d1..9d0484af49835 100644 --- a/src/services/navigationBar.ts +++ b/src/services/navigationBar.ts @@ -144,7 +144,7 @@ module ts.NavigationBar { if (functionDeclaration.kind === SyntaxKind.FunctionDeclaration) { // A function declaration is 'top level' if it contains any function declarations // within it. - if (functionDeclaration.body && functionDeclaration.body.kind === SyntaxKind.FunctionBlock) { + if (functionDeclaration.body && functionDeclaration.body.kind === SyntaxKind.Block) { // Proper function declarations can only have identifier names if (forEach((functionDeclaration.body).statements, s => s.kind === SyntaxKind.FunctionDeclaration && !isEmpty((s).name.text))) { @@ -154,7 +154,7 @@ module ts.NavigationBar { // Or if it is not parented by another function. i.e all functions // at module scope are 'top level'. - if (functionDeclaration.parent.kind !== SyntaxKind.FunctionBlock) { + if (!isFunctionBlock(functionDeclaration.parent)) { return true; } } @@ -230,7 +230,6 @@ module ts.NavigationBar { if ((node.flags & NodeFlags.Modifier) === 0) { return undefined; } - return createItem(node, getTextOfNode((node).name), ts.ScriptElementKind.memberVariableElement); case SyntaxKind.Method: @@ -363,7 +362,7 @@ module ts.NavigationBar { } function createFunctionItem(node: FunctionDeclaration) { - if (node.name && node.body && node.body.kind === SyntaxKind.FunctionBlock) { + if (node.name && node.body && node.body.kind === SyntaxKind.Block) { var childItems = getItemsWorker(sortNodes((node.body).statements), createChildItem); return getNavigationBarItem(node.name.text, diff --git a/src/services/outliningElementsCollector.ts b/src/services/outliningElementsCollector.ts index 68f30bee781a9..83eef2f437824 100644 --- a/src/services/outliningElementsCollector.ts +++ b/src/services/outliningElementsCollector.ts @@ -67,38 +67,39 @@ module ts { } switch (n.kind) { case SyntaxKind.Block: - var parent = n.parent; - var openBrace = findChildOfKind(n, SyntaxKind.OpenBraceToken, sourceFile); - var closeBrace = findChildOfKind(n, SyntaxKind.CloseBraceToken, sourceFile); + if (!isFunctionBlock(n)) { + var parent = n.parent; + var openBrace = findChildOfKind(n, SyntaxKind.OpenBraceToken, sourceFile); + var closeBrace = findChildOfKind(n, SyntaxKind.CloseBraceToken, sourceFile); - // Check if the block is standalone, or 'attached' to some parent statement. - // If the latter, we want to collaps the block, but consider its hint span - // to be the entire span of the parent. - if (parent.kind === SyntaxKind.DoStatement || - parent.kind === SyntaxKind.ForInStatement || - parent.kind === SyntaxKind.ForStatement || - parent.kind === SyntaxKind.IfStatement || - parent.kind === SyntaxKind.WhileStatement || - parent.kind === SyntaxKind.WithStatement || - parent.kind === SyntaxKind.CatchClause) { - - addOutliningSpan(parent, openBrace, closeBrace, autoCollapse(n)); - } - else { - // Block was a standalone block. In this case we want to only collapse - // the span of the block, independent of any parent span. - var span = TextSpan.fromBounds(n.getStart(), n.end); - elements.push({ - textSpan: span, - hintSpan: span, - bannerText: collapseText, - autoCollapse: autoCollapse(n) - }); - } - break; + // Check if the block is standalone, or 'attached' to some parent statement. + // If the latter, we want to collaps the block, but consider its hint span + // to be the entire span of the parent. + if (parent.kind === SyntaxKind.DoStatement || + parent.kind === SyntaxKind.ForInStatement || + parent.kind === SyntaxKind.ForStatement || + parent.kind === SyntaxKind.IfStatement || + parent.kind === SyntaxKind.WhileStatement || + parent.kind === SyntaxKind.WithStatement || + parent.kind === SyntaxKind.CatchClause) { + addOutliningSpan(parent, openBrace, closeBrace, autoCollapse(n)); + } + else { + // Block was a standalone block. In this case we want to only collapse + // the span of the block, independent of any parent span. + var span = TextSpan.fromBounds(n.getStart(), n.end); + elements.push({ + textSpan: span, + hintSpan: span, + bannerText: collapseText, + autoCollapse: autoCollapse(n) + }); + } + break; + } + // Fallthrough. - case SyntaxKind.FunctionBlock: case SyntaxKind.ModuleBlock: case SyntaxKind.TryBlock: case SyntaxKind.FinallyBlock: diff --git a/src/services/resources/diagnosticCode.generated.ts b/src/services/resources/diagnosticCode.generated.ts index d8533c0a6ee9b..03c4efea480ba 100644 --- a/src/services/resources/diagnosticCode.generated.ts +++ b/src/services/resources/diagnosticCode.generated.ts @@ -104,6 +104,7 @@ module TypeScript { A_generator_declaration_cannot_have_the_async_modifier: "A generator declaration cannot have the 'async' modifier.", async_modifier_cannot_appear_here: "'async' modifier cannot appear here.", comma_expression_cannot_appear_in_a_computed_property_name: "'comma' expression cannot appear in a computed property name.", + String_literal_expected: "String literal expected.", Duplicate_identifier_0: "Duplicate identifier '{0}'.", The_name_0_does_not_exist_in_the_current_scope: "The name '{0}' does not exist in the current scope.", The_name_0_does_not_refer_to_a_value: "The name '{0}' does not refer to a value.", diff --git a/src/services/resources/diagnosticInformationMap.generated.ts b/src/services/resources/diagnosticInformationMap.generated.ts index 5bbe9b43dbb75..73e819572d843 100644 --- a/src/services/resources/diagnosticInformationMap.generated.ts +++ b/src/services/resources/diagnosticInformationMap.generated.ts @@ -106,6 +106,7 @@ module TypeScript { "A generator declaration cannot have the 'async' modifier.": { "code": 1118, "category": DiagnosticCategory.Error }, "'async' modifier cannot appear here.": { "code": 1119, "category": DiagnosticCategory.Error }, "'comma' expression cannot appear in a computed property name.": { "code": 1120, "category": DiagnosticCategory.Error }, + "String literal expected.": { "code": 1121, "category": DiagnosticCategory.Error }, "Duplicate identifier '{0}'.": { "code": 2000, "category": DiagnosticCategory.Error }, "The name '{0}' does not exist in the current scope.": { "code": 2001, "category": DiagnosticCategory.Error }, "The name '{0}' does not refer to a value.": { "code": 2002, "category": DiagnosticCategory.Error }, diff --git a/src/services/resources/diagnosticMessages.json b/src/services/resources/diagnosticMessages.json index b8e3cb26a0021..54ecbb75370f3 100644 --- a/src/services/resources/diagnosticMessages.json +++ b/src/services/resources/diagnosticMessages.json @@ -411,6 +411,10 @@ "category": "Error", "code": 1120 }, + "String literal expected.": { + "category": "Error", + "code": 1121 + }, "Duplicate identifier '{0}'.": { "category": "Error", "code": 2000 diff --git a/src/services/services.ts b/src/services/services.ts index 4d3490f5f18ca..131d6494ac43c 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -808,10 +808,15 @@ module ts { case SyntaxKind.ObjectBindingPattern: case SyntaxKind.ArrayBindingPattern: case SyntaxKind.ModuleBlock: - case SyntaxKind.FunctionBlock: forEachChild(node, visit); break; + case SyntaxKind.Block: + if (isFunctionBlock(node)) { + forEachChild(node, visit); + } + break; + case SyntaxKind.Parameter: // Only consider properties defined as constructor parameters if (!(node.flags & NodeFlags.AccessibilityModifier)) { @@ -1293,6 +1298,7 @@ module ts { public static interfaceName = "interface name"; public static moduleName = "module name"; public static typeParameterName = "type parameter name"; + public static typeAlias = "type alias name"; } enum MatchKind { @@ -1370,7 +1376,10 @@ module ts { function writeIndent() { if (lineStart) { - displayParts.push(displayPart(getIndentString(indent), SymbolDisplayPartKind.space)); + var indentString = getIndentString(indent); + if (indentString) { + displayParts.push(displayPart(indentString, SymbolDisplayPartKind.space)); + } lineStart = false; } } @@ -1448,7 +1457,7 @@ module ts { } // If the parent is not sourceFile or module block it is local variable - for (var parent = declaration.parent; parent.kind !== SyntaxKind.FunctionBlock; parent = parent.parent) { + for (var parent = declaration.parent; !isFunctionBlock(parent); parent = parent.parent) { // Reached source file or module block if (parent.kind === SyntaxKind.SourceFile || parent.kind === SyntaxKind.ModuleBlock) { return false; @@ -1470,6 +1479,8 @@ module ts { return isFirstDeclarationOfSymbolParameter(symbol) ? SymbolDisplayPartKind.parameterName : SymbolDisplayPartKind.localName; } else if (flags & SymbolFlags.Property) { return SymbolDisplayPartKind.propertyName; } + else if (flags & SymbolFlags.GetAccessor) { return SymbolDisplayPartKind.propertyName; } + else if (flags & SymbolFlags.SetAccessor) { return SymbolDisplayPartKind.propertyName; } else if (flags & SymbolFlags.EnumMember) { return SymbolDisplayPartKind.enumMemberName; } else if (flags & SymbolFlags.Function) { return SymbolDisplayPartKind.functionName; } else if (flags & SymbolFlags.Class) { return SymbolDisplayPartKind.className; } @@ -1478,6 +1489,9 @@ module ts { else if (flags & SymbolFlags.Module) { return SymbolDisplayPartKind.moduleName; } else if (flags & SymbolFlags.Method) { return SymbolDisplayPartKind.methodName; } else if (flags & SymbolFlags.TypeParameter) { return SymbolDisplayPartKind.typeParameterName; } + else if (flags & SymbolFlags.TypeAlias) { return SymbolDisplayPartKind.aliasName; } + else if (flags & SymbolFlags.Import) { return SymbolDisplayPartKind.aliasName; } + return SymbolDisplayPartKind.text; } @@ -1643,7 +1657,6 @@ module ts { private currentSourceFile: SourceFile = null; constructor(private host: LanguageServiceHost) { - this.hostCache = new HostCache(host); } private initialize(filename: string) { @@ -2427,7 +2440,7 @@ module ts { isMemberCompletion = true; if (node.kind === SyntaxKind.Identifier || node.kind === SyntaxKind.QualifiedName || node.kind === SyntaxKind.PropertyAccessExpression) { - var symbol = typeInfoResolver.getSymbolInfo(node); + var symbol = typeInfoResolver.getSymbolAtLocation(node); // This is an alias, follow what it aliases if (symbol && symbol.flags & SymbolFlags.Import) { @@ -2444,7 +2457,7 @@ module ts { } } - var type = typeInfoResolver.getTypeOfNode(node); + var type = typeInfoResolver.getTypeAtLocation(node); if (type) { // Filter private properties forEach(type.getApparentProperties(), symbol => { @@ -2696,7 +2709,7 @@ module ts { // which is permissible given that it is backwards compatible; but really we should consider // passing the meaning for the node so that we don't report that a suggestion for a value is an interface. // We COULD also just do what 'getSymbolModifiers' does, which is to use the first declaration. - Debug.assert(session.typeChecker.getNarrowedTypeOfSymbol(symbol, location) !== undefined, "Could not find type for symbol"); + Debug.assert(session.typeChecker.getTypeOfSymbolAtLocation(symbol, location) !== undefined, "Could not find type for symbol"); var displayPartsDocumentationsAndSymbolKind = getSymbolDisplayPartsDocumentationAndSymbolKind(symbol, getSourceFile(filename), location, session.typeChecker, location, SemanticMeaning.All); return { name: entryName, @@ -2755,6 +2768,7 @@ module ts { if (flags & SymbolFlags.TypeParameter) return ScriptElementKind.typeParameterElement; if (flags & SymbolFlags.EnumMember) return ScriptElementKind.variableElement; if (flags & SymbolFlags.Import) return ScriptElementKind.alias; + if (flags & SymbolFlags.Module) return ScriptElementKind.moduleElement; } return result; @@ -2798,7 +2812,7 @@ module ts { if (!unionPropertyKind) { // If this was union of all methods, //make sure it has call signatures before we can label it as method - var typeOfUnionProperty = typeInfoResolver.getNarrowedTypeOfSymbol(symbol, location); + var typeOfUnionProperty = typeInfoResolver.getTypeOfSymbolAtLocation(symbol, location); if (typeOfUnionProperty.getCallSignatures().length) { return ScriptElementKind.memberFunctionElement; } @@ -2875,7 +2889,7 @@ module ts { symbolKind = ScriptElementKind.memberVariableElement; } - var type = typeResolver.getNarrowedTypeOfSymbol(symbol, location); + var type = typeResolver.getTypeOfSymbolAtLocation(symbol, location); if (type) { if (location.parent && location.parent.kind === SyntaxKind.PropertyAccessExpression) { var right = (location.parent).name; @@ -2936,6 +2950,7 @@ module ts { case ScriptElementKind.memberVariableElement: case ScriptElementKind.variableElement: case ScriptElementKind.constElement: + case ScriptElementKind.letElement: case ScriptElementKind.parameterElement: case ScriptElementKind.localVariableElement: // If it is call or construct signature of lambda's write type name @@ -2973,7 +2988,8 @@ module ts { if (functionDeclaration.kind === SyntaxKind.Constructor) { // show (constructor) Type(...) signature - addPrefixForAnyFunctionOrVar(type.symbol, ScriptElementKind.constructorImplementationElement); + symbolKind = ScriptElementKind.constructorImplementationElement; + addPrefixForAnyFunctionOrVar(type.symbol, symbolKind); } else { // (function/method) symbol(..signature) @@ -3005,7 +3021,7 @@ module ts { displayParts.push(spacePart()); addFullSymbolName(symbol); displayParts.push(spacePart()); - displayParts.push(punctuationPart(SyntaxKind.EqualsToken)); + displayParts.push(operatorPart(SyntaxKind.EqualsToken)); displayParts.push(spacePart()); displayParts.push.apply(displayParts, typeToDisplayParts(typeResolver, typeResolver.getDeclaredTypeOfSymbol(symbol), enclosingDeclaration)); } @@ -3077,7 +3093,7 @@ module ts { var importDeclaration = declaration; if (isExternalModuleImportDeclaration(importDeclaration)) { displayParts.push(spacePart()); - displayParts.push(punctuationPart(SyntaxKind.EqualsToken)); + displayParts.push(operatorPart(SyntaxKind.EqualsToken)); displayParts.push(spacePart()); displayParts.push(keywordPart(SyntaxKind.RequireKeyword)); displayParts.push(punctuationPart(SyntaxKind.OpenParenToken)); @@ -3085,10 +3101,10 @@ module ts { displayParts.push(punctuationPart(SyntaxKind.CloseParenToken)); } else { - var internalAliasSymbol = typeResolver.getSymbolInfo(importDeclaration.moduleReference); + var internalAliasSymbol = typeResolver.getSymbolAtLocation(importDeclaration.moduleReference); if (internalAliasSymbol) { displayParts.push(spacePart()); - displayParts.push(punctuationPart(SyntaxKind.EqualsToken)); + displayParts.push(operatorPart(SyntaxKind.EqualsToken)); displayParts.push(spacePart()); addFullSymbolName(internalAliasSymbol, enclosingDeclaration); } @@ -3195,7 +3211,7 @@ module ts { return undefined; } - var symbol = typeInfoResolver.getSymbolInfo(node); + var symbol = typeInfoResolver.getSymbolAtLocation(node); if (!symbol) { // Try getting just type at this position and show switch (node.kind) { @@ -3205,7 +3221,7 @@ module ts { case SyntaxKind.ThisKeyword: case SyntaxKind.SuperKeyword: // For the identifiers/this/super etc get the type at position - var type = typeInfoResolver.getTypeOfNode(node); + var type = typeInfoResolver.getTypeAtLocation(node); if (type) { return { kind: ScriptElementKind.unknown, @@ -3322,7 +3338,7 @@ module ts { return undefined; } - var symbol = typeInfoResolver.getSymbolInfo(node); + var symbol = typeInfoResolver.getSymbolAtLocation(node); // Could not find a symbol e.g. node is string or number keyword, // or the symbol was an internal symbol and does not have a declaration e.g. undefined symbol @@ -3522,7 +3538,7 @@ module ts { var func = getContainingFunction(returnStatement); // If we didn't find a containing function with a block body, bail out. - if (!(func && hasKind(func.body, SyntaxKind.FunctionBlock))) { + if (!(func && hasKind(func.body, SyntaxKind.Block))) { return undefined; } @@ -3554,7 +3570,7 @@ module ts { // If the "owner" is a function, then we equate 'return' and 'throw' statements in their // ability to "jump out" of the function, and include occurrences for both. - if (owner.kind === SyntaxKind.FunctionBlock) { + if (isFunctionBlock(owner)) { forEachReturnStatement(owner, returnStatement => { pushKeywordIf(keywords, returnStatement.getFirstToken(), SyntaxKind.ReturnKeyword); }); @@ -3610,7 +3626,7 @@ module ts { while (child.parent) { var parent = child.parent; - if (parent.kind === SyntaxKind.FunctionBlock || parent.kind === SyntaxKind.SourceFile) { + if (isFunctionBlock(parent) || parent.kind === SyntaxKind.SourceFile) { return parent; } @@ -3954,7 +3970,7 @@ module ts { return getReferencesForSuperKeyword(node); } - var symbol = typeInfoResolver.getSymbolInfo(node); + var symbol = typeInfoResolver.getSymbolAtLocation(node); // Could not find a symbol e.g. unknown identifier if (!symbol) { @@ -4206,7 +4222,7 @@ module ts { return; } - var referenceSymbol = typeInfoResolver.getSymbolInfo(referenceLocation); + var referenceSymbol = typeInfoResolver.getSymbolAtLocation(referenceLocation); if (referenceSymbol) { var referenceSymbolDeclaration = referenceSymbol.valueDeclaration; var shorthandValueSymbol = typeInfoResolver.getShorthandAssignmentValueSymbol(referenceSymbolDeclaration); @@ -4307,8 +4323,12 @@ module ts { var staticFlag = NodeFlags.Static; switch (searchSpaceNode.kind) { - case SyntaxKind.Property: case SyntaxKind.Method: + if (isObjectLiteralMethod(searchSpaceNode)) { + break; + } + // fall through + case SyntaxKind.Property: case SyntaxKind.Constructor: case SyntaxKind.GetAccessor: case SyntaxKind.SetAccessor: @@ -4361,6 +4381,11 @@ module ts { result.push(getReferenceEntryFromNode(node)); } break; + case SyntaxKind.Method: + if (isObjectLiteralMethod(searchSpaceNode) && searchSpaceNode.symbol === container.symbol) { + result.push(getReferenceEntryFromNode(node)); + } + break; case SyntaxKind.ClassDeclaration: // Make sure the container belongs to the same class // and has the appropriate static modifier from the original container. @@ -4439,7 +4464,7 @@ module ts { function getPropertySymbolFromTypeReference(typeReference: TypeReferenceNode) { if (typeReference) { - var type = typeInfoResolver.getTypeOfNode(typeReference); + var type = typeInfoResolver.getTypeAtLocation(typeReference); if (type) { var propertySymbol = typeInfoResolver.getPropertyOfType(type, propertyName); if (propertySymbol) { @@ -4489,7 +4514,7 @@ module ts { function getPropertySymbolsFromContextualType(node: Node): Symbol[] { if (isNameOfPropertyAssignment(node)) { - var objectLiteral = node.parent.parent; + var objectLiteral = node.parent.parent; var contextualType = typeInfoResolver.getContextualType(objectLiteral); var name = (node).text; if (contextualType) { @@ -4930,6 +4955,9 @@ module ts { else if (flags & SymbolFlags.Enum) { return ClassificationTypeNames.enumName; } + else if (flags & SymbolFlags.TypeAlias) { + return ClassificationTypeNames.typeAlias; + } else if (meaningAtPosition & SemanticMeaning.Type) { if (flags & SymbolFlags.Interface) { return ClassificationTypeNames.interfaceName; @@ -4964,7 +4992,7 @@ module ts { // Only walk into nodes that intersect the requested span. if (node && span.intersectsWith(node.getStart(), node.getWidth())) { if (node.kind === SyntaxKind.Identifier && node.getWidth() > 0) { - var symbol = typeInfoResolver.getSymbolInfo(node); + var symbol = typeInfoResolver.getSymbolAtLocation(node); if (symbol) { var type = classifySymbol(symbol, getMeaningFromLocation(node)); if (type) { @@ -5362,19 +5390,6 @@ module ts { return new RegExp(regExpString, "gim"); } - function getContainingComment(comments: CommentRange[], position: number): CommentRange { - if (comments) { - for (var i = 0, n = comments.length; i < n; i++) { - var comment = comments[i]; - if (comment.pos <= position && position < comment.end) { - return comment; - } - } - } - - return undefined; - } - function isLetterOrDigit(char: number): boolean { return (char >= CharacterCodes.a && char <= CharacterCodes.z) || (char >= CharacterCodes.A && char <= CharacterCodes.Z) || @@ -5393,7 +5408,7 @@ module ts { // Can only rename an identifier. if (node && node.kind === SyntaxKind.Identifier) { - var symbol = typeInfoResolver.getSymbolInfo(node); + var symbol = typeInfoResolver.getSymbolAtLocation(node); // Only allow a symbol to be renamed if it actually has at least one declaration. if (symbol && symbol.getDeclarations() && symbol.getDeclarations().length > 0) { diff --git a/src/services/signatureHelp.ts b/src/services/signatureHelp.ts index 93363b4676bd3..408fe60a6cd04 100644 --- a/src/services/signatureHelp.ts +++ b/src/services/signatureHelp.ts @@ -396,7 +396,7 @@ module ts.SignatureHelp { function getContainingArgumentInfo(node: Node): ArgumentListInfo { for (var n = node; n.kind !== SyntaxKind.SourceFile; n = n.parent) { - if (n.kind === SyntaxKind.FunctionBlock) { + if (isFunctionBlock(n)) { return undefined; } @@ -457,7 +457,7 @@ module ts.SignatureHelp { var invocation = argumentListInfo.invocation; var callTarget = getInvokedExpression(invocation) - var callTargetSymbol = typeInfoResolver.getSymbolInfo(callTarget); + var callTargetSymbol = typeInfoResolver.getSymbolAtLocation(callTarget); var callTargetDisplayParts = callTargetSymbol && symbolToDisplayParts(typeInfoResolver, callTargetSymbol, /*enclosingDeclaration*/ undefined, /*meaning*/ undefined); var items: SignatureHelpItem[] = map(candidates, candidateSignature => { var signatureHelpParameters: SignatureHelpParameter[]; diff --git a/src/services/smartIndenter.ts b/src/services/smartIndenter.ts index 82226449b9661..e93cb5616a9c5 100644 --- a/src/services/smartIndenter.ts +++ b/src/services/smartIndenter.ts @@ -326,7 +326,6 @@ module ts.formatting { case SyntaxKind.EnumDeclaration: case SyntaxKind.ArrayLiteralExpression: case SyntaxKind.Block: - case SyntaxKind.FunctionBlock: case SyntaxKind.TryBlock: case SyntaxKind.FinallyBlock: case SyntaxKind.ModuleBlock: @@ -357,7 +356,6 @@ module ts.formatting { case SyntaxKind.ForInStatement: case SyntaxKind.ForStatement: case SyntaxKind.IfStatement: - return child !== SyntaxKind.Block; case SyntaxKind.FunctionDeclaration: case SyntaxKind.FunctionExpression: case SyntaxKind.Method: @@ -365,7 +363,7 @@ module ts.formatting { case SyntaxKind.Constructor: case SyntaxKind.GetAccessor: case SyntaxKind.SetAccessor: - return child !== SyntaxKind.FunctionBlock; + return child !== SyntaxKind.Block; default: return false; } @@ -404,7 +402,6 @@ module ts.formatting { case SyntaxKind.ObjectLiteralExpression: case SyntaxKind.Block: case SyntaxKind.FinallyBlock: - case SyntaxKind.FunctionBlock: case SyntaxKind.ModuleBlock: case SyntaxKind.SwitchStatement: return nodeEndsWith(n, SyntaxKind.CloseBraceToken, sourceFile); diff --git a/src/services/syntax/SyntaxGenerator.js b/src/services/syntax/SyntaxGenerator.js index d58976f35b898..2576aab73d7fe 100644 --- a/src/services/syntax/SyntaxGenerator.js +++ b/src/services/syntax/SyntaxGenerator.js @@ -1138,7 +1138,7 @@ var definitions = [ children: [ { name: 'asyncKeyword', isToken: true, isOptional: true }, { name: 'callSignature', type: 'CallSignatureSyntax' }, - { name: 'equalsGreaterThanToken', isToken: true, excludeFromAST: true }, + { name: 'equalsGreaterThanToken', isToken: true, isOptional: true }, { name: 'body', type: 'BlockSyntax | IExpressionSyntax' } ], isTypeScriptSpecific: true @@ -1964,17 +1964,23 @@ function generateConstructorFunction(definition) { } result += ") {\r\n"; result += " if (data) { this.__data = data; }\r\n"; + result += " this.parent = undefined"; if (definition.children.length) { result += " "; for (var i = 0; i < definition.children.length; i++) { +<<<<<<< HEAD if (i) { result += ", "; } +======= + result += ",\r\n"; +>>>>>>> 691a8a7... Remove restriction that you cannot reuse nodes/tokens during incremental parsing while doing speculatively operations. var child = definition.children[i]; result += "this." + child.name + " = " + getSafeName(child); } result += ";\r\n"; } +<<<<<<< HEAD if (definition.children.length > 0) { result += " "; for (var i = 0; i < definition.children.length; i++) { @@ -1991,6 +1997,9 @@ function generateConstructorFunction(definition) { } result += ";\r\n"; } +======= + result += ";\r\n"; +>>>>>>> 691a8a7... Remove restriction that you cannot reuse nodes/tokens during incremental parsing while doing speculatively operations. result += " };\r\n"; result += " " + definition.name + ".prototype.kind = SyntaxKind." + getNameWithoutSuffix(definition) + ";\r\n"; result += " " + definition.name + ".prototype.childCount = " + definition.children.length + ";\r\n"; diff --git a/src/services/syntax/SyntaxGenerator.js.map b/src/services/syntax/SyntaxGenerator.js.map index 8faab5987a686..cc670d0eebafd 100644 --- a/src/services/syntax/SyntaxGenerator.js.map +++ b/src/services/syntax/SyntaxGenerator.js.map @@ -23,6 +23,8 @@ <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD +<<<<<<< HEAD <<<<<<< Updated upstream {"version":3,"file":"SyntaxGenerator.js","sourceRoot":"","sources":["file:///C:/VSPro_1/src/typescript/public_cyrusn/src/compiler/sys.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/core/errors.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/core/arrayUtilities.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/core/stringUtilities.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/syntax/syntaxKind.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/syntax/syntaxFacts.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/syntax/SyntaxGenerator.ts"],"names":["getWScriptSystem","getWScriptSystem.readFile","getWScriptSystem.writeFile","getNodeSystem","getNodeSystem.readFile","getNodeSystem.writeFile","getNodeSystem.fileChanged","TypeScript","TypeScript.Errors","TypeScript.Errors.constructor","TypeScript.Errors.argument","TypeScript.Errors.argumentOutOfRange","TypeScript.Errors.argumentNull","TypeScript.Errors.abstract","TypeScript.Errors.notYetImplemented","TypeScript.Errors.invalidOperation","TypeScript.ArrayUtilities","TypeScript.ArrayUtilities.constructor","TypeScript.ArrayUtilities.sequenceEquals","TypeScript.ArrayUtilities.contains","TypeScript.ArrayUtilities.distinct","TypeScript.ArrayUtilities.last","TypeScript.ArrayUtilities.lastOrDefault","TypeScript.ArrayUtilities.firstOrDefault","TypeScript.ArrayUtilities.first","TypeScript.ArrayUtilities.sum","TypeScript.ArrayUtilities.select","TypeScript.ArrayUtilities.where","TypeScript.ArrayUtilities.any","TypeScript.ArrayUtilities.all","TypeScript.ArrayUtilities.binarySearch","TypeScript.ArrayUtilities.createArray","TypeScript.ArrayUtilities.grow","TypeScript.ArrayUtilities.copy","TypeScript.ArrayUtilities.indexOf","TypeScript.StringUtilities","TypeScript.StringUtilities.constructor","TypeScript.StringUtilities.isString","TypeScript.StringUtilities.endsWith","TypeScript.StringUtilities.startsWith","TypeScript.StringUtilities.repeat","TypeScript.SyntaxKind","TypeScript.SyntaxFacts","TypeScript.SyntaxFacts.getTokenKind","TypeScript.SyntaxFacts.getText","TypeScript.SyntaxFacts.isAnyKeyword","TypeScript.SyntaxFacts.isAnyPunctuation","TypeScript.SyntaxFacts.isPrefixUnaryExpressionOperatorToken","TypeScript.SyntaxFacts.isBinaryExpressionOperatorToken","TypeScript.SyntaxFacts.isAssignmentOperatorToken","TypeScript.SyntaxFacts.isType","firstKind","getStringWithoutSuffix","getNameWithoutSuffix","getType","camelCase","getSafeName","generateConstructorFunction","generateSyntaxInterfaces","generateSyntaxInterface","generateNodes","isInterface","generateWalker","firstEnumName","groupBy","generateKeywordCondition","min","max","generateUtilities","generateScannerUtilities","syntaxKindName","generateVisitor"],"mappings":"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"} ======= @@ -103,3 +105,9 @@ ======= {"version":3,"file":"SyntaxGenerator.js","sourceRoot":"","sources":["file:///C:/VSPro_1/src/typescript/public_cyrusn/src/compiler/sys.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/core/errors.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/core/arrayUtilities.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/core/stringUtilities.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/syntax/syntaxKind.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/syntax/syntaxFacts.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/syntax/SyntaxGenerator.ts"],"names":["getWScriptSystem","getWScriptSystem.readFile","getWScriptSystem.writeFile","getNodeSystem","getNodeSystem.readFile","getNodeSystem.writeFile","getNodeSystem.fileChanged","TypeScript","TypeScript.Errors","TypeScript.Errors.constructor","TypeScript.Errors.argument","TypeScript.Errors.argumentOutOfRange","TypeScript.Errors.argumentNull","TypeScript.Errors.abstract","TypeScript.Errors.notYetImplemented","TypeScript.Errors.invalidOperation","TypeScript.ArrayUtilities","TypeScript.ArrayUtilities.constructor","TypeScript.ArrayUtilities.sequenceEquals","TypeScript.ArrayUtilities.contains","TypeScript.ArrayUtilities.distinct","TypeScript.ArrayUtilities.last","TypeScript.ArrayUtilities.lastOrDefault","TypeScript.ArrayUtilities.firstOrDefault","TypeScript.ArrayUtilities.first","TypeScript.ArrayUtilities.sum","TypeScript.ArrayUtilities.select","TypeScript.ArrayUtilities.where","TypeScript.ArrayUtilities.any","TypeScript.ArrayUtilities.all","TypeScript.ArrayUtilities.binarySearch","TypeScript.ArrayUtilities.createArray","TypeScript.ArrayUtilities.grow","TypeScript.ArrayUtilities.copy","TypeScript.ArrayUtilities.indexOf","TypeScript.StringUtilities","TypeScript.StringUtilities.constructor","TypeScript.StringUtilities.isString","TypeScript.StringUtilities.endsWith","TypeScript.StringUtilities.startsWith","TypeScript.StringUtilities.repeat","TypeScript.SyntaxKind","TypeScript.SyntaxFacts","TypeScript.SyntaxFacts.getTokenKind","TypeScript.SyntaxFacts.getText","TypeScript.SyntaxFacts.isAnyKeyword","TypeScript.SyntaxFacts.isAnyPunctuation","TypeScript.SyntaxFacts.isPrefixUnaryExpressionOperatorToken","TypeScript.SyntaxFacts.isBinaryExpressionOperatorToken","TypeScript.SyntaxFacts.isAssignmentOperatorToken","TypeScript.SyntaxFacts.isType","getSyntaxKindEnum","firstKind","getStringWithoutSuffix","getNameWithoutSuffix","getType","camelCase","getSafeName","generateConstructorFunction","generateSyntaxInterfaces","generateSyntaxInterface","generateNodes","isInterface","generateWalker","firstEnumName","groupBy","generateKeywordCondition","min","max","generateUtilities","generateScannerUtilities","syntaxKindName","generateVisitor"],"mappings":"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"} >>>>>>> 7a4a842... Tighten the bounds on an 'await' expression. +======= +{"version":3,"file":"SyntaxGenerator.js","sourceRoot":"","sources":["file:///C:/VSPro_1/src/typescript/public_cyrusn/src/compiler/sys.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/core/errors.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/core/arrayUtilities.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/core/stringUtilities.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/syntax/syntaxKind.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/syntax/syntaxFacts.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/syntax/SyntaxGenerator.ts"],"names":["getWScriptSystem","getWScriptSystem.readFile","getWScriptSystem.writeFile","getWScriptSystem.write","getWScriptSystem.resolvePath","getWScriptSystem.fileExists","getWScriptSystem.directoryExists","getWScriptSystem.createDirectory","getWScriptSystem.getExecutingFilePath","getWScriptSystem.getCurrentDirectory","getWScriptSystem.exit","getNodeSystem","getNodeSystem.readFile","getNodeSystem.writeFile","getNodeSystem.write","getNodeSystem.close","getNodeSystem.fileChanged","getNodeSystem.fileExists","getNodeSystem.directoryExists","getNodeSystem.createDirectory","getNodeSystem.getExecutingFilePath","getNodeSystem.getCurrentDirectory","getNodeSystem.getMemoryUsage","getNodeSystem.exit","TypeScript","TypeScript.Errors","TypeScript.Errors.constructor","TypeScript.Errors.argument","TypeScript.Errors.argumentOutOfRange","TypeScript.Errors.argumentNull","TypeScript.Errors.abstract","TypeScript.Errors.notYetImplemented","TypeScript.Errors.invalidOperation","TypeScript.ArrayUtilities","TypeScript.ArrayUtilities.constructor","TypeScript.ArrayUtilities.sequenceEquals","TypeScript.ArrayUtilities.contains","TypeScript.ArrayUtilities.distinct","TypeScript.ArrayUtilities.last","TypeScript.ArrayUtilities.lastOrDefault","TypeScript.ArrayUtilities.firstOrDefault","TypeScript.ArrayUtilities.first","TypeScript.ArrayUtilities.sum","TypeScript.ArrayUtilities.select","TypeScript.ArrayUtilities.where","TypeScript.ArrayUtilities.any","TypeScript.ArrayUtilities.all","TypeScript.ArrayUtilities.binarySearch","TypeScript.ArrayUtilities.createArray","TypeScript.ArrayUtilities.grow","TypeScript.ArrayUtilities.copy","TypeScript.ArrayUtilities.indexOf","TypeScript.StringUtilities","TypeScript.StringUtilities.constructor","TypeScript.StringUtilities.isString","TypeScript.StringUtilities.endsWith","TypeScript.StringUtilities.startsWith","TypeScript.StringUtilities.repeat","TypeScript.SyntaxKind","TypeScript.SyntaxFacts","TypeScript.SyntaxFacts.getTokenKind","TypeScript.SyntaxFacts.getText","TypeScript.SyntaxFacts.isAnyKeyword","TypeScript.SyntaxFacts.isAnyPunctuation","TypeScript.SyntaxFacts.isPrefixUnaryExpressionOperatorToken","TypeScript.SyntaxFacts.isBinaryExpressionOperatorToken","TypeScript.SyntaxFacts.isAssignmentOperatorToken","TypeScript.SyntaxFacts.isType","getSyntaxKindEnum","firstKind","getStringWithoutSuffix","getNameWithoutSuffix","getType","camelCase","getSafeName","generateConstructorFunction","generateSyntaxInterfaces","generateSyntaxInterface","generateNodes","isInterface","generateWalker","firstEnumName","groupBy","generateKeywordCondition","min","max","generateUtilities","generateScannerUtilities","syntaxKindName","generateVisitor"],"mappings":"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KAAKA,EAAEA,CAACA;YACvBA,CAACA;QACLA,CAACA;QAEDF,MAAMA,CAACA;YACHA,IAAIA,MAAAA;YACJA,OAAOA,EAAEA,MAAMA;YACfA,yBAAyBA,EAAEA,KAAKA;YAChCA,KAAKA,YAACA,CAASA;gBACXG,OAAOA,CAACA,MAAMA,CAACA,KAAKA,CAACA,CAACA,CAACA,CAACA;YAC5BA,CAACA;YACDH,QAAQA,UAAAA;YACRA,SAASA,WAAAA;YACTA,WAAWA,YAACA,IAAYA;gBACpBI,MAAMA,CAACA,GAAGA,CAACA,mBAAmBA,CAACA,IAAIA,CAACA,CAACA;YACzCA,CAACA;YACDJ,UAAUA,YAACA,IAAYA;gBACnBK,MAAMA,CAACA,GAAGA,CAACA,UAAUA,CAACA,IAAIA,CAACA,CAACA;YAChCA,CAACA;YACDL,eAAeA,YAACA,IAAYA;gBACxBM,MAAMA,CAACA,GAAGA,CAACA,YAAYA,CAACA,IAAIA,CAACA,CAACA;YAClCA,CAACA;YACDN,eAAeA,YAACA,aAAqBA;gBACjCO,EAAEA,CAACA,CAACA,CAACA,IAAIA,CAACA,eAAeA,CAACA,aAAaA,CAACA,CAACA,CAACA,CAACA;oBACvCA,GAAGA,CAACA,YAAYA,CAACA,aAAaA,CAACA,CAACA;gBACpCA,CAACA;YACLA,CAACA;YACDP,oBAAoBA;gBAChBQ,MAAMA,CAACA,OAAOA,CAACA,cAAcA,CAACA;YAClCA,CAACA;YACDR,mBAAmBA;gBACfS,MAAMA,CAACA,IAAIA,aAAaA,CAACA,eAAeA,CAACA,CAACA,gBAAgBA,CAACA;YAC/DA,CAACA;YACDT,IAAIA,YAACA,QAAiBA;gBAClBU,IAAAA,CAACA;oBACGA,OAAOA,CAACA,IAAIA,CAACA,QAAQA,CAACA,CAACA;gBAC3BA,CACAA;gBAAAA,KAAKA,CAACA,CAACA,CAACA,CAACA,CAACA,CAACA;gBACXA,CAACA;YACLA,CAACA;SACJV,CAACA;IACNA,CAACA;IACD,SAAS,aAAa;QAClBW,IAAIA,GAAGA,GAAGA,OAAOA,CAACA,IAAIA,CAACA,CAACA;QACxBA,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"} +>>>>>>> 44381ba... Use callbacks for speculative parsing. +======= +{"version":3,"file":"SyntaxGenerator.js","sourceRoot":"","sources":["file:///C:/VSPro_1/src/typescript/public_cyrusn/src/compiler/sys.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/core/errors.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/core/arrayUtilities.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/core/stringUtilities.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/syntax/syntaxKind.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/syntax/syntaxFacts.ts","file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/syntax/SyntaxGenerator.ts"],"names":["getWScriptSystem","getWScriptSystem.readFile","getWScriptSystem.writeFile","getWScriptSystem.write","getWScriptSystem.resolvePath","getWScriptSystem.fileExists","getWScriptSystem.directoryExists","getWScriptSystem.createDirectory","getWScriptSystem.getExecutingFilePath","getWScriptSystem.getCurrentDirectory","getWScriptSystem.exit","getNodeSystem","getNodeSystem.readFile","getNodeSystem.writeFile","getNodeSystem.write","getNodeSystem.close","getNodeSystem.fileChanged","getNodeSystem.fileExists","getNodeSystem.directoryExists","getNodeSystem.createDirectory","getNodeSystem.getExecutingFilePath","getNodeSystem.getCurrentDirectory","getNodeSystem.getMemoryUsage","getNodeSystem.exit","TypeScript","TypeScript.Errors","TypeScript.Errors.constructor","TypeScript.Errors.argument","TypeScript.Errors.argumentOutOfRange","TypeScript.Errors.argumentNull","TypeScript.Errors.abstract","TypeScript.Errors.notYetImplemented","TypeScript.Errors.invalidOperation","TypeScript.ArrayUtilities","TypeScript.ArrayUtilities.constructor","TypeScript.ArrayUtilities.sequenceEquals","TypeScript.ArrayUtilities.contains","TypeScript.ArrayUtilities.distinct","TypeScript.ArrayUtilities.last","TypeScript.ArrayUtilities.lastOrDefault","TypeScript.ArrayUtilities.firstOrDefault","TypeScript.ArrayUtilities.first","TypeScript.ArrayUtilities.sum","TypeScript.ArrayUtilities.select","TypeScript.ArrayUtilities.where","TypeScript.ArrayUtilities.any","TypeScript.ArrayUtilities.all","TypeScript.ArrayUtilities.binarySearch","TypeScript.ArrayUtilities.createArray","TypeScript.ArrayUtilities.grow","TypeScript.ArrayUtilities.copy","TypeScript.ArrayUtilities.indexOf","TypeScript.StringUtilities","TypeScript.StringUtilities.constructor","TypeScript.StringUtilities.isString","TypeScript.StringUtilities.endsWith","TypeScript.StringUtilities.startsWith","TypeScript.StringUtilities.repeat","TypeScript.SyntaxKind","TypeScript.SyntaxFacts","TypeScript.SyntaxFacts.getTokenKind","TypeScript.SyntaxFacts.getText","TypeScript.SyntaxFacts.isAnyKeyword","TypeScript.SyntaxFacts.isAnyPunctuation","TypeScript.SyntaxFacts.isPrefixUnaryExpressionOperatorToken","TypeScript.SyntaxFacts.isBinaryExpressionOperatorToken","TypeScript.SyntaxFacts.isAssignmentOperatorToken","TypeScript.SyntaxFacts.isType","getSyntaxKindEnum","firstKind","getStringWithoutSuffix","getNameWithoutSuffix","getType","camelCase","getSafeName","generateConstructorFunction","generateSyntaxInterfaces","generateSyntaxInterface","generateNodes","isInterface","generateWalker","firstEnumName","groupBy","generateKeywordCondition","min","max","generateUtilities","generateScannerUtilities","syntaxKindName","generateVisitor"],"mappings":"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KAAKA,EAAEA,CAACA;YACvBA,CAACA;QACLA,CAACA;QAEDF,MAAMA,CAACA;YACHA,IAAIA,MAAAA;YACJA,OAAOA,EAAEA,MAAMA;YACfA,yBAAyBA,EAAEA,KAAKA;YAChCA,KAAKA,YAACA,CAASA;gBACXG,OAAOA,CAACA,MAAMA,CAACA,KAAKA,CAACA,CAACA,CAACA,CAACA;YAC5BA,CAACA;YACDH,QAAQA,UAAAA;YACRA,SAASA,WAAAA;YACTA,WAAWA,YAACA,IAAYA;gBACpBI,MAAMA,CAACA,GAAGA,CAACA,mBAAmBA,CAACA,IAAIA,CAACA,CAACA;YACzCA,CAACA;YACDJ,UAAUA,YAACA,IAAYA;gBACnBK,MAAMA,CAACA,GAAGA,CAACA,UAAUA,CAACA,IAAIA,CAACA,CAACA;YAChCA,CAACA;YACDL,eAAeA,YAACA,IAAYA;gBACxBM,MAAMA,CAACA,GAAGA,CAACA,YAAYA,CAACA,IAAIA,CAACA,CAACA;YAClCA,CAACA;YACDN,eAAeA,YAACA,aAAqBA;gBACjCO,EAAEA,CAACA,CAACA,CAACA,IAAIA,CAACA,eAAeA,CAACA,aAAaA,CAACA,CAACA,CAACA,CAACA;oBACvCA,GAAGA,CAACA,YAAYA,CAACA,aAAaA,CAACA,CAACA;gBACpCA,CAACA;YACLA,CAACA;YACDP,oBAAoBA;gBAChBQ,MAAMA,CAACA,OAAOA,CAACA,cAAcA,CAACA;YAClCA,CAACA;YACDR,mBAAmBA;gBACfS,MAAMA,CAACA,IAAIA,aAAaA,CAACA,eAAeA,CAACA,CAACA,gBAAgBA,CAACA;YAC/DA,CAACA;YACDT,IAAIA,YAACA,QAAiBA;gBAClBU,IAAAA,CAACA;oBACGA,OAAOA,CAACA,IAAIA,CAACA,QAAQA,CAACA,CAACA;gBAC3BA,CACAA;gBAAAA,KAAKA,CAACA,CAACA,CAACA,CAACA,CAACA,CAACA;gBACXA,CAACA;YACLA,CAACA;SACJV,CAACA;IACNA,CAACA;IACD,SAAS,aAAa;QAClBW,IAAIA,GAAGA,GAAGA,OAAOA,CAACA,IAAIA,CAACA,CAACA;QACxBA,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"} +>>>>>>> 691a8a7... Remove restriction that you cannot reuse nodes/tokens during incremental parsing while doing speculatively operations. diff --git a/src/services/syntax/incrementalParser.ts b/src/services/syntax/incrementalParser.ts index 273b3eec5fea8..0147cb8e32a16 100644 --- a/src/services/syntax/incrementalParser.ts +++ b/src/services/syntax/incrementalParser.ts @@ -1,11 +1,6 @@ /// module TypeScript.IncrementalParser { - interface IParserRewindPoint { - // Information used by the incremental parser source. - oldSourceUnitCursor: SyntaxCursor; - } - interface ISyntaxElementInternal extends ISyntaxElement { intersectsChange: boolean; } @@ -30,17 +25,15 @@ module TypeScript.IncrementalParser { // // This parser source also keeps track of the absolute position in the text that we're in, // and any token diagnostics produced. That way we dont' have to track that ourselves. - var _scannerParserSource = Scanner.createParserSource(oldSyntaxTree.fileName(), text, oldSyntaxTree.languageVersion()); + var scannerParserSource = Scanner.createParserSource(oldSyntaxTree.fileName(), text, oldSyntaxTree.languageVersion()); // The cursor we use to navigate through and retrieve nodes and tokens from the old tree. var oldSourceUnit = oldSyntaxTree.sourceUnit(); - var _outstandingRewindPointCount = 0; - // Start the cursor pointing at the first element in the source unit (if it exists). - var _oldSourceUnitCursor = getSyntaxCursor(); + var oldSourceUnitCursor = getSyntaxCursor(); if (oldSourceUnit.moduleElements.length > 0) { - _oldSourceUnitCursor.pushElement(childAt(oldSourceUnit.moduleElements, 0), /*indexInParent:*/ 0); + oldSourceUnitCursor.pushElement(childAt(oldSourceUnit.moduleElements, 0), /*indexInParent:*/ 0); } // In general supporting multiple individual edits is just not that important. So we @@ -48,18 +41,16 @@ module TypeScript.IncrementalParser { // time this could be problematic would be if the user made a ton of discontinuous edits. // For example, doing a column select on a *large* section of a code. If this is a // problem, we can always update this code to handle multiple changes. - var _changeRange = extendToAffectedRange(textChangeRange, oldSourceUnit); - - // Cached value of _changeRange.newSpan(). Cached for performance. - var _changeRangeNewSpan = _changeRange.newSpan(); + var changeRange = extendToAffectedRange(textChangeRange, oldSourceUnit); // The old tree's length, plus whatever length change was caused by the edit // Had better equal the new text's length! if (Debug.shouldAssert(AssertionLevel.Aggressive)) { - Debug.assert((fullWidth(oldSourceUnit) - _changeRange.span().length() + _changeRange.newLength()) === text.length()); + Debug.assert((fullWidth(oldSourceUnit) - changeRange.span().length() + changeRange.newLength()) === text.length()); } - var delta = _changeRange.newSpan().length() - _changeRange.span().length(); + var delta = changeRange.newSpan().length() - changeRange.span().length(); + // If we added or removed characters during the edit, then we need to go and adjust all // the nodes after the edit. Those nodes may move forward down (if we inserted chars) // or they may move backward (if we deleted chars). @@ -75,14 +66,7 @@ module TypeScript.IncrementalParser { // Also, mark any syntax elements that intersect the changed span. We know, up front, // that we cannot reuse these elements. updateTokenPositionsAndMarkElements(oldSourceUnit, - _changeRange.span().start(), _changeRange.span().end(), delta, /*fullStart:*/ 0); - - function release() { - _scannerParserSource.release(); - _scannerParserSource = undefined; - _oldSourceUnitCursor = undefined; - _outstandingRewindPointCount = 0; - } + changeRange.span().start(), changeRange.span().end(), delta, /*fullStart:*/ 0); function extendToAffectedRange(changeRange: TextChangeRange, sourceUnit: SourceUnitSyntax): TextChangeRange { // Consider the following code: @@ -116,84 +100,46 @@ module TypeScript.IncrementalParser { } function absolutePosition() { - return _scannerParserSource.absolutePosition(); + return scannerParserSource.absolutePosition(); } - function tokenDiagnostics(): Diagnostic[] { - return _scannerParserSource.tokenDiagnostics(); + function diagnostics(): Diagnostic[] { + return scannerParserSource.diagnostics(); } - function getRewindPoint() { - // Get a rewind point for our new text reader and for our old source unit cursor. - var rewindPoint = _scannerParserSource.getRewindPoint(); - + function tryParse(callback: () => T): T { // Clone our cursor. That way we can restore to that point if the parser needs to rewind. - rewindPoint.oldSourceUnitCursor = cloneSyntaxCursor(_oldSourceUnitCursor); - - _outstandingRewindPointCount++; - return rewindPoint; - } - - function rewind(rewindPoint: IParserRewindPoint): void { - // Restore our state to the values when the rewind point was created. - - // Reset the cursor to what it was when we got the rewind point. Make sure to return - // our existing cursor to the pool so it can be reused. - returnSyntaxCursor(_oldSourceUnitCursor); - _oldSourceUnitCursor = rewindPoint.oldSourceUnitCursor; - - // Clear the cursor that the rewind point points to. This way we don't try - // to return it in 'releaseRewindPoint'. - rewindPoint.oldSourceUnitCursor = undefined; - - _scannerParserSource.rewind(rewindPoint); - } - - function releaseRewindPoint(rewindPoint: IParserRewindPoint): void { - if (rewindPoint.oldSourceUnitCursor) { - returnSyntaxCursor(rewindPoint.oldSourceUnitCursor); + var savedOldSourceUnitCursor = cloneSyntaxCursor(oldSourceUnitCursor); + + // Now defer to our underlying scanner source to actually invoke the callback. That + // way, if the parser decides to rewind, both the scanner source and this incremental + // source will rewind appropriately. + var result = scannerParserSource.tryParse(callback); + + if (!result) { + // We're rewinding. Reset the cursor to what it was when we got the rewind point. + // Make sure to return our existing cursor to the pool so it can be reused. + returnSyntaxCursor(oldSourceUnitCursor); + oldSourceUnitCursor = savedOldSourceUnitCursor; + } + else { + // We're not rewinding. Return the cloned original cursor back to the pool. + returnSyntaxCursor(savedOldSourceUnitCursor); } - _scannerParserSource.releaseRewindPoint(rewindPoint); - _outstandingRewindPointCount--; - Debug.assert(_outstandingRewindPointCount >= 0); - } - - function isPinned() { - return _outstandingRewindPointCount > 0; + return result; } function trySynchronizeCursorToPosition() { - // If we're currently pinned, then do not want to touch the cursor. Here's why. First, - // recall that we're 'pinned' when we're speculatively parsing. So say we were to allow - // returning old nodes/tokens while speculatively parsing. Then, the parser might start - // mutating the nodes and tokens we returned (i.e. by setting their parents). Then, - // when we rewound, those nodes and tokens would still have those updated parents. - // Parents which we just decided we did *not* want to parse (hence why we rewound). For - // Example, say we have something like: - // - // var v = fe; // note: this is not generic. - // - // When incrementally parsing, we will need to speculatively parse to determine if the - // above is generic. This will cause us to reuse the "a, b, c" tokens, and set their - // parent to a new type argument list. A type argument list we will then throw away once - // we decide that it isn't actually generic. We will have now 'broken' the original tree. - // - // As such, the rule is simple. We only return nodes/tokens from teh original tree if - // we know the parser will accept and consume them and never rewind back before them. - if (isPinned()) { - return false; - } - var absolutePos = absolutePosition(); while (true) { - if (_oldSourceUnitCursor.isFinished()) { + if (oldSourceUnitCursor.isFinished()) { // Can't synchronize the cursor to the current position if the cursor is finished. return false; } // Start with the current node or token the cursor is pointing at. - var currentNodeOrToken = _oldSourceUnitCursor.currentNodeOrToken(); + var currentNodeOrToken = oldSourceUnitCursor.currentNodeOrToken(); // Node, move the cursor past any nodes or tokens that intersect the change range // 1) they are never reusable. @@ -203,10 +149,10 @@ module TypeScript.IncrementalParser { // of the incremental algorithm. if ((currentNodeOrToken).intersectsChange) { if (isNode(currentNodeOrToken)) { - _oldSourceUnitCursor.moveToFirstChild(); + oldSourceUnitCursor.moveToFirstChild(); } else { - _oldSourceUnitCursor.moveToNextSibling(); + oldSourceUnitCursor.moveToNextSibling(); } continue; } @@ -234,13 +180,13 @@ module TypeScript.IncrementalParser { // able to break up that token any further and we should just move to the next // token. if (currentNodeOrTokenFullEnd <= absolutePos || isToken(currentNodeOrToken)) { - _oldSourceUnitCursor.moveToNextSibling(); + oldSourceUnitCursor.moveToNextSibling(); } else { // We have a node, and it started before our absolute pos, and ended after our // pos. Try to crumble this node to see if we'll be able to skip the first node // or token contained within. - _oldSourceUnitCursor.moveToFirstChild(); + oldSourceUnitCursor.moveToFirstChild(); } } } @@ -269,12 +215,12 @@ module TypeScript.IncrementalParser { // Either we couldn't read from the old source unit, or we weren't able to successfully // get a token from it. In this case we need to read a token from the underlying text. - return _scannerParserSource.currentToken(); + return scannerParserSource.currentToken(); } function currentContextualToken(): ISyntaxToken { // Just delegate to the underlying source to handle - return _scannerParserSource.currentContextualToken(); + return scannerParserSource.currentContextualToken(); } function tryGetNodeFromOldSourceUnit(): ISyntaxNode { @@ -285,7 +231,7 @@ module TypeScript.IncrementalParser { // c) it does not have a regex token in it. // d) we are still in the same strict or non-strict state that the node was originally parsed in. while (true) { - var node = _oldSourceUnitCursor.currentNode(); + var node = oldSourceUnitCursor.currentNode(); if (node === undefined) { // Couldn't even read a node, nothing to return. return undefined; @@ -300,7 +246,7 @@ module TypeScript.IncrementalParser { // We couldn't use currentNode. Try to move to its first child (in case that's a // node). If it is we can try using that. Otherwise we'll just bail out in the // next iteration of the loop. - _oldSourceUnitCursor.moveToFirstChild(); + oldSourceUnitCursor.moveToFirstChild(); } } @@ -330,7 +276,7 @@ module TypeScript.IncrementalParser { function tryGetTokenFromOldSourceUnit(): ISyntaxToken { // get the current token that the cursor is pointing at. - var token = _oldSourceUnitCursor.currentToken(); + var token = oldSourceUnitCursor.currentToken(); return canReuseTokenFromOldSourceUnit(token) ? token : undefined; } @@ -344,44 +290,44 @@ module TypeScript.IncrementalParser { } // Couldn't peek this far in the old tree. Get the token from the new text. - return _scannerParserSource.peekToken(n); + return scannerParserSource.peekToken(n); } function tryPeekTokenFromOldSourceUnit(n: number): ISyntaxToken { // clone the existing cursor so we can move it forward and then restore ourselves back // to where we started from. - var cursorClone = cloneSyntaxCursor(_oldSourceUnitCursor); + var cursorClone = cloneSyntaxCursor(oldSourceUnitCursor); var token = tryPeekTokenFromOldSourceUnitWorker(n); - returnSyntaxCursor(_oldSourceUnitCursor); - _oldSourceUnitCursor = cursorClone; + returnSyntaxCursor(oldSourceUnitCursor); + oldSourceUnitCursor = cursorClone; return token; } function tryPeekTokenFromOldSourceUnitWorker(n: number): ISyntaxToken { // First, make sure the cursor is pointing at a token. - _oldSourceUnitCursor.moveToFirstToken(); + oldSourceUnitCursor.moveToFirstToken(); // Now, keep walking forward to successive tokens. for (var i = 0; i < n; i++) { - var interimToken = _oldSourceUnitCursor.currentToken(); + var interimToken = oldSourceUnitCursor.currentToken(); if (!canReuseTokenFromOldSourceUnit(interimToken)) { return undefined; } - _oldSourceUnitCursor.moveToNextSibling(); + oldSourceUnitCursor.moveToNextSibling(); } - var token = _oldSourceUnitCursor.currentToken(); + var token = oldSourceUnitCursor.currentToken(); return canReuseTokenFromOldSourceUnit(token) ? token : undefined; } function consumeNodeOrToken(nodeOrToken: ISyntaxNodeOrToken): void { - _scannerParserSource.consumeNodeOrToken(nodeOrToken); + scannerParserSource.consumeNodeOrToken(nodeOrToken); } return { @@ -393,282 +339,15 @@ module TypeScript.IncrementalParser { currentToken: currentToken, currentContextualToken: currentContextualToken, peekToken: peekToken, - consumeNodeOrToken: consumeNodeOrToken, - getRewindPoint: getRewindPoint, - rewind: rewind, - releaseRewindPoint: releaseRewindPoint, - tokenDiagnostics: tokenDiagnostics, - release: release - }; - } - - interface SyntaxCursorPiece { - element: ISyntaxElement; - indexInParent: number - } - - function createSyntaxCursorPiece(element: ISyntaxElement, indexInParent: number) { - return { element: element, indexInParent: indexInParent }; - } - - // Pool syntax cursors so we don't churn too much memory when we need temporary cursors. - // i.e. when we're speculatively parsing, we can cheaply get a pooled cursor and then - // return it when we no longer need it. - var syntaxCursorPool: SyntaxCursor[] = []; - var syntaxCursorPoolCount: number = 0; - - function returnSyntaxCursor(cursor: SyntaxCursor): void { - // Make sure the cursor isn't holding onto any syntax elements. We don't want to leak - // them when we return the cursor to the pool. - cursor.clean(); - - syntaxCursorPool[syntaxCursorPoolCount] = cursor; - syntaxCursorPoolCount++; - } - - function getSyntaxCursor(): SyntaxCursor { - // Get an existing cursor from the pool if we have one. Or create a new one if we don't. - var cursor = syntaxCursorPoolCount > 0 - ? syntaxCursorPool[syntaxCursorPoolCount - 1] - : createSyntaxCursor(); - - if (syntaxCursorPoolCount > 0) { - // If we reused an existing cursor, take it out of the pool so no one else uses it. - syntaxCursorPoolCount--; - syntaxCursorPool[syntaxCursorPoolCount] = undefined; - } - - return cursor; - } - - function cloneSyntaxCursor(cursor: SyntaxCursor): SyntaxCursor { - var newCursor = getSyntaxCursor(); - - // Make the new cursor a *deep* copy of the cursor passed in. This ensures each cursor can - // be moved without affecting the other. - newCursor.deepCopyFrom(cursor); - - return newCursor; - } - - interface SyntaxCursor { - pieces: SyntaxCursorPiece[]; - - clean(): void; - isFinished(): boolean; - moveToFirstChild(): void; - moveToFirstToken(): void; - moveToNextSibling(): void; - currentNodeOrToken(): ISyntaxNodeOrToken; - currentNode(): ISyntaxNode; - currentToken(): ISyntaxToken; - pushElement(element: ISyntaxElement, indexInParent: number): void; - deepCopyFrom(other: SyntaxCursor): void; - } - - function createSyntaxCursor(): SyntaxCursor { - // Our list of path pieces. The piece pointed to by 'currentPieceIndex' must be a node or - // token. However, pieces earlier than that may point to list nodes. - // - // For perf we reuse pieces as much as possible. i.e. instead of popping items off the - // list, we just will change currentPieceIndex so we can reuse that piece later. - var pieces: SyntaxCursorPiece[] = []; - var currentPieceIndex: number = -1; - - // Cleans up this cursor so that it doesn't have any references to actual syntax nodes. - // This sould be done before returning the cursor to the pool so that the Parser module - // doesn't unnecessarily keep old syntax trees alive. - function clean(): void { - for (var i = 0, n = pieces.length; i < n; i++) { - var piece = pieces[i]; - - if (piece.element === undefined) { - break; - } - - piece.element = undefined; - piece.indexInParent = -1; - } - - currentPieceIndex = -1; - } - - // Makes this cursor into a deep copy of the cursor passed in. - function deepCopyFrom(other: SyntaxCursor): void { - for (var i = 0, n = other.pieces.length; i < n; i++) { - var piece = other.pieces[i]; - - if (piece.element === undefined) { - break; - } - - pushElement(piece.element, piece.indexInParent); - } - } - - function isFinished(): boolean { - return currentPieceIndex < 0; - } - - function currentNodeOrToken(): ISyntaxNodeOrToken { - if (isFinished()) { - return undefined; - } - - var result = pieces[currentPieceIndex].element; - - // The current element must always be a node or a token. - return result; - } - - function currentNode(): ISyntaxNode { - var element = currentNodeOrToken(); - return isNode(element) ? element : undefined; - } - - function isEmptyList(element: ISyntaxElement) { - return isList(element) && (element).length === 0; - } - - function moveToFirstChild() { - var nodeOrToken = currentNodeOrToken(); - if (nodeOrToken === undefined) { - return; - } - - if (isToken(nodeOrToken)) { - // If we're already on a token, there's nothing to do. - return; - } - - // Either the node has some existent child, then move to it. if it doesn't, then it's - // an empty node. Conceptually the first child of an empty node is really just the - // next sibling of the empty node. - for (var i = 0, n = childCount(nodeOrToken); i < n; i++) { - var child = childAt(nodeOrToken, i); - if (child && !isEmptyList(child)) { - // Great, we found a real child. Push that. - pushElement(child, /*indexInParent:*/ i); - - // If it was a list, make sure we're pointing at its first element. We know we - // must have one because this is a non-shared list. - moveToFirstChildIfList(); - return; - } - } - - // This element must have been an empty node. Moving to its 'first child' is equivalent to just - // moving to the next sibling. - moveToNextSibling(); - } - - function moveToNextSibling(): void { - while (!isFinished()) { - // first look to our parent and see if it has a sibling of us that we can move to. - var currentPiece = pieces[currentPieceIndex]; - var parent = currentPiece.element.parent; - - // We start searching at the index one past our own index in the parent. - for (var i = currentPiece.indexInParent + 1, n = childCount(parent); i < n; i++) { - var sibling = childAt(parent, i); - - if (sibling && !isEmptyList(sibling)) { - // We found a good sibling that we can move to. Just reuse our existing piece - // so we don't have to push/pop. - currentPiece.element = sibling; - currentPiece.indexInParent = i; - - // The sibling might have been a list. Move to it's first child. - moveToFirstChildIfList(); - return; - } - } - - // Didn't have a sibling for this element. Go up to our parent and get its sibling. - - // Clear the data from the old piece. We don't want to keep any elements around - // unintentionally. - currentPiece.element = undefined; - currentPiece.indexInParent = -1; - - // Point at the parent. if we move past the top of the path, then we're finished. - currentPieceIndex--; - } - } - - function moveToFirstChildIfList(): void { - var element = pieces[currentPieceIndex].element; - - if (isList(element)) { - // We cannot ever get an empty list in our piece path. Empty lists are 'shared' and - // we make sure to filter that out before pushing any children. - pushElement(childAt(element, 0), /*indexInParent:*/ 0); - } - } - - function pushElement(element: ISyntaxElement, indexInParent: number): void { - currentPieceIndex++; - - // Reuse an existing piece if we have one. Otherwise, push a new piece to our list. - if (currentPieceIndex === pieces.length) { - pieces.push(createSyntaxCursorPiece(element, indexInParent)); - } - else { - var piece = pieces[currentPieceIndex]; - piece.element = element; - piece.indexInParent = indexInParent; - } - } - - function moveToFirstToken(): void { - while (!isFinished()) { - var element = pieces[currentPieceIndex].element; - if (isNode(element)) { - moveToFirstChild(); - continue; - } - - return; - } - } - - function currentToken(): ISyntaxToken { - moveToFirstToken(); - - var element = currentNodeOrToken(); - return element; - } - - return { - pieces: pieces, - clean: clean, - isFinished: isFinished, - moveToFirstChild: moveToFirstChild, - moveToFirstToken: moveToFirstToken, - moveToNextSibling: moveToNextSibling, - currentNodeOrToken: currentNodeOrToken, - currentNode: currentNode, - currentToken: currentToken, - pushElement: pushElement, - deepCopyFrom: deepCopyFrom + consumeNodeOrToken: scannerParserSource.consumeNodeOrToken, + tryParse: tryParse, + diagnostics: diagnostics }; } - // A simple walker we use to hit all the tokens of a node and update their positions when they - // are reused in a different location because of an incremental parse. - - class TokenCollectorWalker extends SyntaxWalker { - public tokens: ISyntaxToken[] = []; - - public visitToken(token: ISyntaxToken): void { - this.tokens.push(token); - } - } - - var tokenCollectorWalker = new TokenCollectorWalker(); function updateTokenPositionsAndMarkElements(element: ISyntaxElement, changeStart: number, changeRangeOldEnd: number, delta: number, fullStart: number): void { - // First, try to skip past any elements that we dont' need to move. We don't need to - // move any elements that don't start after the end of the change range. + // First, try to skip past any elements that we dont' need to move. We don't need to + // move any elements that don't start after the end of the change range. if (fullStart > changeRangeOldEnd) { // Note, we only move elements that are truly after the end of the change range. // We consider elements that are touching the end of the change range to be unusable. @@ -732,29 +411,13 @@ module TypeScript.IncrementalParser { forceUpdateTokenPosition(nodeOrToken, delta); } else { - var node = nodeOrToken; - var tokens = getTokens(node); + var tokens = getTokens(nodeOrToken); for (var i = 0, n = tokens.length; i < n; i++) { forceUpdateTokenPosition(tokens[i], delta); } } } - function getTokens(node: ISyntaxNode): ISyntaxToken[] { - var tokens = node.__cachedTokens; - if (!tokens) { - tokens = []; - tokenCollectorWalker.tokens = tokens; - - visitNodeOrToken(tokenCollectorWalker, node); - - node.__cachedTokens = tokens; - tokenCollectorWalker.tokens = undefined; - } - - return tokens; - } - export function parse(oldSyntaxTree: SyntaxTree, textChangeRange: TextChangeRange, newText: ISimpleText): SyntaxTree { if (textChangeRange.isUnchanged()) { return oldSyntaxTree; diff --git a/src/services/syntax/parser.ts b/src/services/syntax/parser.ts index be71c720de24a..537ebd66f0643 100644 --- a/src/services/syntax/parser.ts +++ b/src/services/syntax/parser.ts @@ -59,95 +59,47 @@ module TypeScript.Parser { // The current token reinterpretted contextually based on where the parser is. If the // source is on a / or /= token, then it can be reinterpretted as a regex token. If the - // source is on a > token, it may be reinterpretted to: >> >>> >= >>= >>>= + // source is on a > token, it may be reinterpretted to: >> >>> >= >>= >>>=. If the + // source is on a }, it will be reinterpretted as a template middle/end token. currentContextualToken(): ISyntaxToken; + // Called to move the source to the next node or token once the parser has consumed the + // current one. + consumeNodeOrToken(node: ISyntaxNodeOrToken): void; + // Peek any number of tokens ahead from the current location in source. peekToken(0) is // equivalent to 'currentToken', peekToken(1) is the next token, peekToken(2) the token // after that, etc. If the caller peeks past the end of the text, then EndOfFile tokens // will be returned. peekToken(n: number): ISyntaxToken; + // Used by the parser to tell the source that it is currently speculatively parsing. The + // source will save its current state and then invoke the passed in callback. If the call + // back returned 'undefined', then the source will rollback to the exact state it was in + // prior to calling the callback. If the callback returns an actual node then the source + // will stay in its current state and then return that node back out of this function. + tryParse(callback: () => T): T; + // Called to move the source to the next node or token once the parser has consumed the // current one. consumeNodeOrToken(node: ISyntaxNodeOrToken): void; - // Gets a rewind point that the parser can use to move back to after it speculatively - // parses something. The source guarantees that if the parser calls 'rewind' with that - // point that it will be mostly in the same state that it was in when 'getRewindPoint' - // was called. i.e. calling currentToken, peekToken, tokenDiagnostics, etc. will result - // in the same values. One allowed exemption to this is 'currentNode'. If a rewind point - // is requested and rewound, then getting the currentNode may not be possible. However, - // as this is purely a performance optimization, it will not affect correctness. - // - // Note: that rewind points are not free (but they should also not be too expensive). So - // they should be used judiciously. While a rewind point is held by the parser, the source - // is not free to do things that it would normally do. For example, it cannot throw away - // tokens that it has scanned on or after the rewind point as it must keep them alive for - // the parser to move back to. - // - // Rewind points also work in a stack fashion. The first rewind point given out must be - // the last rewind point released. Do not release them out of order, or bad things can - // happen. - // - // Do *NOT* forget to release a rewind point. Always put them in a finally block to ensure - // that they are released. If they are not released, things will still work, you will just - // consume far more memory than necessary. - getRewindPoint(): IRewindPoint; - - // Rewinds the source to the position and state it was at when this rewind point was created. - // This does not need to be called if the parser decides it does not need to rewind. For - // example, the parser may speculatively parse out a lambda expression when it sees something - // ambiguous like "(a = b, c = ...". If it succeeds parsing that as a lambda, then it will - // just return that result. However, if it fails *then* it will rewind and try it again as - // a parenthesized expression. - rewind(rewindPoint: IRewindPoint): void; - - // Called when the parser is done speculative parsing and no longer needs the rewind point. - // Must be called for every rewind point retrived. - releaseRewindPoint(rewindPoint: IRewindPoint): void; - // Retrieves the diagnostics generated while the source was producing nodes or tokens. // Should generally only be called after the document has been completely parsed. - tokenDiagnostics(): Diagnostic[]; - - release(): void; - } - - // Information the parser needs to effectively rewind. - export interface IRewindPoint { - } - - interface IParserRewindPoint extends IRewindPoint { - // As we speculatively parse, we may build up diagnostics. When we rewind we want to - // 'forget' that information.In order to do that we store the count of diagnostics and - // when we start speculating, and we reset to that count when we're done. That way the - // speculative parse does not affect any further results. - diagnosticsCount: number; - - // As we speculatively parse we may end up adding additional skipped tokens to the - // _skippedTokens array in the parser. When we rewind we don't want those items in the - // array. We may also, during speculative parsing, attach our skipped tokens to some - // new token. When we rewind we need to restore whatever skipped tokens we started with. - skippedTokens: ISyntaxToken[]; + diagnostics(): Diagnostic[]; } // Contains the actual logic to parse typescript/javascript. This is the code that generally // represents the logic necessary to handle all the language grammar constructs. When the // language changes, this should generally only be the place necessary to fix up. function createParseSyntaxTree(): (source: IParserSource, isDeclaration: boolean) => SyntaxTree { - // Name of the file we're parsing. - var fileName: string; - // Underlying source where we pull nodes and tokens from. var source: IParserSource; - var languageVersion: ts.ScriptTarget; - // TODO: do we need to store/restore this when speculative parsing? I don't think so. The // parsing logic already handles storing/restoring this and should work properly even if we're // speculative parsing. - var listParsingState: number = 0; + var listParsingState: ListParsingState = 0; // Whether or not we are in strict parsing mode. All that changes in strict parsing mode is // that some tokens that would be considered identifiers may be considered keywords. When @@ -188,8 +140,8 @@ module TypeScript.Parser { // [~GeneratorParameter]BindingIdentifier[?Yield]Initializer[In, ?Yield]opt // // Here this is saying that if the GeneratorParameter context flag is set, that we should - // explicitly set the 'yield' context flag to false before calling into the BindingIdentifier - // and we should explicitly unset the 'yield' context flag before calling into the Initializer. + // explicitly set the 'yield' context flag to true before calling into the 'BindingIdentifier' + // and we should explicitly unset the 'yield' context flag before calling into the 'Initializer'. // production. Conversely, if the GeneratorParameter context flag is not set, then we // should leave the 'yield' context flag alone. // @@ -206,7 +158,11 @@ module TypeScript.Parser { // started at. var diagnostics: Diagnostic[] = []; - var _skippedTokens: ISyntaxToken[] = undefined; + // Any tokens we decided to skip during list (when we can't find any parse function that + // will accept the token). These tokens will be attached to the next token we actually + // consume. If there are any skipped tokens at the end of the file, they will be attached + // to the EndOfFile token. + var skippedTokens: ISyntaxToken[] = undefined; function setContextFlag(val: boolean, flag: ParserContextFlags) { if (val) { @@ -256,7 +212,7 @@ module TypeScript.Parser { function inAsyncContext() { return (contextFlags & ParserContextFlags.Async) !== 0; } - + function allowInAnd(func: () => T): T { if (inDisallowInContext()) { setDisallowInContext(false); @@ -331,9 +287,7 @@ module TypeScript.Parser { function parseSyntaxTree(_source: IParserSource, isDeclaration: boolean): SyntaxTree { // First, set up our state. - fileName = _source.fileName; source = _source; - languageVersion = source.languageVersion; // Now actually parse the tree. var result = parseSyntaxTreeWorker(isDeclaration); @@ -341,73 +295,63 @@ module TypeScript.Parser { // Now, clear out our state so that our singleton parser doesn't keep things alive. diagnostics = []; contextFlags = 0; - fileName = undefined; - source.release(); source = undefined; - _source = undefined; return result; } function parseSyntaxTreeWorker(isDeclaration: boolean): SyntaxTree { var sourceUnit = parseSourceUnit(); + setupParentsForSyntaxNodeOrToken(sourceUnit); - var allDiagnostics = source.tokenDiagnostics().concat(diagnostics); + var allDiagnostics = source.diagnostics().concat(diagnostics); allDiagnostics.sort((a: Diagnostic, b: Diagnostic) => a.start() - b.start()); - return new SyntaxTree(sourceUnit, isDeclaration, allDiagnostics, fileName, source.text, languageVersion); + return new SyntaxTree(sourceUnit, isDeclaration, allDiagnostics, source.fileName, source.text, source.languageVersion); } - function getRewindPoint(): IParserRewindPoint { - var rewindPoint = source.getRewindPoint(); - - // See the comments in IParserRewindPoint for the explanation on why we need to store - // this data, and what it is used for. - rewindPoint.diagnosticsCount = diagnostics.length; - rewindPoint.skippedTokens = _skippedTokens ? _skippedTokens.slice(0) : undefined; + function setupParentsForElement(element: ISyntaxElement, parent: ISyntaxElement) { + if (element) { + if (element.parent === parent) { + return; + } + element.parent = parent; - return rewindPoint; + if (isList(element)) { + setupParentsForList(element); + } + else { + setupParentsForSyntaxNodeOrToken(element); + } + } } - function rewind(rewindPoint: IParserRewindPoint): void { - source.rewind(rewindPoint); - - diagnostics.length = rewindPoint.diagnosticsCount; - _skippedTokens = rewindPoint.skippedTokens; + function setupParentsForList(list: ISyntaxNodeOrToken[]) { + for (var i = 0, n = list.length; i < n; i++) { + setupParentsForElement(list[i], list); + } } - function releaseRewindPoint(rewindPoint: IParserRewindPoint): void { - // Debug.assert(listParsingState === rewindPoint.listParsingState); - // Debug.assert(isInStrictMode === rewindPoint.isInStrictMode); - - source.releaseRewindPoint(rewindPoint); + function setupParentsForSyntaxNodeOrToken(nodeOrToken: ISyntaxNodeOrToken) { + for (var i = 0, n = nodeOrToken.childCount; i < n; i++) { + setupParentsForElement(nodeOrToken.childAt(i), nodeOrToken); + } } - function currentNode(): ISyntaxNode { - // If we have any outstanding tokens, then don't reuse a node. - // TODO(cyrusn): This may be too conservative. Perhaps we could reuse hte node and - // attach the skipped tokens in front? For now though, being conservative is nice and - // safe, and likely won't ever affect perf. - if (!_skippedTokens) { - var node = source.currentNode(); - - // We can only reuse a node if it was parsed under the same strict mode that we're - // currently in. i.e. if we originally parsed a node in non-strict mode, but then - // the user added 'using strict' at the top of the file, then we can't use that node - // again as the presense of strict mode may cause us to parse the tokens in the file - // differetly. - // - // Note: we *can* reuse tokens when the strict mode changes. That's because tokens - // are unaffected by strict mode. It's just the parser will decide what to do with it - // differently depending on what mode it is in. - if (node && - parserContextFlags(node) === contextFlags) { + function tryParse(callback: () => T): T { + // See the comments in IParserRewindPoint for the explanation on why we need to store + // this data, and what it is used for. + var savedDiagnosticsCount = diagnostics.length; + var savedSkippedTokens = skippedTokens ? skippedTokens.slice(0) : undefined; - return node; - } + var result = source.tryParse(callback); + + if (!result) { + diagnostics.length = savedDiagnosticsCount; + skippedTokens = savedSkippedTokens; } - return undefined; + return result; } function currentToken(): ISyntaxToken { @@ -425,8 +369,8 @@ module TypeScript.Parser { } function skipToken(token: ISyntaxToken): void { - _skippedTokens = _skippedTokens || []; - _skippedTokens.push(token); + skippedTokens = skippedTokens || []; + skippedTokens.push(token); // directly tell the source to just consume the token we're skipping. i.e. do not // call 'consumeToken'. Doing so would attempt to add any previous skipped tokens @@ -443,9 +387,9 @@ module TypeScript.Parser { // Now, if we had any skipped tokens, we want to add them to the start of this token // we're consuming. - if (_skippedTokens) { - token = addSkippedTokensBeforeToken(token, _skippedTokens); - _skippedTokens = undefined; + if (skippedTokens) { + token = addSkippedTokensBeforeToken(token, skippedTokens); + skippedTokens = undefined; } return token; @@ -495,9 +439,10 @@ module TypeScript.Parser { } } - function consumeNode(node: ISyntaxNode): void { - Debug.assert(_skippedTokens === undefined); + function consumeNode(node: ISyntaxNode): ISyntaxNode { + Debug.assert(skippedTokens === undefined); source.consumeNodeOrToken(node); + return node; } //this method is called very frequently @@ -669,7 +614,7 @@ module TypeScript.Parser { // So, if we have any skipped tokens, then the position of the empty token should be // the position of the first skipped token we have. Otherwise it's just at the position // of the parser. - var fullStart = _skippedTokens ? _skippedTokens[0].fullStart() : source.absolutePosition(); + var fullStart = skippedTokens ? skippedTokens[0].fullStart() : source.absolutePosition(); return Syntax.emptyToken(kind, fullStart); } @@ -707,16 +652,16 @@ module TypeScript.Parser { } } - return new Diagnostic(fileName, source.text.lineMap(), start(token, source.text), width(token), diagnosticCode, args); + return new Diagnostic(source.fileName, source.text.lineMap(), start(token, source.text), width(token), diagnosticCode, args); } function getBinaryExpressionPrecedence(tokenKind: SyntaxKind): BinaryExpressionPrecedence { switch (tokenKind) { - case SyntaxKind.BarBarToken: return BinaryExpressionPrecedence.LogicalOrExpressionPrecedence; - case SyntaxKind.AmpersandAmpersandToken: return BinaryExpressionPrecedence.LogicalAndExpressionPrecedence; - case SyntaxKind.BarToken: return BinaryExpressionPrecedence.BitwiseOrExpressionPrecedence; - case SyntaxKind.CaretToken: return BinaryExpressionPrecedence.BitwiseExclusiveOrExpressionPrecedence; - case SyntaxKind.AmpersandToken: return BinaryExpressionPrecedence.BitwiseAndExpressionPrecedence; + case SyntaxKind.BarBarToken: return BinaryExpressionPrecedence.LogicalOrExpressionPrecedence; + case SyntaxKind.AmpersandAmpersandToken: return BinaryExpressionPrecedence.LogicalAndExpressionPrecedence; + case SyntaxKind.BarToken: return BinaryExpressionPrecedence.BitwiseOrExpressionPrecedence; + case SyntaxKind.CaretToken: return BinaryExpressionPrecedence.BitwiseExclusiveOrExpressionPrecedence; + case SyntaxKind.AmpersandToken: return BinaryExpressionPrecedence.BitwiseAndExpressionPrecedence; case SyntaxKind.EqualsEqualsToken: case SyntaxKind.ExclamationEqualsToken: case SyntaxKind.EqualsEqualsEqualsToken: @@ -734,7 +679,7 @@ module TypeScript.Parser { case SyntaxKind.GreaterThanGreaterThanGreaterThanToken: return BinaryExpressionPrecedence.ShiftExpressionPrecdence; case SyntaxKind.PlusToken: - case SyntaxKind.MinusToken: + case SyntaxKind.MinusToken: return BinaryExpressionPrecedence.AdditiveExpressionPrecedence; case SyntaxKind.AsteriskToken: case SyntaxKind.SlashToken: @@ -754,9 +699,9 @@ module TypeScript.Parser { // Note: any skipped tokens produced after the end of all the module elements will be // added as skipped trivia to the start of the EOF token. var moduleElements = parseSyntaxList(ListParsingState.SourceUnit_ModuleElements, updateStrictModeState); - + setStrictModeContext(savedIsInStrictMode); - + var sourceUnit = new SourceUnitSyntax(contextFlags, moduleElements, consumeToken(currentToken())); if (Debug.shouldAssert(AssertionLevel.Aggressive)) { @@ -789,22 +734,12 @@ module TypeScript.Parser { } function isModuleElement(inErrorRecovery: boolean): boolean { - if (SyntaxUtilities.isModuleElement(currentNode())) { - return true; - } - var _modifierCount = modifierCount(); return isInterfaceEnumClassModuleImportExportOrTypeAlias(_modifierCount) || - isStatement(_modifierCount, inErrorRecovery); + isStatement(_modifierCount, inErrorRecovery); } function tryParseModuleElement(inErrorRecovery: boolean): IModuleElementSyntax { - var node = currentNode(); - if (SyntaxUtilities.isModuleElement(node)) { - consumeNode(node); - return node; - } - var _currentToken = currentToken(); var _modifierCount = modifierCount(); @@ -904,92 +839,21 @@ module TypeScript.Parser { function isExternalModuleReference(): boolean { return currentToken().kind === SyntaxKind.RequireKeyword && - peekToken(1).kind === SyntaxKind.OpenParenToken; + peekToken(1).kind === SyntaxKind.OpenParenToken; } function parseExternalModuleReference(): ExternalModuleReferenceSyntax { return new ExternalModuleReferenceSyntax(contextFlags, - eatToken(SyntaxKind.RequireKeyword), eatToken(SyntaxKind.OpenParenToken), eatToken(SyntaxKind.StringLiteral), eatToken(SyntaxKind.CloseParenToken)); + eatToken(SyntaxKind.RequireKeyword), + eatToken(SyntaxKind.OpenParenToken), + parseExpression(), + eatToken(SyntaxKind.CloseParenToken)); } function parseModuleNameModuleReference(): ModuleNameModuleReferenceSyntax { return new ModuleNameModuleReferenceSyntax(contextFlags, parseName(/*allowIdentifierNames:*/ false)); } - function tryParseTypeArgumentList(inExpression: boolean): TypeArgumentListSyntax { - var _currentToken = currentToken(); - if (_currentToken.kind !== SyntaxKind.LessThanToken) { - return undefined; - } - - if (!inExpression) { - // if we're not in an expression, this must be a type argument list. Just parse - // it out as such. - return new TypeArgumentListSyntax(contextFlags, - consumeToken(_currentToken), - parseSeparatedSyntaxList(ListParsingState.TypeArgumentList_Types), - eatToken(SyntaxKind.GreaterThanToken)); - } - - // If we're in an expression, then we only want to consume this as a type argument list - // if we're sure that it's a type arg list and not an arithmetic expression. - - var rewindPoint = getRewindPoint(); - - // We've seen a '<'. Try to parse it out as a type argument list. - var lessThanToken = consumeToken(_currentToken); - var typeArguments = parseSeparatedSyntaxList(ListParsingState.TypeArgumentList_Types); - var greaterThanToken = eatToken(SyntaxKind.GreaterThanToken); - - // We're in a context where '<' could be the start of a type argument list, or part - // of an arithmetic expression. We'll presume it's the latter unless we see the '>' - // and a following token that guarantees that it's supposed to be a type argument list. - if (greaterThanToken.fullWidth() === 0 || !canFollowTypeArgumentListInExpression(currentToken().kind)) { - rewind(rewindPoint); - releaseRewindPoint(rewindPoint); - return undefined; - } - else { - releaseRewindPoint(rewindPoint); - return new TypeArgumentListSyntax(contextFlags, lessThanToken, typeArguments, greaterThanToken); - } - } - - function canFollowTypeArgumentListInExpression(kind: SyntaxKind): boolean { - switch (kind) { - case SyntaxKind.OpenParenToken: // foo( - case SyntaxKind.DotToken: // foo. - // These two cases are the only cases where this token can legally follow a - // type argument list. So we definitely want to treat this as a type arg list. - - case SyntaxKind.CloseParenToken: // foo) - case SyntaxKind.CloseBracketToken: // foo] - case SyntaxKind.ColonToken: // foo: - case SyntaxKind.SemicolonToken: // foo; - case SyntaxKind.CommaToken: // foo, - case SyntaxKind.QuestionToken: // foo? - case SyntaxKind.EqualsEqualsToken: // foo == - case SyntaxKind.EqualsEqualsEqualsToken: // foo === - case SyntaxKind.ExclamationEqualsToken: // foo != - case SyntaxKind.ExclamationEqualsEqualsToken: // foo !== - case SyntaxKind.AmpersandAmpersandToken: // foo && - case SyntaxKind.BarBarToken: // foo || - case SyntaxKind.CaretToken: // foo ^ - case SyntaxKind.AmpersandToken: // foo & - case SyntaxKind.BarToken: // foo | - case SyntaxKind.CloseBraceToken: // foo } - case SyntaxKind.EndOfFileToken: // foo - // these cases can't legally follow a type arg list. However, they're not legal - // expressions either. The user is probably in the middle of a generic type. So - // treat it as such. - return true; - - default: - // Anything else treat as an expression. - return false; - } - } - function parseName(allowIdentifierName: boolean): INameSyntax { return tryParseName(allowIdentifierName) || eatIdentifierToken(); } @@ -1054,35 +918,24 @@ module TypeScript.Parser { function parseEnumDeclaration(): EnumDeclarationSyntax { var openBraceToken: ISyntaxToken; - return new EnumDeclarationSyntax(contextFlags, - parseModifiers(), - eatToken(SyntaxKind.EnumKeyword), - eatIdentifierToken(), + return new EnumDeclarationSyntax(contextFlags, + parseModifiers(), + eatToken(SyntaxKind.EnumKeyword), + eatIdentifierToken(), openBraceToken = eatToken(SyntaxKind.OpenBraceToken), openBraceToken.fullWidth() > 0 ? parseSeparatedSyntaxList(ListParsingState.EnumDeclaration_EnumElements) : [], eatToken(SyntaxKind.CloseBraceToken)); } function isEnumElement(inErrorRecovery: boolean): boolean { - var node = currentNode(); - if (node && node.kind === SyntaxKind.EnumElement) { - return true; - } - return isPropertyName(/*peekToken:*/ 0, inErrorRecovery); } - + function tryParseEnumElementEqualsValueClause(): EqualsValueClauseSyntax { return isEqualsValueClause(/*inParameter*/ false) ? allowInAnd(parseEqualsValueClause) : undefined; } function tryParseEnumElement(inErrorRecovery: boolean): EnumElementSyntax { - var node = currentNode(); - if (node && node.kind === SyntaxKind.EnumElement) { - consumeNode(node); - return node; - } - if (!isPropertyName(/*peekToken:*/ 0, inErrorRecovery)) { return undefined; } @@ -1214,12 +1067,12 @@ module TypeScript.Parser { function parseClassDeclaration(): ClassDeclarationSyntax { var openBraceToken: ISyntaxToken; return new ClassDeclarationSyntax(contextFlags, - parseModifiers(), - eatToken(SyntaxKind.ClassKeyword), - eatIdentifierToken(), - tryParseTypeParameterList(/*requireCompleteTypeParameterList:*/ false), - parseHeritageClauses(/*isClassHeritageClauses:*/ true), - openBraceToken = eatToken(SyntaxKind.OpenBraceToken), + parseModifiers(), + eatToken(SyntaxKind.ClassKeyword), + eatIdentifierToken(), + tryParseTypeParameterList(/*requireCompleteTypeParameterList:*/ false), + parseHeritageClauses(/*isClassHeritageClauses:*/ true), + openBraceToken = eatToken(SyntaxKind.OpenBraceToken), openBraceToken.fullWidth() > 0 ? parseSyntaxList(ListParsingState.ClassDeclaration_ClassElements) : [], eatToken(SyntaxKind.CloseBraceToken)); } @@ -1282,15 +1135,11 @@ module TypeScript.Parser { } function isClassElement(inErrorRecovery: boolean): boolean { - if (SyntaxUtilities.isClassElement(currentNode())) { - return true; - } - return isAtModifier() || - isConstructorDeclaration() || - isAccessor(inErrorRecovery) || - isIndexMemberDeclaration() || - isMemberVariableOrFunctionDeclaration(inErrorRecovery); + isConstructorDeclaration() || + isAccessor(inErrorRecovery) || + isIndexMemberDeclaration() || + isMemberVariableOrFunctionDeclaration(inErrorRecovery); } function isMemberVariableOrFunctionDeclaration(inErrorRecovery: boolean) { @@ -1349,12 +1198,6 @@ module TypeScript.Parser { } function tryParseClassElement(inErrorRecovery: boolean): IClassElementSyntax { - var node = currentNode(); - if (SyntaxUtilities.isClassElement(node)) { - consumeNode(node); - return node; - } - // Have to check for indexers before anything else. That way if we see "[foo:" we // parse it out as an indexer and not a member function or variable. var modifiers = parseModifiers(); @@ -1399,9 +1242,9 @@ module TypeScript.Parser { // Note: if we see an arrow after the close paren, then try to parse out a function // block anyways. It's likely the user just though '=> expr' was legal anywhere a // block was legal. - return new ConstructorDeclarationSyntax(contextFlags, - modifiers, - eatToken(SyntaxKind.ConstructorKeyword), + return new ConstructorDeclarationSyntax(contextFlags, + modifiers, + eatToken(SyntaxKind.ConstructorKeyword), parseCallSignatureWithoutSemicolonOrComma(/*requireCompleteTypeParameterList:*/ false, /*yieldAndGeneratorParameterContext:*/ false, /*asyncContext:*/ false), parseFunctionBody(/*isGenerator:*/ false, /*asyncContext:*/ false)); } @@ -1429,12 +1272,12 @@ module TypeScript.Parser { return false; } - + function parsePropertyDeclaration(modifiers: ISyntaxToken[], propertyName: IPropertyNameSyntax): PropertyDeclarationSyntax { return new PropertyDeclarationSyntax(contextFlags, modifiers, new VariableDeclaratorSyntax(contextFlags, propertyName, - parseOptionalTypeAnnotation(/*allowStringLiteral:*/ false), + parseOptionalTypeAnnotation(/*allowStringLiteral:*/ false), isEqualsValueClause(/*inParameter*/ false) ? allowInAnd(parseEqualsValueClause) : undefined), eatExplicitOrAutomaticSemicolon()); } @@ -1486,8 +1329,8 @@ module TypeScript.Parser { return new ModuleDeclarationSyntax(contextFlags, parseModifiers(), eatToken(SyntaxKind.ModuleKeyword), - parseModuleName(), - openBraceToken = eatToken(SyntaxKind.OpenBraceToken), + parseModuleName(), + openBraceToken = eatToken(SyntaxKind.OpenBraceToken), openBraceToken.fullWidth() > 0 ? parseSyntaxList(ListParsingState.ModuleDeclaration_ModuleElements) : [], eatToken(SyntaxKind.CloseBraceToken)); } @@ -1514,7 +1357,7 @@ module TypeScript.Parser { function parseObjectType(): ObjectTypeSyntax { var openBraceToken: ISyntaxToken; - + return new ObjectTypeSyntax(contextFlags, openBraceToken = eatToken(SyntaxKind.OpenBraceToken), openBraceToken.fullWidth() > 0 ? parseSyntaxList(ListParsingState.ObjectType_TypeMembers) : [], @@ -1529,14 +1372,10 @@ module TypeScript.Parser { } function isTypeMember(inErrorRecovery: boolean): boolean { - if (SyntaxUtilities.isTypeMember(currentNode())) { - return true; - } - return isCallSignature(/*tokenIndex:*/ 0) || - isConstructSignature() || - isIndexSignature(/*tokenIndex:*/ 0) || - isMethodOrPropertySignature(inErrorRecovery); + isConstructSignature() || + isIndexSignature(/*tokenIndex:*/ 0) || + isMethodOrPropertySignature(inErrorRecovery); } function isMethodOrPropertySignature(inErrorRecovery: boolean): boolean { @@ -1568,12 +1407,6 @@ module TypeScript.Parser { } function tryParseTypeMember(inErrorRecovery: boolean): ITypeMemberSyntax { - var node = currentNode(); - if (SyntaxUtilities.isTypeMember(node)) { - consumeNode(node); - return node; - } - if (isCallSignature(/*tokenIndex:*/ 0)) { // A call signature for a type member can both use 'yield' as a parameter name, and // does not have parameter initializers. So we can pass 'false' for both [Yield] @@ -1587,7 +1420,7 @@ module TypeScript.Parser { return parseConstructSignature(); } else if (isIndexSignature(/*tokenIndex:*/ 0)) { - return parseIndexSignature(/*modifiers:*/ []); + return parseIndexSignature(/*modifiers:*/[]); } else if (isMethodOrPropertySignature(inErrorRecovery)) { var propertyName = parsePropertyName(); @@ -1705,7 +1538,7 @@ module TypeScript.Parser { // "implements foo" is not considered a type name. return !isNotHeritageClauseTypeName(); } - + return false; } @@ -1725,11 +1558,11 @@ module TypeScript.Parser { if (modifierCount) { // Any of these keywords following a modifier is definitely a TS construct. switch (peekToken(modifierCount).kind) { - case SyntaxKind.ImportKeyword: - case SyntaxKind.ModuleKeyword: - case SyntaxKind.InterfaceKeyword: - case SyntaxKind.ClassKeyword: - case SyntaxKind.EnumKeyword: + case SyntaxKind.ImportKeyword: + case SyntaxKind.ModuleKeyword: + case SyntaxKind.InterfaceKeyword: + case SyntaxKind.ClassKeyword: + case SyntaxKind.EnumKeyword: case SyntaxKind.ExportKeyword: case SyntaxKind.TypeKeyword: return true; @@ -1775,24 +1608,24 @@ module TypeScript.Parser { case SyntaxKind.ProtectedKeyword: case SyntaxKind.StaticKeyword: - //if (isModifierKind(currentTokenKind)) { - // ERROR RECOVERY - // None of the modifiers are actually keywords. And they might show up in a real - // statement (i.e. "public();"). However, if we see 'public ' then - // that can't possibly be a statement (and instead will be a class element), - // and we should not parse it out here. Note: if there is a newline between the - // elements, then we should not do this. That's because asi might take effect. i.e.: - // - // public - // foo - // - // Are two legal statements in JS. - // - // Also: 'async a' can start an statement, so we want to check for that as well. - var token1 = peekToken(1); - if (!token1.hasLeadingNewLine() && SyntaxFacts.isIdentifierNameOrAnyKeyword(token1)) { - return true; - } + //if (isModifierKind(currentTokenKind)) { + // ERROR RECOVERY + // None of the modifiers are actually keywords. And they might show up in a real + // statement (i.e. "public();"). However, if we see 'public ' then + // that can't possibly be a statement (and instead will be a class element), + // and we should not parse it out here. Note: if there is a newline between the + // elements, then we should not do this. That's because asi might take effect. i.e.: + // + // public + // foo + // + // Are two legal statements in JS. + // + // Also: 'async a' can start an statement, so we want to check for that as well. + var token1 = peekToken(1); + if (!token1.hasLeadingNewLine() && SyntaxFacts.isIdentifierNameOrAnyKeyword(token1)) { + return true; + } } // Check for common things that might appear where we expect a statement, but which we @@ -1808,10 +1641,6 @@ module TypeScript.Parser { } function isStatement(modifierCount: number, inErrorRecovery: boolean): boolean { - if (SyntaxUtilities.isStatement(currentNode())) { - return true; - } - if (isDefinitelyNotStatement()) { return false; } @@ -1850,12 +1679,6 @@ module TypeScript.Parser { } function tryParseStatement(inErrorRecovery: boolean): IStatementSyntax { - var node = currentNode(); - if (SyntaxUtilities.isStatement(node)) { - consumeNode(node); - return node; - } - var _currentToken = currentToken(); var currentTokenKind = _currentToken.kind; return tryParseStatementWorker(_currentToken, currentTokenKind, modifierCount(), inErrorRecovery); @@ -1881,7 +1704,7 @@ module TypeScript.Parser { case SyntaxKind.TryKeyword: return parseTryStatement(_currentToken); case SyntaxKind.DebuggerKeyword: return parseDebuggerStatement(_currentToken); } - + if (isVariableStatement(modifierCount)) { return parseVariableStatement(); } @@ -2044,8 +1867,8 @@ module TypeScript.Parser { var initializer = tokenKind === SyntaxKind.SemicolonToken ? undefined : isVariableDeclaration(tokenKind) - ? disallowInAnd(parseVariableDeclaration) - : disallowInAnd(parseExpression) + ? disallowInAnd(parseVariableDeclaration) + : disallowInAnd(parseExpression) // In order to be a 'for-in' statement, we had to have an initializer of some sort, and // we had to actually get an 'in' keyword. @@ -2139,43 +1962,30 @@ module TypeScript.Parser { var openBraceToken: ISyntaxToken; return new SwitchStatementSyntax(contextFlags, - consumeToken(switchKeyword), + consumeToken(switchKeyword), openParenToken = eatToken(SyntaxKind.OpenParenToken), parseSwitchExpression(openParenToken), - eatToken(SyntaxKind.CloseParenToken), + eatToken(SyntaxKind.CloseParenToken), openBraceToken = eatToken(SyntaxKind.OpenBraceToken), openBraceToken.fullWidth() > 0 ? parseSyntaxList(ListParsingState.SwitchStatement_SwitchClauses) : [], eatToken(SyntaxKind.CloseBraceToken)); } function isSwitchClause(): boolean { - if (SyntaxUtilities.isSwitchClause(currentNode())) { - return true; - } - var currentTokenKind = currentToken().kind; return currentTokenKind === SyntaxKind.CaseKeyword || currentTokenKind === SyntaxKind.DefaultKeyword; } function tryParseSwitchClause(): ISwitchClauseSyntax { - // Debug.assert(isSwitchClause()); - var node = currentNode(); - if (SyntaxUtilities.isSwitchClause(node)) { - consumeNode(node); - return node; - } - var _currentToken = currentToken(); - var kind = _currentToken.kind; - if (kind === SyntaxKind.CaseKeyword) { - return parseCaseSwitchClause(_currentToken); - } - else if (kind === SyntaxKind.DefaultKeyword) { - return parseDefaultSwitchClause(_currentToken); - } - else { - return undefined; + switch (_currentToken.kind) { + case SyntaxKind.CaseKeyword: + return parseCaseSwitchClause(_currentToken); + case SyntaxKind.DefaultKeyword: + return parseDefaultSwitchClause(_currentToken); } + + return undefined; } function parseCaseSwitchClause(caseKeyword: ISyntaxToken): CaseSwitchClauseSyntax { @@ -2186,15 +1996,15 @@ module TypeScript.Parser { return new CaseSwitchClauseSyntax(contextFlags, consumeToken(caseKeyword), allowInAnd(parseExpression), - eatToken(SyntaxKind.ColonToken), + eatToken(SyntaxKind.ColonToken), parseSyntaxList(ListParsingState.SwitchClause_Statements)); } function parseDefaultSwitchClause(defaultKeyword: ISyntaxToken): DefaultSwitchClauseSyntax { // Debug.assert(isDefaultSwitchClause()); - return new DefaultSwitchClauseSyntax(contextFlags, - consumeToken(defaultKeyword), + return new DefaultSwitchClauseSyntax(contextFlags, + consumeToken(defaultKeyword), eatToken(SyntaxKind.ColonToken), parseSyntaxList(ListParsingState.SwitchClause_Statements)); } @@ -2267,7 +2077,7 @@ module TypeScript.Parser { case SyntaxKind.NoSubstitutionTemplateToken: case SyntaxKind.TemplateStartToken: - // For array literals. + // For array literals. case SyntaxKind.OpenBracketToken: // For parenthesized expressions @@ -2295,9 +2105,9 @@ module TypeScript.Parser { case SyntaxKind.SlashToken: case SyntaxKind.SlashEqualsToken: - // Note: if we see a / or /= token then we always consider this an expression. - // The / or /= will actually be the start of a regex that we will contextually - // rescan. + // Note: if we see a / or /= token then we always consider this an expression. + // The / or /= will actually be the start of a regex that we will contextually + // rescan. // Simple epxressions. case SyntaxKind.SuperKeyword: @@ -2412,44 +2222,10 @@ module TypeScript.Parser { } function isVariableDeclarator(): boolean { - var node = currentNode(); - if (node && node.kind === SyntaxKind.VariableDeclarator) { - return true; - } - return isIdentifier(currentToken()); } - function canReuseVariableDeclaratorNode(node: ISyntaxNode) { - if (!node || node.kind !== SyntaxKind.VariableDeclarator) { - return false; - } - - // Very subtle incremental parsing bug. Consider the following code: - // - // var v = new List < A, B - // - // This is actually legal code. It's a list of variable declarators "v = new List() - // - // then we have a problem. "v = new Listnode; - return variableDeclarator.equalsValueClause === undefined; - } - function tryParseVariableDeclarator(): VariableDeclaratorSyntax { - var node = currentNode(); - if (canReuseVariableDeclaratorNode(node)) { - consumeNode(node); - return node; - } - if (!isIdentifier(currentToken())) { return undefined; } @@ -2529,7 +2305,7 @@ module TypeScript.Parser { leftOperand = new BinaryExpressionSyntax(contextFlags, leftOperand, - consumeToken(_currentToken), + consumeToken(_currentToken), parseAssignmentExpressionOrHigher()); } @@ -2584,7 +2360,7 @@ module TypeScript.Parser { if (SyntaxFacts.isAssignmentOperatorToken(operatorToken.kind)) { return new BinaryExpressionSyntax(contextFlags, leftOperand, - consumeToken(operatorToken), + consumeToken(operatorToken), parseAssignmentExpressionOrHigher()); } } @@ -2599,20 +2375,6 @@ module TypeScript.Parser { return parseAwaitExpression(awaitKeyword); } - // We're in a context where 'await expr' is not allowed. However, if we can - // definitely tell that the user was trying to parse a 'await expr' and not - // just a normal expr that start with a 'await' identifier, then parse out - // an 'await expr'. We can then report an error later that they are only - // allowed in async contexts. - // - // for example, if we see 'await(foo)', then we'll have to treat that as an - // invocation expression of something called 'await'. However, if we have - // 'await foo' then that is not legal as a normal expression, so we can - // definitely recognize this as a await expression. - // - // for now we just check if the next token is an identifier. More heuristics - // can be added here later as necessary. We just need to make sure that we - // don't accidently consume something legal. if (isUnambiguouslyYieldOrAwaitExpression()) { return parseAwaitExpression(awaitKeyword); } @@ -2828,7 +2590,7 @@ module TypeScript.Parser { // Precedence is okay, so we'll "take" this operator. // Now skip the operator token we're on. - leftOperand = new BinaryExpressionSyntax(contextFlags, leftOperand, consumeToken(operatorToken), + leftOperand = new BinaryExpressionSyntax(contextFlags, leftOperand, consumeToken(operatorToken), parseBinaryExpressionOrHigher(currentToken(), newPrecedence)); } @@ -2900,7 +2662,7 @@ module TypeScript.Parser { // Because CallExpression and MemberExpression are left recursive, we need to bottom out // of the recursion immediately. So we parse out a primary expression to start with. var expression = parsePrimaryExpression(_currentToken); - return parseMemberExpressionRest(expression); + return parseMemberExpressionRest(expression); } function parseMemberExpressionRest(expression: ILeftHandSideExpressionSyntax): ILeftHandSideExpressionSyntax { @@ -3042,44 +2804,79 @@ module TypeScript.Parser { // Debug.assert(currentToken().kind === SyntaxKind.LessThanToken); // If we have a '<', then only parse this as a arugment list if the type arguments // are complete and we have an open paren. if we don't, rewind and return nothing. - var rewindPoint = getRewindPoint(); + var typeArgumentList = tryParse(speculativeParseTypeArgumentList); + if (!typeArgumentList) { + return undefined; + } - var typeArgumentList = tryParseTypeArgumentList(/*inExpression:*/ true); - var token0 = currentToken(); - var tokenKind = token0.kind; + var _currentToken = currentToken(); + if (_currentToken.kind === SyntaxKind.OpenParenToken) { + return parseArgumentList(typeArgumentList, _currentToken); + } + + // It's not uncommon for a user to type: "Foo." + // + // This is not legal in typescript (as an parameter list must follow the type + // arguments). We want to give a good error message for this as otherwise + // we'll bail out here and give a poor error message when we try to parse this + // as an arithmetic expression. + return new ArgumentListSyntax(contextFlags, typeArgumentList, + createMissingToken(SyntaxKind.OpenParenToken, undefined, DiagnosticCode.A_parameter_list_must_follow_a_generic_type_argument_list_expected), + [], + eatToken(SyntaxKind.CloseParenToken)); + } + + function speculativeParseTypeArgumentList(): TypeArgumentListSyntax { + // If we're in an expression, then we only want to consume this as a type argument list + // if we're sure that it's a type arg list and not an arithmetic expression. - var isOpenParen = tokenKind === SyntaxKind.OpenParenToken; - var isDot = tokenKind === SyntaxKind.DotToken; - var isOpenParenOrDot = isOpenParen || isDot; + // We've seen a '<'. Try to parse it out as a type argument list. + var lessThanToken = consumeToken(currentToken()); + var typeArguments = parseSeparatedSyntaxList(ListParsingState.TypeArgumentList_Types); + var greaterThanToken = tryEatToken(SyntaxKind.GreaterThanToken); - var argumentList: ArgumentListSyntax = undefined; - if (!typeArgumentList || !isOpenParenOrDot) { - // Wasn't generic. Rewind to where we started so this can be parsed as an - // arithmetic expression. - rewind(rewindPoint); - releaseRewindPoint(rewindPoint); + // We're in a context where '<' could be the start of a type argument list, or part + // of an arithmetic expression. We'll presume it's the latter unless we see the '>' + // and a following token that guarantees that it's supposed to be a type argument list. + if (greaterThanToken === undefined || !canFollowTypeArgumentListInExpression(currentToken().kind)) { return undefined; } - else { - Debug.assert(typeArgumentList && isOpenParenOrDot); - releaseRewindPoint(rewindPoint); - // It's not uncommon for a user to type: "Foo." - // - // This is not legal in typescript (as an parameter list must follow the type - // arguments). We want to give a good error message for this as otherwise - // we'll bail out here and give a poor error message when we try to parse this - // as an arithmetic expression. - if (isDot) { - return new ArgumentListSyntax(contextFlags, typeArgumentList, - createMissingToken(SyntaxKind.OpenParenToken, undefined, DiagnosticCode.A_parameter_list_must_follow_a_generic_type_argument_list_expected), - [], - eatToken(SyntaxKind.CloseParenToken)); - } - else { - Debug.assert(token0.kind === SyntaxKind.OpenParenToken); - return parseArgumentList(typeArgumentList, token0); - } + return new TypeArgumentListSyntax(contextFlags, lessThanToken, typeArguments, greaterThanToken); + } + + function canFollowTypeArgumentListInExpression(kind: SyntaxKind): boolean { + switch (kind) { + case SyntaxKind.OpenParenToken: // foo( + case SyntaxKind.DotToken: // foo. + // These two cases are the only cases where this token can legally follow a + // type argument list. So we definitely want to treat this as a type arg list. + + case SyntaxKind.CloseParenToken: // foo) + case SyntaxKind.CloseBracketToken: // foo] + case SyntaxKind.ColonToken: // foo: + case SyntaxKind.SemicolonToken: // foo; + case SyntaxKind.CommaToken: // foo, + case SyntaxKind.QuestionToken: // foo? + case SyntaxKind.EqualsEqualsToken: // foo == + case SyntaxKind.EqualsEqualsEqualsToken: // foo === + case SyntaxKind.ExclamationEqualsToken: // foo != + case SyntaxKind.ExclamationEqualsEqualsToken: // foo !== + case SyntaxKind.AmpersandAmpersandToken: // foo && + case SyntaxKind.BarBarToken: // foo || + case SyntaxKind.CaretToken: // foo ^ + case SyntaxKind.AmpersandToken: // foo & + case SyntaxKind.BarToken: // foo | + case SyntaxKind.CloseBraceToken: // foo } + case SyntaxKind.EndOfFileToken: // foo + // these cases can't legally follow a type arg list. However, they're not legal + // expressions either. The user is probably in the middle of a generic type. So + // treat it as such. + return true; + + default: + // Anything else treat as an expression. + return false; } } @@ -3101,7 +2898,7 @@ module TypeScript.Parser { Debug.assert(openParenToken.kind === SyntaxKind.OpenParenToken && openParenToken.fullWidth() > 0); return new ArgumentListSyntax(contextFlags, - typeArgumentList, + typeArgumentList, consumeToken(openParenToken), parseSeparatedSyntaxList(ListParsingState.ArgumentList_AssignmentExpressions), eatToken(SyntaxKind.CloseParenToken)); @@ -3119,7 +2916,7 @@ module TypeScript.Parser { // cause a missing identiifer to be created), so that we will then consume the // comma and the following list items). var force = currentToken().kind === SyntaxKind.CommaToken; - return (force || isExpression(currentToken())) ? allowInAnd(parseAssignmentExpressionOrHigher) : undefined; + return (force || isExpression(currentToken())) ? allowInAnd(parseAssignmentExpressionOrHigher) : undefined; } function parseElementAccessArgumentExpression(openBracketToken: ISyntaxToken) { @@ -3266,7 +3063,7 @@ module TypeScript.Parser { if (startToken.kind === SyntaxKind.NoSubstitutionTemplateToken) { return startToken; } - + var templateClauses: TemplateClauseSyntax[] = []; do { @@ -3275,7 +3072,7 @@ module TypeScript.Parser { templateClauses.push(parseTemplateClause()); } while (templateClauses[templateClauses.length - 1].templateMiddleOrEndToken.kind === SyntaxKind.TemplateMiddleToken); - + return new TemplateExpressionSyntax(contextFlags, startToken, Syntax.list(templateClauses)); } @@ -3335,28 +3132,24 @@ module TypeScript.Parser { if (isDefinitelyArrowFunctionExpression()) { // We have something like "() =>" or "(a) =>". Definitely a lambda, so parse it // unilaterally as such. - return tryParseParenthesizedArrowFunctionExpressionWorker(/*requiresArrow:*/ false); + return parseParenthesizedArrowFunctionExpressionWorker(/*requireArrow:*/ false); } // Now, look for cases where we're sure it's not an arrow function. This will help save us // a costly parse. + if (!isPossiblyArrowFunctionExpression()) { return undefined; } - // Then, try to actually parse it as a arrow function, and only return if we see an => - var rewindPoint = getRewindPoint(); - - var arrowFunction = tryParseParenthesizedArrowFunctionExpressionWorker(/*requiresArrow:*/ true); - if (arrowFunction === undefined) { - rewind(rewindPoint); - } + return tryParse(speculativeParseParenthesizedArrowFunctionExpression); + } - releaseRewindPoint(rewindPoint); - return arrowFunction; + function speculativeParseParenthesizedArrowFunctionExpression() { + return parseParenthesizedArrowFunctionExpressionWorker(/*requireArrow:*/ true); } - function tryParseParenthesizedArrowFunctionExpressionWorker(requireArrow: boolean): ParenthesizedArrowFunctionExpressionSyntax { + function parseParenthesizedArrowFunctionExpressionWorker(requireArrow: boolean): ParenthesizedArrowFunctionExpressionSyntax { var asyncKeyword = tryEatToken(SyntaxKind.AsyncKeyword); // From the static semantic section: @@ -3367,7 +3160,6 @@ module TypeScript.Parser { // return the result of parsing the lexical token stream matched by CoverParenthesizedExpressionAndArrowParameterList // using ArrowFormalParameters as the goal symbol. var callSignature = parseCallSignatureWithoutSemicolonOrComma(/*requireCompleteTypeParameterList:*/ true, /*yieldAndGeneratorParameterContext:*/ inYieldContext(), /*asyncContext:*/ !!asyncKeyword); - if (requireArrow && currentToken().kind !== SyntaxKind.EqualsGreaterThanToken) { return undefined; } @@ -3432,19 +3224,19 @@ module TypeScript.Parser { } return isIdentifier(_currentToken) && - peekToken(1).kind === SyntaxKind.EqualsGreaterThanToken; + peekToken(1).kind === SyntaxKind.EqualsGreaterThanToken; } function parseSimpleArrowFunctionExpression(): SimpleArrowFunctionExpressionSyntax { var asyncKeyword: ISyntaxToken; return new SimpleArrowFunctionExpressionSyntax(contextFlags, asyncKeyword = tryEatToken(SyntaxKind.AsyncKeyword), - asyncKeyword ? doInsideAsyncContext(eatSimpleParameter) : doOutsideAsyncContext(eatSimpleParameter), + asyncKeyword ? doInsideAsyncContext(eatSimpleParameter) : doOutsideAsyncContext(eatSimpleParameter), eatToken(SyntaxKind.EqualsGreaterThanToken), parseArrowFunctionBody(/*asyncContext:*/ !!asyncKeyword)); } - function isFunctionBlock(): boolean { + function isStartOfFunctionBlock(): boolean { var currentTokenKind = currentToken().kind; return currentTokenKind === SyntaxKind.OpenBraceToken || currentTokenKind === SyntaxKind.EqualsGreaterThanToken; } @@ -3488,8 +3280,8 @@ module TypeScript.Parser { token2 = peekToken(peekIndex + 2); var token2Kind = token2.kind; return token2Kind === SyntaxKind.ColonToken || - token2Kind === SyntaxKind.EqualsGreaterThanToken || - token2Kind === SyntaxKind.OpenBraceToken; + token2Kind === SyntaxKind.EqualsGreaterThanToken || + token2Kind === SyntaxKind.OpenBraceToken; } if (token1Kind === SyntaxKind.DotDotDotToken) { @@ -3498,7 +3290,7 @@ module TypeScript.Parser { return true; } - token2 = peekToken(peekIndex + 2); + token2 = peekToken(peekIndex + 2); token2Kind = token2.kind; if (SyntaxFacts.isAccessibilityModifier(token1Kind)) { @@ -3635,7 +3427,7 @@ module TypeScript.Parser { function parseObjectLiteralExpression(openBraceToken: ISyntaxToken): ObjectLiteralExpressionSyntax { // Debug.assert(currentToken().kind === SyntaxKind.OpenBraceToken); return new ObjectLiteralExpressionSyntax(contextFlags, - consumeToken(openBraceToken), + consumeToken(openBraceToken), parseSeparatedSyntaxList(ListParsingState.ObjectLiteralExpression_PropertyAssignments), eatToken(SyntaxKind.CloseBraceToken)); } @@ -3711,9 +3503,9 @@ module TypeScript.Parser { function isPropertyAssignment(inErrorRecovery: boolean): boolean { return isAtModifier() || - isAccessor(inErrorRecovery) || - currentToken().kind === SyntaxKind.AsteriskToken || - isPropertyName(/*peekIndex:*/ 0, inErrorRecovery); + isAccessor(inErrorRecovery) || + currentToken().kind === SyntaxKind.AsteriskToken || + isPropertyName(/*peekIndex:*/ 0, inErrorRecovery); } function isPropertyName(peekIndex: number, inErrorRecovery: boolean): boolean { @@ -3796,7 +3588,7 @@ module TypeScript.Parser { function parseArrayLiteralExpression(openBracketToken: ISyntaxToken): ArrayLiteralExpressionSyntax { // Debug.assert(currentToken().kind === SyntaxKind.OpenBracketToken); return new ArrayLiteralExpressionSyntax(contextFlags, - consumeToken(openBracketToken), + consumeToken(openBracketToken), parseSeparatedSyntaxList(ListParsingState.ArrayLiteralExpression_AssignmentExpressions), eatToken(SyntaxKind.CloseBracketToken)); } @@ -3885,23 +3677,25 @@ module TypeScript.Parser { return undefined; } - var rewindPoint = getRewindPoint(); + return requireCompleteTypeParameterList + ? tryParse(speculativeParseTypeParameterList) + : parseTypeArgumentListWorker(/*requireCompleteTypeParameterList:*/ false); + } - var lessThanToken = consumeToken(_currentToken); - var typeParameters = parseSeparatedSyntaxList(ListParsingState.TypeParameterList_TypeParameters); + function speculativeParseTypeParameterList() { + return parseTypeArgumentListWorker(/*requireCompleteTypeParameterList:*/ true); + } - var greaterThanToken = eatToken(SyntaxKind.GreaterThanToken); + function parseTypeArgumentListWorker(requireCompleteTypeParameterList: boolean) { + var lessThanToken = consumeToken(currentToken()); + var typeParameters = parseSeparatedSyntaxList(ListParsingState.TypeParameterList_TypeParameters); // return undefined if we were required to have a '>' token and we did not have one. - if (requireCompleteTypeParameterList && greaterThanToken.fullWidth() === 0) { - rewind(rewindPoint); - releaseRewindPoint(rewindPoint); + if (requireCompleteTypeParameterList && currentToken().kind !== SyntaxKind.GreaterThanToken) { return undefined; } - else { - releaseRewindPoint(rewindPoint); - return new TypeParameterListSyntax(contextFlags, lessThanToken, typeParameters, greaterThanToken); - } + + return new TypeParameterListSyntax(contextFlags, lessThanToken, typeParameters, eatToken(SyntaxKind.GreaterThanToken)); } function isTypeParameter(): boolean { @@ -4068,7 +3862,7 @@ module TypeScript.Parser { var barToken: ISyntaxToken; while ((barToken = currentToken()).kind === SyntaxKind.BarToken) { type = new UnionTypeSyntax(contextFlags, type, consumeToken(barToken), parsePrimaryType()); - } + } } return type; @@ -4077,7 +3871,7 @@ module TypeScript.Parser { function parsePrimaryType(): ITypeSyntax { return tryParsePrimaryType() || eatIdentifierToken(DiagnosticCode.Type_expected); } - + function tryParsePrimaryType(): ITypeSyntax { // First consume any underlying element type. var type = tryParseNonArrayType(); @@ -4119,10 +3913,10 @@ module TypeScript.Parser { } return consumeToken(_currentToken); - case SyntaxKind.VoidKeyword: return consumeToken(_currentToken); - case SyntaxKind.OpenParenToken: return parseParenthesizedType(_currentToken); - case SyntaxKind.OpenBraceToken: return parseObjectType(); - case SyntaxKind.TypeOfKeyword: return parseTypeQuery(_currentToken); + case SyntaxKind.VoidKeyword: return consumeToken(_currentToken); + case SyntaxKind.OpenParenToken: return parseParenthesizedType(_currentToken); + case SyntaxKind.OpenBraceToken: return parseObjectType(); + case SyntaxKind.TypeOfKeyword: return parseTypeQuery(_currentToken); case SyntaxKind.OpenBracketToken: return parseTupleType(_currentToken); } @@ -4147,10 +3941,17 @@ module TypeScript.Parser { return name; } - var typeArgumentList = tryParseTypeArgumentList(/*inExpression:*/ false); - return !typeArgumentList - ? name - : new GenericTypeSyntax(contextFlags, name, typeArgumentList); + var _currentToken = currentToken(); + if (_currentToken.kind !== SyntaxKind.LessThanToken) { + return name; + } + + return new GenericTypeSyntax(contextFlags, + name, + new TypeArgumentListSyntax(contextFlags, + consumeToken(_currentToken), + parseSeparatedSyntaxList(ListParsingState.TypeArgumentList_Types), + eatToken(SyntaxKind.GreaterThanToken))); } function isFunctionType(): boolean { @@ -4219,7 +4020,7 @@ module TypeScript.Parser { // Function types only exist in the type space and not the expression space. So they // aren't in the [Yield] or [GeneratorParameter] context. return new FunctionTypeSyntax(contextFlags, - tryParseTypeParameterList(/*requireCompleteTypeParameterList:*/ false), + tryParseTypeParameterList(/*requireCompleteTypeParameterList:*/ false), parseParameterList(/*yieldAndGeneratorParameterContext:*/ false, /*asyncContext:*/ false), eatToken(SyntaxKind.EqualsGreaterThanToken), parseType()); } @@ -4235,33 +4036,23 @@ module TypeScript.Parser { } function isParameter(): boolean { - if (currentNode() && currentNode().kind === SyntaxKind.Parameter) { - return true; - } - return isParameterHelper(currentToken()); } function isParameterHelper(token: ISyntaxToken): boolean { var tokenKind = token.kind; return tokenKind === SyntaxKind.DotDotDotToken || - isModifierKind(tokenKind) || - isIdentifier(token); + isModifierKind(tokenKind) || + isIdentifier(token); } function eatSimpleParameter() { return new ParameterSyntax(contextFlags, - /*dotDotDotToken:*/ undefined, /*modifiers:*/ [], eatIdentifierToken(), + /*dotDotDotToken:*/ undefined, /*modifiers:*/[], eatIdentifierToken(), /*questionToken:*/ undefined, /*typeAnnotation:*/ undefined, /*equalsValueClause:*/ undefined); } function tryParseParameter(): ParameterSyntax { - var node = currentNode(); - if (node && node.kind === SyntaxKind.Parameter) { - consumeNode(node); - return node; - } - var dotDotDotToken = tryEatToken(SyntaxKind.DotDotDotToken); var modifiers = parseModifiers(); @@ -4295,8 +4086,8 @@ module TypeScript.Parser { var equalsValueClause: EqualsValueClauseSyntax = undefined; if (isEqualsValueClause(/*inParameter*/ true)) { equalsValueClause = inGeneratorParameterContext() - ? doOutsideYieldContext(parseEqualsValueClause) - : parseEqualsValueClause(); + ? doOutsideYieldContext(parseEqualsValueClause) + : parseEqualsValueClause(); } return new ParameterSyntax(contextFlags, dotDotDotToken, modifiers, identifier, questionToken, typeAnnotation, equalsValueClause); @@ -4352,10 +4143,10 @@ module TypeScript.Parser { } function tryParseExpectedListItem( - currentListType: ListParsingState, - inErrorRecovery: boolean, - items: T[], - processItems: (items: ISyntaxNodeOrToken[]) => void): void { + currentListType: ListParsingState, + inErrorRecovery: boolean, + items: T[], + processItems: (items: ISyntaxNodeOrToken[]) => void): void { var item = tryParseExpectedListItemWorker(currentListType, inErrorRecovery); if (item !== undefined) { @@ -4371,10 +4162,10 @@ module TypeScript.Parser { function listIsTerminated(currentListType: ListParsingState): boolean { return isExpectedListTerminator(currentListType) || - currentToken().kind === SyntaxKind.EndOfFileToken; + currentToken().kind === SyntaxKind.EndOfFileToken; } - function parseSyntaxListWorker(currentListType: ListParsingState, processItems: (items: ISyntaxNodeOrToken[]) => void ): T[] { + function parseSyntaxListWorker(currentListType: ListParsingState, processItems: (items: ISyntaxNodeOrToken[]) => void): T[] { var items: T[] = []; while (true) { @@ -4492,7 +4283,7 @@ module TypeScript.Parser { function reportUnexpectedTokenDiagnostic(listType: ListParsingState): void { var token = currentToken(); - var diagnostic = new Diagnostic(fileName, source.text.lineMap(), + var diagnostic = new Diagnostic(source.fileName, source.text.lineMap(), start(token, source.text), width(token), DiagnosticCode.Unexpected_token_0_expected, [getExpectedListElementType(listType)]); addDiagnostic(diagnostic); } @@ -4509,27 +4300,27 @@ module TypeScript.Parser { function isExpectedListTerminator(currentListType: ListParsingState): boolean { switch (currentListType) { - case ListParsingState.SourceUnit_ModuleElements: return isExpectedSourceUnit_ModuleElementsTerminator(); - case ListParsingState.ClassDeclaration_ClassElements: return isExpectedClassDeclaration_ClassElementsTerminator(); - case ListParsingState.ModuleDeclaration_ModuleElements: return isExpectedModuleDeclaration_ModuleElementsTerminator(); - case ListParsingState.SwitchStatement_SwitchClauses: return isExpectedSwitchStatement_SwitchClausesTerminator(); - case ListParsingState.SwitchClause_Statements: return isExpectedSwitchClause_StatementsTerminator(); - case ListParsingState.Block_Statements: return isExpectedBlock_StatementsTerminator(); - case ListParsingState.TryBlock_Statements: return isExpectedTryBlock_StatementsTerminator(); - case ListParsingState.CatchBlock_Statements: return isExpectedCatchBlock_StatementsTerminator(); - case ListParsingState.EnumDeclaration_EnumElements: return isExpectedEnumDeclaration_EnumElementsTerminator(); - case ListParsingState.ObjectType_TypeMembers: return isExpectedObjectType_TypeMembersTerminator(); - case ListParsingState.ClassOrInterfaceDeclaration_HeritageClauses: return isExpectedClassOrInterfaceDeclaration_HeritageClausesTerminator(); - case ListParsingState.HeritageClause_TypeNameList: return isExpectedHeritageClause_TypeNameListTerminator(); - case ListParsingState.VariableDeclaration_VariableDeclarators: return isExpectedVariableDeclaration_VariableDeclaratorsTerminator(); - case ListParsingState.ArgumentList_AssignmentExpressions: return isExpectedArgumentList_AssignmentExpressionsTerminator(); - case ListParsingState.ObjectLiteralExpression_PropertyAssignments: return isExpectedObjectLiteralExpression_PropertyAssignmentsTerminator(); - case ListParsingState.ArrayLiteralExpression_AssignmentExpressions: return isExpectedLiteralExpression_AssignmentExpressionsTerminator(); - case ListParsingState.ParameterList_Parameters: return isExpectedParameterList_ParametersTerminator(); - case ListParsingState.IndexSignature_Parameters: return isExpectedIndexSignature_ParametersTerminator(); - case ListParsingState.TypeArgumentList_Types: return isExpectedTypeArgumentList_TypesTerminator(); - case ListParsingState.TypeParameterList_TypeParameters: return isExpectedTypeParameterList_TypeParametersTerminator(); - case ListParsingState.TupleType_Types: return isExpectedTupleType_TypesTerminator(); + case ListParsingState.SourceUnit_ModuleElements: return isExpectedSourceUnit_ModuleElementsTerminator(); + case ListParsingState.ClassDeclaration_ClassElements: return isExpectedClassDeclaration_ClassElementsTerminator(); + case ListParsingState.ModuleDeclaration_ModuleElements: return isExpectedModuleDeclaration_ModuleElementsTerminator(); + case ListParsingState.SwitchStatement_SwitchClauses: return isExpectedSwitchStatement_SwitchClausesTerminator(); + case ListParsingState.SwitchClause_Statements: return isExpectedSwitchClause_StatementsTerminator(); + case ListParsingState.Block_Statements: return isExpectedBlock_StatementsTerminator(); + case ListParsingState.TryBlock_Statements: return isExpectedTryBlock_StatementsTerminator(); + case ListParsingState.CatchBlock_Statements: return isExpectedCatchBlock_StatementsTerminator(); + case ListParsingState.EnumDeclaration_EnumElements: return isExpectedEnumDeclaration_EnumElementsTerminator(); + case ListParsingState.ObjectType_TypeMembers: return isExpectedObjectType_TypeMembersTerminator(); + case ListParsingState.ClassOrInterfaceDeclaration_HeritageClauses: return isExpectedClassOrInterfaceDeclaration_HeritageClausesTerminator(); + case ListParsingState.HeritageClause_TypeNameList: return isExpectedHeritageClause_TypeNameListTerminator(); + case ListParsingState.VariableDeclaration_VariableDeclarators: return isExpectedVariableDeclaration_VariableDeclaratorsTerminator(); + case ListParsingState.ArgumentList_AssignmentExpressions: return isExpectedArgumentList_AssignmentExpressionsTerminator(); + case ListParsingState.ObjectLiteralExpression_PropertyAssignments: return isExpectedObjectLiteralExpression_PropertyAssignmentsTerminator(); + case ListParsingState.ArrayLiteralExpression_AssignmentExpressions: return isExpectedLiteralExpression_AssignmentExpressionsTerminator(); + case ListParsingState.ParameterList_Parameters: return isExpectedParameterList_ParametersTerminator(); + case ListParsingState.IndexSignature_Parameters: return isExpectedIndexSignature_ParametersTerminator(); + case ListParsingState.TypeArgumentList_Types: return isExpectedTypeArgumentList_TypesTerminator(); + case ListParsingState.TypeParameterList_TypeParameters: return isExpectedTypeParameterList_TypeParametersTerminator(); + case ListParsingState.TupleType_Types: return isExpectedTupleType_TypesTerminator(); default: throw Errors.invalidOperation(); } @@ -4699,7 +4490,7 @@ module TypeScript.Parser { var token0 = currentToken(); var tokenKind = token0.kind; return tokenKind === SyntaxKind.CloseParenToken || - tokenKind === SyntaxKind.SemicolonToken; + tokenKind === SyntaxKind.SemicolonToken; } function isExpectedClassDeclaration_ClassElementsTerminator(): boolean { @@ -4712,7 +4503,7 @@ module TypeScript.Parser { function isExpectedSwitchClause_StatementsTerminator(): boolean { return currentToken().kind === SyntaxKind.CloseBraceToken || - isSwitchClause(); + isSwitchClause(); } function isExpectedBlock_StatementsTerminator(): boolean { @@ -4722,21 +4513,28 @@ module TypeScript.Parser { function isExpectedTryBlock_StatementsTerminator(): boolean { var tokenKind = currentToken().kind; return tokenKind === SyntaxKind.CatchKeyword || - tokenKind === SyntaxKind.FinallyKeyword; + tokenKind === SyntaxKind.FinallyKeyword; } function isExpectedCatchBlock_StatementsTerminator(): boolean { return currentToken().kind === SyntaxKind.FinallyKeyword; } - function isExpectedListItem(currentListType: ListParsingState, inErrorRecovery: boolean): any { + function isExpectedListItem(currentListType: ListParsingState, inErrorRecovery: boolean): boolean { + // If we're able to parse out a node for the current list type from the old parse tree, + // then definitely have an expected list item. + var node = currentNode(currentListType); + if (node) { + return true; + } + switch (currentListType) { - case ListParsingState.SourceUnit_ModuleElements: return isModuleElement(inErrorRecovery); - case ListParsingState.ClassDeclaration_ClassElements: return isClassElement(inErrorRecovery); - case ListParsingState.ModuleDeclaration_ModuleElements: return isModuleElement(inErrorRecovery); - case ListParsingState.SwitchStatement_SwitchClauses: return isSwitchClause(); - case ListParsingState.SwitchClause_Statements: return isStatement(modifierCount(), inErrorRecovery); - case ListParsingState.Block_Statements: return isStatement(modifierCount(), inErrorRecovery); + case ListParsingState.SourceUnit_ModuleElements: return isModuleElement(inErrorRecovery); + case ListParsingState.ClassDeclaration_ClassElements: return isClassElement(inErrorRecovery); + case ListParsingState.ModuleDeclaration_ModuleElements: return isModuleElement(inErrorRecovery); + case ListParsingState.SwitchStatement_SwitchClauses: return isSwitchClause(); + case ListParsingState.SwitchClause_Statements: return isStatement(modifierCount(), inErrorRecovery); + case ListParsingState.Block_Statements: return isStatement(modifierCount(), inErrorRecovery); // These two are special. They're just augmentations of "Block_Statements" // used so we can abort out of the try block if we see a 'catch' or 'finally' // keyword. There are no additional list items that they add, so we just @@ -4777,54 +4575,204 @@ module TypeScript.Parser { } function tryParseExpectedListItemWorker(currentListType: ListParsingState, inErrorRecovery: boolean): ISyntaxNodeOrToken { + var node = currentNode(currentListType); + if (node) { + return node; + } + switch (currentListType) { - case ListParsingState.SourceUnit_ModuleElements: return tryParseModuleElement(inErrorRecovery); - case ListParsingState.ClassDeclaration_ClassElements: return tryParseClassElement(inErrorRecovery); - case ListParsingState.ModuleDeclaration_ModuleElements: return tryParseModuleElement(inErrorRecovery); - case ListParsingState.SwitchStatement_SwitchClauses: return tryParseSwitchClause(); - case ListParsingState.SwitchClause_Statements: return tryParseStatement(inErrorRecovery); - case ListParsingState.Block_Statements: return tryParseStatement(inErrorRecovery); - case ListParsingState.TryBlock_Statements: return tryParseStatement(inErrorRecovery); - case ListParsingState.CatchBlock_Statements: return tryParseStatement(inErrorRecovery); - case ListParsingState.EnumDeclaration_EnumElements: return tryParseEnumElement(inErrorRecovery); - case ListParsingState.ObjectType_TypeMembers: return tryParseTypeMember(inErrorRecovery); - case ListParsingState.ClassOrInterfaceDeclaration_HeritageClauses: return tryParseHeritageClause(); - case ListParsingState.HeritageClause_TypeNameList: return tryParseHeritageClauseTypeName(); - case ListParsingState.VariableDeclaration_VariableDeclarators: return tryParseVariableDeclarator(); - case ListParsingState.ArgumentList_AssignmentExpressions: return tryParseArgumentListExpression(); - case ListParsingState.ObjectLiteralExpression_PropertyAssignments: return tryParsePropertyAssignment(inErrorRecovery); + case ListParsingState.SourceUnit_ModuleElements: return tryParseModuleElement(inErrorRecovery); + case ListParsingState.ClassDeclaration_ClassElements: return tryParseClassElement(inErrorRecovery); + case ListParsingState.ModuleDeclaration_ModuleElements: return tryParseModuleElement(inErrorRecovery); + case ListParsingState.SwitchStatement_SwitchClauses: return tryParseSwitchClause(); + case ListParsingState.SwitchClause_Statements: return tryParseStatement(inErrorRecovery); + case ListParsingState.Block_Statements: return tryParseStatement(inErrorRecovery); + case ListParsingState.TryBlock_Statements: return tryParseStatement(inErrorRecovery); + case ListParsingState.CatchBlock_Statements: return tryParseStatement(inErrorRecovery); + case ListParsingState.EnumDeclaration_EnumElements: return tryParseEnumElement(inErrorRecovery); + case ListParsingState.ObjectType_TypeMembers: return tryParseTypeMember(inErrorRecovery); + case ListParsingState.ClassOrInterfaceDeclaration_HeritageClauses: return tryParseHeritageClause(); + case ListParsingState.HeritageClause_TypeNameList: return tryParseHeritageClauseTypeName(); + case ListParsingState.VariableDeclaration_VariableDeclarators: return tryParseVariableDeclarator(); + case ListParsingState.ArgumentList_AssignmentExpressions: return tryParseArgumentListExpression(); + case ListParsingState.ObjectLiteralExpression_PropertyAssignments: return tryParsePropertyAssignment(inErrorRecovery); case ListParsingState.ArrayLiteralExpression_AssignmentExpressions: return tryParseAssignmentOrOmittedExpression(); - case ListParsingState.ParameterList_Parameters: return tryParseParameter(); - case ListParsingState.IndexSignature_Parameters: return tryParseParameter(); - case ListParsingState.TypeArgumentList_Types: return tryParseType(); - case ListParsingState.TypeParameterList_TypeParameters: return tryParseTypeParameter(); - case ListParsingState.TupleType_Types: return tryParseType(); + case ListParsingState.ParameterList_Parameters: return tryParseParameter(); + case ListParsingState.IndexSignature_Parameters: return tryParseParameter(); + case ListParsingState.TypeArgumentList_Types: return tryParseType(); + case ListParsingState.TypeParameterList_TypeParameters: return tryParseTypeParameter(); + case ListParsingState.TupleType_Types: return tryParseType(); default: throw Errors.invalidOperation(); } } + function currentNode(currentListType: ListParsingState): ISyntaxNode { + // If we have any outstanding tokens, then don't reuse a node. + // TODO(cyrusn): This may be too conservative. Perhaps we could reuse hte node and + // attach the skipped tokens in front? For now though, being conservative is nice and + // safe, and likely won't ever affect perf. + if (skippedTokens) { + return undefined; + } + + var node = source.currentNode(); + if (!node) { + return undefined; + } + + // We can only reuse a node if it was parsed under the same strict mode that we're + // currently in. i.e. if we originally parsed a node in non-strict mode, but then + // the user added 'using strict' at the top of the file, then we can't use that node + // again as the presense of strict mode may cause us to parse the tokens in the file + // differetly. + // + // Note: we *can* reuse tokens when the strict mode changes. That's because tokens + // are unaffected by strict mode. It's just the parser will decide what to do with it + // differently depending on what mode it is in. + // + // This also applies to all our other context flags as well. + if (parserContextFlags(node) !== contextFlags) { + return undefined; + } + + // Ok, we have a node that looks like it could be reused. Now verify that it is valid + // in the currest list parsing context that we're currently at. + if (!canReuseNode(node, currentListType)) { + return undefined; + } + + // It was valid. Let teh source know we're consuming this node, and pass to the list + // parser. + return consumeNode(node); + } + + function canReuseNode(node: ISyntaxNode, listParsingState: ListParsingState): boolean { + switch (listParsingState) { + case ListParsingState.SourceUnit_ModuleElements: + return SyntaxUtilities.isModuleElement(node); + + case ListParsingState.ClassDeclaration_ClassElements: + return SyntaxUtilities.isClassElement(node); + + case ListParsingState.ModuleDeclaration_ModuleElements: + return SyntaxUtilities.isModuleElement(node); + + case ListParsingState.SwitchStatement_SwitchClauses: + return SyntaxUtilities.isSwitchClause(node); + + case ListParsingState.SwitchClause_Statements: + case ListParsingState.Block_Statements: + case ListParsingState.TryBlock_Statements: + case ListParsingState.CatchBlock_Statements: + return SyntaxUtilities.isStatement(node); + + case ListParsingState.EnumDeclaration_EnumElements: + return node.kind === SyntaxKind.EnumElement; + + case ListParsingState.ObjectType_TypeMembers: + return SyntaxUtilities.isTypeMember(node); + + case ListParsingState.VariableDeclaration_VariableDeclarators: + return canReuseVariableDeclaratorNode(node); + + case ListParsingState.ParameterList_Parameters: + return node.kind === SyntaxKind.Parameter; + + case ListParsingState.IndexSignature_Parameters: + return node.kind === SyntaxKind.Parameter; + + // Any other lists we do not care about reusing nodes in. But feel free to add if + // you can do so safely. Danger areas involve nodes that may involve speculative + // parsing. If speculative parsing is involved with the node, then the range the + // parser reached while looking ahead might be in the edited range (see the example + // in canReuseVariableDeclaratorNode for a good case of this). + case ListParsingState.ClassOrInterfaceDeclaration_HeritageClauses: + // This would probably be safe to reuse. There is no speculative parsing with + // heritage clauses. + + case ListParsingState.HeritageClause_TypeNameList: + // This would probably be safe to reuse. There is no speculative parsing with + // type names in a heritage clause. There can be generic names in the type + // name list. But because it is a type context, we never use speculative + // parsing on the type argument list. + + case ListParsingState.TypeParameterList_TypeParameters: + // This would probably be safe to reuse. There is no speculative parsing with + // type parameters. Note that that's because type *parameters* only occur in + // unambiguous *type* contexts. While type *arguments* occur in very ambiguous + // *expression* contexts. + + case ListParsingState.TupleType_Types: + // This would probably be safe to reuse. There is no speculative parsing with + // tuple types. + + // Technically, type argument list types are probably safe to reuse. While + // speculative parsing is involved with them (since type argument lists are only + // produced from speculative parsing a < as a type argument list), we only have + // the types because speculative parsing succeeded. Thus, the lookahead never + // went past the end of the list and rewound. + case ListParsingState.TypeArgumentList_Types: + + // Note: these are almost certainly not safe to ever reuse. Expressions commonly + // need a large amount of lookahead, and we should not reuse them as they may + // have actually intersected the edit. + case ListParsingState.ArgumentList_AssignmentExpressions: + case ListParsingState.ArrayLiteralExpression_AssignmentExpressions: + + // This is not safe to reuse for the same reason as the 'AssignmentExpression' + // cases. i.e. a property assignment may end with an expression, and thus might + // have lookahead far beyond it's old node. + case ListParsingState.ObjectLiteralExpression_PropertyAssignments: + } + + return false; + } + + function canReuseVariableDeclaratorNode(node: ISyntaxNode) { + if (!node || node.kind !== SyntaxKind.VariableDeclarator) { + return false; + } + + // Very subtle incremental parsing bug. Consider the following code: + // + // var v = new List < A, B + // + // This is actually legal code. It's a list of variable declarators "v = new List() + // + // then we have a problem. "v = new Listnode; + return variableDeclarator.equalsValueClause === undefined; + } + function getExpectedListElementType(currentListType: ListParsingState): string { switch (currentListType) { - case ListParsingState.SourceUnit_ModuleElements: return getLocalizedText(DiagnosticCode.module_class_interface_enum_import_or_statement, undefined); - case ListParsingState.ClassOrInterfaceDeclaration_HeritageClauses: return '{'; - case ListParsingState.ClassDeclaration_ClassElements: return getLocalizedText(DiagnosticCode.constructor_function_accessor_or_variable, undefined); - case ListParsingState.ModuleDeclaration_ModuleElements: return getLocalizedText(DiagnosticCode.module_class_interface_enum_import_or_statement, undefined); - case ListParsingState.SwitchStatement_SwitchClauses: return getLocalizedText(DiagnosticCode.case_or_default_clause, undefined); - case ListParsingState.SwitchClause_Statements: return getLocalizedText(DiagnosticCode.statement, undefined); - case ListParsingState.Block_Statements: return getLocalizedText(DiagnosticCode.statement, undefined); - case ListParsingState.VariableDeclaration_VariableDeclarators: return getLocalizedText(DiagnosticCode.identifier, undefined); - case ListParsingState.EnumDeclaration_EnumElements: return getLocalizedText(DiagnosticCode.identifier, undefined); - case ListParsingState.ObjectType_TypeMembers: return getLocalizedText(DiagnosticCode.call_construct_index_property_or_function_signature, undefined); - case ListParsingState.ArgumentList_AssignmentExpressions: return getLocalizedText(DiagnosticCode.expression, undefined); - case ListParsingState.HeritageClause_TypeNameList: return getLocalizedText(DiagnosticCode.type_name, undefined); - case ListParsingState.ObjectLiteralExpression_PropertyAssignments: return getLocalizedText(DiagnosticCode.property_or_accessor, undefined); - case ListParsingState.ParameterList_Parameters: return getLocalizedText(DiagnosticCode.parameter, undefined); - case ListParsingState.IndexSignature_Parameters: return getLocalizedText(DiagnosticCode.parameter, undefined); - case ListParsingState.TypeArgumentList_Types: return getLocalizedText(DiagnosticCode.type, undefined); - case ListParsingState.TypeParameterList_TypeParameters: return getLocalizedText(DiagnosticCode.type_parameter, undefined); - case ListParsingState.TupleType_Types: return getLocalizedText(DiagnosticCode.type, undefined); + case ListParsingState.SourceUnit_ModuleElements: return getLocalizedText(DiagnosticCode.module_class_interface_enum_import_or_statement, undefined); + case ListParsingState.ClassOrInterfaceDeclaration_HeritageClauses: return '{'; + case ListParsingState.ClassDeclaration_ClassElements: return getLocalizedText(DiagnosticCode.constructor_function_accessor_or_variable, undefined); + case ListParsingState.ModuleDeclaration_ModuleElements: return getLocalizedText(DiagnosticCode.module_class_interface_enum_import_or_statement, undefined); + case ListParsingState.SwitchStatement_SwitchClauses: return getLocalizedText(DiagnosticCode.case_or_default_clause, undefined); + case ListParsingState.SwitchClause_Statements: return getLocalizedText(DiagnosticCode.statement, undefined); + case ListParsingState.Block_Statements: return getLocalizedText(DiagnosticCode.statement, undefined); + case ListParsingState.VariableDeclaration_VariableDeclarators: return getLocalizedText(DiagnosticCode.identifier, undefined); + case ListParsingState.EnumDeclaration_EnumElements: return getLocalizedText(DiagnosticCode.identifier, undefined); + case ListParsingState.ObjectType_TypeMembers: return getLocalizedText(DiagnosticCode.call_construct_index_property_or_function_signature, undefined); + case ListParsingState.ArgumentList_AssignmentExpressions: return getLocalizedText(DiagnosticCode.expression, undefined); + case ListParsingState.HeritageClause_TypeNameList: return getLocalizedText(DiagnosticCode.type_name, undefined); + case ListParsingState.ObjectLiteralExpression_PropertyAssignments: return getLocalizedText(DiagnosticCode.property_or_accessor, undefined); + case ListParsingState.ParameterList_Parameters: return getLocalizedText(DiagnosticCode.parameter, undefined); + case ListParsingState.IndexSignature_Parameters: return getLocalizedText(DiagnosticCode.parameter, undefined); + case ListParsingState.TypeArgumentList_Types: return getLocalizedText(DiagnosticCode.type, undefined); + case ListParsingState.TypeParameterList_TypeParameters: return getLocalizedText(DiagnosticCode.type_parameter, undefined); + case ListParsingState.TupleType_Types: return getLocalizedText(DiagnosticCode.type, undefined); case ListParsingState.ArrayLiteralExpression_AssignmentExpressions: return getLocalizedText(DiagnosticCode.expression, undefined); - default: throw Errors.invalidOperation(); + default: throw Errors.invalidOperation(); } } @@ -4872,7 +4820,7 @@ module TypeScript.Parser { // // The code to do this uses the above logic. It will see an operator with the same precedence, // and so it won't consume it. - enum BinaryExpressionPrecedence { + const enum BinaryExpressionPrecedence { Lowest = 1, // Intuitively, logical || have the lowest precedence. "a || b && c" is "a || (b && c)", not diff --git a/src/services/syntax/references.ts b/src/services/syntax/references.ts index e425fda393649..38b5fd9a160d2 100644 --- a/src/services/syntax/references.ts +++ b/src/services/syntax/references.ts @@ -27,13 +27,15 @@ /// /// /// -/// /// /// // SyntaxInformationMap depends on SyntaxWalker // /// +// SyntaxUtilities depends on SyntaxWalker +/// + /// // Concrete nodes depend on the parser. @@ -44,3 +46,5 @@ /// /// +/// +/// diff --git a/src/services/syntax/scanner.ts b/src/services/syntax/scanner.ts index e055740286c3c..6adcf16f75ffc 100644 --- a/src/services/syntax/scanner.ts +++ b/src/services/syntax/scanner.ts @@ -60,15 +60,15 @@ module TypeScript.Scanner { // This gives us 23bit for width (or 8MB of width which should be enough for any codebase). enum ScannerConstants { - LargeTokenFullWidthShift = 3, + LargeTokenFullWidthShift = 3, - WhitespaceTrivia = 0x01, // 00000001 - NewlineTrivia = 0x02, // 00000010 - CommentTrivia = 0x04, // 00000100 - TriviaMask = 0x07, // 00000111 + WhitespaceTrivia = 0x01, // 00000001 + NewlineTrivia = 0x02, // 00000010 + CommentTrivia = 0x04, // 00000100 + TriviaMask = 0x07, // 00000111 - KindMask = 0x7F, // 01111111 - IsVariableWidthMask = 0x80, // 10000000 + KindMask = 0x7F, // 01111111 + IsVariableWidthMask = 0x80, // 10000000 } function largeTokenPackData(fullWidth: number, leadingTriviaInfo: number) { @@ -154,7 +154,7 @@ module TypeScript.Scanner { var lastTokenInfo = { leadingTriviaWidth: -1 }; var lastTokenInfoTokenID: number = -1; - var triviaScanner = createScannerInternal(ts.ScriptTarget.Latest, SimpleText.fromString(""), () => { }); + var triviaScanner = createScannerInternal(ts.ScriptTarget.Latest, SimpleText.fromString(""),() => { }); interface IScannerToken extends ISyntaxToken { } @@ -208,7 +208,7 @@ module TypeScript.Scanner { public setFullStart(fullStart: number): void { this._fullStart = fullStart; } - + public childAt(index: number): ISyntaxElement { throw Errors.invalidOperation() } public isIncrementallyUnusable(): boolean { return false; } @@ -1425,19 +1425,13 @@ module TypeScript.Scanner { export function isValidIdentifier(text: ISimpleText, languageVersion: ts.ScriptTarget): boolean { var hadError = false; - var scanner = createScanner(languageVersion, text, () => hadError = true); + var scanner = createScanner(languageVersion, text,() => hadError = true); var token = scanner.scan(/*allowContextualToken:*/ false); return !hadError && SyntaxFacts.isIdentifierNameOrAnyKeyword(token) && width(token) === text.length(); } - interface IScannerRewindPoint extends Parser.IRewindPoint { - // Information used by normal parser source. - absolutePosition: number; - slidingWindowIndex: number; - } - // Parser source used in batch scenarios. Directly calls into an underlying text scanner and // supports none of the functionality to reuse nodes. Good for when you just want want to do // a single parse of a file. @@ -1451,10 +1445,6 @@ module TypeScript.Scanner { // reparse a / or /= as a regular expression. var _tokenDiagnostics: Diagnostic[] = []; - // Pool of rewind points we give out if the parser needs one. - var rewindPointPool: IScannerRewindPoint[] = []; - var rewindPointPoolCount = 0; - var lastDiagnostic: Diagnostic = undefined; var reportDiagnostic = (position: number, fullWidth: number, diagnosticKey: string, args: any[]) => { lastDiagnostic = new Diagnostic(fileName, text.lineMap(), position, fullWidth, diagnosticKey, args); @@ -1466,15 +1456,6 @@ module TypeScript.Scanner { // The scanner we're pulling tokens from. var scanner = createScanner(languageVersion, text, reportDiagnostic); - function release() { - slidingWindow = undefined; - scanner = undefined; - _tokenDiagnostics = []; - rewindPointPool = []; - lastDiagnostic = undefined; - reportDiagnostic = undefined; - } - function currentNode(): ISyntaxNode { // The normal parser source never returns nodes. They're only returned by the // incremental parser source. @@ -1486,48 +1467,23 @@ module TypeScript.Scanner { return _absolutePosition; } - function tokenDiagnostics(): Diagnostic[] { + function diagnostics(): Diagnostic[] { return _tokenDiagnostics; } - function getOrCreateRewindPoint(): IScannerRewindPoint { - if (rewindPointPoolCount === 0) { - return {}; + function tryParse(callback: () => T): T { + var savedSlidingWindowIndex = slidingWindow.getAndPinAbsoluteIndex(); + var savedAbsolutePosition = _absolutePosition; + + var result = callback(); + if (!result) { + slidingWindow.rewindToPinnedIndex(savedSlidingWindowIndex); + _absolutePosition = savedAbsolutePosition; } - rewindPointPoolCount--; - var result = rewindPointPool[rewindPointPoolCount]; - rewindPointPool[rewindPointPoolCount] = undefined; return result; } - function getRewindPoint(): IScannerRewindPoint { - var slidingWindowIndex = slidingWindow.getAndPinAbsoluteIndex(); - - var rewindPoint = getOrCreateRewindPoint(); - - rewindPoint.slidingWindowIndex = slidingWindowIndex; - rewindPoint.absolutePosition = _absolutePosition; - - // rewindPoint.pinCount = slidingWindow.pinCount(); - - return rewindPoint; - } - - function rewind(rewindPoint: IScannerRewindPoint): void { - slidingWindow.rewindToPinnedIndex(rewindPoint.slidingWindowIndex); - - _absolutePosition = rewindPoint.absolutePosition; - } - - function releaseRewindPoint(rewindPoint: IScannerRewindPoint): void { - // Debug.assert(slidingWindow.pinCount() === rewindPoint.pinCount); - slidingWindow.releaseAndUnpinAbsoluteIndex((rewindPoint).absoluteIndex); - - rewindPointPool[rewindPointPoolCount] = rewindPoint; - rewindPointPoolCount++; - } - function fetchNextItem(allowContextualToken: boolean): ISyntaxToken { // Assert disabled because it is actually expensive enugh to affect perf. // Debug.assert(spaceAvailable > 0); @@ -1641,12 +1597,9 @@ module TypeScript.Scanner { currentContextualToken: currentContextualToken, peekToken: peekToken, consumeNodeOrToken: consumeNodeOrToken, - getRewindPoint: getRewindPoint, - rewind: rewind, - releaseRewindPoint: releaseRewindPoint, - tokenDiagnostics: tokenDiagnostics, - release: release, - absolutePosition: absolutePosition, + tryParse: tryParse, + diagnostics: diagnostics, + absolutePosition: absolutePosition }; } diff --git a/src/services/syntax/syntaxCursor.ts b/src/services/syntax/syntaxCursor.ts new file mode 100644 index 0000000000000..3c89782144dc2 --- /dev/null +++ b/src/services/syntax/syntaxCursor.ts @@ -0,0 +1,255 @@ +/// + +module TypeScript.IncrementalParser { + interface SyntaxCursorPiece { + element: ISyntaxElement; + indexInParent: number + } + + function createSyntaxCursorPiece(element: ISyntaxElement, indexInParent: number) { + return { element: element, indexInParent: indexInParent }; + } + + // Pool syntax cursors so we don't churn too much memory when we need temporary cursors. + // i.e. when we're speculatively parsing, we can cheaply get a pooled cursor and then + // return it when we no longer need it. + var syntaxCursorPool: SyntaxCursor[] = []; + var syntaxCursorPoolCount: number = 0; + + export function returnSyntaxCursor(cursor: SyntaxCursor): void { + // Make sure the cursor isn't holding onto any syntax elements. We don't want to leak + // them when we return the cursor to the pool. + cursor.clean(); + + syntaxCursorPool[syntaxCursorPoolCount] = cursor; + syntaxCursorPoolCount++; + } + + export function getSyntaxCursor(): SyntaxCursor { + // Get an existing cursor from the pool if we have one. Or create a new one if we don't. + var cursor = syntaxCursorPoolCount > 0 + ? syntaxCursorPool[syntaxCursorPoolCount - 1] + : createSyntaxCursor(); + + if (syntaxCursorPoolCount > 0) { + // If we reused an existing cursor, take it out of the pool so no one else uses it. + syntaxCursorPoolCount--; + syntaxCursorPool[syntaxCursorPoolCount] = undefined; + } + + return cursor; + } + + export function cloneSyntaxCursor(cursor: SyntaxCursor): SyntaxCursor { + var newCursor = getSyntaxCursor(); + + // Make the new cursor a *deep* copy of the cursor passed in. This ensures each cursor can + // be moved without affecting the other. + newCursor.deepCopyFrom(cursor); + + return newCursor; + } + + interface SyntaxCursor { + pieces: SyntaxCursorPiece[]; + + clean(): void; + isFinished(): boolean; + moveToFirstChild(): void; + moveToFirstToken(): void; + moveToNextSibling(): void; + currentNodeOrToken(): ISyntaxNodeOrToken; + currentNode(): ISyntaxNode; + currentToken(): ISyntaxToken; + pushElement(element: ISyntaxElement, indexInParent: number): void; + deepCopyFrom(other: SyntaxCursor): void; + } + + function createSyntaxCursor(): SyntaxCursor { + // Our list of path pieces. The piece pointed to by 'currentPieceIndex' must be a node or + // token. However, pieces earlier than that may point to list nodes. + // + // For perf we reuse pieces as much as possible. i.e. instead of popping items off the + // list, we just will change currentPieceIndex so we can reuse that piece later. + var pieces: SyntaxCursorPiece[] = []; + var currentPieceIndex: number = -1; + + // Cleans up this cursor so that it doesn't have any references to actual syntax nodes. + // This sould be done before returning the cursor to the pool so that the Parser module + // doesn't unnecessarily keep old syntax trees alive. + function clean(): void { + for (var i = 0, n = pieces.length; i < n; i++) { + var piece = pieces[i]; + + if (piece.element === undefined) { + break; + } + + piece.element = undefined; + piece.indexInParent = -1; + } + + currentPieceIndex = -1; + } + + // Makes this cursor into a deep copy of the cursor passed in. + function deepCopyFrom(other: SyntaxCursor): void { + for (var i = 0, n = other.pieces.length; i < n; i++) { + var piece = other.pieces[i]; + + if (piece.element === undefined) { + break; + } + + pushElement(piece.element, piece.indexInParent); + } + } + + function isFinished(): boolean { + return currentPieceIndex < 0; + } + + function currentNodeOrToken(): ISyntaxNodeOrToken { + if (isFinished()) { + return undefined; + } + + var result = pieces[currentPieceIndex].element; + + // The current element must always be a node or a token. + return result; + } + + function currentNode(): ISyntaxNode { + var element = currentNodeOrToken(); + return isNode(element) ? element : undefined; + } + + function isEmptyList(element: ISyntaxElement) { + return isList(element) && (element).length === 0; + } + + function moveToFirstChild() { + var nodeOrToken = currentNodeOrToken(); + if (nodeOrToken === undefined) { + return; + } + + if (isToken(nodeOrToken)) { + // If we're already on a token, there's nothing to do. + return; + } + + // Either the node has some existent child, then move to it. if it doesn't, then it's + // an empty node. Conceptually the first child of an empty node is really just the + // next sibling of the empty node. + for (var i = 0, n = childCount(nodeOrToken); i < n; i++) { + var child = childAt(nodeOrToken, i); + if (child && !isEmptyList(child)) { + // Great, we found a real child. Push that. + pushElement(child, /*indexInParent:*/ i); + + // If it was a list, make sure we're pointing at its first element. We know we + // must have one because this is a non-shared list. + moveToFirstChildIfList(); + return; + } + } + + // This element must have been an empty node. Moving to its 'first child' is equivalent to just + // moving to the next sibling. + moveToNextSibling(); + } + + function moveToNextSibling(): void { + while (!isFinished()) { + // first look to our parent and see if it has a sibling of us that we can move to. + var currentPiece = pieces[currentPieceIndex]; + var parent = currentPiece.element.parent; + + // We start searching at the index one past our own index in the parent. + for (var i = currentPiece.indexInParent + 1, n = childCount(parent); i < n; i++) { + var sibling = childAt(parent, i); + + if (sibling && !isEmptyList(sibling)) { + // We found a good sibling that we can move to. Just reuse our existing piece + // so we don't have to push/pop. + currentPiece.element = sibling; + currentPiece.indexInParent = i; + + // The sibling might have been a list. Move to it's first child. + moveToFirstChildIfList(); + return; + } + } + + // Didn't have a sibling for this element. Go up to our parent and get its sibling. + + // Clear the data from the old piece. We don't want to keep any elements around + // unintentionally. + currentPiece.element = undefined; + currentPiece.indexInParent = -1; + + // Point at the parent. if we move past the top of the path, then we're finished. + currentPieceIndex--; + } + } + + function moveToFirstChildIfList(): void { + var element = pieces[currentPieceIndex].element; + + if (isList(element)) { + // We cannot ever get an empty list in our piece path. Empty lists are 'shared' and + // we make sure to filter that out before pushing any children. + pushElement(childAt(element, 0), /*indexInParent:*/ 0); + } + } + + function pushElement(element: ISyntaxElement, indexInParent: number): void { + currentPieceIndex++; + + // Reuse an existing piece if we have one. Otherwise, push a new piece to our list. + if (currentPieceIndex === pieces.length) { + pieces.push(createSyntaxCursorPiece(element, indexInParent)); + } + else { + var piece = pieces[currentPieceIndex]; + piece.element = element; + piece.indexInParent = indexInParent; + } + } + + function moveToFirstToken(): void { + while (!isFinished()) { + var element = pieces[currentPieceIndex].element; + if (isNode(element)) { + moveToFirstChild(); + continue; + } + + return; + } + } + + function currentToken(): ISyntaxToken { + moveToFirstToken(); + + var element = currentNodeOrToken(); + return element; + } + + return { + pieces: pieces, + clean: clean, + isFinished: isFinished, + moveToFirstChild: moveToFirstChild, + moveToFirstToken: moveToFirstToken, + moveToNextSibling: moveToNextSibling, + currentNodeOrToken: currentNodeOrToken, + currentNode: currentNode, + currentToken: currentToken, + pushElement: pushElement, + deepCopyFrom: deepCopyFrom + }; + } +} \ No newline at end of file diff --git a/src/services/syntax/syntaxElement.ts b/src/services/syntax/syntaxElement.ts index a76cf00721ba3..946ac5dc48051 100644 --- a/src/services/syntax/syntaxElement.ts +++ b/src/services/syntax/syntaxElement.ts @@ -378,7 +378,6 @@ module TypeScript { export interface ISyntaxNode extends ISyntaxNodeOrToken { __data: number; - __cachedTokens: ISyntaxToken[]; } export interface IModuleReferenceSyntax extends ISyntaxNode { diff --git a/src/services/syntax/syntaxGenerator.ts b/src/services/syntax/syntaxGenerator.ts index dcde211b1fab6..fff5cbe109e32 100644 --- a/src/services/syntax/syntaxGenerator.ts +++ b/src/services/syntax/syntaxGenerator.ts @@ -41,7 +41,7 @@ var interfaces: any = { IPrimaryExpressionSyntax: 'IMemberExpressionSyntax', }; -var definitions:ITypeDefinition[] = [ +var definitions: ITypeDefinition[] = [ { name: 'SourceUnitSyntax', baseType: 'ISyntaxNode', @@ -55,10 +55,10 @@ var definitions:ITypeDefinition[] = [ baseType: 'ISyntaxNode', interfaces: ['IModuleReferenceSyntax'], children: [ - { name: 'requireKeyword', isToken: true, excludeFromAST: true }, - { name: 'openParenToken', isToken: true, excludeFromAST: true }, - { name: 'stringLiteral', isToken: true }, - { name: 'closeParenToken', isToken: true, excludeFromAST: true } + { name: 'requireKeyword', isToken: true }, + { name: 'openParenToken', isToken: true }, + { name: 'expression', type: 'IExpressionSyntax' }, + { name: 'closeParenToken', isToken: true } ], isTypeScriptSpecific: true }, @@ -275,7 +275,7 @@ var definitions:ITypeDefinition[] = [ children: [ { name: 'asyncKeyword', isToken: true, isOptional: true }, { name: 'callSignature', type: 'CallSignatureSyntax' }, - { name: 'equalsGreaterThanToken', isToken: true, excludeFromAST: true }, + { name: 'equalsGreaterThanToken', isToken: true, isOptional: true }, { name: 'body', type: 'BlockSyntax | IExpressionSyntax' } ], isTypeScriptSpecific: true @@ -665,7 +665,7 @@ var definitions:ITypeDefinition[] = [ { name: 'modifiers', isList: true, elementType: 'ISyntaxToken' }, { name: 'constructorKeyword', isToken: true }, { name: 'callSignature', type: 'CallSignatureSyntax' }, - { name: 'body', type: 'BlockSyntax | ExpressionBody | ISyntaxToken', isOptional: true } + { name: 'body', type: 'BlockSyntax | ExpressionBody | ISyntaxToken', isOptional: true } ], isTypeScriptSpecific: true }, @@ -678,20 +678,20 @@ var definitions:ITypeDefinition[] = [ { name: 'asterixToken', isToken: true, isOptional: true }, { name: 'propertyName', type: 'IPropertyNameSyntax' }, { name: 'callSignature', type: 'CallSignatureSyntax' }, - { name: 'body', type: 'BlockSyntax | ExpressionBody | ISyntaxToken', isOptional: true } + { name: 'body', type: 'BlockSyntax | ExpressionBody | ISyntaxToken', isOptional: true } ], isTypeScriptSpecific: true }, { name: 'GetAccessorSyntax', baseType: 'ISyntaxNode', - interfaces: ['IAccessorSyntax' ], + interfaces: ['IAccessorSyntax'], children: [ { name: 'modifiers', isList: true, elementType: 'ISyntaxToken', isTypeScriptSpecific: true }, { name: 'getKeyword', isToken: true, excludeFromAST: true }, { name: 'propertyName', type: 'IPropertyNameSyntax' }, { name: 'callSignature', type: 'CallSignatureSyntax' }, - { name: 'body', type: 'BlockSyntax | ExpressionBody | ISyntaxToken', isOptional: true } + { name: 'body', type: 'BlockSyntax | ExpressionBody | ISyntaxToken', isOptional: true } ] }, { @@ -703,7 +703,7 @@ var definitions:ITypeDefinition[] = [ { name: 'setKeyword', isToken: true, excludeFromAST: true }, { name: 'propertyName', type: 'IPropertyNameSyntax' }, { name: 'callSignature', type: 'CallSignatureSyntax' }, - { name: 'body', type: 'BlockSyntax | ExpressionBody | ISyntaxToken', isOptional: true } + { name: 'body', type: 'BlockSyntax | ExpressionBody | ISyntaxToken', isOptional: true } ], isTypeScriptSpecific: true }, @@ -769,7 +769,7 @@ var definitions:ITypeDefinition[] = [ children: [ { name: 'caseKeyword', isToken: true, excludeFromAST: true }, { name: 'expression', type: 'IExpressionSyntax' }, - { name: 'colonToken', isToken: true, excludeFromAST: true}, + { name: 'colonToken', isToken: true, excludeFromAST: true }, { name: 'statements', isList: true, elementType: 'IStatementSyntax' } ] }, @@ -931,7 +931,7 @@ var definitions:ITypeDefinition[] = [ { name: 'asterixToken', isToken: true, isOptional: true }, { name: 'identifier', isToken: true, isOptional: true }, { name: 'callSignature', type: 'CallSignatureSyntax' }, - { name: 'body', type: 'BlockSyntax | ExpressionBody | ISyntaxToken', isOptional: true }] + { name: 'body', type: 'BlockSyntax | ExpressionBody | ISyntaxToken', isOptional: true }] }, { name: 'EmptyStatementSyntax', @@ -1104,41 +1104,19 @@ function generateConstructorFunction(definition: ITypeDefinition) { result += ") {\r\n"; result += " if (data) { this.__data = data; }\r\n"; - + result += " this.parent = undefined"; if (definition.children.length) { - result += " "; - for (var i = 0; i < definition.children.length; i++) { - if (i) { - result += ", "; - } + //if (i) { + result += ",\r\n"; + //} var child = definition.children[i]; - result += "this." + child.name + " = " + getSafeName(child); + result += " this." + child.name + " = " + getSafeName(child); } - - result += ";\r\n"; } - if (definition.children.length > 0) { - result += " "; - - for (var i = 0; i < definition.children.length; i++) { - if (i) { - result += ", "; - } - - var child = definition.children[i]; - - if (child.isOptional) { - result += getSafeName(child) + " && (" + getSafeName(child) + ".parent = this)"; - } - else { - result += getSafeName(child) + ".parent = this"; - } - } - result += ";\r\n"; - } + result += ";\r\n"; result += " };\r\n"; result += " " + definition.name + ".prototype.kind = SyntaxKind." + getNameWithoutSuffix(definition) + ";\r\n"; @@ -1202,7 +1180,7 @@ function generateSyntaxInterface(definition: ITypeDefinition): string { result += " }\r\n"; result += " export interface " + getNameWithoutSuffix(definition) + "Constructor {"; result += " new (data: number"; - + for (var i = 0; i < definition.children.length; i++) { var child = definition.children[i]; result += ", "; @@ -1338,7 +1316,7 @@ function generateKeywordCondition(keywords: { text: string; kind: TypeScript.Syn if (keywords.length === 1) { var keyword = keywords[0]; - + if (currentCharacter === length) { return " return SyntaxKind." + firstEnumName(getSyntaxKindEnum(), keyword.kind) + ";\r\n"; } diff --git a/src/services/syntax/syntaxInterfaces.generated.ts b/src/services/syntax/syntaxInterfaces.generated.ts index 06236bcc477d9..637cec2ad6a58 100644 --- a/src/services/syntax/syntaxInterfaces.generated.ts +++ b/src/services/syntax/syntaxInterfaces.generated.ts @@ -702,10 +702,10 @@ module TypeScript { export interface ExternalModuleReferenceSyntax extends ISyntaxNode, IModuleReferenceSyntax { requireKeyword: ISyntaxToken; openParenToken: ISyntaxToken; - stringLiteral: ISyntaxToken; + expression: IExpressionSyntax; closeParenToken: ISyntaxToken; } - export interface ExternalModuleReferenceConstructor { new (data: number, requireKeyword: ISyntaxToken, openParenToken: ISyntaxToken, stringLiteral: ISyntaxToken, closeParenToken: ISyntaxToken): ExternalModuleReferenceSyntax } + export interface ExternalModuleReferenceConstructor { new (data: number, requireKeyword: ISyntaxToken, openParenToken: ISyntaxToken, expression: IExpressionSyntax, closeParenToken: ISyntaxToken): ExternalModuleReferenceSyntax } export interface ModuleNameModuleReferenceSyntax extends ISyntaxNode, IModuleReferenceSyntax { moduleName: INameSyntax; diff --git a/src/services/syntax/syntaxList.ts b/src/services/syntax/syntaxList.ts index aa6d811295264..79d3260e0823d 100644 --- a/src/services/syntax/syntaxList.ts +++ b/src/services/syntax/syntaxList.ts @@ -48,22 +48,10 @@ module TypeScript.Syntax { addArrayPrototypeValue("kind", SyntaxKind.List); export function list(nodes: T[]): T[] { - if (nodes !== undefined) { - for (var i = 0, n = nodes.length; i < n; i++) { - nodes[i].parent = nodes; - } - } - return nodes; } export function separatedList(nodesAndTokens: ISyntaxNodeOrToken[]): ISeparatedSyntaxList { - if (nodesAndTokens !== undefined) { - for (var i = 0, n = nodesAndTokens.length; i < n; i++) { - nodesAndTokens[i].parent = nodesAndTokens; - } - } - return >nodesAndTokens; } } \ No newline at end of file diff --git a/src/services/syntax/syntaxNodes.concrete.generated.ts b/src/services/syntax/syntaxNodes.concrete.generated.ts index 4f5f9667ad649..5cb5bdb2f5128 100644 --- a/src/services/syntax/syntaxNodes.concrete.generated.ts +++ b/src/services/syntax/syntaxNodes.concrete.generated.ts @@ -1,34 +1,29 @@ /// module TypeScript { - export var SourceUnitSyntax: SourceUnitConstructor = function(data: number, moduleElements: IModuleElementSyntax[], endOfFileToken: ISyntaxToken) { + export var SourceUnitSyntax: SourceUnitConstructor = function (data: number, moduleElements: IModuleElementSyntax[], endOfFileToken: ISyntaxToken) { if (data) { this.__data = data; } this.moduleElements = moduleElements, - this.endOfFileToken = endOfFileToken, - moduleElements.parent = this, - endOfFileToken.parent = this; + this.endOfFileToken = endOfFileToken; }; SourceUnitSyntax.prototype.kind = SyntaxKind.SourceUnit; SourceUnitSyntax.prototype.childCount = 2; - SourceUnitSyntax.prototype.childAt = function(index: number): ISyntaxElement { + SourceUnitSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.moduleElements; case 1: return this.endOfFileToken; } } - export var QualifiedNameSyntax: QualifiedNameConstructor = function(data: number, left: INameSyntax, dotToken: ISyntaxToken, right: ISyntaxToken) { + export var QualifiedNameSyntax: QualifiedNameConstructor = function (data: number, left: INameSyntax, dotToken: ISyntaxToken, right: ISyntaxToken) { if (data) { this.__data = data; } this.left = left, this.dotToken = dotToken, - this.right = right, - left.parent = this, - dotToken.parent = this, - right.parent = this; + this.right = right; }; QualifiedNameSyntax.prototype.kind = SyntaxKind.QualifiedName; QualifiedNameSyntax.prototype.childCount = 3; - QualifiedNameSyntax.prototype.childAt = function(index: number): ISyntaxElement { + QualifiedNameSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.left; case 1: return this.dotToken; @@ -36,18 +31,15 @@ module TypeScript { } } - export var ObjectTypeSyntax: ObjectTypeConstructor = function(data: number, openBraceToken: ISyntaxToken, typeMembers: ITypeMemberSyntax[], closeBraceToken: ISyntaxToken) { + export var ObjectTypeSyntax: ObjectTypeConstructor = function (data: number, openBraceToken: ISyntaxToken, typeMembers: ITypeMemberSyntax[], closeBraceToken: ISyntaxToken) { if (data) { this.__data = data; } this.openBraceToken = openBraceToken, this.typeMembers = typeMembers, - this.closeBraceToken = closeBraceToken, - openBraceToken.parent = this, - typeMembers.parent = this, - closeBraceToken.parent = this; + this.closeBraceToken = closeBraceToken; }; ObjectTypeSyntax.prototype.kind = SyntaxKind.ObjectType; ObjectTypeSyntax.prototype.childCount = 3; - ObjectTypeSyntax.prototype.childAt = function(index: number): ISyntaxElement { + ObjectTypeSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.openBraceToken; case 1: return this.typeMembers; @@ -55,20 +47,16 @@ module TypeScript { } } - export var FunctionTypeSyntax: FunctionTypeConstructor = function(data: number, typeParameterList: TypeParameterListSyntax, parameterList: ParameterListSyntax, equalsGreaterThanToken: ISyntaxToken, type: ITypeSyntax) { + export var FunctionTypeSyntax: FunctionTypeConstructor = function (data: number, typeParameterList: TypeParameterListSyntax, parameterList: ParameterListSyntax, equalsGreaterThanToken: ISyntaxToken, type: ITypeSyntax) { if (data) { this.__data = data; } this.typeParameterList = typeParameterList, this.parameterList = parameterList, this.equalsGreaterThanToken = equalsGreaterThanToken, - this.type = type, - typeParameterList && (typeParameterList.parent = this), - parameterList.parent = this, - equalsGreaterThanToken.parent = this, - type.parent = this; + this.type = type; }; FunctionTypeSyntax.prototype.kind = SyntaxKind.FunctionType; FunctionTypeSyntax.prototype.childCount = 4; - FunctionTypeSyntax.prototype.childAt = function(index: number): ISyntaxElement { + FunctionTypeSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.typeParameterList; case 1: return this.parameterList; @@ -77,18 +65,15 @@ module TypeScript { } } - export var ArrayTypeSyntax: ArrayTypeConstructor = function(data: number, type: ITypeSyntax, openBracketToken: ISyntaxToken, closeBracketToken: ISyntaxToken) { + export var ArrayTypeSyntax: ArrayTypeConstructor = function (data: number, type: ITypeSyntax, openBracketToken: ISyntaxToken, closeBracketToken: ISyntaxToken) { if (data) { this.__data = data; } this.type = type, this.openBracketToken = openBracketToken, - this.closeBracketToken = closeBracketToken, - type.parent = this, - openBracketToken.parent = this, - closeBracketToken.parent = this; + this.closeBracketToken = closeBracketToken; }; ArrayTypeSyntax.prototype.kind = SyntaxKind.ArrayType; ArrayTypeSyntax.prototype.childCount = 3; - ArrayTypeSyntax.prototype.childAt = function(index: number): ISyntaxElement { + ArrayTypeSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.type; case 1: return this.openBracketToken; @@ -96,22 +81,17 @@ module TypeScript { } } - export var ConstructorTypeSyntax: ConstructorTypeConstructor = function(data: number, newKeyword: ISyntaxToken, typeParameterList: TypeParameterListSyntax, parameterList: ParameterListSyntax, equalsGreaterThanToken: ISyntaxToken, type: ITypeSyntax) { + export var ConstructorTypeSyntax: ConstructorTypeConstructor = function (data: number, newKeyword: ISyntaxToken, typeParameterList: TypeParameterListSyntax, parameterList: ParameterListSyntax, equalsGreaterThanToken: ISyntaxToken, type: ITypeSyntax) { if (data) { this.__data = data; } this.newKeyword = newKeyword, this.typeParameterList = typeParameterList, this.parameterList = parameterList, this.equalsGreaterThanToken = equalsGreaterThanToken, - this.type = type, - newKeyword.parent = this, - typeParameterList && (typeParameterList.parent = this), - parameterList.parent = this, - equalsGreaterThanToken.parent = this, - type.parent = this; + this.type = type; }; ConstructorTypeSyntax.prototype.kind = SyntaxKind.ConstructorType; ConstructorTypeSyntax.prototype.childCount = 5; - ConstructorTypeSyntax.prototype.childAt = function(index: number): ISyntaxElement { + ConstructorTypeSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.newKeyword; case 1: return this.typeParameterList; @@ -121,50 +101,43 @@ module TypeScript { } } - export var GenericTypeSyntax: GenericTypeConstructor = function(data: number, name: INameSyntax, typeArgumentList: TypeArgumentListSyntax) { + export var GenericTypeSyntax: GenericTypeConstructor = function (data: number, name: INameSyntax, typeArgumentList: TypeArgumentListSyntax) { if (data) { this.__data = data; } this.name = name, - this.typeArgumentList = typeArgumentList, - name.parent = this, - typeArgumentList.parent = this; + this.typeArgumentList = typeArgumentList; }; GenericTypeSyntax.prototype.kind = SyntaxKind.GenericType; GenericTypeSyntax.prototype.childCount = 2; - GenericTypeSyntax.prototype.childAt = function(index: number): ISyntaxElement { + GenericTypeSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.name; case 1: return this.typeArgumentList; } } - export var TypeQuerySyntax: TypeQueryConstructor = function(data: number, typeOfKeyword: ISyntaxToken, name: INameSyntax) { + export var TypeQuerySyntax: TypeQueryConstructor = function (data: number, typeOfKeyword: ISyntaxToken, name: INameSyntax) { if (data) { this.__data = data; } this.typeOfKeyword = typeOfKeyword, - this.name = name, - typeOfKeyword.parent = this, - name.parent = this; + this.name = name; }; TypeQuerySyntax.prototype.kind = SyntaxKind.TypeQuery; TypeQuerySyntax.prototype.childCount = 2; - TypeQuerySyntax.prototype.childAt = function(index: number): ISyntaxElement { + TypeQuerySyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.typeOfKeyword; case 1: return this.name; } } - export var TupleTypeSyntax: TupleTypeConstructor = function(data: number, openBracketToken: ISyntaxToken, types: ISeparatedSyntaxList, closeBracketToken: ISyntaxToken) { + export var TupleTypeSyntax: TupleTypeConstructor = function (data: number, openBracketToken: ISyntaxToken, types: ISeparatedSyntaxList, closeBracketToken: ISyntaxToken) { if (data) { this.__data = data; } this.openBracketToken = openBracketToken, this.types = types, - this.closeBracketToken = closeBracketToken, - openBracketToken.parent = this, - types.parent = this, - closeBracketToken.parent = this; + this.closeBracketToken = closeBracketToken; }; TupleTypeSyntax.prototype.kind = SyntaxKind.TupleType; TupleTypeSyntax.prototype.childCount = 3; - TupleTypeSyntax.prototype.childAt = function(index: number): ISyntaxElement { + TupleTypeSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.openBracketToken; case 1: return this.types; @@ -172,18 +145,15 @@ module TypeScript { } } - export var UnionTypeSyntax: UnionTypeConstructor = function(data: number, left: ITypeSyntax, barToken: ISyntaxToken, right: ITypeSyntax) { + export var UnionTypeSyntax: UnionTypeConstructor = function (data: number, left: ITypeSyntax, barToken: ISyntaxToken, right: ITypeSyntax) { if (data) { this.__data = data; } this.left = left, this.barToken = barToken, - this.right = right, - left.parent = this, - barToken.parent = this, - right.parent = this; + this.right = right; }; UnionTypeSyntax.prototype.kind = SyntaxKind.UnionType; UnionTypeSyntax.prototype.childCount = 3; - UnionTypeSyntax.prototype.childAt = function(index: number): ISyntaxElement { + UnionTypeSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.left; case 1: return this.barToken; @@ -191,18 +161,15 @@ module TypeScript { } } - export var ParenthesizedTypeSyntax: ParenthesizedTypeConstructor = function(data: number, openParenToken: ISyntaxToken, type: ITypeSyntax, closeParenToken: ISyntaxToken) { + export var ParenthesizedTypeSyntax: ParenthesizedTypeConstructor = function (data: number, openParenToken: ISyntaxToken, type: ITypeSyntax, closeParenToken: ISyntaxToken) { if (data) { this.__data = data; } this.openParenToken = openParenToken, this.type = type, - this.closeParenToken = closeParenToken, - openParenToken.parent = this, - type.parent = this, - closeParenToken.parent = this; + this.closeParenToken = closeParenToken; }; ParenthesizedTypeSyntax.prototype.kind = SyntaxKind.ParenthesizedType; ParenthesizedTypeSyntax.prototype.childCount = 3; - ParenthesizedTypeSyntax.prototype.childAt = function(index: number): ISyntaxElement { + ParenthesizedTypeSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.openParenToken; case 1: return this.type; @@ -210,24 +177,18 @@ module TypeScript { } } - export var InterfaceDeclarationSyntax: InterfaceDeclarationConstructor = function(data: number, modifiers: ISyntaxToken[], interfaceKeyword: ISyntaxToken, identifier: ISyntaxToken, typeParameterList: TypeParameterListSyntax, heritageClauses: HeritageClauseSyntax[], body: ObjectTypeSyntax) { + export var InterfaceDeclarationSyntax: InterfaceDeclarationConstructor = function (data: number, modifiers: ISyntaxToken[], interfaceKeyword: ISyntaxToken, identifier: ISyntaxToken, typeParameterList: TypeParameterListSyntax, heritageClauses: HeritageClauseSyntax[], body: ObjectTypeSyntax) { if (data) { this.__data = data; } this.modifiers = modifiers, this.interfaceKeyword = interfaceKeyword, this.identifier = identifier, this.typeParameterList = typeParameterList, this.heritageClauses = heritageClauses, - this.body = body, - modifiers.parent = this, - interfaceKeyword.parent = this, - identifier.parent = this, - typeParameterList && (typeParameterList.parent = this), - heritageClauses.parent = this, - body.parent = this; + this.body = body; }; InterfaceDeclarationSyntax.prototype.kind = SyntaxKind.InterfaceDeclaration; InterfaceDeclarationSyntax.prototype.childCount = 6; - InterfaceDeclarationSyntax.prototype.childAt = function(index: number): ISyntaxElement { + InterfaceDeclarationSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.modifiers; case 1: return this.interfaceKeyword; @@ -238,24 +199,18 @@ module TypeScript { } } - export var FunctionDeclarationSyntax: FunctionDeclarationConstructor = function(data: number, modifiers: ISyntaxToken[], functionKeyword: ISyntaxToken, asterixToken: ISyntaxToken, identifier: ISyntaxToken, callSignature: CallSignatureSyntax, body: BlockSyntax | ExpressionBody | ISyntaxToken) { + export var FunctionDeclarationSyntax: FunctionDeclarationConstructor = function (data: number, modifiers: ISyntaxToken[], functionKeyword: ISyntaxToken, asterixToken: ISyntaxToken, identifier: ISyntaxToken, callSignature: CallSignatureSyntax, body: BlockSyntax | ExpressionBody | ISyntaxToken) { if (data) { this.__data = data; } this.modifiers = modifiers, this.functionKeyword = functionKeyword, this.asterixToken = asterixToken, this.identifier = identifier, this.callSignature = callSignature, - this.body = body, - modifiers.parent = this, - functionKeyword.parent = this, - asterixToken && (asterixToken.parent = this), - identifier.parent = this, - callSignature.parent = this, - body && (body.parent = this); + this.body = body; }; FunctionDeclarationSyntax.prototype.kind = SyntaxKind.FunctionDeclaration; FunctionDeclarationSyntax.prototype.childCount = 6; - FunctionDeclarationSyntax.prototype.childAt = function(index: number): ISyntaxElement { + FunctionDeclarationSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.modifiers; case 1: return this.functionKeyword; @@ -266,24 +221,18 @@ module TypeScript { } } - export var ModuleDeclarationSyntax: ModuleDeclarationConstructor = function(data: number, modifiers: ISyntaxToken[], moduleKeyword: ISyntaxToken, name: INameSyntax, openBraceToken: ISyntaxToken, moduleElements: IModuleElementSyntax[], closeBraceToken: ISyntaxToken) { + export var ModuleDeclarationSyntax: ModuleDeclarationConstructor = function (data: number, modifiers: ISyntaxToken[], moduleKeyword: ISyntaxToken, name: INameSyntax, openBraceToken: ISyntaxToken, moduleElements: IModuleElementSyntax[], closeBraceToken: ISyntaxToken) { if (data) { this.__data = data; } this.modifiers = modifiers, this.moduleKeyword = moduleKeyword, this.name = name, this.openBraceToken = openBraceToken, this.moduleElements = moduleElements, - this.closeBraceToken = closeBraceToken, - modifiers.parent = this, - moduleKeyword.parent = this, - name.parent = this, - openBraceToken.parent = this, - moduleElements.parent = this, - closeBraceToken.parent = this; + this.closeBraceToken = closeBraceToken; }; ModuleDeclarationSyntax.prototype.kind = SyntaxKind.ModuleDeclaration; ModuleDeclarationSyntax.prototype.childCount = 6; - ModuleDeclarationSyntax.prototype.childAt = function(index: number): ISyntaxElement { + ModuleDeclarationSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.modifiers; case 1: return this.moduleKeyword; @@ -294,7 +243,7 @@ module TypeScript { } } - export var ClassDeclarationSyntax: ClassDeclarationConstructor = function(data: number, modifiers: ISyntaxToken[], classKeyword: ISyntaxToken, identifier: ISyntaxToken, typeParameterList: TypeParameterListSyntax, heritageClauses: HeritageClauseSyntax[], openBraceToken: ISyntaxToken, classElements: IClassElementSyntax[], closeBraceToken: ISyntaxToken) { + export var ClassDeclarationSyntax: ClassDeclarationConstructor = function (data: number, modifiers: ISyntaxToken[], classKeyword: ISyntaxToken, identifier: ISyntaxToken, typeParameterList: TypeParameterListSyntax, heritageClauses: HeritageClauseSyntax[], openBraceToken: ISyntaxToken, classElements: IClassElementSyntax[], closeBraceToken: ISyntaxToken) { if (data) { this.__data = data; } this.modifiers = modifiers, this.classKeyword = classKeyword, @@ -303,19 +252,11 @@ module TypeScript { this.heritageClauses = heritageClauses, this.openBraceToken = openBraceToken, this.classElements = classElements, - this.closeBraceToken = closeBraceToken, - modifiers.parent = this, - classKeyword.parent = this, - identifier.parent = this, - typeParameterList && (typeParameterList.parent = this), - heritageClauses.parent = this, - openBraceToken.parent = this, - classElements.parent = this, - closeBraceToken.parent = this; + this.closeBraceToken = closeBraceToken; }; ClassDeclarationSyntax.prototype.kind = SyntaxKind.ClassDeclaration; ClassDeclarationSyntax.prototype.childCount = 8; - ClassDeclarationSyntax.prototype.childAt = function(index: number): ISyntaxElement { + ClassDeclarationSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.modifiers; case 1: return this.classKeyword; @@ -328,24 +269,18 @@ module TypeScript { } } - export var EnumDeclarationSyntax: EnumDeclarationConstructor = function(data: number, modifiers: ISyntaxToken[], enumKeyword: ISyntaxToken, identifier: ISyntaxToken, openBraceToken: ISyntaxToken, enumElements: ISeparatedSyntaxList, closeBraceToken: ISyntaxToken) { + export var EnumDeclarationSyntax: EnumDeclarationConstructor = function (data: number, modifiers: ISyntaxToken[], enumKeyword: ISyntaxToken, identifier: ISyntaxToken, openBraceToken: ISyntaxToken, enumElements: ISeparatedSyntaxList, closeBraceToken: ISyntaxToken) { if (data) { this.__data = data; } this.modifiers = modifiers, this.enumKeyword = enumKeyword, this.identifier = identifier, this.openBraceToken = openBraceToken, this.enumElements = enumElements, - this.closeBraceToken = closeBraceToken, - modifiers.parent = this, - enumKeyword.parent = this, - identifier.parent = this, - openBraceToken.parent = this, - enumElements.parent = this, - closeBraceToken.parent = this; + this.closeBraceToken = closeBraceToken; }; EnumDeclarationSyntax.prototype.kind = SyntaxKind.EnumDeclaration; EnumDeclarationSyntax.prototype.childCount = 6; - EnumDeclarationSyntax.prototype.childAt = function(index: number): ISyntaxElement { + EnumDeclarationSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.modifiers; case 1: return this.enumKeyword; @@ -356,24 +291,18 @@ module TypeScript { } } - export var ImportDeclarationSyntax: ImportDeclarationConstructor = function(data: number, modifiers: ISyntaxToken[], importKeyword: ISyntaxToken, identifier: ISyntaxToken, equalsToken: ISyntaxToken, moduleReference: IModuleReferenceSyntax, semicolonToken: ISyntaxToken) { + export var ImportDeclarationSyntax: ImportDeclarationConstructor = function (data: number, modifiers: ISyntaxToken[], importKeyword: ISyntaxToken, identifier: ISyntaxToken, equalsToken: ISyntaxToken, moduleReference: IModuleReferenceSyntax, semicolonToken: ISyntaxToken) { if (data) { this.__data = data; } this.modifiers = modifiers, this.importKeyword = importKeyword, this.identifier = identifier, this.equalsToken = equalsToken, this.moduleReference = moduleReference, - this.semicolonToken = semicolonToken, - modifiers.parent = this, - importKeyword.parent = this, - identifier.parent = this, - equalsToken.parent = this, - moduleReference.parent = this, - semicolonToken && (semicolonToken.parent = this); + this.semicolonToken = semicolonToken; }; ImportDeclarationSyntax.prototype.kind = SyntaxKind.ImportDeclaration; ImportDeclarationSyntax.prototype.childCount = 6; - ImportDeclarationSyntax.prototype.childAt = function(index: number): ISyntaxElement { + ImportDeclarationSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.modifiers; case 1: return this.importKeyword; @@ -384,22 +313,17 @@ module TypeScript { } } - export var ExportAssignmentSyntax: ExportAssignmentConstructor = function(data: number, modifiers: ISyntaxToken[], exportKeyword: ISyntaxToken, equalsToken: ISyntaxToken, identifier: ISyntaxToken, semicolonToken: ISyntaxToken) { + export var ExportAssignmentSyntax: ExportAssignmentConstructor = function (data: number, modifiers: ISyntaxToken[], exportKeyword: ISyntaxToken, equalsToken: ISyntaxToken, identifier: ISyntaxToken, semicolonToken: ISyntaxToken) { if (data) { this.__data = data; } this.modifiers = modifiers, this.exportKeyword = exportKeyword, this.equalsToken = equalsToken, this.identifier = identifier, - this.semicolonToken = semicolonToken, - modifiers.parent = this, - exportKeyword.parent = this, - equalsToken.parent = this, - identifier.parent = this, - semicolonToken && (semicolonToken.parent = this); + this.semicolonToken = semicolonToken; }; ExportAssignmentSyntax.prototype.kind = SyntaxKind.ExportAssignment; ExportAssignmentSyntax.prototype.childCount = 5; - ExportAssignmentSyntax.prototype.childAt = function(index: number): ISyntaxElement { + ExportAssignmentSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.modifiers; case 1: return this.exportKeyword; @@ -409,22 +333,17 @@ module TypeScript { } } - export var MethodDeclarationSyntax: MethodDeclarationConstructor = function(data: number, modifiers: ISyntaxToken[], asterixToken: ISyntaxToken, propertyName: IPropertyNameSyntax, callSignature: CallSignatureSyntax, body: BlockSyntax | ExpressionBody | ISyntaxToken) { + export var MethodDeclarationSyntax: MethodDeclarationConstructor = function (data: number, modifiers: ISyntaxToken[], asterixToken: ISyntaxToken, propertyName: IPropertyNameSyntax, callSignature: CallSignatureSyntax, body: BlockSyntax | ExpressionBody | ISyntaxToken) { if (data) { this.__data = data; } this.modifiers = modifiers, this.asterixToken = asterixToken, this.propertyName = propertyName, this.callSignature = callSignature, - this.body = body, - modifiers.parent = this, - asterixToken && (asterixToken.parent = this), - propertyName.parent = this, - callSignature.parent = this, - body && (body.parent = this); + this.body = body; }; MethodDeclarationSyntax.prototype.kind = SyntaxKind.MethodDeclaration; MethodDeclarationSyntax.prototype.childCount = 5; - MethodDeclarationSyntax.prototype.childAt = function(index: number): ISyntaxElement { + MethodDeclarationSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.modifiers; case 1: return this.asterixToken; @@ -434,18 +353,15 @@ module TypeScript { } } - export var PropertyDeclarationSyntax: PropertyDeclarationConstructor = function(data: number, modifiers: ISyntaxToken[], variableDeclarator: VariableDeclaratorSyntax, semicolonToken: ISyntaxToken) { + export var PropertyDeclarationSyntax: PropertyDeclarationConstructor = function (data: number, modifiers: ISyntaxToken[], variableDeclarator: VariableDeclaratorSyntax, semicolonToken: ISyntaxToken) { if (data) { this.__data = data; } this.modifiers = modifiers, this.variableDeclarator = variableDeclarator, - this.semicolonToken = semicolonToken, - modifiers.parent = this, - variableDeclarator.parent = this, - semicolonToken && (semicolonToken.parent = this); + this.semicolonToken = semicolonToken; }; PropertyDeclarationSyntax.prototype.kind = SyntaxKind.PropertyDeclaration; PropertyDeclarationSyntax.prototype.childCount = 3; - PropertyDeclarationSyntax.prototype.childAt = function(index: number): ISyntaxElement { + PropertyDeclarationSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.modifiers; case 1: return this.variableDeclarator; @@ -453,20 +369,16 @@ module TypeScript { } } - export var ConstructorDeclarationSyntax: ConstructorDeclarationConstructor = function(data: number, modifiers: ISyntaxToken[], constructorKeyword: ISyntaxToken, callSignature: CallSignatureSyntax, body: BlockSyntax | ExpressionBody | ISyntaxToken) { + export var ConstructorDeclarationSyntax: ConstructorDeclarationConstructor = function (data: number, modifiers: ISyntaxToken[], constructorKeyword: ISyntaxToken, callSignature: CallSignatureSyntax, body: BlockSyntax | ExpressionBody | ISyntaxToken) { if (data) { this.__data = data; } this.modifiers = modifiers, this.constructorKeyword = constructorKeyword, this.callSignature = callSignature, - this.body = body, - modifiers.parent = this, - constructorKeyword.parent = this, - callSignature.parent = this, - body && (body.parent = this); + this.body = body; }; ConstructorDeclarationSyntax.prototype.kind = SyntaxKind.ConstructorDeclaration; ConstructorDeclarationSyntax.prototype.childCount = 4; - ConstructorDeclarationSyntax.prototype.childAt = function(index: number): ISyntaxElement { + ConstructorDeclarationSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.modifiers; case 1: return this.constructorKeyword; @@ -475,22 +387,17 @@ module TypeScript { } } - export var GetAccessorSyntax: GetAccessorConstructor = function(data: number, modifiers: ISyntaxToken[], getKeyword: ISyntaxToken, propertyName: IPropertyNameSyntax, callSignature: CallSignatureSyntax, body: BlockSyntax | ExpressionBody | ISyntaxToken) { + export var GetAccessorSyntax: GetAccessorConstructor = function (data: number, modifiers: ISyntaxToken[], getKeyword: ISyntaxToken, propertyName: IPropertyNameSyntax, callSignature: CallSignatureSyntax, body: BlockSyntax | ExpressionBody | ISyntaxToken) { if (data) { this.__data = data; } this.modifiers = modifiers, this.getKeyword = getKeyword, this.propertyName = propertyName, this.callSignature = callSignature, - this.body = body, - modifiers.parent = this, - getKeyword.parent = this, - propertyName.parent = this, - callSignature.parent = this, - body && (body.parent = this); + this.body = body; }; GetAccessorSyntax.prototype.kind = SyntaxKind.GetAccessor; GetAccessorSyntax.prototype.childCount = 5; - GetAccessorSyntax.prototype.childAt = function(index: number): ISyntaxElement { + GetAccessorSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.modifiers; case 1: return this.getKeyword; @@ -500,22 +407,17 @@ module TypeScript { } } - export var SetAccessorSyntax: SetAccessorConstructor = function(data: number, modifiers: ISyntaxToken[], setKeyword: ISyntaxToken, propertyName: IPropertyNameSyntax, callSignature: CallSignatureSyntax, body: BlockSyntax | ExpressionBody | ISyntaxToken) { + export var SetAccessorSyntax: SetAccessorConstructor = function (data: number, modifiers: ISyntaxToken[], setKeyword: ISyntaxToken, propertyName: IPropertyNameSyntax, callSignature: CallSignatureSyntax, body: BlockSyntax | ExpressionBody | ISyntaxToken) { if (data) { this.__data = data; } this.modifiers = modifiers, this.setKeyword = setKeyword, this.propertyName = propertyName, this.callSignature = callSignature, - this.body = body, - modifiers.parent = this, - setKeyword.parent = this, - propertyName.parent = this, - callSignature.parent = this, - body && (body.parent = this); + this.body = body; }; SetAccessorSyntax.prototype.kind = SyntaxKind.SetAccessor; SetAccessorSyntax.prototype.childCount = 5; - SetAccessorSyntax.prototype.childAt = function(index: number): ISyntaxElement { + SetAccessorSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.modifiers; case 1: return this.setKeyword; @@ -525,20 +427,16 @@ module TypeScript { } } - export var PropertySignatureSyntax: PropertySignatureConstructor = function(data: number, propertyName: IPropertyNameSyntax, questionToken: ISyntaxToken, typeAnnotation: TypeAnnotationSyntax, semicolonOrCommaToken: ISyntaxToken) { + export var PropertySignatureSyntax: PropertySignatureConstructor = function (data: number, propertyName: IPropertyNameSyntax, questionToken: ISyntaxToken, typeAnnotation: TypeAnnotationSyntax, semicolonOrCommaToken: ISyntaxToken) { if (data) { this.__data = data; } this.propertyName = propertyName, this.questionToken = questionToken, this.typeAnnotation = typeAnnotation, - this.semicolonOrCommaToken = semicolonOrCommaToken, - propertyName.parent = this, - questionToken && (questionToken.parent = this), - typeAnnotation && (typeAnnotation.parent = this), - semicolonOrCommaToken && (semicolonOrCommaToken.parent = this); + this.semicolonOrCommaToken = semicolonOrCommaToken; }; PropertySignatureSyntax.prototype.kind = SyntaxKind.PropertySignature; PropertySignatureSyntax.prototype.childCount = 4; - PropertySignatureSyntax.prototype.childAt = function(index: number): ISyntaxElement { + PropertySignatureSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.propertyName; case 1: return this.questionToken; @@ -547,20 +445,16 @@ module TypeScript { } } - export var CallSignatureSyntax: CallSignatureConstructor = function(data: number, typeParameterList: TypeParameterListSyntax, parameterList: ParameterListSyntax, typeAnnotation: TypeAnnotationSyntax, semicolonOrCommaToken: ISyntaxToken) { + export var CallSignatureSyntax: CallSignatureConstructor = function (data: number, typeParameterList: TypeParameterListSyntax, parameterList: ParameterListSyntax, typeAnnotation: TypeAnnotationSyntax, semicolonOrCommaToken: ISyntaxToken) { if (data) { this.__data = data; } this.typeParameterList = typeParameterList, this.parameterList = parameterList, this.typeAnnotation = typeAnnotation, - this.semicolonOrCommaToken = semicolonOrCommaToken, - typeParameterList && (typeParameterList.parent = this), - parameterList.parent = this, - typeAnnotation && (typeAnnotation.parent = this), - semicolonOrCommaToken && (semicolonOrCommaToken.parent = this); + this.semicolonOrCommaToken = semicolonOrCommaToken; }; CallSignatureSyntax.prototype.kind = SyntaxKind.CallSignature; CallSignatureSyntax.prototype.childCount = 4; - CallSignatureSyntax.prototype.childAt = function(index: number): ISyntaxElement { + CallSignatureSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.typeParameterList; case 1: return this.parameterList; @@ -569,40 +463,32 @@ module TypeScript { } } - export var ConstructSignatureSyntax: ConstructSignatureConstructor = function(data: number, newKeyword: ISyntaxToken, callSignature: CallSignatureSyntax) { + export var ConstructSignatureSyntax: ConstructSignatureConstructor = function (data: number, newKeyword: ISyntaxToken, callSignature: CallSignatureSyntax) { if (data) { this.__data = data; } this.newKeyword = newKeyword, - this.callSignature = callSignature, - newKeyword.parent = this, - callSignature.parent = this; + this.callSignature = callSignature; }; ConstructSignatureSyntax.prototype.kind = SyntaxKind.ConstructSignature; ConstructSignatureSyntax.prototype.childCount = 2; - ConstructSignatureSyntax.prototype.childAt = function(index: number): ISyntaxElement { + ConstructSignatureSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.newKeyword; case 1: return this.callSignature; } } - export var IndexSignatureSyntax: IndexSignatureConstructor = function(data: number, modifiers: ISyntaxToken[], openBracketToken: ISyntaxToken, parameters: ISeparatedSyntaxList, closeBracketToken: ISyntaxToken, typeAnnotation: TypeAnnotationSyntax, semicolonOrCommaToken: ISyntaxToken) { + export var IndexSignatureSyntax: IndexSignatureConstructor = function (data: number, modifiers: ISyntaxToken[], openBracketToken: ISyntaxToken, parameters: ISeparatedSyntaxList, closeBracketToken: ISyntaxToken, typeAnnotation: TypeAnnotationSyntax, semicolonOrCommaToken: ISyntaxToken) { if (data) { this.__data = data; } this.modifiers = modifiers, this.openBracketToken = openBracketToken, this.parameters = parameters, this.closeBracketToken = closeBracketToken, this.typeAnnotation = typeAnnotation, - this.semicolonOrCommaToken = semicolonOrCommaToken, - modifiers.parent = this, - openBracketToken.parent = this, - parameters.parent = this, - closeBracketToken.parent = this, - typeAnnotation && (typeAnnotation.parent = this), - semicolonOrCommaToken && (semicolonOrCommaToken.parent = this); + this.semicolonOrCommaToken = semicolonOrCommaToken; }; IndexSignatureSyntax.prototype.kind = SyntaxKind.IndexSignature; IndexSignatureSyntax.prototype.childCount = 6; - IndexSignatureSyntax.prototype.childAt = function(index: number): ISyntaxElement { + IndexSignatureSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.modifiers; case 1: return this.openBracketToken; @@ -613,18 +499,15 @@ module TypeScript { } } - export var MethodSignatureSyntax: MethodSignatureConstructor = function(data: number, propertyName: IPropertyNameSyntax, questionToken: ISyntaxToken, callSignature: CallSignatureSyntax) { + export var MethodSignatureSyntax: MethodSignatureConstructor = function (data: number, propertyName: IPropertyNameSyntax, questionToken: ISyntaxToken, callSignature: CallSignatureSyntax) { if (data) { this.__data = data; } this.propertyName = propertyName, this.questionToken = questionToken, - this.callSignature = callSignature, - propertyName.parent = this, - questionToken && (questionToken.parent = this), - callSignature.parent = this; + this.callSignature = callSignature; }; MethodSignatureSyntax.prototype.kind = SyntaxKind.MethodSignature; MethodSignatureSyntax.prototype.childCount = 3; - MethodSignatureSyntax.prototype.childAt = function(index: number): ISyntaxElement { + MethodSignatureSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.propertyName; case 1: return this.questionToken; @@ -632,20 +515,16 @@ module TypeScript { } } - export var BlockSyntax: BlockConstructor = function(data: number, equalsGreaterThanToken: ISyntaxToken, openBraceToken: ISyntaxToken, statements: IStatementSyntax[], closeBraceToken: ISyntaxToken) { + export var BlockSyntax: BlockConstructor = function (data: number, equalsGreaterThanToken: ISyntaxToken, openBraceToken: ISyntaxToken, statements: IStatementSyntax[], closeBraceToken: ISyntaxToken) { if (data) { this.__data = data; } this.equalsGreaterThanToken = equalsGreaterThanToken, this.openBraceToken = openBraceToken, this.statements = statements, - this.closeBraceToken = closeBraceToken, - equalsGreaterThanToken && (equalsGreaterThanToken.parent = this), - openBraceToken.parent = this, - statements.parent = this, - closeBraceToken.parent = this; + this.closeBraceToken = closeBraceToken; }; BlockSyntax.prototype.kind = SyntaxKind.Block; BlockSyntax.prototype.childCount = 4; - BlockSyntax.prototype.childAt = function(index: number): ISyntaxElement { + BlockSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.equalsGreaterThanToken; case 1: return this.openBraceToken; @@ -654,24 +533,18 @@ module TypeScript { } } - export var IfStatementSyntax: IfStatementConstructor = function(data: number, ifKeyword: ISyntaxToken, openParenToken: ISyntaxToken, condition: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax, elseClause: ElseClauseSyntax) { + export var IfStatementSyntax: IfStatementConstructor = function (data: number, ifKeyword: ISyntaxToken, openParenToken: ISyntaxToken, condition: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax, elseClause: ElseClauseSyntax) { if (data) { this.__data = data; } this.ifKeyword = ifKeyword, this.openParenToken = openParenToken, this.condition = condition, this.closeParenToken = closeParenToken, this.statement = statement, - this.elseClause = elseClause, - ifKeyword.parent = this, - openParenToken.parent = this, - condition.parent = this, - closeParenToken.parent = this, - statement.parent = this, - elseClause && (elseClause.parent = this); + this.elseClause = elseClause; }; IfStatementSyntax.prototype.kind = SyntaxKind.IfStatement; IfStatementSyntax.prototype.childCount = 6; - IfStatementSyntax.prototype.childAt = function(index: number): ISyntaxElement { + IfStatementSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.ifKeyword; case 1: return this.openParenToken; @@ -682,18 +555,15 @@ module TypeScript { } } - export var VariableStatementSyntax: VariableStatementConstructor = function(data: number, modifiers: ISyntaxToken[], variableDeclaration: VariableDeclarationSyntax, semicolonToken: ISyntaxToken) { + export var VariableStatementSyntax: VariableStatementConstructor = function (data: number, modifiers: ISyntaxToken[], variableDeclaration: VariableDeclarationSyntax, semicolonToken: ISyntaxToken) { if (data) { this.__data = data; } this.modifiers = modifiers, this.variableDeclaration = variableDeclaration, - this.semicolonToken = semicolonToken, - modifiers.parent = this, - variableDeclaration.parent = this, - semicolonToken && (semicolonToken.parent = this); + this.semicolonToken = semicolonToken; }; VariableStatementSyntax.prototype.kind = SyntaxKind.VariableStatement; VariableStatementSyntax.prototype.childCount = 3; - VariableStatementSyntax.prototype.childAt = function(index: number): ISyntaxElement { + VariableStatementSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.modifiers; case 1: return this.variableDeclaration; @@ -701,34 +571,29 @@ module TypeScript { } } - export var ExpressionStatementSyntax: ExpressionStatementConstructor = function(data: number, expression: IExpressionSyntax, semicolonToken: ISyntaxToken) { + export var ExpressionStatementSyntax: ExpressionStatementConstructor = function (data: number, expression: IExpressionSyntax, semicolonToken: ISyntaxToken) { if (data) { this.__data = data; } this.expression = expression, - this.semicolonToken = semicolonToken, - expression.parent = this, - semicolonToken && (semicolonToken.parent = this); + this.semicolonToken = semicolonToken; }; ExpressionStatementSyntax.prototype.kind = SyntaxKind.ExpressionStatement; ExpressionStatementSyntax.prototype.childCount = 2; - ExpressionStatementSyntax.prototype.childAt = function(index: number): ISyntaxElement { + ExpressionStatementSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.expression; case 1: return this.semicolonToken; } } - export var ReturnStatementSyntax: ReturnStatementConstructor = function(data: number, returnKeyword: ISyntaxToken, expression: IExpressionSyntax, semicolonToken: ISyntaxToken) { + export var ReturnStatementSyntax: ReturnStatementConstructor = function (data: number, returnKeyword: ISyntaxToken, expression: IExpressionSyntax, semicolonToken: ISyntaxToken) { if (data) { this.__data = data; } this.returnKeyword = returnKeyword, this.expression = expression, - this.semicolonToken = semicolonToken, - returnKeyword.parent = this, - expression && (expression.parent = this), - semicolonToken && (semicolonToken.parent = this); + this.semicolonToken = semicolonToken; }; ReturnStatementSyntax.prototype.kind = SyntaxKind.ReturnStatement; ReturnStatementSyntax.prototype.childCount = 3; - ReturnStatementSyntax.prototype.childAt = function(index: number): ISyntaxElement { + ReturnStatementSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.returnKeyword; case 1: return this.expression; @@ -736,7 +601,7 @@ module TypeScript { } } - export var SwitchStatementSyntax: SwitchStatementConstructor = function(data: number, switchKeyword: ISyntaxToken, openParenToken: ISyntaxToken, expression: IExpressionSyntax, closeParenToken: ISyntaxToken, openBraceToken: ISyntaxToken, switchClauses: ISwitchClauseSyntax[], closeBraceToken: ISyntaxToken) { + export var SwitchStatementSyntax: SwitchStatementConstructor = function (data: number, switchKeyword: ISyntaxToken, openParenToken: ISyntaxToken, expression: IExpressionSyntax, closeParenToken: ISyntaxToken, openBraceToken: ISyntaxToken, switchClauses: ISwitchClauseSyntax[], closeBraceToken: ISyntaxToken) { if (data) { this.__data = data; } this.switchKeyword = switchKeyword, this.openParenToken = openParenToken, @@ -744,18 +609,11 @@ module TypeScript { this.closeParenToken = closeParenToken, this.openBraceToken = openBraceToken, this.switchClauses = switchClauses, - this.closeBraceToken = closeBraceToken, - switchKeyword.parent = this, - openParenToken.parent = this, - expression.parent = this, - closeParenToken.parent = this, - openBraceToken.parent = this, - switchClauses.parent = this, - closeBraceToken.parent = this; + this.closeBraceToken = closeBraceToken; }; SwitchStatementSyntax.prototype.kind = SyntaxKind.SwitchStatement; SwitchStatementSyntax.prototype.childCount = 7; - SwitchStatementSyntax.prototype.childAt = function(index: number): ISyntaxElement { + SwitchStatementSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.switchKeyword; case 1: return this.openParenToken; @@ -767,18 +625,15 @@ module TypeScript { } } - export var BreakStatementSyntax: BreakStatementConstructor = function(data: number, breakKeyword: ISyntaxToken, identifier: ISyntaxToken, semicolonToken: ISyntaxToken) { + export var BreakStatementSyntax: BreakStatementConstructor = function (data: number, breakKeyword: ISyntaxToken, identifier: ISyntaxToken, semicolonToken: ISyntaxToken) { if (data) { this.__data = data; } this.breakKeyword = breakKeyword, this.identifier = identifier, - this.semicolonToken = semicolonToken, - breakKeyword.parent = this, - identifier && (identifier.parent = this), - semicolonToken && (semicolonToken.parent = this); + this.semicolonToken = semicolonToken; }; BreakStatementSyntax.prototype.kind = SyntaxKind.BreakStatement; BreakStatementSyntax.prototype.childCount = 3; - BreakStatementSyntax.prototype.childAt = function(index: number): ISyntaxElement { + BreakStatementSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.breakKeyword; case 1: return this.identifier; @@ -786,18 +641,15 @@ module TypeScript { } } - export var ContinueStatementSyntax: ContinueStatementConstructor = function(data: number, continueKeyword: ISyntaxToken, identifier: ISyntaxToken, semicolonToken: ISyntaxToken) { + export var ContinueStatementSyntax: ContinueStatementConstructor = function (data: number, continueKeyword: ISyntaxToken, identifier: ISyntaxToken, semicolonToken: ISyntaxToken) { if (data) { this.__data = data; } this.continueKeyword = continueKeyword, this.identifier = identifier, - this.semicolonToken = semicolonToken, - continueKeyword.parent = this, - identifier && (identifier.parent = this), - semicolonToken && (semicolonToken.parent = this); + this.semicolonToken = semicolonToken; }; ContinueStatementSyntax.prototype.kind = SyntaxKind.ContinueStatement; ContinueStatementSyntax.prototype.childCount = 3; - ContinueStatementSyntax.prototype.childAt = function(index: number): ISyntaxElement { + ContinueStatementSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.continueKeyword; case 1: return this.identifier; @@ -805,7 +657,7 @@ module TypeScript { } } - export var ForStatementSyntax: ForStatementConstructor = function(data: number, forKeyword: ISyntaxToken, openParenToken: ISyntaxToken, initializer: VariableDeclarationSyntax | IExpressionSyntax, firstSemicolonToken: ISyntaxToken, condition: IExpressionSyntax, secondSemicolonToken: ISyntaxToken, incrementor: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax) { + export var ForStatementSyntax: ForStatementConstructor = function (data: number, forKeyword: ISyntaxToken, openParenToken: ISyntaxToken, initializer: VariableDeclarationSyntax | IExpressionSyntax, firstSemicolonToken: ISyntaxToken, condition: IExpressionSyntax, secondSemicolonToken: ISyntaxToken, incrementor: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax) { if (data) { this.__data = data; } this.forKeyword = forKeyword, this.openParenToken = openParenToken, @@ -815,20 +667,11 @@ module TypeScript { this.secondSemicolonToken = secondSemicolonToken, this.incrementor = incrementor, this.closeParenToken = closeParenToken, - this.statement = statement, - forKeyword.parent = this, - openParenToken.parent = this, - initializer && (initializer.parent = this), - firstSemicolonToken.parent = this, - condition && (condition.parent = this), - secondSemicolonToken.parent = this, - incrementor && (incrementor.parent = this), - closeParenToken.parent = this, - statement.parent = this; + this.statement = statement; }; ForStatementSyntax.prototype.kind = SyntaxKind.ForStatement; ForStatementSyntax.prototype.childCount = 9; - ForStatementSyntax.prototype.childAt = function(index: number): ISyntaxElement { + ForStatementSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.forKeyword; case 1: return this.openParenToken; @@ -842,7 +685,7 @@ module TypeScript { } } - export var ForInStatementSyntax: ForInStatementConstructor = function(data: number, forKeyword: ISyntaxToken, openParenToken: ISyntaxToken, left: VariableDeclarationSyntax | IExpressionSyntax, inKeyword: ISyntaxToken, right: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax) { + export var ForInStatementSyntax: ForInStatementConstructor = function (data: number, forKeyword: ISyntaxToken, openParenToken: ISyntaxToken, left: VariableDeclarationSyntax | IExpressionSyntax, inKeyword: ISyntaxToken, right: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax) { if (data) { this.__data = data; } this.forKeyword = forKeyword, this.openParenToken = openParenToken, @@ -850,18 +693,11 @@ module TypeScript { this.inKeyword = inKeyword, this.right = right, this.closeParenToken = closeParenToken, - this.statement = statement, - forKeyword.parent = this, - openParenToken.parent = this, - left.parent = this, - inKeyword.parent = this, - right.parent = this, - closeParenToken.parent = this, - statement.parent = this; + this.statement = statement; }; ForInStatementSyntax.prototype.kind = SyntaxKind.ForInStatement; ForInStatementSyntax.prototype.childCount = 7; - ForInStatementSyntax.prototype.childAt = function(index: number): ISyntaxElement { + ForInStatementSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.forKeyword; case 1: return this.openParenToken; @@ -873,31 +709,27 @@ module TypeScript { } } - export var EmptyStatementSyntax: EmptyStatementConstructor = function(data: number, semicolonToken: ISyntaxToken) { + export var EmptyStatementSyntax: EmptyStatementConstructor = function (data: number, semicolonToken: ISyntaxToken) { if (data) { this.__data = data; } - this.semicolonToken = semicolonToken, - semicolonToken.parent = this; + this.semicolonToken = semicolonToken; }; EmptyStatementSyntax.prototype.kind = SyntaxKind.EmptyStatement; EmptyStatementSyntax.prototype.childCount = 1; - EmptyStatementSyntax.prototype.childAt = function(index: number): ISyntaxElement { + EmptyStatementSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.semicolonToken; } } - export var ThrowStatementSyntax: ThrowStatementConstructor = function(data: number, throwKeyword: ISyntaxToken, expression: IExpressionSyntax, semicolonToken: ISyntaxToken) { + export var ThrowStatementSyntax: ThrowStatementConstructor = function (data: number, throwKeyword: ISyntaxToken, expression: IExpressionSyntax, semicolonToken: ISyntaxToken) { if (data) { this.__data = data; } this.throwKeyword = throwKeyword, this.expression = expression, - this.semicolonToken = semicolonToken, - throwKeyword.parent = this, - expression && (expression.parent = this), - semicolonToken && (semicolonToken.parent = this); + this.semicolonToken = semicolonToken; }; ThrowStatementSyntax.prototype.kind = SyntaxKind.ThrowStatement; ThrowStatementSyntax.prototype.childCount = 3; - ThrowStatementSyntax.prototype.childAt = function(index: number): ISyntaxElement { + ThrowStatementSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.throwKeyword; case 1: return this.expression; @@ -905,22 +737,17 @@ module TypeScript { } } - export var WhileStatementSyntax: WhileStatementConstructor = function(data: number, whileKeyword: ISyntaxToken, openParenToken: ISyntaxToken, condition: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax) { + export var WhileStatementSyntax: WhileStatementConstructor = function (data: number, whileKeyword: ISyntaxToken, openParenToken: ISyntaxToken, condition: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax) { if (data) { this.__data = data; } this.whileKeyword = whileKeyword, this.openParenToken = openParenToken, this.condition = condition, this.closeParenToken = closeParenToken, - this.statement = statement, - whileKeyword.parent = this, - openParenToken.parent = this, - condition.parent = this, - closeParenToken.parent = this, - statement.parent = this; + this.statement = statement; }; WhileStatementSyntax.prototype.kind = SyntaxKind.WhileStatement; WhileStatementSyntax.prototype.childCount = 5; - WhileStatementSyntax.prototype.childAt = function(index: number): ISyntaxElement { + WhileStatementSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.whileKeyword; case 1: return this.openParenToken; @@ -930,20 +757,16 @@ module TypeScript { } } - export var TryStatementSyntax: TryStatementConstructor = function(data: number, tryKeyword: ISyntaxToken, block: BlockSyntax, catchClause: CatchClauseSyntax, finallyClause: FinallyClauseSyntax) { + export var TryStatementSyntax: TryStatementConstructor = function (data: number, tryKeyword: ISyntaxToken, block: BlockSyntax, catchClause: CatchClauseSyntax, finallyClause: FinallyClauseSyntax) { if (data) { this.__data = data; } this.tryKeyword = tryKeyword, this.block = block, this.catchClause = catchClause, - this.finallyClause = finallyClause, - tryKeyword.parent = this, - block.parent = this, - catchClause && (catchClause.parent = this), - finallyClause && (finallyClause.parent = this); + this.finallyClause = finallyClause; }; TryStatementSyntax.prototype.kind = SyntaxKind.TryStatement; TryStatementSyntax.prototype.childCount = 4; - TryStatementSyntax.prototype.childAt = function(index: number): ISyntaxElement { + TryStatementSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.tryKeyword; case 1: return this.block; @@ -952,18 +775,15 @@ module TypeScript { } } - export var LabeledStatementSyntax: LabeledStatementConstructor = function(data: number, identifier: ISyntaxToken, colonToken: ISyntaxToken, statement: IStatementSyntax) { + export var LabeledStatementSyntax: LabeledStatementConstructor = function (data: number, identifier: ISyntaxToken, colonToken: ISyntaxToken, statement: IStatementSyntax) { if (data) { this.__data = data; } this.identifier = identifier, this.colonToken = colonToken, - this.statement = statement, - identifier.parent = this, - colonToken.parent = this, - statement.parent = this; + this.statement = statement; }; LabeledStatementSyntax.prototype.kind = SyntaxKind.LabeledStatement; LabeledStatementSyntax.prototype.childCount = 3; - LabeledStatementSyntax.prototype.childAt = function(index: number): ISyntaxElement { + LabeledStatementSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.identifier; case 1: return this.colonToken; @@ -971,7 +791,7 @@ module TypeScript { } } - export var DoStatementSyntax: DoStatementConstructor = function(data: number, doKeyword: ISyntaxToken, statement: IStatementSyntax, whileKeyword: ISyntaxToken, openParenToken: ISyntaxToken, condition: IExpressionSyntax, closeParenToken: ISyntaxToken, semicolonToken: ISyntaxToken) { + export var DoStatementSyntax: DoStatementConstructor = function (data: number, doKeyword: ISyntaxToken, statement: IStatementSyntax, whileKeyword: ISyntaxToken, openParenToken: ISyntaxToken, condition: IExpressionSyntax, closeParenToken: ISyntaxToken, semicolonToken: ISyntaxToken) { if (data) { this.__data = data; } this.doKeyword = doKeyword, this.statement = statement, @@ -979,18 +799,11 @@ module TypeScript { this.openParenToken = openParenToken, this.condition = condition, this.closeParenToken = closeParenToken, - this.semicolonToken = semicolonToken, - doKeyword.parent = this, - statement.parent = this, - whileKeyword.parent = this, - openParenToken.parent = this, - condition.parent = this, - closeParenToken.parent = this, - semicolonToken && (semicolonToken.parent = this); + this.semicolonToken = semicolonToken; }; DoStatementSyntax.prototype.kind = SyntaxKind.DoStatement; DoStatementSyntax.prototype.childCount = 7; - DoStatementSyntax.prototype.childAt = function(index: number): ISyntaxElement { + DoStatementSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.doKeyword; case 1: return this.statement; @@ -1002,38 +815,31 @@ module TypeScript { } } - export var DebuggerStatementSyntax: DebuggerStatementConstructor = function(data: number, debuggerKeyword: ISyntaxToken, semicolonToken: ISyntaxToken) { + export var DebuggerStatementSyntax: DebuggerStatementConstructor = function (data: number, debuggerKeyword: ISyntaxToken, semicolonToken: ISyntaxToken) { if (data) { this.__data = data; } this.debuggerKeyword = debuggerKeyword, - this.semicolonToken = semicolonToken, - debuggerKeyword.parent = this, - semicolonToken && (semicolonToken.parent = this); + this.semicolonToken = semicolonToken; }; DebuggerStatementSyntax.prototype.kind = SyntaxKind.DebuggerStatement; DebuggerStatementSyntax.prototype.childCount = 2; - DebuggerStatementSyntax.prototype.childAt = function(index: number): ISyntaxElement { + DebuggerStatementSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.debuggerKeyword; case 1: return this.semicolonToken; } } - export var WithStatementSyntax: WithStatementConstructor = function(data: number, withKeyword: ISyntaxToken, openParenToken: ISyntaxToken, condition: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax) { + export var WithStatementSyntax: WithStatementConstructor = function (data: number, withKeyword: ISyntaxToken, openParenToken: ISyntaxToken, condition: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax) { if (data) { this.__data = data; } this.withKeyword = withKeyword, this.openParenToken = openParenToken, this.condition = condition, this.closeParenToken = closeParenToken, - this.statement = statement, - withKeyword.parent = this, - openParenToken.parent = this, - condition.parent = this, - closeParenToken.parent = this, - statement.parent = this; + this.statement = statement; }; WithStatementSyntax.prototype.kind = SyntaxKind.WithStatement; WithStatementSyntax.prototype.childCount = 5; - WithStatementSyntax.prototype.childAt = function(index: number): ISyntaxElement { + WithStatementSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.withKeyword; case 1: return this.openParenToken; @@ -1043,86 +849,73 @@ module TypeScript { } } - export var PrefixUnaryExpressionSyntax: PrefixUnaryExpressionConstructor = function(data: number, operatorToken: ISyntaxToken, operand: IUnaryExpressionSyntax) { + export var PrefixUnaryExpressionSyntax: PrefixUnaryExpressionConstructor = function (data: number, operatorToken: ISyntaxToken, operand: IUnaryExpressionSyntax) { if (data) { this.__data = data; } this.operatorToken = operatorToken, - this.operand = operand, - operatorToken.parent = this, - operand.parent = this; + this.operand = operand; }; PrefixUnaryExpressionSyntax.prototype.kind = SyntaxKind.PrefixUnaryExpression; PrefixUnaryExpressionSyntax.prototype.childCount = 2; - PrefixUnaryExpressionSyntax.prototype.childAt = function(index: number): ISyntaxElement { + PrefixUnaryExpressionSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.operatorToken; case 1: return this.operand; } } - export var DeleteExpressionSyntax: DeleteExpressionConstructor = function(data: number, deleteKeyword: ISyntaxToken, expression: IUnaryExpressionSyntax) { + export var DeleteExpressionSyntax: DeleteExpressionConstructor = function (data: number, deleteKeyword: ISyntaxToken, expression: IUnaryExpressionSyntax) { if (data) { this.__data = data; } this.deleteKeyword = deleteKeyword, - this.expression = expression, - deleteKeyword.parent = this, - expression.parent = this; + this.expression = expression; }; DeleteExpressionSyntax.prototype.kind = SyntaxKind.DeleteExpression; DeleteExpressionSyntax.prototype.childCount = 2; - DeleteExpressionSyntax.prototype.childAt = function(index: number): ISyntaxElement { + DeleteExpressionSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.deleteKeyword; case 1: return this.expression; } } - export var TypeOfExpressionSyntax: TypeOfExpressionConstructor = function(data: number, typeOfKeyword: ISyntaxToken, expression: IUnaryExpressionSyntax) { + export var TypeOfExpressionSyntax: TypeOfExpressionConstructor = function (data: number, typeOfKeyword: ISyntaxToken, expression: IUnaryExpressionSyntax) { if (data) { this.__data = data; } this.typeOfKeyword = typeOfKeyword, - this.expression = expression, - typeOfKeyword.parent = this, - expression.parent = this; + this.expression = expression; }; TypeOfExpressionSyntax.prototype.kind = SyntaxKind.TypeOfExpression; TypeOfExpressionSyntax.prototype.childCount = 2; - TypeOfExpressionSyntax.prototype.childAt = function(index: number): ISyntaxElement { + TypeOfExpressionSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.typeOfKeyword; case 1: return this.expression; } } - export var VoidExpressionSyntax: VoidExpressionConstructor = function(data: number, voidKeyword: ISyntaxToken, expression: IUnaryExpressionSyntax) { + export var VoidExpressionSyntax: VoidExpressionConstructor = function (data: number, voidKeyword: ISyntaxToken, expression: IUnaryExpressionSyntax) { if (data) { this.__data = data; } this.voidKeyword = voidKeyword, - this.expression = expression, - voidKeyword.parent = this, - expression.parent = this; + this.expression = expression; }; VoidExpressionSyntax.prototype.kind = SyntaxKind.VoidExpression; VoidExpressionSyntax.prototype.childCount = 2; - VoidExpressionSyntax.prototype.childAt = function(index: number): ISyntaxElement { + VoidExpressionSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.voidKeyword; case 1: return this.expression; } } - export var ConditionalExpressionSyntax: ConditionalExpressionConstructor = function(data: number, condition: IExpressionSyntax, questionToken: ISyntaxToken, whenTrue: IExpressionSyntax, colonToken: ISyntaxToken, whenFalse: IExpressionSyntax) { + export var ConditionalExpressionSyntax: ConditionalExpressionConstructor = function (data: number, condition: IExpressionSyntax, questionToken: ISyntaxToken, whenTrue: IExpressionSyntax, colonToken: ISyntaxToken, whenFalse: IExpressionSyntax) { if (data) { this.__data = data; } this.condition = condition, this.questionToken = questionToken, this.whenTrue = whenTrue, this.colonToken = colonToken, - this.whenFalse = whenFalse, - condition.parent = this, - questionToken.parent = this, - whenTrue.parent = this, - colonToken.parent = this, - whenFalse.parent = this; + this.whenFalse = whenFalse; }; ConditionalExpressionSyntax.prototype.kind = SyntaxKind.ConditionalExpression; ConditionalExpressionSyntax.prototype.childCount = 5; - ConditionalExpressionSyntax.prototype.childAt = function(index: number): ISyntaxElement { + ConditionalExpressionSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.condition; case 1: return this.questionToken; @@ -1132,18 +925,15 @@ module TypeScript { } } - export var BinaryExpressionSyntax: BinaryExpressionConstructor = function(data: number, left: IExpressionSyntax, operatorToken: ISyntaxToken, right: IExpressionSyntax) { + export var BinaryExpressionSyntax: BinaryExpressionConstructor = function (data: number, left: IExpressionSyntax, operatorToken: ISyntaxToken, right: IExpressionSyntax) { if (data) { this.__data = data; } this.left = left, this.operatorToken = operatorToken, - this.right = right, - left.parent = this, - operatorToken.parent = this, - right.parent = this; + this.right = right; }; BinaryExpressionSyntax.prototype.kind = SyntaxKind.BinaryExpression; BinaryExpressionSyntax.prototype.childCount = 3; - BinaryExpressionSyntax.prototype.childAt = function(index: number): ISyntaxElement { + BinaryExpressionSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.left; case 1: return this.operatorToken; @@ -1151,34 +941,29 @@ module TypeScript { } } - export var PostfixUnaryExpressionSyntax: PostfixUnaryExpressionConstructor = function(data: number, operand: ILeftHandSideExpressionSyntax, operatorToken: ISyntaxToken) { + export var PostfixUnaryExpressionSyntax: PostfixUnaryExpressionConstructor = function (data: number, operand: ILeftHandSideExpressionSyntax, operatorToken: ISyntaxToken) { if (data) { this.__data = data; } this.operand = operand, - this.operatorToken = operatorToken, - operand.parent = this, - operatorToken.parent = this; + this.operatorToken = operatorToken; }; PostfixUnaryExpressionSyntax.prototype.kind = SyntaxKind.PostfixUnaryExpression; PostfixUnaryExpressionSyntax.prototype.childCount = 2; - PostfixUnaryExpressionSyntax.prototype.childAt = function(index: number): ISyntaxElement { + PostfixUnaryExpressionSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.operand; case 1: return this.operatorToken; } } - export var PropertyAccessExpressionSyntax: PropertyAccessExpressionConstructor = function(data: number, expression: ILeftHandSideExpressionSyntax, dotToken: ISyntaxToken, name: ISyntaxToken) { + export var PropertyAccessExpressionSyntax: PropertyAccessExpressionConstructor = function (data: number, expression: ILeftHandSideExpressionSyntax, dotToken: ISyntaxToken, name: ISyntaxToken) { if (data) { this.__data = data; } this.expression = expression, this.dotToken = dotToken, - this.name = name, - expression.parent = this, - dotToken.parent = this, - name.parent = this; + this.name = name; }; PropertyAccessExpressionSyntax.prototype.kind = SyntaxKind.PropertyAccessExpression; PropertyAccessExpressionSyntax.prototype.childCount = 3; - PropertyAccessExpressionSyntax.prototype.childAt = function(index: number): ISyntaxElement { + PropertyAccessExpressionSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.expression; case 1: return this.dotToken; @@ -1186,34 +971,29 @@ module TypeScript { } } - export var InvocationExpressionSyntax: InvocationExpressionConstructor = function(data: number, expression: ILeftHandSideExpressionSyntax, argumentList: ArgumentListSyntax) { + export var InvocationExpressionSyntax: InvocationExpressionConstructor = function (data: number, expression: ILeftHandSideExpressionSyntax, argumentList: ArgumentListSyntax) { if (data) { this.__data = data; } this.expression = expression, - this.argumentList = argumentList, - expression.parent = this, - argumentList.parent = this; + this.argumentList = argumentList; }; InvocationExpressionSyntax.prototype.kind = SyntaxKind.InvocationExpression; InvocationExpressionSyntax.prototype.childCount = 2; - InvocationExpressionSyntax.prototype.childAt = function(index: number): ISyntaxElement { + InvocationExpressionSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.expression; case 1: return this.argumentList; } } - export var ArrayLiteralExpressionSyntax: ArrayLiteralExpressionConstructor = function(data: number, openBracketToken: ISyntaxToken, expressions: ISeparatedSyntaxList, closeBracketToken: ISyntaxToken) { + export var ArrayLiteralExpressionSyntax: ArrayLiteralExpressionConstructor = function (data: number, openBracketToken: ISyntaxToken, expressions: ISeparatedSyntaxList, closeBracketToken: ISyntaxToken) { if (data) { this.__data = data; } this.openBracketToken = openBracketToken, this.expressions = expressions, - this.closeBracketToken = closeBracketToken, - openBracketToken.parent = this, - expressions.parent = this, - closeBracketToken.parent = this; + this.closeBracketToken = closeBracketToken; }; ArrayLiteralExpressionSyntax.prototype.kind = SyntaxKind.ArrayLiteralExpression; ArrayLiteralExpressionSyntax.prototype.childCount = 3; - ArrayLiteralExpressionSyntax.prototype.childAt = function(index: number): ISyntaxElement { + ArrayLiteralExpressionSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.openBracketToken; case 1: return this.expressions; @@ -1221,18 +1001,15 @@ module TypeScript { } } - export var ObjectLiteralExpressionSyntax: ObjectLiteralExpressionConstructor = function(data: number, openBraceToken: ISyntaxToken, propertyAssignments: ISeparatedSyntaxList, closeBraceToken: ISyntaxToken) { + export var ObjectLiteralExpressionSyntax: ObjectLiteralExpressionConstructor = function (data: number, openBraceToken: ISyntaxToken, propertyAssignments: ISeparatedSyntaxList, closeBraceToken: ISyntaxToken) { if (data) { this.__data = data; } this.openBraceToken = openBraceToken, this.propertyAssignments = propertyAssignments, - this.closeBraceToken = closeBraceToken, - openBraceToken.parent = this, - propertyAssignments.parent = this, - closeBraceToken.parent = this; + this.closeBraceToken = closeBraceToken; }; ObjectLiteralExpressionSyntax.prototype.kind = SyntaxKind.ObjectLiteralExpression; ObjectLiteralExpressionSyntax.prototype.childCount = 3; - ObjectLiteralExpressionSyntax.prototype.childAt = function(index: number): ISyntaxElement { + ObjectLiteralExpressionSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.openBraceToken; case 1: return this.propertyAssignments; @@ -1240,18 +1017,15 @@ module TypeScript { } } - export var ObjectCreationExpressionSyntax: ObjectCreationExpressionConstructor = function(data: number, newKeyword: ISyntaxToken, expression: IMemberExpressionSyntax, argumentList: ArgumentListSyntax) { + export var ObjectCreationExpressionSyntax: ObjectCreationExpressionConstructor = function (data: number, newKeyword: ISyntaxToken, expression: IMemberExpressionSyntax, argumentList: ArgumentListSyntax) { if (data) { this.__data = data; } this.newKeyword = newKeyword, this.expression = expression, - this.argumentList = argumentList, - newKeyword.parent = this, - expression.parent = this, - argumentList && (argumentList.parent = this); + this.argumentList = argumentList; }; ObjectCreationExpressionSyntax.prototype.kind = SyntaxKind.ObjectCreationExpression; ObjectCreationExpressionSyntax.prototype.childCount = 3; - ObjectCreationExpressionSyntax.prototype.childAt = function(index: number): ISyntaxElement { + ObjectCreationExpressionSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.newKeyword; case 1: return this.expression; @@ -1259,18 +1033,15 @@ module TypeScript { } } - export var ParenthesizedExpressionSyntax: ParenthesizedExpressionConstructor = function(data: number, openParenToken: ISyntaxToken, expression: IExpressionSyntax, closeParenToken: ISyntaxToken) { + export var ParenthesizedExpressionSyntax: ParenthesizedExpressionConstructor = function (data: number, openParenToken: ISyntaxToken, expression: IExpressionSyntax, closeParenToken: ISyntaxToken) { if (data) { this.__data = data; } this.openParenToken = openParenToken, this.expression = expression, - this.closeParenToken = closeParenToken, - openParenToken.parent = this, - expression.parent = this, - closeParenToken.parent = this; + this.closeParenToken = closeParenToken; }; ParenthesizedExpressionSyntax.prototype.kind = SyntaxKind.ParenthesizedExpression; ParenthesizedExpressionSyntax.prototype.childCount = 3; - ParenthesizedExpressionSyntax.prototype.childAt = function(index: number): ISyntaxElement { + ParenthesizedExpressionSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.openParenToken; case 1: return this.expression; @@ -1278,20 +1049,16 @@ module TypeScript { } } - export var ParenthesizedArrowFunctionExpressionSyntax: ParenthesizedArrowFunctionExpressionConstructor = function(data: number, asyncKeyword: ISyntaxToken, callSignature: CallSignatureSyntax, equalsGreaterThanToken: ISyntaxToken, body: BlockSyntax | IExpressionSyntax) { + export var ParenthesizedArrowFunctionExpressionSyntax: ParenthesizedArrowFunctionExpressionConstructor = function (data: number, asyncKeyword: ISyntaxToken, callSignature: CallSignatureSyntax, equalsGreaterThanToken: ISyntaxToken, body: BlockSyntax | IExpressionSyntax) { if (data) { this.__data = data; } this.asyncKeyword = asyncKeyword, this.callSignature = callSignature, this.equalsGreaterThanToken = equalsGreaterThanToken, - this.body = body, - asyncKeyword && (asyncKeyword.parent = this), - callSignature.parent = this, - equalsGreaterThanToken.parent = this, - body.parent = this; + this.body = body; }; ParenthesizedArrowFunctionExpressionSyntax.prototype.kind = SyntaxKind.ParenthesizedArrowFunctionExpression; ParenthesizedArrowFunctionExpressionSyntax.prototype.childCount = 4; - ParenthesizedArrowFunctionExpressionSyntax.prototype.childAt = function(index: number): ISyntaxElement { + ParenthesizedArrowFunctionExpressionSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.asyncKeyword; case 1: return this.callSignature; @@ -1300,20 +1067,16 @@ module TypeScript { } } - export var SimpleArrowFunctionExpressionSyntax: SimpleArrowFunctionExpressionConstructor = function(data: number, asyncKeyword: ISyntaxToken, parameter: ParameterSyntax, equalsGreaterThanToken: ISyntaxToken, body: BlockSyntax | IExpressionSyntax) { + export var SimpleArrowFunctionExpressionSyntax: SimpleArrowFunctionExpressionConstructor = function (data: number, asyncKeyword: ISyntaxToken, parameter: ParameterSyntax, equalsGreaterThanToken: ISyntaxToken, body: BlockSyntax | IExpressionSyntax) { if (data) { this.__data = data; } this.asyncKeyword = asyncKeyword, this.parameter = parameter, this.equalsGreaterThanToken = equalsGreaterThanToken, - this.body = body, - asyncKeyword && (asyncKeyword.parent = this), - parameter.parent = this, - equalsGreaterThanToken.parent = this, - body.parent = this; + this.body = body; }; SimpleArrowFunctionExpressionSyntax.prototype.kind = SyntaxKind.SimpleArrowFunctionExpression; SimpleArrowFunctionExpressionSyntax.prototype.childCount = 4; - SimpleArrowFunctionExpressionSyntax.prototype.childAt = function(index: number): ISyntaxElement { + SimpleArrowFunctionExpressionSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.asyncKeyword; case 1: return this.parameter; @@ -1322,20 +1085,16 @@ module TypeScript { } } - export var TypeAssertionExpressionSyntax: TypeAssertionExpressionConstructor = function(data: number, lessThanToken: ISyntaxToken, type: ITypeSyntax, greaterThanToken: ISyntaxToken, expression: IUnaryExpressionSyntax) { + export var TypeAssertionExpressionSyntax: TypeAssertionExpressionConstructor = function (data: number, lessThanToken: ISyntaxToken, type: ITypeSyntax, greaterThanToken: ISyntaxToken, expression: IUnaryExpressionSyntax) { if (data) { this.__data = data; } this.lessThanToken = lessThanToken, this.type = type, this.greaterThanToken = greaterThanToken, - this.expression = expression, - lessThanToken.parent = this, - type.parent = this, - greaterThanToken.parent = this, - expression.parent = this; + this.expression = expression; }; TypeAssertionExpressionSyntax.prototype.kind = SyntaxKind.TypeAssertionExpression; TypeAssertionExpressionSyntax.prototype.childCount = 4; - TypeAssertionExpressionSyntax.prototype.childAt = function(index: number): ISyntaxElement { + TypeAssertionExpressionSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.lessThanToken; case 1: return this.type; @@ -1344,20 +1103,16 @@ module TypeScript { } } - export var ElementAccessExpressionSyntax: ElementAccessExpressionConstructor = function(data: number, expression: ILeftHandSideExpressionSyntax, openBracketToken: ISyntaxToken, argumentExpression: IExpressionSyntax, closeBracketToken: ISyntaxToken) { + export var ElementAccessExpressionSyntax: ElementAccessExpressionConstructor = function (data: number, expression: ILeftHandSideExpressionSyntax, openBracketToken: ISyntaxToken, argumentExpression: IExpressionSyntax, closeBracketToken: ISyntaxToken) { if (data) { this.__data = data; } this.expression = expression, this.openBracketToken = openBracketToken, this.argumentExpression = argumentExpression, - this.closeBracketToken = closeBracketToken, - expression.parent = this, - openBracketToken.parent = this, - argumentExpression && (argumentExpression.parent = this), - closeBracketToken.parent = this; + this.closeBracketToken = closeBracketToken; }; ElementAccessExpressionSyntax.prototype.kind = SyntaxKind.ElementAccessExpression; ElementAccessExpressionSyntax.prototype.childCount = 4; - ElementAccessExpressionSyntax.prototype.childAt = function(index: number): ISyntaxElement { + ElementAccessExpressionSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.expression; case 1: return this.openBracketToken; @@ -1366,24 +1121,18 @@ module TypeScript { } } - export var FunctionExpressionSyntax: FunctionExpressionConstructor = function(data: number, asyncKeyword: ISyntaxToken, functionKeyword: ISyntaxToken, asterixToken: ISyntaxToken, identifier: ISyntaxToken, callSignature: CallSignatureSyntax, body: BlockSyntax | ExpressionBody | ISyntaxToken) { + export var FunctionExpressionSyntax: FunctionExpressionConstructor = function (data: number, asyncKeyword: ISyntaxToken, functionKeyword: ISyntaxToken, asterixToken: ISyntaxToken, identifier: ISyntaxToken, callSignature: CallSignatureSyntax, body: BlockSyntax | ExpressionBody | ISyntaxToken) { if (data) { this.__data = data; } this.asyncKeyword = asyncKeyword, this.functionKeyword = functionKeyword, this.asterixToken = asterixToken, this.identifier = identifier, this.callSignature = callSignature, - this.body = body, - asyncKeyword && (asyncKeyword.parent = this), - functionKeyword.parent = this, - asterixToken && (asterixToken.parent = this), - identifier && (identifier.parent = this), - callSignature.parent = this, - body && (body.parent = this); + this.body = body; }; FunctionExpressionSyntax.prototype.kind = SyntaxKind.FunctionExpression; FunctionExpressionSyntax.prototype.childCount = 6; - FunctionExpressionSyntax.prototype.childAt = function(index: number): ISyntaxElement { + FunctionExpressionSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.asyncKeyword; case 1: return this.functionKeyword; @@ -1394,59 +1143,52 @@ module TypeScript { } } - export var OmittedExpressionSyntax: OmittedExpressionConstructor = function(data: number) { + export var OmittedExpressionSyntax: OmittedExpressionConstructor = function (data: number) { if (data) { this.__data = data; } }; OmittedExpressionSyntax.prototype.kind = SyntaxKind.OmittedExpression; OmittedExpressionSyntax.prototype.childCount = 0; - OmittedExpressionSyntax.prototype.childAt = function(index: number): ISyntaxElement { + OmittedExpressionSyntax.prototype.childAt = function (index: number): ISyntaxElement { throw Errors.invalidOperation(); } - export var TemplateExpressionSyntax: TemplateExpressionConstructor = function(data: number, templateStartToken: ISyntaxToken, templateClauses: TemplateClauseSyntax[]) { + export var TemplateExpressionSyntax: TemplateExpressionConstructor = function (data: number, templateStartToken: ISyntaxToken, templateClauses: TemplateClauseSyntax[]) { if (data) { this.__data = data; } this.templateStartToken = templateStartToken, - this.templateClauses = templateClauses, - templateStartToken.parent = this, - templateClauses.parent = this; + this.templateClauses = templateClauses; }; TemplateExpressionSyntax.prototype.kind = SyntaxKind.TemplateExpression; TemplateExpressionSyntax.prototype.childCount = 2; - TemplateExpressionSyntax.prototype.childAt = function(index: number): ISyntaxElement { + TemplateExpressionSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.templateStartToken; case 1: return this.templateClauses; } } - export var TemplateAccessExpressionSyntax: TemplateAccessExpressionConstructor = function(data: number, expression: ILeftHandSideExpressionSyntax, templateExpression: IPrimaryExpressionSyntax) { + export var TemplateAccessExpressionSyntax: TemplateAccessExpressionConstructor = function (data: number, expression: ILeftHandSideExpressionSyntax, templateExpression: IPrimaryExpressionSyntax) { if (data) { this.__data = data; } this.expression = expression, - this.templateExpression = templateExpression, - expression.parent = this, - templateExpression.parent = this; + this.templateExpression = templateExpression; }; TemplateAccessExpressionSyntax.prototype.kind = SyntaxKind.TemplateAccessExpression; TemplateAccessExpressionSyntax.prototype.childCount = 2; - TemplateAccessExpressionSyntax.prototype.childAt = function(index: number): ISyntaxElement { + TemplateAccessExpressionSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.expression; case 1: return this.templateExpression; } } - export var YieldExpressionSyntax: YieldExpressionConstructor = function(data: number, yieldKeyword: ISyntaxToken, asterixToken: ISyntaxToken, expression: IExpressionSyntax) { + export var YieldExpressionSyntax: YieldExpressionConstructor = function (data: number, yieldKeyword: ISyntaxToken, asterixToken: ISyntaxToken, expression: IExpressionSyntax) { if (data) { this.__data = data; } this.yieldKeyword = yieldKeyword, this.asterixToken = asterixToken, - this.expression = expression, - yieldKeyword.parent = this, - asterixToken && (asterixToken.parent = this), - expression && (expression.parent = this); + this.expression = expression; }; YieldExpressionSyntax.prototype.kind = SyntaxKind.YieldExpression; YieldExpressionSyntax.prototype.childCount = 3; - YieldExpressionSyntax.prototype.childAt = function(index: number): ISyntaxElement { + YieldExpressionSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.yieldKeyword; case 1: return this.asterixToken; @@ -1454,50 +1196,43 @@ module TypeScript { } } - export var AwaitExpressionSyntax: AwaitExpressionConstructor = function(data: number, awaitKeyword: ISyntaxToken, expression: IUnaryExpressionSyntax) { + export var AwaitExpressionSyntax: AwaitExpressionConstructor = function (data: number, awaitKeyword: ISyntaxToken, expression: IUnaryExpressionSyntax) { if (data) { this.__data = data; } this.awaitKeyword = awaitKeyword, - this.expression = expression, - awaitKeyword.parent = this, - expression && (expression.parent = this); + this.expression = expression; }; AwaitExpressionSyntax.prototype.kind = SyntaxKind.AwaitExpression; AwaitExpressionSyntax.prototype.childCount = 2; - AwaitExpressionSyntax.prototype.childAt = function(index: number): ISyntaxElement { + AwaitExpressionSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.awaitKeyword; case 1: return this.expression; } } - export var VariableDeclarationSyntax: VariableDeclarationConstructor = function(data: number, varConstOrLetKeyword: ISyntaxToken, variableDeclarators: ISeparatedSyntaxList) { + export var VariableDeclarationSyntax: VariableDeclarationConstructor = function (data: number, varConstOrLetKeyword: ISyntaxToken, variableDeclarators: ISeparatedSyntaxList) { if (data) { this.__data = data; } this.varConstOrLetKeyword = varConstOrLetKeyword, - this.variableDeclarators = variableDeclarators, - varConstOrLetKeyword.parent = this, - variableDeclarators.parent = this; + this.variableDeclarators = variableDeclarators; }; VariableDeclarationSyntax.prototype.kind = SyntaxKind.VariableDeclaration; VariableDeclarationSyntax.prototype.childCount = 2; - VariableDeclarationSyntax.prototype.childAt = function(index: number): ISyntaxElement { + VariableDeclarationSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.varConstOrLetKeyword; case 1: return this.variableDeclarators; } } - export var VariableDeclaratorSyntax: VariableDeclaratorConstructor = function(data: number, propertyName: IPropertyNameSyntax, typeAnnotation: TypeAnnotationSyntax, equalsValueClause: EqualsValueClauseSyntax) { + export var VariableDeclaratorSyntax: VariableDeclaratorConstructor = function (data: number, propertyName: IPropertyNameSyntax, typeAnnotation: TypeAnnotationSyntax, equalsValueClause: EqualsValueClauseSyntax) { if (data) { this.__data = data; } this.propertyName = propertyName, this.typeAnnotation = typeAnnotation, - this.equalsValueClause = equalsValueClause, - propertyName.parent = this, - typeAnnotation && (typeAnnotation.parent = this), - equalsValueClause && (equalsValueClause.parent = this); + this.equalsValueClause = equalsValueClause; }; VariableDeclaratorSyntax.prototype.kind = SyntaxKind.VariableDeclarator; VariableDeclaratorSyntax.prototype.childCount = 3; - VariableDeclaratorSyntax.prototype.childAt = function(index: number): ISyntaxElement { + VariableDeclaratorSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.propertyName; case 1: return this.typeAnnotation; @@ -1505,20 +1240,16 @@ module TypeScript { } } - export var ArgumentListSyntax: ArgumentListConstructor = function(data: number, typeArgumentList: TypeArgumentListSyntax, openParenToken: ISyntaxToken, _arguments: ISeparatedSyntaxList, closeParenToken: ISyntaxToken) { + export var ArgumentListSyntax: ArgumentListConstructor = function (data: number, typeArgumentList: TypeArgumentListSyntax, openParenToken: ISyntaxToken, _arguments: ISeparatedSyntaxList, closeParenToken: ISyntaxToken) { if (data) { this.__data = data; } this.typeArgumentList = typeArgumentList, this.openParenToken = openParenToken, this.arguments = _arguments, - this.closeParenToken = closeParenToken, - typeArgumentList && (typeArgumentList.parent = this), - openParenToken.parent = this, - _arguments.parent = this, - closeParenToken.parent = this; + this.closeParenToken = closeParenToken; }; ArgumentListSyntax.prototype.kind = SyntaxKind.ArgumentList; ArgumentListSyntax.prototype.childCount = 4; - ArgumentListSyntax.prototype.childAt = function(index: number): ISyntaxElement { + ArgumentListSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.typeArgumentList; case 1: return this.openParenToken; @@ -1527,18 +1258,15 @@ module TypeScript { } } - export var ParameterListSyntax: ParameterListConstructor = function(data: number, openParenToken: ISyntaxToken, parameters: ISeparatedSyntaxList, closeParenToken: ISyntaxToken) { + export var ParameterListSyntax: ParameterListConstructor = function (data: number, openParenToken: ISyntaxToken, parameters: ISeparatedSyntaxList, closeParenToken: ISyntaxToken) { if (data) { this.__data = data; } this.openParenToken = openParenToken, this.parameters = parameters, - this.closeParenToken = closeParenToken, - openParenToken.parent = this, - parameters.parent = this, - closeParenToken.parent = this; + this.closeParenToken = closeParenToken; }; ParameterListSyntax.prototype.kind = SyntaxKind.ParameterList; ParameterListSyntax.prototype.childCount = 3; - ParameterListSyntax.prototype.childAt = function(index: number): ISyntaxElement { + ParameterListSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.openParenToken; case 1: return this.parameters; @@ -1546,18 +1274,15 @@ module TypeScript { } } - export var TypeArgumentListSyntax: TypeArgumentListConstructor = function(data: number, lessThanToken: ISyntaxToken, typeArguments: ISeparatedSyntaxList, greaterThanToken: ISyntaxToken) { + export var TypeArgumentListSyntax: TypeArgumentListConstructor = function (data: number, lessThanToken: ISyntaxToken, typeArguments: ISeparatedSyntaxList, greaterThanToken: ISyntaxToken) { if (data) { this.__data = data; } this.lessThanToken = lessThanToken, this.typeArguments = typeArguments, - this.greaterThanToken = greaterThanToken, - lessThanToken.parent = this, - typeArguments.parent = this, - greaterThanToken.parent = this; + this.greaterThanToken = greaterThanToken; }; TypeArgumentListSyntax.prototype.kind = SyntaxKind.TypeArgumentList; TypeArgumentListSyntax.prototype.childCount = 3; - TypeArgumentListSyntax.prototype.childAt = function(index: number): ISyntaxElement { + TypeArgumentListSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.lessThanToken; case 1: return this.typeArguments; @@ -1565,18 +1290,15 @@ module TypeScript { } } - export var TypeParameterListSyntax: TypeParameterListConstructor = function(data: number, lessThanToken: ISyntaxToken, typeParameters: ISeparatedSyntaxList, greaterThanToken: ISyntaxToken) { + export var TypeParameterListSyntax: TypeParameterListConstructor = function (data: number, lessThanToken: ISyntaxToken, typeParameters: ISeparatedSyntaxList, greaterThanToken: ISyntaxToken) { if (data) { this.__data = data; } this.lessThanToken = lessThanToken, this.typeParameters = typeParameters, - this.greaterThanToken = greaterThanToken, - lessThanToken.parent = this, - typeParameters.parent = this, - greaterThanToken.parent = this; + this.greaterThanToken = greaterThanToken; }; TypeParameterListSyntax.prototype.kind = SyntaxKind.TypeParameterList; TypeParameterListSyntax.prototype.childCount = 3; - TypeParameterListSyntax.prototype.childAt = function(index: number): ISyntaxElement { + TypeParameterListSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.lessThanToken; case 1: return this.typeParameters; @@ -1584,52 +1306,44 @@ module TypeScript { } } - export var HeritageClauseSyntax: HeritageClauseConstructor = function(data: number, extendsOrImplementsKeyword: ISyntaxToken, typeNames: ISeparatedSyntaxList) { + export var HeritageClauseSyntax: HeritageClauseConstructor = function (data: number, extendsOrImplementsKeyword: ISyntaxToken, typeNames: ISeparatedSyntaxList) { if (data) { this.__data = data; } this.extendsOrImplementsKeyword = extendsOrImplementsKeyword, - this.typeNames = typeNames, - extendsOrImplementsKeyword.parent = this, - typeNames.parent = this; + this.typeNames = typeNames; }; HeritageClauseSyntax.prototype.kind = SyntaxKind.HeritageClause; HeritageClauseSyntax.prototype.childCount = 2; - HeritageClauseSyntax.prototype.childAt = function(index: number): ISyntaxElement { + HeritageClauseSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.extendsOrImplementsKeyword; case 1: return this.typeNames; } } - export var EqualsValueClauseSyntax: EqualsValueClauseConstructor = function(data: number, equalsToken: ISyntaxToken, value: IExpressionSyntax) { + export var EqualsValueClauseSyntax: EqualsValueClauseConstructor = function (data: number, equalsToken: ISyntaxToken, value: IExpressionSyntax) { if (data) { this.__data = data; } this.equalsToken = equalsToken, - this.value = value, - equalsToken.parent = this, - value.parent = this; + this.value = value; }; EqualsValueClauseSyntax.prototype.kind = SyntaxKind.EqualsValueClause; EqualsValueClauseSyntax.prototype.childCount = 2; - EqualsValueClauseSyntax.prototype.childAt = function(index: number): ISyntaxElement { + EqualsValueClauseSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.equalsToken; case 1: return this.value; } } - export var CaseSwitchClauseSyntax: CaseSwitchClauseConstructor = function(data: number, caseKeyword: ISyntaxToken, expression: IExpressionSyntax, colonToken: ISyntaxToken, statements: IStatementSyntax[]) { + export var CaseSwitchClauseSyntax: CaseSwitchClauseConstructor = function (data: number, caseKeyword: ISyntaxToken, expression: IExpressionSyntax, colonToken: ISyntaxToken, statements: IStatementSyntax[]) { if (data) { this.__data = data; } this.caseKeyword = caseKeyword, this.expression = expression, this.colonToken = colonToken, - this.statements = statements, - caseKeyword.parent = this, - expression.parent = this, - colonToken.parent = this, - statements.parent = this; + this.statements = statements; }; CaseSwitchClauseSyntax.prototype.kind = SyntaxKind.CaseSwitchClause; CaseSwitchClauseSyntax.prototype.childCount = 4; - CaseSwitchClauseSyntax.prototype.childAt = function(index: number): ISyntaxElement { + CaseSwitchClauseSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.caseKeyword; case 1: return this.expression; @@ -1638,18 +1352,15 @@ module TypeScript { } } - export var DefaultSwitchClauseSyntax: DefaultSwitchClauseConstructor = function(data: number, defaultKeyword: ISyntaxToken, colonToken: ISyntaxToken, statements: IStatementSyntax[]) { + export var DefaultSwitchClauseSyntax: DefaultSwitchClauseConstructor = function (data: number, defaultKeyword: ISyntaxToken, colonToken: ISyntaxToken, statements: IStatementSyntax[]) { if (data) { this.__data = data; } this.defaultKeyword = defaultKeyword, this.colonToken = colonToken, - this.statements = statements, - defaultKeyword.parent = this, - colonToken.parent = this, - statements.parent = this; + this.statements = statements; }; DefaultSwitchClauseSyntax.prototype.kind = SyntaxKind.DefaultSwitchClause; DefaultSwitchClauseSyntax.prototype.childCount = 3; - DefaultSwitchClauseSyntax.prototype.childAt = function(index: number): ISyntaxElement { + DefaultSwitchClauseSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.defaultKeyword; case 1: return this.colonToken; @@ -1657,40 +1368,32 @@ module TypeScript { } } - export var ElseClauseSyntax: ElseClauseConstructor = function(data: number, elseKeyword: ISyntaxToken, statement: IStatementSyntax) { + export var ElseClauseSyntax: ElseClauseConstructor = function (data: number, elseKeyword: ISyntaxToken, statement: IStatementSyntax) { if (data) { this.__data = data; } this.elseKeyword = elseKeyword, - this.statement = statement, - elseKeyword.parent = this, - statement.parent = this; + this.statement = statement; }; ElseClauseSyntax.prototype.kind = SyntaxKind.ElseClause; ElseClauseSyntax.prototype.childCount = 2; - ElseClauseSyntax.prototype.childAt = function(index: number): ISyntaxElement { + ElseClauseSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.elseKeyword; case 1: return this.statement; } } - export var CatchClauseSyntax: CatchClauseConstructor = function(data: number, catchKeyword: ISyntaxToken, openParenToken: ISyntaxToken, identifier: ISyntaxToken, typeAnnotation: TypeAnnotationSyntax, closeParenToken: ISyntaxToken, block: BlockSyntax) { + export var CatchClauseSyntax: CatchClauseConstructor = function (data: number, catchKeyword: ISyntaxToken, openParenToken: ISyntaxToken, identifier: ISyntaxToken, typeAnnotation: TypeAnnotationSyntax, closeParenToken: ISyntaxToken, block: BlockSyntax) { if (data) { this.__data = data; } this.catchKeyword = catchKeyword, this.openParenToken = openParenToken, this.identifier = identifier, this.typeAnnotation = typeAnnotation, this.closeParenToken = closeParenToken, - this.block = block, - catchKeyword.parent = this, - openParenToken.parent = this, - identifier.parent = this, - typeAnnotation && (typeAnnotation.parent = this), - closeParenToken.parent = this, - block.parent = this; + this.block = block; }; CatchClauseSyntax.prototype.kind = SyntaxKind.CatchClause; CatchClauseSyntax.prototype.childCount = 6; - CatchClauseSyntax.prototype.childAt = function(index: number): ISyntaxElement { + CatchClauseSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.catchKeyword; case 1: return this.openParenToken; @@ -1701,88 +1404,74 @@ module TypeScript { } } - export var FinallyClauseSyntax: FinallyClauseConstructor = function(data: number, finallyKeyword: ISyntaxToken, block: BlockSyntax) { + export var FinallyClauseSyntax: FinallyClauseConstructor = function (data: number, finallyKeyword: ISyntaxToken, block: BlockSyntax) { if (data) { this.__data = data; } this.finallyKeyword = finallyKeyword, - this.block = block, - finallyKeyword.parent = this, - block.parent = this; + this.block = block; }; FinallyClauseSyntax.prototype.kind = SyntaxKind.FinallyClause; FinallyClauseSyntax.prototype.childCount = 2; - FinallyClauseSyntax.prototype.childAt = function(index: number): ISyntaxElement { + FinallyClauseSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.finallyKeyword; case 1: return this.block; } } - export var TemplateClauseSyntax: TemplateClauseConstructor = function(data: number, expression: IExpressionSyntax, templateMiddleOrEndToken: ISyntaxToken) { + export var TemplateClauseSyntax: TemplateClauseConstructor = function (data: number, expression: IExpressionSyntax, templateMiddleOrEndToken: ISyntaxToken) { if (data) { this.__data = data; } this.expression = expression, - this.templateMiddleOrEndToken = templateMiddleOrEndToken, - expression.parent = this, - templateMiddleOrEndToken.parent = this; + this.templateMiddleOrEndToken = templateMiddleOrEndToken; }; TemplateClauseSyntax.prototype.kind = SyntaxKind.TemplateClause; TemplateClauseSyntax.prototype.childCount = 2; - TemplateClauseSyntax.prototype.childAt = function(index: number): ISyntaxElement { + TemplateClauseSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.expression; case 1: return this.templateMiddleOrEndToken; } } - export var TypeParameterSyntax: TypeParameterConstructor = function(data: number, identifier: ISyntaxToken, constraint: ConstraintSyntax) { + export var TypeParameterSyntax: TypeParameterConstructor = function (data: number, identifier: ISyntaxToken, constraint: ConstraintSyntax) { if (data) { this.__data = data; } this.identifier = identifier, - this.constraint = constraint, - identifier.parent = this, - constraint && (constraint.parent = this); + this.constraint = constraint; }; TypeParameterSyntax.prototype.kind = SyntaxKind.TypeParameter; TypeParameterSyntax.prototype.childCount = 2; - TypeParameterSyntax.prototype.childAt = function(index: number): ISyntaxElement { + TypeParameterSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.identifier; case 1: return this.constraint; } } - export var ConstraintSyntax: ConstraintConstructor = function(data: number, extendsKeyword: ISyntaxToken, typeOrExpression: ISyntaxNodeOrToken) { + export var ConstraintSyntax: ConstraintConstructor = function (data: number, extendsKeyword: ISyntaxToken, typeOrExpression: ISyntaxNodeOrToken) { if (data) { this.__data = data; } this.extendsKeyword = extendsKeyword, - this.typeOrExpression = typeOrExpression, - extendsKeyword.parent = this, - typeOrExpression.parent = this; + this.typeOrExpression = typeOrExpression; }; ConstraintSyntax.prototype.kind = SyntaxKind.Constraint; ConstraintSyntax.prototype.childCount = 2; - ConstraintSyntax.prototype.childAt = function(index: number): ISyntaxElement { + ConstraintSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.extendsKeyword; case 1: return this.typeOrExpression; } } - export var ParameterSyntax: ParameterConstructor = function(data: number, dotDotDotToken: ISyntaxToken, modifiers: ISyntaxToken[], identifier: ISyntaxToken, questionToken: ISyntaxToken, typeAnnotation: TypeAnnotationSyntax, equalsValueClause: EqualsValueClauseSyntax) { + export var ParameterSyntax: ParameterConstructor = function (data: number, dotDotDotToken: ISyntaxToken, modifiers: ISyntaxToken[], identifier: ISyntaxToken, questionToken: ISyntaxToken, typeAnnotation: TypeAnnotationSyntax, equalsValueClause: EqualsValueClauseSyntax) { if (data) { this.__data = data; } this.dotDotDotToken = dotDotDotToken, this.modifiers = modifiers, this.identifier = identifier, this.questionToken = questionToken, this.typeAnnotation = typeAnnotation, - this.equalsValueClause = equalsValueClause, - dotDotDotToken && (dotDotDotToken.parent = this), - modifiers.parent = this, - identifier.parent = this, - questionToken && (questionToken.parent = this), - typeAnnotation && (typeAnnotation.parent = this), - equalsValueClause && (equalsValueClause.parent = this); + this.equalsValueClause = equalsValueClause; }; ParameterSyntax.prototype.kind = SyntaxKind.Parameter; ParameterSyntax.prototype.childCount = 6; - ParameterSyntax.prototype.childAt = function(index: number): ISyntaxElement { + ParameterSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.dotDotDotToken; case 1: return this.modifiers; @@ -1793,66 +1482,57 @@ module TypeScript { } } - export var EnumElementSyntax: EnumElementConstructor = function(data: number, propertyName: IPropertyNameSyntax, equalsValueClause: EqualsValueClauseSyntax) { + export var EnumElementSyntax: EnumElementConstructor = function (data: number, propertyName: IPropertyNameSyntax, equalsValueClause: EqualsValueClauseSyntax) { if (data) { this.__data = data; } this.propertyName = propertyName, - this.equalsValueClause = equalsValueClause, - propertyName.parent = this, - equalsValueClause && (equalsValueClause.parent = this); + this.equalsValueClause = equalsValueClause; }; EnumElementSyntax.prototype.kind = SyntaxKind.EnumElement; EnumElementSyntax.prototype.childCount = 2; - EnumElementSyntax.prototype.childAt = function(index: number): ISyntaxElement { + EnumElementSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.propertyName; case 1: return this.equalsValueClause; } } - export var TypeAnnotationSyntax: TypeAnnotationConstructor = function(data: number, colonToken: ISyntaxToken, type: ITypeSyntax) { + export var TypeAnnotationSyntax: TypeAnnotationConstructor = function (data: number, colonToken: ISyntaxToken, type: ITypeSyntax) { if (data) { this.__data = data; } this.colonToken = colonToken, - this.type = type, - colonToken.parent = this, - type.parent = this; + this.type = type; }; TypeAnnotationSyntax.prototype.kind = SyntaxKind.TypeAnnotation; TypeAnnotationSyntax.prototype.childCount = 2; - TypeAnnotationSyntax.prototype.childAt = function(index: number): ISyntaxElement { + TypeAnnotationSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.colonToken; case 1: return this.type; } } - export var ExpressionBody: ExpressionBodyConstructor = function(data: number, equalsGreaterThanToken: ISyntaxToken, expression: IExpressionSyntax) { + export var ExpressionBody: ExpressionBodyConstructor = function (data: number, equalsGreaterThanToken: ISyntaxToken, expression: IExpressionSyntax) { if (data) { this.__data = data; } this.equalsGreaterThanToken = equalsGreaterThanToken, - this.expression = expression, - equalsGreaterThanToken.parent = this, - expression.parent = this; + this.expression = expression; }; ExpressionBody.prototype.kind = SyntaxKind.ExpressionBody; ExpressionBody.prototype.childCount = 2; - ExpressionBody.prototype.childAt = function(index: number): ISyntaxElement { + ExpressionBody.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.equalsGreaterThanToken; case 1: return this.expression; } } - export var ComputedPropertyNameSyntax: ComputedPropertyNameConstructor = function(data: number, openBracketToken: ISyntaxToken, expression: IExpressionSyntax, closeBracketToken: ISyntaxToken) { + export var ComputedPropertyNameSyntax: ComputedPropertyNameConstructor = function (data: number, openBracketToken: ISyntaxToken, expression: IExpressionSyntax, closeBracketToken: ISyntaxToken) { if (data) { this.__data = data; } this.openBracketToken = openBracketToken, this.expression = expression, - this.closeBracketToken = closeBracketToken, - openBracketToken.parent = this, - expression.parent = this, - closeBracketToken.parent = this; + this.closeBracketToken = closeBracketToken; }; ComputedPropertyNameSyntax.prototype.kind = SyntaxKind.ComputedPropertyName; ComputedPropertyNameSyntax.prototype.childCount = 3; - ComputedPropertyNameSyntax.prototype.childAt = function(index: number): ISyntaxElement { + ComputedPropertyNameSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.openBracketToken; case 1: return this.expression; @@ -1860,18 +1540,15 @@ module TypeScript { } } - export var PropertyAssignmentSyntax: PropertyAssignmentConstructor = function(data: number, propertyName: IPropertyNameSyntax, colonToken: ISyntaxToken, expression: IExpressionSyntax) { + export var PropertyAssignmentSyntax: PropertyAssignmentConstructor = function (data: number, propertyName: IPropertyNameSyntax, colonToken: ISyntaxToken, expression: IExpressionSyntax) { if (data) { this.__data = data; } this.propertyName = propertyName, this.colonToken = colonToken, - this.expression = expression, - propertyName.parent = this, - colonToken.parent = this, - expression.parent = this; + this.expression = expression; }; PropertyAssignmentSyntax.prototype.kind = SyntaxKind.PropertyAssignment; PropertyAssignmentSyntax.prototype.childCount = 3; - PropertyAssignmentSyntax.prototype.childAt = function(index: number): ISyntaxElement { + PropertyAssignmentSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.propertyName; case 1: return this.colonToken; @@ -1879,24 +1556,18 @@ module TypeScript { } } - export var TypeAliasSyntax: TypeAliasConstructor = function(data: number, modifiers: ISyntaxToken[], typeKeyword: ISyntaxToken, identifier: ISyntaxToken, equalsToken: ISyntaxToken, type: ITypeSyntax, semicolonToken: ISyntaxToken) { + export var TypeAliasSyntax: TypeAliasConstructor = function (data: number, modifiers: ISyntaxToken[], typeKeyword: ISyntaxToken, identifier: ISyntaxToken, equalsToken: ISyntaxToken, type: ITypeSyntax, semicolonToken: ISyntaxToken) { if (data) { this.__data = data; } this.modifiers = modifiers, this.typeKeyword = typeKeyword, this.identifier = identifier, this.equalsToken = equalsToken, this.type = type, - this.semicolonToken = semicolonToken, - modifiers.parent = this, - typeKeyword.parent = this, - identifier.parent = this, - equalsToken.parent = this, - type.parent = this, - semicolonToken && (semicolonToken.parent = this); + this.semicolonToken = semicolonToken; }; TypeAliasSyntax.prototype.kind = SyntaxKind.TypeAlias; TypeAliasSyntax.prototype.childCount = 6; - TypeAliasSyntax.prototype.childAt = function(index: number): ISyntaxElement { + TypeAliasSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.modifiers; case 1: return this.typeKeyword; @@ -1907,36 +1578,31 @@ module TypeScript { } } - export var ExternalModuleReferenceSyntax: ExternalModuleReferenceConstructor = function(data: number, requireKeyword: ISyntaxToken, openParenToken: ISyntaxToken, stringLiteral: ISyntaxToken, closeParenToken: ISyntaxToken) { + export var ExternalModuleReferenceSyntax: ExternalModuleReferenceConstructor = function (data: number, requireKeyword: ISyntaxToken, openParenToken: ISyntaxToken, expression: IExpressionSyntax, closeParenToken: ISyntaxToken) { if (data) { this.__data = data; } this.requireKeyword = requireKeyword, this.openParenToken = openParenToken, - this.stringLiteral = stringLiteral, - this.closeParenToken = closeParenToken, - requireKeyword.parent = this, - openParenToken.parent = this, - stringLiteral.parent = this, - closeParenToken.parent = this; + this.expression = expression, + this.closeParenToken = closeParenToken; }; ExternalModuleReferenceSyntax.prototype.kind = SyntaxKind.ExternalModuleReference; ExternalModuleReferenceSyntax.prototype.childCount = 4; - ExternalModuleReferenceSyntax.prototype.childAt = function(index: number): ISyntaxElement { + ExternalModuleReferenceSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.requireKeyword; case 1: return this.openParenToken; - case 2: return this.stringLiteral; + case 2: return this.expression; case 3: return this.closeParenToken; } } - export var ModuleNameModuleReferenceSyntax: ModuleNameModuleReferenceConstructor = function(data: number, moduleName: INameSyntax) { + export var ModuleNameModuleReferenceSyntax: ModuleNameModuleReferenceConstructor = function (data: number, moduleName: INameSyntax) { if (data) { this.__data = data; } - this.moduleName = moduleName, - moduleName.parent = this; + this.moduleName = moduleName; }; ModuleNameModuleReferenceSyntax.prototype.kind = SyntaxKind.ModuleNameModuleReference; ModuleNameModuleReferenceSyntax.prototype.childCount = 1; - ModuleNameModuleReferenceSyntax.prototype.childAt = function(index: number): ISyntaxElement { + ModuleNameModuleReferenceSyntax.prototype.childAt = function (index: number): ISyntaxElement { switch (index) { case 0: return this.moduleName; } diff --git a/src/services/syntax/syntaxTree.ts b/src/services/syntax/syntaxTree.ts index b2b7739982dc3..59462f5f670ec 100644 --- a/src/services/syntax/syntaxTree.ts +++ b/src/services/syntax/syntaxTree.ts @@ -74,55 +74,11 @@ module TypeScript { return this._languageVersion; } - private cacheSyntaxTreeInfo(): void { - // If we're not keeping around the syntax tree, store the diagnostics and line - // map so they don't have to be recomputed. - var firstToken = firstSyntaxTreeToken(this); - var leadingTrivia = firstToken.leadingTrivia(this.text); - - this._isExternalModule = !!externalModuleIndicatorSpanWorker(this, firstToken); - - var amdDependencies: string[] = []; - for (var i = 0, n = leadingTrivia.count(); i < n; i++) { - var trivia = leadingTrivia.syntaxTriviaAt(i); - if (trivia.isComment()) { - var amdDependency = this.getAmdDependency(trivia.fullText()); - if (amdDependency) { - amdDependencies.push(amdDependency); - } - } - } - - this._amdDependencies = amdDependencies; - } - private getAmdDependency(comment: string): string { var amdDependencyRegEx = /^\/\/\/\s*moduleElement; - if (importDecl.moduleReference.kind === SyntaxKind.ExternalModuleReference) { - var literal = (importDecl.moduleReference).stringLiteral; - return new TextSpan(start(literal), width(literal)); - } - } - } - - return undefined; - } } \ No newline at end of file diff --git a/src/services/syntax/syntaxUtilities.ts b/src/services/syntax/syntaxUtilities.ts index 634296740d4de..4b08d3a14b605 100644 --- a/src/services/syntax/syntaxUtilities.ts +++ b/src/services/syntax/syntaxUtilities.ts @@ -11,6 +11,35 @@ module TypeScript { return (element).childAt(index); } + interface ISyntaxNodeInternal extends ISyntaxNode { + __cachedTokens: ISyntaxToken[]; + } + + class TokenCollectorWalker extends SyntaxWalker { + public tokens: ISyntaxToken[] = []; + + public visitToken(token: ISyntaxToken): void { + this.tokens.push(token); + } + } + + var tokenCollectorWalker = new TokenCollectorWalker(); + + export function getTokens(node: ISyntaxNode): ISyntaxToken[] { + var tokens = (node).__cachedTokens; + if (!tokens) { + tokens = []; + tokenCollectorWalker.tokens = tokens; + + visitNodeOrToken(tokenCollectorWalker, node); + + (node).__cachedTokens = tokens; + tokenCollectorWalker.tokens = undefined; + } + + return tokens; + } + export module SyntaxUtilities { export function isAnyFunctionExpressionOrDeclaration(ast: ISyntaxElement): boolean { switch (ast.kind) { @@ -28,19 +57,6 @@ module TypeScript { return false; } - export function isLastTokenOnLine(token: ISyntaxToken, text: ISimpleText): boolean { - var _nextToken = nextToken(token, text); - if (_nextToken === undefined) { - return true; - } - - var lineMap = text.lineMap(); - var tokenLine = lineMap.getLineNumberFromPosition(fullEnd(token)); - var nextTokenLine = lineMap.getLineNumberFromPosition(start(_nextToken, text)); - - return tokenLine !== nextTokenLine; - } - export function isLeftHandSizeExpression(element: ISyntaxElement) { if (element) { switch (element.kind) { @@ -178,21 +194,6 @@ module TypeScript { return false; } - export function isAngleBracket(positionedElement: ISyntaxElement): boolean { - var element = positionedElement; - var parent = positionedElement.parent; - if (parent && (element.kind === SyntaxKind.LessThanToken || element.kind === SyntaxKind.GreaterThanToken)) { - switch (parent.kind) { - case SyntaxKind.TypeArgumentList: - case SyntaxKind.TypeParameterList: - case SyntaxKind.TypeAssertionExpression: - return true; - } - } - - return false; - } - export function getToken(list: ISyntaxToken[], kind: SyntaxKind): ISyntaxToken { for (var i = 0, n = list.length; i < n; i++) { var token = list[i]; @@ -207,24 +208,5 @@ module TypeScript { export function containsToken(list: ISyntaxToken[], kind: SyntaxKind): boolean { return !!SyntaxUtilities.getToken(list, kind); } - - export function hasExportKeyword(moduleElement: IModuleElementSyntax): boolean { - return !!SyntaxUtilities.getExportKeyword(moduleElement); - } - - export function getExportKeyword(moduleElement: IModuleElementSyntax): ISyntaxToken { - switch (moduleElement.kind) { - case SyntaxKind.ModuleDeclaration: - case SyntaxKind.ClassDeclaration: - case SyntaxKind.FunctionDeclaration: - case SyntaxKind.VariableStatement: - case SyntaxKind.EnumDeclaration: - case SyntaxKind.InterfaceDeclaration: - case SyntaxKind.ImportDeclaration: - return SyntaxUtilities.getToken((moduleElement).modifiers, SyntaxKind.ExportKeyword); - default: - return undefined; - } - } } } \ No newline at end of file diff --git a/src/services/syntax/syntaxWalker.generated.ts b/src/services/syntax/syntaxWalker.generated.ts index 1fbec51743934..bd6f20299ea11 100644 --- a/src/services/syntax/syntaxWalker.generated.ts +++ b/src/services/syntax/syntaxWalker.generated.ts @@ -428,7 +428,7 @@ module TypeScript { public visitParenthesizedArrowFunctionExpression(node: ParenthesizedArrowFunctionExpressionSyntax): void { this.visitOptionalToken(node.asyncKeyword); visitNodeOrToken(this, node.callSignature); - this.visitToken(node.equalsGreaterThanToken); + this.visitOptionalToken(node.equalsGreaterThanToken); visitNodeOrToken(this, node.body); } @@ -627,7 +627,7 @@ module TypeScript { public visitExternalModuleReference(node: ExternalModuleReferenceSyntax): void { this.visitToken(node.requireKeyword); this.visitToken(node.openParenToken); - this.visitToken(node.stringLiteral); + visitNodeOrToken(this, node.expression); this.visitToken(node.closeParenToken); } diff --git a/src/services/utilities.ts b/src/services/utilities.ts index 9df0476c10508..32551d9737b92 100644 --- a/src/services/utilities.ts +++ b/src/services/utilities.ts @@ -104,21 +104,6 @@ module ts { return syntaxList; } - /** - * Includes the start position of each child, but excludes the end. - */ - export function findListItemIndexContainingPosition(list: Node, position: number): number { - Debug.assert(list.kind === SyntaxKind.SyntaxList); - var children = list.getChildren(); - for (var i = 0; i < children.length; i++) { - if (children[i].pos <= position && children[i].end > position) { - return i; - } - } - - return -1; - } - /* Gets the token whose text has range [start, end) and * position >= start and (position < end or (position === end && token is keyword or identifier)) */ diff --git a/tests/baselines/reference/ArrowFunction3.errors.txt b/tests/baselines/reference/ArrowFunction3.errors.txt index be20d77c34349..a1287eca88117 100644 --- a/tests/baselines/reference/ArrowFunction3.errors.txt +++ b/tests/baselines/reference/ArrowFunction3.errors.txt @@ -1,15 +1,12 @@ -tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ArrowFunctions/ArrowFunction3.ts(1,12): error TS1005: ',' expected. -tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ArrowFunctions/ArrowFunction3.ts(1,14): error TS1005: ';' expected. -tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ArrowFunctions/ArrowFunction3.ts(1,10): error TS2304: Cannot find name 'a'. +tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ArrowFunctions/ArrowFunction3.ts(1,14): error TS1110: Type expected. +tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ArrowFunctions/ArrowFunction3.ts(1,13): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value or consist of a single 'throw' statement. -==== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ArrowFunctions/ArrowFunction3.ts (3 errors) ==== +==== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ArrowFunctions/ArrowFunction3.ts (2 errors) ==== var v = (a): => { - ~ -!!! error TS1005: ',' expected. ~~ -!!! error TS1005: ';' expected. - ~ -!!! error TS2304: Cannot find name 'a'. +!!! error TS1110: Type expected. + +!!! error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value or consist of a single 'throw' statement. }; \ No newline at end of file diff --git a/tests/baselines/reference/FunctionPropertyAssignments5_es6.errors.txt b/tests/baselines/reference/FunctionPropertyAssignments5_es6.errors.txt index 24a12267dc5dd..b3415c27f2927 100644 --- a/tests/baselines/reference/FunctionPropertyAssignments5_es6.errors.txt +++ b/tests/baselines/reference/FunctionPropertyAssignments5_es6.errors.txt @@ -1,10 +1,7 @@ tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments5_es6.ts(1,11): error TS9001: 'generators' are not currently supported. -tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments5_es6.ts(1,12): error TS1167: Computed property names are only available when targeting ECMAScript 6 and higher. -==== tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments5_es6.ts (2 errors) ==== +==== tests/cases/conformance/es6/functionPropertyAssignments/FunctionPropertyAssignments5_es6.ts (1 errors) ==== var v = { *[foo()]() { } } ~ -!!! error TS9001: 'generators' are not currently supported. - ~~~~~~~ -!!! error TS1167: Computed property names are only available when targeting ECMAScript 6 and higher. \ No newline at end of file +!!! error TS9001: 'generators' are not currently supported. \ No newline at end of file diff --git a/tests/baselines/reference/TypeArgumentList1.errors.txt b/tests/baselines/reference/TypeArgumentList1.errors.txt index 4337f520c6dcd..16550c3ed3715 100644 --- a/tests/baselines/reference/TypeArgumentList1.errors.txt +++ b/tests/baselines/reference/TypeArgumentList1.errors.txt @@ -1,19 +1,10 @@ tests/cases/conformance/parser/ecmascript5/ErrorRecovery/TypeArgumentLists/TypeArgumentList1.ts(1,9): error TS1127: Invalid character. tests/cases/conformance/parser/ecmascript5/ErrorRecovery/TypeArgumentLists/TypeArgumentList1.ts(1,1): error TS2304: Cannot find name 'Foo'. -tests/cases/conformance/parser/ecmascript5/ErrorRecovery/TypeArgumentLists/TypeArgumentList1.ts(1,5): error TS2304: Cannot find name 'A'. -tests/cases/conformance/parser/ecmascript5/ErrorRecovery/TypeArgumentLists/TypeArgumentList1.ts(1,7): error TS2304: Cannot find name 'B'. -tests/cases/conformance/parser/ecmascript5/ErrorRecovery/TypeArgumentLists/TypeArgumentList1.ts(1,11): error TS2304: Cannot find name 'C'. -==== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/TypeArgumentLists/TypeArgumentList1.ts (5 errors) ==== +==== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/TypeArgumentLists/TypeArgumentList1.ts (2 errors) ==== Foo(4, 5, 6); !!! error TS1127: Invalid character. ~~~ -!!! error TS2304: Cannot find name 'Foo'. - ~ -!!! error TS2304: Cannot find name 'A'. - ~ -!!! error TS2304: Cannot find name 'B'. - ~ -!!! error TS2304: Cannot find name 'C'. \ No newline at end of file +!!! error TS2304: Cannot find name 'Foo'. \ No newline at end of file diff --git a/tests/baselines/reference/VariableDeclaration6_es6.errors.txt b/tests/baselines/reference/VariableDeclaration6_es6.errors.txt index 621729733643a..fb2a41b873977 100644 --- a/tests/baselines/reference/VariableDeclaration6_es6.errors.txt +++ b/tests/baselines/reference/VariableDeclaration6_es6.errors.txt @@ -1,7 +1,7 @@ -tests/cases/conformance/es6/variableDeclarations/VariableDeclaration6_es6.ts(1,4): error TS1123: Variable declaration list cannot be empty. +tests/cases/conformance/es6/variableDeclarations/VariableDeclaration6_es6.ts(1,1): error TS2304: Cannot find name 'let'. ==== tests/cases/conformance/es6/variableDeclarations/VariableDeclaration6_es6.ts (1 errors) ==== let - -!!! error TS1123: Variable declaration list cannot be empty. \ No newline at end of file + ~~~ +!!! error TS2304: Cannot find name 'let'. \ No newline at end of file diff --git a/tests/baselines/reference/VariableDeclaration6_es6.js b/tests/baselines/reference/VariableDeclaration6_es6.js new file mode 100644 index 0000000000000..aee01ed527194 --- /dev/null +++ b/tests/baselines/reference/VariableDeclaration6_es6.js @@ -0,0 +1,5 @@ +//// [VariableDeclaration6_es6.ts] +let + +//// [VariableDeclaration6_es6.js] +let; diff --git a/tests/baselines/reference/accessorWithoutBody1.errors.txt b/tests/baselines/reference/accessorWithoutBody1.errors.txt new file mode 100644 index 0000000000000..3d074abf254c7 --- /dev/null +++ b/tests/baselines/reference/accessorWithoutBody1.errors.txt @@ -0,0 +1,7 @@ +tests/cases/compiler/accessorWithoutBody1.ts(1,19): error TS1005: '{' expected. + + +==== tests/cases/compiler/accessorWithoutBody1.ts (1 errors) ==== + var v = { get foo() } + ~ +!!! error TS1005: '{' expected. \ No newline at end of file diff --git a/tests/baselines/reference/accessorWithoutBody2.errors.txt b/tests/baselines/reference/accessorWithoutBody2.errors.txt new file mode 100644 index 0000000000000..41bec9390450c --- /dev/null +++ b/tests/baselines/reference/accessorWithoutBody2.errors.txt @@ -0,0 +1,7 @@ +tests/cases/compiler/accessorWithoutBody2.ts(1,20): error TS1005: '{' expected. + + +==== tests/cases/compiler/accessorWithoutBody2.ts (1 errors) ==== + var v = { set foo(a) } + ~ +!!! error TS1005: '{' expected. \ No newline at end of file diff --git a/tests/baselines/reference/arrayLiteralContextualType.types b/tests/baselines/reference/arrayLiteralContextualType.types index 5797999b7df00..b6d8377d012dc 100644 --- a/tests/baselines/reference/arrayLiteralContextualType.types +++ b/tests/baselines/reference/arrayLiteralContextualType.types @@ -32,8 +32,8 @@ function foo(animals: IAnimal[]) { } >IAnimal : IAnimal function bar(animals: { [n: number]: IAnimal }) { } ->bar : (animals: { [x: number]: IAnimal; }) => void ->animals : { [x: number]: IAnimal; } +>bar : (animals: { [n: number]: IAnimal; }) => void +>animals : { [n: number]: IAnimal; } >n : number >IAnimal : IAnimal @@ -53,7 +53,7 @@ foo([ ]); // Legal because of the contextual type IAnimal provided by the parameter bar([ >bar([ new Giraffe(), new Elephant()]) : void ->bar : (animals: { [x: number]: IAnimal; }) => void +>bar : (animals: { [n: number]: IAnimal; }) => void >[ new Giraffe(), new Elephant()] : (Giraffe | Elephant)[] new Giraffe(), @@ -81,6 +81,6 @@ foo(arr); // ok because arr is Array not {}[] bar(arr); // ok because arr is Array not {}[] >bar(arr) : void ->bar : (animals: { [x: number]: IAnimal; }) => void +>bar : (animals: { [n: number]: IAnimal; }) => void >arr : (Giraffe | Elephant)[] diff --git a/tests/baselines/reference/arrayLiterals.types b/tests/baselines/reference/arrayLiterals.types index 62475fa2b4a62..b22543d3edfeb 100644 --- a/tests/baselines/reference/arrayLiterals.types +++ b/tests/baselines/reference/arrayLiterals.types @@ -61,7 +61,7 @@ var classTypeArray: Array; // Should OK, not be a parse error // Contextual type C with numeric index signature makes array literal of EveryType E of type BCT(E,C)[] var context1: { [n: number]: { a: string; b: number; }; } = [{ a: '', b: 0, c: '' }, { a: "", b: 3, c: 0 }]; ->context1 : { [x: number]: { a: string; b: number; }; } +>context1 : { [n: number]: { a: string; b: number; }; } >n : number >a : string >b : number diff --git a/tests/baselines/reference/assignEveryTypeToAny.types b/tests/baselines/reference/assignEveryTypeToAny.types index b25aba008377b..129440fa463e5 100644 --- a/tests/baselines/reference/assignEveryTypeToAny.types +++ b/tests/baselines/reference/assignEveryTypeToAny.types @@ -132,18 +132,16 @@ x = i; >i : () => string x = { f() { return 1; } } ->x = { f() { return 1; } } : { f: () => number; } +>x = { f() { return 1; } } : { f(): number; } >x : any ->{ f() { return 1; } } : { f: () => number; } +>{ f() { return 1; } } : { f(): number; } >f : () => number ->f() { return 1; } : () => number x = { f(x: T) { return x; } } ->x = { f(x: T) { return x; } } : { f: (x: T) => T; } +>x = { f(x: T) { return x; } } : { f(x: T): T; } >x : any ->{ f(x: T) { return x; } } : { f: (x: T) => T; } +>{ f(x: T) { return x; } } : { f(x: T): T; } >f : (x: T) => T ->f(x: T) { return x; } : (x: T) => T >T : T >x : T >T : T diff --git a/tests/baselines/reference/assignmentCompat1.errors.txt b/tests/baselines/reference/assignmentCompat1.errors.txt index 57ce797f5b2a2..6734e6fc964d4 100644 --- a/tests/baselines/reference/assignmentCompat1.errors.txt +++ b/tests/baselines/reference/assignmentCompat1.errors.txt @@ -1,6 +1,6 @@ -tests/cases/compiler/assignmentCompat1.ts(4,1): error TS2322: Type '{ [x: string]: any; }' is not assignable to type '{ one: number; }'. - Property 'one' is missing in type '{ [x: string]: any; }'. -tests/cases/compiler/assignmentCompat1.ts(5,1): error TS2322: Type '{ one: number; }' is not assignable to type '{ [x: string]: any; }'. +tests/cases/compiler/assignmentCompat1.ts(4,1): error TS2322: Type '{ [index: string]: any; }' is not assignable to type '{ one: number; }'. + Property 'one' is missing in type '{ [index: string]: any; }'. +tests/cases/compiler/assignmentCompat1.ts(5,1): error TS2322: Type '{ one: number; }' is not assignable to type '{ [index: string]: any; }'. Index signature is missing in type '{ one: number; }'. @@ -10,9 +10,9 @@ tests/cases/compiler/assignmentCompat1.ts(5,1): error TS2322: Type '{ one: numbe x = y; ~ -!!! error TS2322: Type '{ [x: string]: any; }' is not assignable to type '{ one: number; }'. -!!! error TS2322: Property 'one' is missing in type '{ [x: string]: any; }'. +!!! error TS2322: Type '{ [index: string]: any; }' is not assignable to type '{ one: number; }'. +!!! error TS2322: Property 'one' is missing in type '{ [index: string]: any; }'. y = x; ~ -!!! error TS2322: Type '{ one: number; }' is not assignable to type '{ [x: string]: any; }'. +!!! error TS2322: Type '{ one: number; }' is not assignable to type '{ [index: string]: any; }'. !!! error TS2322: Index signature is missing in type '{ one: number; }'. \ No newline at end of file diff --git a/tests/baselines/reference/assignmentCompatability35.errors.txt b/tests/baselines/reference/assignmentCompatability35.errors.txt index faad78c10fcaf..2073b861f523b 100644 --- a/tests/baselines/reference/assignmentCompatability35.errors.txt +++ b/tests/baselines/reference/assignmentCompatability35.errors.txt @@ -1,4 +1,4 @@ -tests/cases/compiler/assignmentCompatability35.ts(9,1): error TS2322: Type 'interfaceWithPublicAndOptional' is not assignable to type '{ [x: number]: number; }'. +tests/cases/compiler/assignmentCompatability35.ts(9,1): error TS2322: Type 'interfaceWithPublicAndOptional' is not assignable to type '{ [index: number]: number; }'. Index signature is missing in type 'interfaceWithPublicAndOptional'. @@ -13,5 +13,5 @@ tests/cases/compiler/assignmentCompatability35.ts(9,1): error TS2322: Type 'inte } __test2__.__val__aa = __test1__.__val__obj4 ~~~~~~~~~~~~~~~~~~~ -!!! error TS2322: Type 'interfaceWithPublicAndOptional' is not assignable to type '{ [x: number]: number; }'. +!!! error TS2322: Type 'interfaceWithPublicAndOptional' is not assignable to type '{ [index: number]: number; }'. !!! error TS2322: Index signature is missing in type 'interfaceWithPublicAndOptional'. \ No newline at end of file diff --git a/tests/baselines/reference/assignmentCompatability36.errors.txt b/tests/baselines/reference/assignmentCompatability36.errors.txt index d8c43a3f363c5..591dc072fab36 100644 --- a/tests/baselines/reference/assignmentCompatability36.errors.txt +++ b/tests/baselines/reference/assignmentCompatability36.errors.txt @@ -1,4 +1,4 @@ -tests/cases/compiler/assignmentCompatability36.ts(9,1): error TS2322: Type 'interfaceWithPublicAndOptional' is not assignable to type '{ [x: string]: any; }'. +tests/cases/compiler/assignmentCompatability36.ts(9,1): error TS2322: Type 'interfaceWithPublicAndOptional' is not assignable to type '{ [index: string]: any; }'. Index signature is missing in type 'interfaceWithPublicAndOptional'. @@ -13,5 +13,5 @@ tests/cases/compiler/assignmentCompatability36.ts(9,1): error TS2322: Type 'inte } __test2__.__val__aa = __test1__.__val__obj4 ~~~~~~~~~~~~~~~~~~~ -!!! error TS2322: Type 'interfaceWithPublicAndOptional' is not assignable to type '{ [x: string]: any; }'. +!!! error TS2322: Type 'interfaceWithPublicAndOptional' is not assignable to type '{ [index: string]: any; }'. !!! error TS2322: Index signature is missing in type 'interfaceWithPublicAndOptional'. \ No newline at end of file diff --git a/tests/baselines/reference/augmentedTypeAssignmentCompatIndexSignature.errors.txt b/tests/baselines/reference/augmentedTypeAssignmentCompatIndexSignature.errors.txt index a951a2b1a66ae..eb5020e97f97e 100644 --- a/tests/baselines/reference/augmentedTypeAssignmentCompatIndexSignature.errors.txt +++ b/tests/baselines/reference/augmentedTypeAssignmentCompatIndexSignature.errors.txt @@ -1,6 +1,6 @@ -tests/cases/conformance/types/members/augmentedTypeAssignmentCompatIndexSignature.ts(15,5): error TS2322: Type '{}' is not assignable to type '{ [x: number]: Foo; }'. +tests/cases/conformance/types/members/augmentedTypeAssignmentCompatIndexSignature.ts(15,5): error TS2322: Type '{}' is not assignable to type '{ [n: number]: Foo; }'. Index signature is missing in type '{}'. -tests/cases/conformance/types/members/augmentedTypeAssignmentCompatIndexSignature.ts(19,5): error TS2322: Type '() => void' is not assignable to type '{ [x: number]: Bar; }'. +tests/cases/conformance/types/members/augmentedTypeAssignmentCompatIndexSignature.ts(19,5): error TS2322: Type '() => void' is not assignable to type '{ [n: number]: Bar; }'. Index signature is missing in type '() => void'. @@ -21,14 +21,14 @@ tests/cases/conformance/types/members/augmentedTypeAssignmentCompatIndexSignatur var v1: { ~~ -!!! error TS2322: Type '{}' is not assignable to type '{ [x: number]: Foo; }'. +!!! error TS2322: Type '{}' is not assignable to type '{ [n: number]: Foo; }'. !!! error TS2322: Index signature is missing in type '{}'. [n: number]: Foo } = o; // Should be allowed var v2: { ~~ -!!! error TS2322: Type '() => void' is not assignable to type '{ [x: number]: Bar; }'. +!!! error TS2322: Type '() => void' is not assignable to type '{ [n: number]: Bar; }'. !!! error TS2322: Index signature is missing in type '() => void'. [n: number]: Bar } = f; // Should be allowed \ No newline at end of file diff --git a/tests/baselines/reference/badOverloadError.types b/tests/baselines/reference/badOverloadError.types index ba9d6e76c1c16..b8ae583a73cb8 100644 --- a/tests/baselines/reference/badOverloadError.types +++ b/tests/baselines/reference/badOverloadError.types @@ -3,8 +3,8 @@ function method() { >method : () => void var dictionary = <{ [index: string]: string; }>{}; ->dictionary : { [x: string]: string; } -><{ [index: string]: string; }>{} : { [x: string]: string; } +>dictionary : { [index: string]: string; } +><{ [index: string]: string; }>{} : { [index: string]: string; } >index : string >{} : { [x: string]: undefined; } } diff --git a/tests/baselines/reference/bestCommonTypeWithContextualTyping.types b/tests/baselines/reference/bestCommonTypeWithContextualTyping.types index 937339d8cbfee..606cbae923160 100644 --- a/tests/baselines/reference/bestCommonTypeWithContextualTyping.types +++ b/tests/baselines/reference/bestCommonTypeWithContextualTyping.types @@ -33,7 +33,7 @@ var arr: Contextual[] = [e]; // Ellement[] >e : Ellement var obj: { [s: string]: Contextual } = { s: e }; // { s: Ellement; [s: string]: Ellement } ->obj : { [x: string]: Contextual; } +>obj : { [s: string]: Contextual; } >s : string >Contextual : Contextual >{ s: e } : { [x: string]: Ellement; s: Ellement; } diff --git a/tests/baselines/reference/callExpressionWithMissingTypeArgument1.errors.txt b/tests/baselines/reference/callExpressionWithMissingTypeArgument1.errors.txt new file mode 100644 index 0000000000000..c7005ffcc224b --- /dev/null +++ b/tests/baselines/reference/callExpressionWithMissingTypeArgument1.errors.txt @@ -0,0 +1,10 @@ +tests/cases/compiler/callExpressionWithMissingTypeArgument1.ts(1,7): error TS1110: Type expected. +tests/cases/compiler/callExpressionWithMissingTypeArgument1.ts(1,1): error TS2304: Cannot find name 'Foo'. + + +==== tests/cases/compiler/callExpressionWithMissingTypeArgument1.ts (2 errors) ==== + Foo(); + ~ +!!! error TS1110: Type expected. + ~~~ +!!! error TS2304: Cannot find name 'Foo'. \ No newline at end of file diff --git a/tests/baselines/reference/callSignaturesWithOptionalParameters.types b/tests/baselines/reference/callSignaturesWithOptionalParameters.types index 8b1e929d9e3a3..818c52f79d0f5 100644 --- a/tests/baselines/reference/callSignaturesWithOptionalParameters.types +++ b/tests/baselines/reference/callSignaturesWithOptionalParameters.types @@ -133,12 +133,11 @@ a.foo(1); >foo : (x?: number) => any var b = { ->b : { foo: (x?: number) => void; a: (x: number, y?: number) => void; b: (x?: number) => void; } ->{ foo(x?: number) { }, a: function foo(x: number, y?: number) { }, b: (x?: number) => { }} : { foo: (x?: number) => void; a: (x: number, y?: number) => void; b: (x?: number) => void; } +>b : { foo(x?: number): void; a: (x: number, y?: number) => void; b: (x?: number) => void; } +>{ foo(x?: number) { }, a: function foo(x: number, y?: number) { }, b: (x?: number) => { }} : { foo(x?: number): void; a: (x: number, y?: number) => void; b: (x?: number) => void; } foo(x?: number) { }, >foo : (x?: number) => void ->foo(x?: number) { } : (x?: number) => void >x : number a: function foo(x: number, y?: number) { }, @@ -157,36 +156,36 @@ var b = { b.foo(); >b.foo() : void >b.foo : (x?: number) => void ->b : { foo: (x?: number) => void; a: (x: number, y?: number) => void; b: (x?: number) => void; } +>b : { foo(x?: number): void; a: (x: number, y?: number) => void; b: (x?: number) => void; } >foo : (x?: number) => void b.foo(1); >b.foo(1) : void >b.foo : (x?: number) => void ->b : { foo: (x?: number) => void; a: (x: number, y?: number) => void; b: (x?: number) => void; } +>b : { foo(x?: number): void; a: (x: number, y?: number) => void; b: (x?: number) => void; } >foo : (x?: number) => void b.a(1); >b.a(1) : void >b.a : (x: number, y?: number) => void ->b : { foo: (x?: number) => void; a: (x: number, y?: number) => void; b: (x?: number) => void; } +>b : { foo(x?: number): void; a: (x: number, y?: number) => void; b: (x?: number) => void; } >a : (x: number, y?: number) => void b.a(1, 2); >b.a(1, 2) : void >b.a : (x: number, y?: number) => void ->b : { foo: (x?: number) => void; a: (x: number, y?: number) => void; b: (x?: number) => void; } +>b : { foo(x?: number): void; a: (x: number, y?: number) => void; b: (x?: number) => void; } >a : (x: number, y?: number) => void b.b(); >b.b() : void >b.b : (x?: number) => void ->b : { foo: (x?: number) => void; a: (x: number, y?: number) => void; b: (x?: number) => void; } +>b : { foo(x?: number): void; a: (x: number, y?: number) => void; b: (x?: number) => void; } >b : (x?: number) => void b.b(1); >b.b(1) : void >b.b : (x?: number) => void ->b : { foo: (x?: number) => void; a: (x: number, y?: number) => void; b: (x?: number) => void; } +>b : { foo(x?: number): void; a: (x: number, y?: number) => void; b: (x?: number) => void; } >b : (x?: number) => void diff --git a/tests/baselines/reference/commentsOnObjectLiteral3.types b/tests/baselines/reference/commentsOnObjectLiteral3.types index e7770c7e27349..e81bd646b5af0 100644 --- a/tests/baselines/reference/commentsOnObjectLiteral3.types +++ b/tests/baselines/reference/commentsOnObjectLiteral3.types @@ -1,8 +1,8 @@ === tests/cases/compiler/commentsOnObjectLiteral3.ts === var v = { ->v : { prop: number; func: () => void; func1: () => void; a: any; } ->{ //property prop: 1 /* multiple trailing comments */ /*trailing comments*/, //property func: function () { }, //PropertyName + CallSignature func1() { }, //getter get a() { return this.prop; } /*trailing 1*/, //setter set a(value) { this.prop = value; } // trailing 2} : { prop: number; func: () => void; func1: () => void; a: any; } +>v : { prop: number; func: () => void; func1(): void; a: any; } +>{ //property prop: 1 /* multiple trailing comments */ /*trailing comments*/, //property func: function () { }, //PropertyName + CallSignature func1() { }, //getter get a() { return this.prop; } /*trailing 1*/, //setter set a(value) { this.prop = value; } // trailing 2} : { prop: number; func: () => void; func1(): void; a: any; } //property prop: 1 /* multiple trailing comments */ /*trailing comments*/, @@ -17,7 +17,6 @@ var v = { //PropertyName + CallSignature func1() { }, >func1 : () => void ->func1() { } : () => void //getter get a() { diff --git a/tests/baselines/reference/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.errors.txt b/tests/baselines/reference/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.errors.txt index 5bb7772e75fa0..fe608b143799c 100644 --- a/tests/baselines/reference/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.errors.txt +++ b/tests/baselines/reference/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.errors.txt @@ -1,67 +1,67 @@ -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(26,12): error TS2365: Operator '<' cannot be applied to types '{ [x: string]: string; }' and '{ [x: string]: number; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(27,12): error TS2365: Operator '<' cannot be applied to types '{ [x: string]: Base; }' and '{ [x: string]: C; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(28,12): error TS2365: Operator '<' cannot be applied to types '{ [x: number]: Base; }' and '{ [x: number]: C; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(29,12): error TS2365: Operator '<' cannot be applied to types '{ [x: number]: Derived; }' and '{ [x: string]: Base; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(31,12): error TS2365: Operator '<' cannot be applied to types '{ [x: string]: number; }' and '{ [x: string]: string; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(32,12): error TS2365: Operator '<' cannot be applied to types '{ [x: string]: C; }' and '{ [x: string]: Base; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(33,12): error TS2365: Operator '<' cannot be applied to types '{ [x: number]: C; }' and '{ [x: number]: Base; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(34,12): error TS2365: Operator '<' cannot be applied to types '{ [x: string]: Base; }' and '{ [x: number]: Derived; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(37,12): error TS2365: Operator '>' cannot be applied to types '{ [x: string]: string; }' and '{ [x: string]: number; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(38,12): error TS2365: Operator '>' cannot be applied to types '{ [x: string]: Base; }' and '{ [x: string]: C; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(39,12): error TS2365: Operator '>' cannot be applied to types '{ [x: number]: Base; }' and '{ [x: number]: C; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(40,12): error TS2365: Operator '>' cannot be applied to types '{ [x: number]: Derived; }' and '{ [x: string]: Base; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(42,12): error TS2365: Operator '>' cannot be applied to types '{ [x: string]: number; }' and '{ [x: string]: string; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(43,12): error TS2365: Operator '>' cannot be applied to types '{ [x: string]: C; }' and '{ [x: string]: Base; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(44,12): error TS2365: Operator '>' cannot be applied to types '{ [x: number]: C; }' and '{ [x: number]: Base; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(45,12): error TS2365: Operator '>' cannot be applied to types '{ [x: string]: Base; }' and '{ [x: number]: Derived; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(48,12): error TS2365: Operator '<=' cannot be applied to types '{ [x: string]: string; }' and '{ [x: string]: number; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(49,12): error TS2365: Operator '<=' cannot be applied to types '{ [x: string]: Base; }' and '{ [x: string]: C; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(50,12): error TS2365: Operator '<=' cannot be applied to types '{ [x: number]: Base; }' and '{ [x: number]: C; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(51,12): error TS2365: Operator '<=' cannot be applied to types '{ [x: number]: Derived; }' and '{ [x: string]: Base; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(53,12): error TS2365: Operator '<=' cannot be applied to types '{ [x: string]: number; }' and '{ [x: string]: string; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(54,12): error TS2365: Operator '<=' cannot be applied to types '{ [x: string]: C; }' and '{ [x: string]: Base; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(55,12): error TS2365: Operator '<=' cannot be applied to types '{ [x: number]: C; }' and '{ [x: number]: Base; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(56,12): error TS2365: Operator '<=' cannot be applied to types '{ [x: string]: Base; }' and '{ [x: number]: Derived; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(59,12): error TS2365: Operator '>=' cannot be applied to types '{ [x: string]: string; }' and '{ [x: string]: number; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(60,12): error TS2365: Operator '>=' cannot be applied to types '{ [x: string]: Base; }' and '{ [x: string]: C; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(61,12): error TS2365: Operator '>=' cannot be applied to types '{ [x: number]: Base; }' and '{ [x: number]: C; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(62,12): error TS2365: Operator '>=' cannot be applied to types '{ [x: number]: Derived; }' and '{ [x: string]: Base; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(64,12): error TS2365: Operator '>=' cannot be applied to types '{ [x: string]: number; }' and '{ [x: string]: string; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(65,12): error TS2365: Operator '>=' cannot be applied to types '{ [x: string]: C; }' and '{ [x: string]: Base; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(66,12): error TS2365: Operator '>=' cannot be applied to types '{ [x: number]: C; }' and '{ [x: number]: Base; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(67,12): error TS2365: Operator '>=' cannot be applied to types '{ [x: string]: Base; }' and '{ [x: number]: Derived; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(70,12): error TS2365: Operator '==' cannot be applied to types '{ [x: string]: string; }' and '{ [x: string]: number; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(71,12): error TS2365: Operator '==' cannot be applied to types '{ [x: string]: Base; }' and '{ [x: string]: C; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(72,12): error TS2365: Operator '==' cannot be applied to types '{ [x: number]: Base; }' and '{ [x: number]: C; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(73,12): error TS2365: Operator '==' cannot be applied to types '{ [x: number]: Derived; }' and '{ [x: string]: Base; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(75,12): error TS2365: Operator '==' cannot be applied to types '{ [x: string]: number; }' and '{ [x: string]: string; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(76,12): error TS2365: Operator '==' cannot be applied to types '{ [x: string]: C; }' and '{ [x: string]: Base; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(77,12): error TS2365: Operator '==' cannot be applied to types '{ [x: number]: C; }' and '{ [x: number]: Base; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(78,12): error TS2365: Operator '==' cannot be applied to types '{ [x: string]: Base; }' and '{ [x: number]: Derived; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(81,12): error TS2365: Operator '!=' cannot be applied to types '{ [x: string]: string; }' and '{ [x: string]: number; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(82,12): error TS2365: Operator '!=' cannot be applied to types '{ [x: string]: Base; }' and '{ [x: string]: C; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(83,12): error TS2365: Operator '!=' cannot be applied to types '{ [x: number]: Base; }' and '{ [x: number]: C; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(84,12): error TS2365: Operator '!=' cannot be applied to types '{ [x: number]: Derived; }' and '{ [x: string]: Base; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(86,12): error TS2365: Operator '!=' cannot be applied to types '{ [x: string]: number; }' and '{ [x: string]: string; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(87,12): error TS2365: Operator '!=' cannot be applied to types '{ [x: string]: C; }' and '{ [x: string]: Base; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(88,12): error TS2365: Operator '!=' cannot be applied to types '{ [x: number]: C; }' and '{ [x: number]: Base; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(89,12): error TS2365: Operator '!=' cannot be applied to types '{ [x: string]: Base; }' and '{ [x: number]: Derived; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(92,12): error TS2365: Operator '===' cannot be applied to types '{ [x: string]: string; }' and '{ [x: string]: number; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(93,12): error TS2365: Operator '===' cannot be applied to types '{ [x: string]: Base; }' and '{ [x: string]: C; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(94,12): error TS2365: Operator '===' cannot be applied to types '{ [x: number]: Base; }' and '{ [x: number]: C; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(95,12): error TS2365: Operator '===' cannot be applied to types '{ [x: number]: Derived; }' and '{ [x: string]: Base; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(97,12): error TS2365: Operator '===' cannot be applied to types '{ [x: string]: number; }' and '{ [x: string]: string; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(98,12): error TS2365: Operator '===' cannot be applied to types '{ [x: string]: C; }' and '{ [x: string]: Base; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(99,12): error TS2365: Operator '===' cannot be applied to types '{ [x: number]: C; }' and '{ [x: number]: Base; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(100,12): error TS2365: Operator '===' cannot be applied to types '{ [x: string]: Base; }' and '{ [x: number]: Derived; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(103,12): error TS2365: Operator '!==' cannot be applied to types '{ [x: string]: string; }' and '{ [x: string]: number; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(104,12): error TS2365: Operator '!==' cannot be applied to types '{ [x: string]: Base; }' and '{ [x: string]: C; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(105,12): error TS2365: Operator '!==' cannot be applied to types '{ [x: number]: Base; }' and '{ [x: number]: C; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(106,12): error TS2365: Operator '!==' cannot be applied to types '{ [x: number]: Derived; }' and '{ [x: string]: Base; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(108,12): error TS2365: Operator '!==' cannot be applied to types '{ [x: string]: number; }' and '{ [x: string]: string; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(109,12): error TS2365: Operator '!==' cannot be applied to types '{ [x: string]: C; }' and '{ [x: string]: Base; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(110,12): error TS2365: Operator '!==' cannot be applied to types '{ [x: number]: C; }' and '{ [x: number]: Base; }'. -tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(111,12): error TS2365: Operator '!==' cannot be applied to types '{ [x: string]: Base; }' and '{ [x: number]: Derived; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(26,12): error TS2365: Operator '<' cannot be applied to types '{ [a: string]: string; }' and '{ [b: string]: number; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(27,12): error TS2365: Operator '<' cannot be applied to types '{ [index: string]: Base; }' and '{ [index: string]: C; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(28,12): error TS2365: Operator '<' cannot be applied to types '{ [index: number]: Base; }' and '{ [index: number]: C; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(29,12): error TS2365: Operator '<' cannot be applied to types '{ [index: number]: Derived; }' and '{ [index: string]: Base; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(31,12): error TS2365: Operator '<' cannot be applied to types '{ [b: string]: number; }' and '{ [a: string]: string; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(32,12): error TS2365: Operator '<' cannot be applied to types '{ [index: string]: C; }' and '{ [index: string]: Base; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(33,12): error TS2365: Operator '<' cannot be applied to types '{ [index: number]: C; }' and '{ [index: number]: Base; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(34,12): error TS2365: Operator '<' cannot be applied to types '{ [index: string]: Base; }' and '{ [index: number]: Derived; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(37,12): error TS2365: Operator '>' cannot be applied to types '{ [a: string]: string; }' and '{ [b: string]: number; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(38,12): error TS2365: Operator '>' cannot be applied to types '{ [index: string]: Base; }' and '{ [index: string]: C; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(39,12): error TS2365: Operator '>' cannot be applied to types '{ [index: number]: Base; }' and '{ [index: number]: C; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(40,12): error TS2365: Operator '>' cannot be applied to types '{ [index: number]: Derived; }' and '{ [index: string]: Base; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(42,12): error TS2365: Operator '>' cannot be applied to types '{ [b: string]: number; }' and '{ [a: string]: string; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(43,12): error TS2365: Operator '>' cannot be applied to types '{ [index: string]: C; }' and '{ [index: string]: Base; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(44,12): error TS2365: Operator '>' cannot be applied to types '{ [index: number]: C; }' and '{ [index: number]: Base; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(45,12): error TS2365: Operator '>' cannot be applied to types '{ [index: string]: Base; }' and '{ [index: number]: Derived; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(48,12): error TS2365: Operator '<=' cannot be applied to types '{ [a: string]: string; }' and '{ [b: string]: number; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(49,12): error TS2365: Operator '<=' cannot be applied to types '{ [index: string]: Base; }' and '{ [index: string]: C; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(50,12): error TS2365: Operator '<=' cannot be applied to types '{ [index: number]: Base; }' and '{ [index: number]: C; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(51,12): error TS2365: Operator '<=' cannot be applied to types '{ [index: number]: Derived; }' and '{ [index: string]: Base; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(53,12): error TS2365: Operator '<=' cannot be applied to types '{ [b: string]: number; }' and '{ [a: string]: string; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(54,12): error TS2365: Operator '<=' cannot be applied to types '{ [index: string]: C; }' and '{ [index: string]: Base; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(55,12): error TS2365: Operator '<=' cannot be applied to types '{ [index: number]: C; }' and '{ [index: number]: Base; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(56,12): error TS2365: Operator '<=' cannot be applied to types '{ [index: string]: Base; }' and '{ [index: number]: Derived; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(59,12): error TS2365: Operator '>=' cannot be applied to types '{ [a: string]: string; }' and '{ [b: string]: number; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(60,12): error TS2365: Operator '>=' cannot be applied to types '{ [index: string]: Base; }' and '{ [index: string]: C; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(61,12): error TS2365: Operator '>=' cannot be applied to types '{ [index: number]: Base; }' and '{ [index: number]: C; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(62,12): error TS2365: Operator '>=' cannot be applied to types '{ [index: number]: Derived; }' and '{ [index: string]: Base; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(64,12): error TS2365: Operator '>=' cannot be applied to types '{ [b: string]: number; }' and '{ [a: string]: string; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(65,12): error TS2365: Operator '>=' cannot be applied to types '{ [index: string]: C; }' and '{ [index: string]: Base; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(66,12): error TS2365: Operator '>=' cannot be applied to types '{ [index: number]: C; }' and '{ [index: number]: Base; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(67,12): error TS2365: Operator '>=' cannot be applied to types '{ [index: string]: Base; }' and '{ [index: number]: Derived; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(70,12): error TS2365: Operator '==' cannot be applied to types '{ [a: string]: string; }' and '{ [b: string]: number; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(71,12): error TS2365: Operator '==' cannot be applied to types '{ [index: string]: Base; }' and '{ [index: string]: C; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(72,12): error TS2365: Operator '==' cannot be applied to types '{ [index: number]: Base; }' and '{ [index: number]: C; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(73,12): error TS2365: Operator '==' cannot be applied to types '{ [index: number]: Derived; }' and '{ [index: string]: Base; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(75,12): error TS2365: Operator '==' cannot be applied to types '{ [b: string]: number; }' and '{ [a: string]: string; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(76,12): error TS2365: Operator '==' cannot be applied to types '{ [index: string]: C; }' and '{ [index: string]: Base; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(77,12): error TS2365: Operator '==' cannot be applied to types '{ [index: number]: C; }' and '{ [index: number]: Base; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(78,12): error TS2365: Operator '==' cannot be applied to types '{ [index: string]: Base; }' and '{ [index: number]: Derived; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(81,12): error TS2365: Operator '!=' cannot be applied to types '{ [a: string]: string; }' and '{ [b: string]: number; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(82,12): error TS2365: Operator '!=' cannot be applied to types '{ [index: string]: Base; }' and '{ [index: string]: C; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(83,12): error TS2365: Operator '!=' cannot be applied to types '{ [index: number]: Base; }' and '{ [index: number]: C; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(84,12): error TS2365: Operator '!=' cannot be applied to types '{ [index: number]: Derived; }' and '{ [index: string]: Base; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(86,12): error TS2365: Operator '!=' cannot be applied to types '{ [b: string]: number; }' and '{ [a: string]: string; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(87,12): error TS2365: Operator '!=' cannot be applied to types '{ [index: string]: C; }' and '{ [index: string]: Base; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(88,12): error TS2365: Operator '!=' cannot be applied to types '{ [index: number]: C; }' and '{ [index: number]: Base; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(89,12): error TS2365: Operator '!=' cannot be applied to types '{ [index: string]: Base; }' and '{ [index: number]: Derived; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(92,12): error TS2365: Operator '===' cannot be applied to types '{ [a: string]: string; }' and '{ [b: string]: number; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(93,12): error TS2365: Operator '===' cannot be applied to types '{ [index: string]: Base; }' and '{ [index: string]: C; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(94,12): error TS2365: Operator '===' cannot be applied to types '{ [index: number]: Base; }' and '{ [index: number]: C; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(95,12): error TS2365: Operator '===' cannot be applied to types '{ [index: number]: Derived; }' and '{ [index: string]: Base; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(97,12): error TS2365: Operator '===' cannot be applied to types '{ [b: string]: number; }' and '{ [a: string]: string; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(98,12): error TS2365: Operator '===' cannot be applied to types '{ [index: string]: C; }' and '{ [index: string]: Base; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(99,12): error TS2365: Operator '===' cannot be applied to types '{ [index: number]: C; }' and '{ [index: number]: Base; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(100,12): error TS2365: Operator '===' cannot be applied to types '{ [index: string]: Base; }' and '{ [index: number]: Derived; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(103,12): error TS2365: Operator '!==' cannot be applied to types '{ [a: string]: string; }' and '{ [b: string]: number; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(104,12): error TS2365: Operator '!==' cannot be applied to types '{ [index: string]: Base; }' and '{ [index: string]: C; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(105,12): error TS2365: Operator '!==' cannot be applied to types '{ [index: number]: Base; }' and '{ [index: number]: C; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(106,12): error TS2365: Operator '!==' cannot be applied to types '{ [index: number]: Derived; }' and '{ [index: string]: Base; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(108,12): error TS2365: Operator '!==' cannot be applied to types '{ [b: string]: number; }' and '{ [a: string]: string; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(109,12): error TS2365: Operator '!==' cannot be applied to types '{ [index: string]: C; }' and '{ [index: string]: Base; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(110,12): error TS2365: Operator '!==' cannot be applied to types '{ [index: number]: C; }' and '{ [index: number]: Base; }'. +tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts(111,12): error TS2365: Operator '!==' cannot be applied to types '{ [index: string]: Base; }' and '{ [index: number]: Derived; }'. ==== tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipObjectsOnIndexSignature.ts (64 errors) ==== @@ -92,215 +92,215 @@ tests/cases/conformance/expressions/binaryOperators/comparisonOperator/compariso // operator < var r1a1 = a1 < b1; ~~~~~~~ -!!! error TS2365: Operator '<' cannot be applied to types '{ [x: string]: string; }' and '{ [x: string]: number; }'. +!!! error TS2365: Operator '<' cannot be applied to types '{ [a: string]: string; }' and '{ [b: string]: number; }'. var r1a2 = a2 < b2; ~~~~~~~ -!!! error TS2365: Operator '<' cannot be applied to types '{ [x: string]: Base; }' and '{ [x: string]: C; }'. +!!! error TS2365: Operator '<' cannot be applied to types '{ [index: string]: Base; }' and '{ [index: string]: C; }'. var r1a3 = a3 < b3; ~~~~~~~ -!!! error TS2365: Operator '<' cannot be applied to types '{ [x: number]: Base; }' and '{ [x: number]: C; }'. +!!! error TS2365: Operator '<' cannot be applied to types '{ [index: number]: Base; }' and '{ [index: number]: C; }'. var r1a4 = a4 < b4; ~~~~~~~ -!!! error TS2365: Operator '<' cannot be applied to types '{ [x: number]: Derived; }' and '{ [x: string]: Base; }'. +!!! error TS2365: Operator '<' cannot be applied to types '{ [index: number]: Derived; }' and '{ [index: string]: Base; }'. var r1b1 = b1 < a1; ~~~~~~~ -!!! error TS2365: Operator '<' cannot be applied to types '{ [x: string]: number; }' and '{ [x: string]: string; }'. +!!! error TS2365: Operator '<' cannot be applied to types '{ [b: string]: number; }' and '{ [a: string]: string; }'. var r1b2 = b2 < a2; ~~~~~~~ -!!! error TS2365: Operator '<' cannot be applied to types '{ [x: string]: C; }' and '{ [x: string]: Base; }'. +!!! error TS2365: Operator '<' cannot be applied to types '{ [index: string]: C; }' and '{ [index: string]: Base; }'. var r1b3 = b3 < a3; ~~~~~~~ -!!! error TS2365: Operator '<' cannot be applied to types '{ [x: number]: C; }' and '{ [x: number]: Base; }'. +!!! error TS2365: Operator '<' cannot be applied to types '{ [index: number]: C; }' and '{ [index: number]: Base; }'. var r1b4 = b4 < a4; ~~~~~~~ -!!! error TS2365: Operator '<' cannot be applied to types '{ [x: string]: Base; }' and '{ [x: number]: Derived; }'. +!!! error TS2365: Operator '<' cannot be applied to types '{ [index: string]: Base; }' and '{ [index: number]: Derived; }'. // operator > var r2a1 = a1 > b1; ~~~~~~~ -!!! error TS2365: Operator '>' cannot be applied to types '{ [x: string]: string; }' and '{ [x: string]: number; }'. +!!! error TS2365: Operator '>' cannot be applied to types '{ [a: string]: string; }' and '{ [b: string]: number; }'. var r2a2 = a2 > b2; ~~~~~~~ -!!! error TS2365: Operator '>' cannot be applied to types '{ [x: string]: Base; }' and '{ [x: string]: C; }'. +!!! error TS2365: Operator '>' cannot be applied to types '{ [index: string]: Base; }' and '{ [index: string]: C; }'. var r2a3 = a3 > b3; ~~~~~~~ -!!! error TS2365: Operator '>' cannot be applied to types '{ [x: number]: Base; }' and '{ [x: number]: C; }'. +!!! error TS2365: Operator '>' cannot be applied to types '{ [index: number]: Base; }' and '{ [index: number]: C; }'. var r2a4 = a4 > b4; ~~~~~~~ -!!! error TS2365: Operator '>' cannot be applied to types '{ [x: number]: Derived; }' and '{ [x: string]: Base; }'. +!!! error TS2365: Operator '>' cannot be applied to types '{ [index: number]: Derived; }' and '{ [index: string]: Base; }'. var r2b1 = b1 > a1; ~~~~~~~ -!!! error TS2365: Operator '>' cannot be applied to types '{ [x: string]: number; }' and '{ [x: string]: string; }'. +!!! error TS2365: Operator '>' cannot be applied to types '{ [b: string]: number; }' and '{ [a: string]: string; }'. var r2b2 = b2 > a2; ~~~~~~~ -!!! error TS2365: Operator '>' cannot be applied to types '{ [x: string]: C; }' and '{ [x: string]: Base; }'. +!!! error TS2365: Operator '>' cannot be applied to types '{ [index: string]: C; }' and '{ [index: string]: Base; }'. var r2b3 = b3 > a3; ~~~~~~~ -!!! error TS2365: Operator '>' cannot be applied to types '{ [x: number]: C; }' and '{ [x: number]: Base; }'. +!!! error TS2365: Operator '>' cannot be applied to types '{ [index: number]: C; }' and '{ [index: number]: Base; }'. var r2b4 = b4 > a4; ~~~~~~~ -!!! error TS2365: Operator '>' cannot be applied to types '{ [x: string]: Base; }' and '{ [x: number]: Derived; }'. +!!! error TS2365: Operator '>' cannot be applied to types '{ [index: string]: Base; }' and '{ [index: number]: Derived; }'. // operator <= var r3a1 = a1 <= b1; ~~~~~~~~ -!!! error TS2365: Operator '<=' cannot be applied to types '{ [x: string]: string; }' and '{ [x: string]: number; }'. +!!! error TS2365: Operator '<=' cannot be applied to types '{ [a: string]: string; }' and '{ [b: string]: number; }'. var r3a2 = a2 <= b2; ~~~~~~~~ -!!! error TS2365: Operator '<=' cannot be applied to types '{ [x: string]: Base; }' and '{ [x: string]: C; }'. +!!! error TS2365: Operator '<=' cannot be applied to types '{ [index: string]: Base; }' and '{ [index: string]: C; }'. var r3a3 = a3 <= b3; ~~~~~~~~ -!!! error TS2365: Operator '<=' cannot be applied to types '{ [x: number]: Base; }' and '{ [x: number]: C; }'. +!!! error TS2365: Operator '<=' cannot be applied to types '{ [index: number]: Base; }' and '{ [index: number]: C; }'. var r3a4 = a4 <= b4; ~~~~~~~~ -!!! error TS2365: Operator '<=' cannot be applied to types '{ [x: number]: Derived; }' and '{ [x: string]: Base; }'. +!!! error TS2365: Operator '<=' cannot be applied to types '{ [index: number]: Derived; }' and '{ [index: string]: Base; }'. var r3b1 = b1 <= a1; ~~~~~~~~ -!!! error TS2365: Operator '<=' cannot be applied to types '{ [x: string]: number; }' and '{ [x: string]: string; }'. +!!! error TS2365: Operator '<=' cannot be applied to types '{ [b: string]: number; }' and '{ [a: string]: string; }'. var r3b2 = b2 <= a2; ~~~~~~~~ -!!! error TS2365: Operator '<=' cannot be applied to types '{ [x: string]: C; }' and '{ [x: string]: Base; }'. +!!! error TS2365: Operator '<=' cannot be applied to types '{ [index: string]: C; }' and '{ [index: string]: Base; }'. var r3b3 = b3 <= a3; ~~~~~~~~ -!!! error TS2365: Operator '<=' cannot be applied to types '{ [x: number]: C; }' and '{ [x: number]: Base; }'. +!!! error TS2365: Operator '<=' cannot be applied to types '{ [index: number]: C; }' and '{ [index: number]: Base; }'. var r3b4 = b4 <= a4; ~~~~~~~~ -!!! error TS2365: Operator '<=' cannot be applied to types '{ [x: string]: Base; }' and '{ [x: number]: Derived; }'. +!!! error TS2365: Operator '<=' cannot be applied to types '{ [index: string]: Base; }' and '{ [index: number]: Derived; }'. // operator >= var r4a1 = a1 >= b1; ~~~~~~~~ -!!! error TS2365: Operator '>=' cannot be applied to types '{ [x: string]: string; }' and '{ [x: string]: number; }'. +!!! error TS2365: Operator '>=' cannot be applied to types '{ [a: string]: string; }' and '{ [b: string]: number; }'. var r4a2 = a2 >= b2; ~~~~~~~~ -!!! error TS2365: Operator '>=' cannot be applied to types '{ [x: string]: Base; }' and '{ [x: string]: C; }'. +!!! error TS2365: Operator '>=' cannot be applied to types '{ [index: string]: Base; }' and '{ [index: string]: C; }'. var r4a3 = a3 >= b3; ~~~~~~~~ -!!! error TS2365: Operator '>=' cannot be applied to types '{ [x: number]: Base; }' and '{ [x: number]: C; }'. +!!! error TS2365: Operator '>=' cannot be applied to types '{ [index: number]: Base; }' and '{ [index: number]: C; }'. var r4a4 = a4 >= b4; ~~~~~~~~ -!!! error TS2365: Operator '>=' cannot be applied to types '{ [x: number]: Derived; }' and '{ [x: string]: Base; }'. +!!! error TS2365: Operator '>=' cannot be applied to types '{ [index: number]: Derived; }' and '{ [index: string]: Base; }'. var r4b1 = b1 >= a1; ~~~~~~~~ -!!! error TS2365: Operator '>=' cannot be applied to types '{ [x: string]: number; }' and '{ [x: string]: string; }'. +!!! error TS2365: Operator '>=' cannot be applied to types '{ [b: string]: number; }' and '{ [a: string]: string; }'. var r4b2 = b2 >= a2; ~~~~~~~~ -!!! error TS2365: Operator '>=' cannot be applied to types '{ [x: string]: C; }' and '{ [x: string]: Base; }'. +!!! error TS2365: Operator '>=' cannot be applied to types '{ [index: string]: C; }' and '{ [index: string]: Base; }'. var r4b3 = b3 >= a3; ~~~~~~~~ -!!! error TS2365: Operator '>=' cannot be applied to types '{ [x: number]: C; }' and '{ [x: number]: Base; }'. +!!! error TS2365: Operator '>=' cannot be applied to types '{ [index: number]: C; }' and '{ [index: number]: Base; }'. var r4b4 = b4 >= a4; ~~~~~~~~ -!!! error TS2365: Operator '>=' cannot be applied to types '{ [x: string]: Base; }' and '{ [x: number]: Derived; }'. +!!! error TS2365: Operator '>=' cannot be applied to types '{ [index: string]: Base; }' and '{ [index: number]: Derived; }'. // operator == var r5a1 = a1 == b1; ~~~~~~~~ -!!! error TS2365: Operator '==' cannot be applied to types '{ [x: string]: string; }' and '{ [x: string]: number; }'. +!!! error TS2365: Operator '==' cannot be applied to types '{ [a: string]: string; }' and '{ [b: string]: number; }'. var r5a2 = a2 == b2; ~~~~~~~~ -!!! error TS2365: Operator '==' cannot be applied to types '{ [x: string]: Base; }' and '{ [x: string]: C; }'. +!!! error TS2365: Operator '==' cannot be applied to types '{ [index: string]: Base; }' and '{ [index: string]: C; }'. var r5a3 = a3 == b3; ~~~~~~~~ -!!! error TS2365: Operator '==' cannot be applied to types '{ [x: number]: Base; }' and '{ [x: number]: C; }'. +!!! error TS2365: Operator '==' cannot be applied to types '{ [index: number]: Base; }' and '{ [index: number]: C; }'. var r5a4 = a4 == b4; ~~~~~~~~ -!!! error TS2365: Operator '==' cannot be applied to types '{ [x: number]: Derived; }' and '{ [x: string]: Base; }'. +!!! error TS2365: Operator '==' cannot be applied to types '{ [index: number]: Derived; }' and '{ [index: string]: Base; }'. var r5b1 = b1 == a1; ~~~~~~~~ -!!! error TS2365: Operator '==' cannot be applied to types '{ [x: string]: number; }' and '{ [x: string]: string; }'. +!!! error TS2365: Operator '==' cannot be applied to types '{ [b: string]: number; }' and '{ [a: string]: string; }'. var r5b2 = b2 == a2; ~~~~~~~~ -!!! error TS2365: Operator '==' cannot be applied to types '{ [x: string]: C; }' and '{ [x: string]: Base; }'. +!!! error TS2365: Operator '==' cannot be applied to types '{ [index: string]: C; }' and '{ [index: string]: Base; }'. var r5b3 = b3 == a3; ~~~~~~~~ -!!! error TS2365: Operator '==' cannot be applied to types '{ [x: number]: C; }' and '{ [x: number]: Base; }'. +!!! error TS2365: Operator '==' cannot be applied to types '{ [index: number]: C; }' and '{ [index: number]: Base; }'. var r5b4 = b4 == a4; ~~~~~~~~ -!!! error TS2365: Operator '==' cannot be applied to types '{ [x: string]: Base; }' and '{ [x: number]: Derived; }'. +!!! error TS2365: Operator '==' cannot be applied to types '{ [index: string]: Base; }' and '{ [index: number]: Derived; }'. // operator != var r6a1 = a1 != b1; ~~~~~~~~ -!!! error TS2365: Operator '!=' cannot be applied to types '{ [x: string]: string; }' and '{ [x: string]: number; }'. +!!! error TS2365: Operator '!=' cannot be applied to types '{ [a: string]: string; }' and '{ [b: string]: number; }'. var r6a2 = a2 != b2; ~~~~~~~~ -!!! error TS2365: Operator '!=' cannot be applied to types '{ [x: string]: Base; }' and '{ [x: string]: C; }'. +!!! error TS2365: Operator '!=' cannot be applied to types '{ [index: string]: Base; }' and '{ [index: string]: C; }'. var r6a3 = a3 != b3; ~~~~~~~~ -!!! error TS2365: Operator '!=' cannot be applied to types '{ [x: number]: Base; }' and '{ [x: number]: C; }'. +!!! error TS2365: Operator '!=' cannot be applied to types '{ [index: number]: Base; }' and '{ [index: number]: C; }'. var r6a4 = a4 != b4; ~~~~~~~~ -!!! error TS2365: Operator '!=' cannot be applied to types '{ [x: number]: Derived; }' and '{ [x: string]: Base; }'. +!!! error TS2365: Operator '!=' cannot be applied to types '{ [index: number]: Derived; }' and '{ [index: string]: Base; }'. var r6b1 = b1 != a1; ~~~~~~~~ -!!! error TS2365: Operator '!=' cannot be applied to types '{ [x: string]: number; }' and '{ [x: string]: string; }'. +!!! error TS2365: Operator '!=' cannot be applied to types '{ [b: string]: number; }' and '{ [a: string]: string; }'. var r6b2 = b2 != a2; ~~~~~~~~ -!!! error TS2365: Operator '!=' cannot be applied to types '{ [x: string]: C; }' and '{ [x: string]: Base; }'. +!!! error TS2365: Operator '!=' cannot be applied to types '{ [index: string]: C; }' and '{ [index: string]: Base; }'. var r6b3 = b3 != a3; ~~~~~~~~ -!!! error TS2365: Operator '!=' cannot be applied to types '{ [x: number]: C; }' and '{ [x: number]: Base; }'. +!!! error TS2365: Operator '!=' cannot be applied to types '{ [index: number]: C; }' and '{ [index: number]: Base; }'. var r6b4 = b4 != a4; ~~~~~~~~ -!!! error TS2365: Operator '!=' cannot be applied to types '{ [x: string]: Base; }' and '{ [x: number]: Derived; }'. +!!! error TS2365: Operator '!=' cannot be applied to types '{ [index: string]: Base; }' and '{ [index: number]: Derived; }'. // operator === var r7a1 = a1 === b1; ~~~~~~~~~ -!!! error TS2365: Operator '===' cannot be applied to types '{ [x: string]: string; }' and '{ [x: string]: number; }'. +!!! error TS2365: Operator '===' cannot be applied to types '{ [a: string]: string; }' and '{ [b: string]: number; }'. var r7a2 = a2 === b2; ~~~~~~~~~ -!!! error TS2365: Operator '===' cannot be applied to types '{ [x: string]: Base; }' and '{ [x: string]: C; }'. +!!! error TS2365: Operator '===' cannot be applied to types '{ [index: string]: Base; }' and '{ [index: string]: C; }'. var r7a3 = a3 === b3; ~~~~~~~~~ -!!! error TS2365: Operator '===' cannot be applied to types '{ [x: number]: Base; }' and '{ [x: number]: C; }'. +!!! error TS2365: Operator '===' cannot be applied to types '{ [index: number]: Base; }' and '{ [index: number]: C; }'. var r7a4 = a4 === b4; ~~~~~~~~~ -!!! error TS2365: Operator '===' cannot be applied to types '{ [x: number]: Derived; }' and '{ [x: string]: Base; }'. +!!! error TS2365: Operator '===' cannot be applied to types '{ [index: number]: Derived; }' and '{ [index: string]: Base; }'. var r7b1 = b1 === a1; ~~~~~~~~~ -!!! error TS2365: Operator '===' cannot be applied to types '{ [x: string]: number; }' and '{ [x: string]: string; }'. +!!! error TS2365: Operator '===' cannot be applied to types '{ [b: string]: number; }' and '{ [a: string]: string; }'. var r7b2 = b2 === a2; ~~~~~~~~~ -!!! error TS2365: Operator '===' cannot be applied to types '{ [x: string]: C; }' and '{ [x: string]: Base; }'. +!!! error TS2365: Operator '===' cannot be applied to types '{ [index: string]: C; }' and '{ [index: string]: Base; }'. var r7b3 = b3 === a3; ~~~~~~~~~ -!!! error TS2365: Operator '===' cannot be applied to types '{ [x: number]: C; }' and '{ [x: number]: Base; }'. +!!! error TS2365: Operator '===' cannot be applied to types '{ [index: number]: C; }' and '{ [index: number]: Base; }'. var r7b4 = b4 === a4; ~~~~~~~~~ -!!! error TS2365: Operator '===' cannot be applied to types '{ [x: string]: Base; }' and '{ [x: number]: Derived; }'. +!!! error TS2365: Operator '===' cannot be applied to types '{ [index: string]: Base; }' and '{ [index: number]: Derived; }'. // operator !== var r8a1 = a1 !== b1; ~~~~~~~~~ -!!! error TS2365: Operator '!==' cannot be applied to types '{ [x: string]: string; }' and '{ [x: string]: number; }'. +!!! error TS2365: Operator '!==' cannot be applied to types '{ [a: string]: string; }' and '{ [b: string]: number; }'. var r8a2 = a2 !== b2; ~~~~~~~~~ -!!! error TS2365: Operator '!==' cannot be applied to types '{ [x: string]: Base; }' and '{ [x: string]: C; }'. +!!! error TS2365: Operator '!==' cannot be applied to types '{ [index: string]: Base; }' and '{ [index: string]: C; }'. var r8a3 = a3 !== b3; ~~~~~~~~~ -!!! error TS2365: Operator '!==' cannot be applied to types '{ [x: number]: Base; }' and '{ [x: number]: C; }'. +!!! error TS2365: Operator '!==' cannot be applied to types '{ [index: number]: Base; }' and '{ [index: number]: C; }'. var r8a4 = a4 !== b4; ~~~~~~~~~ -!!! error TS2365: Operator '!==' cannot be applied to types '{ [x: number]: Derived; }' and '{ [x: string]: Base; }'. +!!! error TS2365: Operator '!==' cannot be applied to types '{ [index: number]: Derived; }' and '{ [index: string]: Base; }'. var r8b1 = b1 !== a1; ~~~~~~~~~ -!!! error TS2365: Operator '!==' cannot be applied to types '{ [x: string]: number; }' and '{ [x: string]: string; }'. +!!! error TS2365: Operator '!==' cannot be applied to types '{ [b: string]: number; }' and '{ [a: string]: string; }'. var r8b2 = b2 !== a2; ~~~~~~~~~ -!!! error TS2365: Operator '!==' cannot be applied to types '{ [x: string]: C; }' and '{ [x: string]: Base; }'. +!!! error TS2365: Operator '!==' cannot be applied to types '{ [index: string]: C; }' and '{ [index: string]: Base; }'. var r8b3 = b3 !== a3; ~~~~~~~~~ -!!! error TS2365: Operator '!==' cannot be applied to types '{ [x: number]: C; }' and '{ [x: number]: Base; }'. +!!! error TS2365: Operator '!==' cannot be applied to types '{ [index: number]: C; }' and '{ [index: number]: Base; }'. var r8b4 = b4 !== a4; ~~~~~~~~~ -!!! error TS2365: Operator '!==' cannot be applied to types '{ [x: string]: Base; }' and '{ [x: number]: Derived; }'. \ No newline at end of file +!!! error TS2365: Operator '!==' cannot be applied to types '{ [index: string]: Base; }' and '{ [index: number]: Derived; }'. \ No newline at end of file diff --git a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnIndexSignature.types b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnIndexSignature.types index 755df0be1dc82..657fdccbda0a7 100644 --- a/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnIndexSignature.types +++ b/tests/baselines/reference/comparisonOperatorWithSubtypeObjectOnIndexSignature.types @@ -15,38 +15,38 @@ class Derived extends Base { } var a1: { [a: string]: string }; ->a1 : { [x: string]: string; } +>a1 : { [a: string]: string; } >a : string var b1: { [b: string]: string }; ->b1 : { [x: string]: string; } +>b1 : { [b: string]: string; } >b : string var a2: { [index: string]: Base }; ->a2 : { [x: string]: Base; } +>a2 : { [index: string]: Base; } >index : string >Base : Base var b2: { [index: string]: Derived }; ->b2 : { [x: string]: Derived; } +>b2 : { [index: string]: Derived; } >index : string >Derived : Derived var a3: { [index: number]: string }; ->a3 : { [x: number]: string; } +>a3 : { [index: number]: string; } >index : number var b3: { [index: number]: string }; ->b3 : { [x: number]: string; } +>b3 : { [index: number]: string; } >index : number var a4: { [index: number]: Base }; ->a4 : { [x: number]: Base; } +>a4 : { [index: number]: Base; } >index : number >Base : Base var b4: { [index: string]: Derived }; ->b4 : { [x: string]: Derived; } +>b4 : { [index: string]: Derived; } >index : string >Derived : Derived @@ -54,391 +54,391 @@ var b4: { [index: string]: Derived }; var r1a1 = a1 < b1; >r1a1 : boolean >a1 < b1 : boolean ->a1 : { [x: string]: string; } ->b1 : { [x: string]: string; } +>a1 : { [a: string]: string; } +>b1 : { [b: string]: string; } var r1a1 = a2 < b2; >r1a1 : boolean >a2 < b2 : boolean ->a2 : { [x: string]: Base; } ->b2 : { [x: string]: Derived; } +>a2 : { [index: string]: Base; } +>b2 : { [index: string]: Derived; } var r1a1 = a3 < b3; >r1a1 : boolean >a3 < b3 : boolean ->a3 : { [x: number]: string; } ->b3 : { [x: number]: string; } +>a3 : { [index: number]: string; } +>b3 : { [index: number]: string; } var r1a1 = a4 < b4; >r1a1 : boolean >a4 < b4 : boolean ->a4 : { [x: number]: Base; } ->b4 : { [x: string]: Derived; } +>a4 : { [index: number]: Base; } +>b4 : { [index: string]: Derived; } var r1b1 = b1 < a1; >r1b1 : boolean >b1 < a1 : boolean ->b1 : { [x: string]: string; } ->a1 : { [x: string]: string; } +>b1 : { [b: string]: string; } +>a1 : { [a: string]: string; } var r1b1 = b2 < a2; >r1b1 : boolean >b2 < a2 : boolean ->b2 : { [x: string]: Derived; } ->a2 : { [x: string]: Base; } +>b2 : { [index: string]: Derived; } +>a2 : { [index: string]: Base; } var r1b1 = b3 < a3; >r1b1 : boolean >b3 < a3 : boolean ->b3 : { [x: number]: string; } ->a3 : { [x: number]: string; } +>b3 : { [index: number]: string; } +>a3 : { [index: number]: string; } var r1b1 = b4 < a4; >r1b1 : boolean >b4 < a4 : boolean ->b4 : { [x: string]: Derived; } ->a4 : { [x: number]: Base; } +>b4 : { [index: string]: Derived; } +>a4 : { [index: number]: Base; } // operator > var r2a1 = a1 > b1; >r2a1 : boolean >a1 > b1 : boolean ->a1 : { [x: string]: string; } ->b1 : { [x: string]: string; } +>a1 : { [a: string]: string; } +>b1 : { [b: string]: string; } var r2a1 = a2 > b2; >r2a1 : boolean >a2 > b2 : boolean ->a2 : { [x: string]: Base; } ->b2 : { [x: string]: Derived; } +>a2 : { [index: string]: Base; } +>b2 : { [index: string]: Derived; } var r2a1 = a3 > b3; >r2a1 : boolean >a3 > b3 : boolean ->a3 : { [x: number]: string; } ->b3 : { [x: number]: string; } +>a3 : { [index: number]: string; } +>b3 : { [index: number]: string; } var r2a1 = a4 > b4; >r2a1 : boolean >a4 > b4 : boolean ->a4 : { [x: number]: Base; } ->b4 : { [x: string]: Derived; } +>a4 : { [index: number]: Base; } +>b4 : { [index: string]: Derived; } var r2b1 = b1 > a1; >r2b1 : boolean >b1 > a1 : boolean ->b1 : { [x: string]: string; } ->a1 : { [x: string]: string; } +>b1 : { [b: string]: string; } +>a1 : { [a: string]: string; } var r2b1 = b2 > a2; >r2b1 : boolean >b2 > a2 : boolean ->b2 : { [x: string]: Derived; } ->a2 : { [x: string]: Base; } +>b2 : { [index: string]: Derived; } +>a2 : { [index: string]: Base; } var r2b1 = b3 > a3; >r2b1 : boolean >b3 > a3 : boolean ->b3 : { [x: number]: string; } ->a3 : { [x: number]: string; } +>b3 : { [index: number]: string; } +>a3 : { [index: number]: string; } var r2b1 = b4 > a4; >r2b1 : boolean >b4 > a4 : boolean ->b4 : { [x: string]: Derived; } ->a4 : { [x: number]: Base; } +>b4 : { [index: string]: Derived; } +>a4 : { [index: number]: Base; } // operator <= var r3a1 = a1 <= b1; >r3a1 : boolean >a1 <= b1 : boolean ->a1 : { [x: string]: string; } ->b1 : { [x: string]: string; } +>a1 : { [a: string]: string; } +>b1 : { [b: string]: string; } var r3a1 = a2 <= b2; >r3a1 : boolean >a2 <= b2 : boolean ->a2 : { [x: string]: Base; } ->b2 : { [x: string]: Derived; } +>a2 : { [index: string]: Base; } +>b2 : { [index: string]: Derived; } var r3a1 = a3 <= b3; >r3a1 : boolean >a3 <= b3 : boolean ->a3 : { [x: number]: string; } ->b3 : { [x: number]: string; } +>a3 : { [index: number]: string; } +>b3 : { [index: number]: string; } var r3a1 = a4 <= b4; >r3a1 : boolean >a4 <= b4 : boolean ->a4 : { [x: number]: Base; } ->b4 : { [x: string]: Derived; } +>a4 : { [index: number]: Base; } +>b4 : { [index: string]: Derived; } var r3b1 = b1 <= a1; >r3b1 : boolean >b1 <= a1 : boolean ->b1 : { [x: string]: string; } ->a1 : { [x: string]: string; } +>b1 : { [b: string]: string; } +>a1 : { [a: string]: string; } var r3b1 = b2 <= a2; >r3b1 : boolean >b2 <= a2 : boolean ->b2 : { [x: string]: Derived; } ->a2 : { [x: string]: Base; } +>b2 : { [index: string]: Derived; } +>a2 : { [index: string]: Base; } var r3b1 = b3 <= a3; >r3b1 : boolean >b3 <= a3 : boolean ->b3 : { [x: number]: string; } ->a3 : { [x: number]: string; } +>b3 : { [index: number]: string; } +>a3 : { [index: number]: string; } var r3b1 = b4 <= a4; >r3b1 : boolean >b4 <= a4 : boolean ->b4 : { [x: string]: Derived; } ->a4 : { [x: number]: Base; } +>b4 : { [index: string]: Derived; } +>a4 : { [index: number]: Base; } // operator >= var r4a1 = a1 >= b1; >r4a1 : boolean >a1 >= b1 : boolean ->a1 : { [x: string]: string; } ->b1 : { [x: string]: string; } +>a1 : { [a: string]: string; } +>b1 : { [b: string]: string; } var r4a1 = a2 >= b2; >r4a1 : boolean >a2 >= b2 : boolean ->a2 : { [x: string]: Base; } ->b2 : { [x: string]: Derived; } +>a2 : { [index: string]: Base; } +>b2 : { [index: string]: Derived; } var r4a1 = a3 >= b3; >r4a1 : boolean >a3 >= b3 : boolean ->a3 : { [x: number]: string; } ->b3 : { [x: number]: string; } +>a3 : { [index: number]: string; } +>b3 : { [index: number]: string; } var r4a1 = a4 >= b4; >r4a1 : boolean >a4 >= b4 : boolean ->a4 : { [x: number]: Base; } ->b4 : { [x: string]: Derived; } +>a4 : { [index: number]: Base; } +>b4 : { [index: string]: Derived; } var r4b1 = b1 >= a1; >r4b1 : boolean >b1 >= a1 : boolean ->b1 : { [x: string]: string; } ->a1 : { [x: string]: string; } +>b1 : { [b: string]: string; } +>a1 : { [a: string]: string; } var r4b1 = b2 >= a2; >r4b1 : boolean >b2 >= a2 : boolean ->b2 : { [x: string]: Derived; } ->a2 : { [x: string]: Base; } +>b2 : { [index: string]: Derived; } +>a2 : { [index: string]: Base; } var r4b1 = b3 >= a3; >r4b1 : boolean >b3 >= a3 : boolean ->b3 : { [x: number]: string; } ->a3 : { [x: number]: string; } +>b3 : { [index: number]: string; } +>a3 : { [index: number]: string; } var r4b1 = b4 >= a4; >r4b1 : boolean >b4 >= a4 : boolean ->b4 : { [x: string]: Derived; } ->a4 : { [x: number]: Base; } +>b4 : { [index: string]: Derived; } +>a4 : { [index: number]: Base; } // operator == var r5a1 = a1 == b1; >r5a1 : boolean >a1 == b1 : boolean ->a1 : { [x: string]: string; } ->b1 : { [x: string]: string; } +>a1 : { [a: string]: string; } +>b1 : { [b: string]: string; } var r5a1 = a2 == b2; >r5a1 : boolean >a2 == b2 : boolean ->a2 : { [x: string]: Base; } ->b2 : { [x: string]: Derived; } +>a2 : { [index: string]: Base; } +>b2 : { [index: string]: Derived; } var r5a1 = a3 == b3; >r5a1 : boolean >a3 == b3 : boolean ->a3 : { [x: number]: string; } ->b3 : { [x: number]: string; } +>a3 : { [index: number]: string; } +>b3 : { [index: number]: string; } var r5a1 = a4 == b4; >r5a1 : boolean >a4 == b4 : boolean ->a4 : { [x: number]: Base; } ->b4 : { [x: string]: Derived; } +>a4 : { [index: number]: Base; } +>b4 : { [index: string]: Derived; } var r5b1 = b1 == a1; >r5b1 : boolean >b1 == a1 : boolean ->b1 : { [x: string]: string; } ->a1 : { [x: string]: string; } +>b1 : { [b: string]: string; } +>a1 : { [a: string]: string; } var r5b1 = b2 == a2; >r5b1 : boolean >b2 == a2 : boolean ->b2 : { [x: string]: Derived; } ->a2 : { [x: string]: Base; } +>b2 : { [index: string]: Derived; } +>a2 : { [index: string]: Base; } var r5b1 = b3 == a3; >r5b1 : boolean >b3 == a3 : boolean ->b3 : { [x: number]: string; } ->a3 : { [x: number]: string; } +>b3 : { [index: number]: string; } +>a3 : { [index: number]: string; } var r5b1 = b4 == a4; >r5b1 : boolean >b4 == a4 : boolean ->b4 : { [x: string]: Derived; } ->a4 : { [x: number]: Base; } +>b4 : { [index: string]: Derived; } +>a4 : { [index: number]: Base; } // operator != var r6a1 = a1 != b1; >r6a1 : boolean >a1 != b1 : boolean ->a1 : { [x: string]: string; } ->b1 : { [x: string]: string; } +>a1 : { [a: string]: string; } +>b1 : { [b: string]: string; } var r6a1 = a2 != b2; >r6a1 : boolean >a2 != b2 : boolean ->a2 : { [x: string]: Base; } ->b2 : { [x: string]: Derived; } +>a2 : { [index: string]: Base; } +>b2 : { [index: string]: Derived; } var r6a1 = a3 != b3; >r6a1 : boolean >a3 != b3 : boolean ->a3 : { [x: number]: string; } ->b3 : { [x: number]: string; } +>a3 : { [index: number]: string; } +>b3 : { [index: number]: string; } var r6a1 = a4 != b4; >r6a1 : boolean >a4 != b4 : boolean ->a4 : { [x: number]: Base; } ->b4 : { [x: string]: Derived; } +>a4 : { [index: number]: Base; } +>b4 : { [index: string]: Derived; } var r6b1 = b1 != a1; >r6b1 : boolean >b1 != a1 : boolean ->b1 : { [x: string]: string; } ->a1 : { [x: string]: string; } +>b1 : { [b: string]: string; } +>a1 : { [a: string]: string; } var r6b1 = b2 != a2; >r6b1 : boolean >b2 != a2 : boolean ->b2 : { [x: string]: Derived; } ->a2 : { [x: string]: Base; } +>b2 : { [index: string]: Derived; } +>a2 : { [index: string]: Base; } var r6b1 = b3 != a3; >r6b1 : boolean >b3 != a3 : boolean ->b3 : { [x: number]: string; } ->a3 : { [x: number]: string; } +>b3 : { [index: number]: string; } +>a3 : { [index: number]: string; } var r6b1 = b4 != a4; >r6b1 : boolean >b4 != a4 : boolean ->b4 : { [x: string]: Derived; } ->a4 : { [x: number]: Base; } +>b4 : { [index: string]: Derived; } +>a4 : { [index: number]: Base; } // operator === var r7a1 = a1 === b1; >r7a1 : boolean >a1 === b1 : boolean ->a1 : { [x: string]: string; } ->b1 : { [x: string]: string; } +>a1 : { [a: string]: string; } +>b1 : { [b: string]: string; } var r7a1 = a2 === b2; >r7a1 : boolean >a2 === b2 : boolean ->a2 : { [x: string]: Base; } ->b2 : { [x: string]: Derived; } +>a2 : { [index: string]: Base; } +>b2 : { [index: string]: Derived; } var r7a1 = a3 === b3; >r7a1 : boolean >a3 === b3 : boolean ->a3 : { [x: number]: string; } ->b3 : { [x: number]: string; } +>a3 : { [index: number]: string; } +>b3 : { [index: number]: string; } var r7a1 = a4 === b4; >r7a1 : boolean >a4 === b4 : boolean ->a4 : { [x: number]: Base; } ->b4 : { [x: string]: Derived; } +>a4 : { [index: number]: Base; } +>b4 : { [index: string]: Derived; } var r7b1 = b1 === a1; >r7b1 : boolean >b1 === a1 : boolean ->b1 : { [x: string]: string; } ->a1 : { [x: string]: string; } +>b1 : { [b: string]: string; } +>a1 : { [a: string]: string; } var r7b1 = b2 === a2; >r7b1 : boolean >b2 === a2 : boolean ->b2 : { [x: string]: Derived; } ->a2 : { [x: string]: Base; } +>b2 : { [index: string]: Derived; } +>a2 : { [index: string]: Base; } var r7b1 = b3 === a3; >r7b1 : boolean >b3 === a3 : boolean ->b3 : { [x: number]: string; } ->a3 : { [x: number]: string; } +>b3 : { [index: number]: string; } +>a3 : { [index: number]: string; } var r7b1 = b4 === a4; >r7b1 : boolean >b4 === a4 : boolean ->b4 : { [x: string]: Derived; } ->a4 : { [x: number]: Base; } +>b4 : { [index: string]: Derived; } +>a4 : { [index: number]: Base; } // operator !== var r8a1 = a1 !== b1; >r8a1 : boolean >a1 !== b1 : boolean ->a1 : { [x: string]: string; } ->b1 : { [x: string]: string; } +>a1 : { [a: string]: string; } +>b1 : { [b: string]: string; } var r8a1 = a2 !== b2; >r8a1 : boolean >a2 !== b2 : boolean ->a2 : { [x: string]: Base; } ->b2 : { [x: string]: Derived; } +>a2 : { [index: string]: Base; } +>b2 : { [index: string]: Derived; } var r8a1 = a3 !== b3; >r8a1 : boolean >a3 !== b3 : boolean ->a3 : { [x: number]: string; } ->b3 : { [x: number]: string; } +>a3 : { [index: number]: string; } +>b3 : { [index: number]: string; } var r8a1 = a4 !== b4; >r8a1 : boolean >a4 !== b4 : boolean ->a4 : { [x: number]: Base; } ->b4 : { [x: string]: Derived; } +>a4 : { [index: number]: Base; } +>b4 : { [index: string]: Derived; } var r8b1 = b1 !== a1; >r8b1 : boolean >b1 !== a1 : boolean ->b1 : { [x: string]: string; } ->a1 : { [x: string]: string; } +>b1 : { [b: string]: string; } +>a1 : { [a: string]: string; } var r8b1 = b2 !== a2; >r8b1 : boolean >b2 !== a2 : boolean ->b2 : { [x: string]: Derived; } ->a2 : { [x: string]: Base; } +>b2 : { [index: string]: Derived; } +>a2 : { [index: string]: Base; } var r8b1 = b3 !== a3; >r8b1 : boolean >b3 !== a3 : boolean ->b3 : { [x: number]: string; } ->a3 : { [x: number]: string; } +>b3 : { [index: number]: string; } +>a3 : { [index: number]: string; } var r8b1 = b4 !== a4; >r8b1 : boolean >b4 !== a4 : boolean ->b4 : { [x: string]: Derived; } ->a4 : { [x: number]: Base; } +>b4 : { [index: string]: Derived; } +>a4 : { [index: number]: Base; } diff --git a/tests/baselines/reference/constDeclarations-scopes.js b/tests/baselines/reference/constDeclarations-scopes.js index 800dd856422ea..aa1d59aee811e 100644 --- a/tests/baselines/reference/constDeclarations-scopes.js +++ b/tests/baselines/reference/constDeclarations-scopes.js @@ -265,7 +265,7 @@ var C = (function () { })(); // object literals var o = { - f: function () { + f() { const c = 0; n = c; }, diff --git a/tests/baselines/reference/constDeclarations-validContexts.js b/tests/baselines/reference/constDeclarations-validContexts.js index 355f39af2f2f9..8be43633d7071 100644 --- a/tests/baselines/reference/constDeclarations-validContexts.js +++ b/tests/baselines/reference/constDeclarations-validContexts.js @@ -220,7 +220,7 @@ var C = (function () { })(); // object literals var o = { - f: function () { + f() { const c28 = 0; }, f2: function () { diff --git a/tests/baselines/reference/contextualTypeAny.types b/tests/baselines/reference/contextualTypeAny.types index c95bfd70ecfdb..b21c3748edabd 100644 --- a/tests/baselines/reference/contextualTypeAny.types +++ b/tests/baselines/reference/contextualTypeAny.types @@ -3,7 +3,7 @@ var x: any; >x : any var obj: { [s: string]: number } = { p: "", q: x }; ->obj : { [x: string]: number; } +>obj : { [s: string]: number; } >s : string >{ p: "", q: x } : { [x: string]: any; p: string; q: any; } >p : string diff --git a/tests/baselines/reference/contextualTypingOfObjectLiterals.errors.txt b/tests/baselines/reference/contextualTypingOfObjectLiterals.errors.txt index b388d1b0e4afe..5d41b312f727f 100644 --- a/tests/baselines/reference/contextualTypingOfObjectLiterals.errors.txt +++ b/tests/baselines/reference/contextualTypingOfObjectLiterals.errors.txt @@ -1,6 +1,6 @@ tests/cases/compiler/contextualTypingOfObjectLiterals.ts(4,1): error TS2322: Type '{ x: string; }' is not assignable to type '{ [x: string]: string; }'. Index signature is missing in type '{ x: string; }'. -tests/cases/compiler/contextualTypingOfObjectLiterals.ts(10,3): error TS2345: Argument of type '{ x: string; }' is not assignable to parameter of type '{ [x: string]: string; }'. +tests/cases/compiler/contextualTypingOfObjectLiterals.ts(10,3): error TS2345: Argument of type '{ x: string; }' is not assignable to parameter of type '{ [s: string]: string; }'. ==== tests/cases/compiler/contextualTypingOfObjectLiterals.ts (2 errors) ==== @@ -18,4 +18,4 @@ tests/cases/compiler/contextualTypingOfObjectLiterals.ts(10,3): error TS2345: Ar f(obj1); // Ok f(obj2); // Error - indexer doesn't match ~~~~ -!!! error TS2345: Argument of type '{ x: string; }' is not assignable to parameter of type '{ [x: string]: string; }'. \ No newline at end of file +!!! error TS2345: Argument of type '{ x: string; }' is not assignable to parameter of type '{ [s: string]: string; }'. \ No newline at end of file diff --git a/tests/baselines/reference/declFileTypeAnnotationTypeLiteral.types b/tests/baselines/reference/declFileTypeAnnotationTypeLiteral.types index 432ee1506fa07..30d14b77286ac 100644 --- a/tests/baselines/reference/declFileTypeAnnotationTypeLiteral.types +++ b/tests/baselines/reference/declFileTypeAnnotationTypeLiteral.types @@ -17,7 +17,7 @@ module m { // Object literal with everything var x: { ->x : { (a: number): c; (a: string): g; new (a: number): c; new (a: string): m.c; [x: string]: c; [x: number]: c; a: c; b: g; m1(): g; m2(a: string, b?: number, ...c: c[]): string; } +>x : { (a: number): c; (a: string): g; new (a: number): c; new (a: string): m.c; [n: string]: c; [n: number]: c; a: c; b: g; m1(): g; m2(a: string, b?: number, ...c: c[]): string; } // Call signatures (a: number): c; diff --git a/tests/baselines/reference/declareModifierOnImport1.errors.txt b/tests/baselines/reference/declareModifierOnImport1.errors.txt new file mode 100644 index 0000000000000..e78b4973aa1b0 --- /dev/null +++ b/tests/baselines/reference/declareModifierOnImport1.errors.txt @@ -0,0 +1,10 @@ +tests/cases/compiler/declareModifierOnImport1.ts(1,1): error TS1079: A 'declare' modifier cannot be used with an import declaration. +tests/cases/compiler/declareModifierOnImport1.ts(1,1): error TS2304: Cannot find name 'b'. + + +==== tests/cases/compiler/declareModifierOnImport1.ts (2 errors) ==== + declare import a = b; + ~~~~~~~ +!!! error TS1079: A 'declare' modifier cannot be used with an import declaration. + ~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2304: Cannot find name 'b'. \ No newline at end of file diff --git a/tests/baselines/reference/extendingClassFromAliasAndUsageInIndexer.types b/tests/baselines/reference/extendingClassFromAliasAndUsageInIndexer.types index 991d324e822a0..6525f201f5bfe 100644 --- a/tests/baselines/reference/extendingClassFromAliasAndUsageInIndexer.types +++ b/tests/baselines/reference/extendingClassFromAliasAndUsageInIndexer.types @@ -22,7 +22,7 @@ var moduleATyped: IHasVisualizationModel = moduleA; >moduleA : typeof moduleA var moduleMap: { [key: string]: IHasVisualizationModel } = { ->moduleMap : { [x: string]: IHasVisualizationModel; } +>moduleMap : { [key: string]: IHasVisualizationModel; } >key : string >IHasVisualizationModel : IHasVisualizationModel >{ "moduleA": moduleA, "moduleB": moduleB} : { [x: string]: typeof moduleA; "moduleA": typeof moduleA; "moduleB": typeof moduleB; } @@ -42,7 +42,7 @@ var visModel = new moduleMap[moduleName].VisualizationModel(); >new moduleMap[moduleName].VisualizationModel() : Backbone.Model >moduleMap[moduleName].VisualizationModel : typeof Backbone.Model >moduleMap[moduleName] : IHasVisualizationModel ->moduleMap : { [x: string]: IHasVisualizationModel; } +>moduleMap : { [key: string]: IHasVisualizationModel; } >moduleName : string >VisualizationModel : typeof Backbone.Model diff --git a/tests/baselines/reference/generatedContextualTyping.types b/tests/baselines/reference/generatedContextualTyping.types index 79787f6d99486..423c5d6653b8a 100644 --- a/tests/baselines/reference/generatedContextualTyping.types +++ b/tests/baselines/reference/generatedContextualTyping.types @@ -97,7 +97,7 @@ var x8: Array = [d1, d2]; >d2 : Derived2 var x9: { [n: number]: Base; } = [d1, d2]; ->x9 : { [x: number]: Base; } +>x9 : { [n: number]: Base; } >n : number >Base : Base >[d1, d2] : (Derived1 | Derived2)[] @@ -210,7 +210,7 @@ class x20 { member: Array = [d1, d2] } class x21 { member: { [n: number]: Base; } = [d1, d2] } >x21 : x21 ->member : { [x: number]: Base; } +>member : { [n: number]: Base; } >n : number >Base : Base >[d1, d2] : (Derived1 | Derived2)[] @@ -326,7 +326,7 @@ class x32 { private member: Array = [d1, d2] } class x33 { private member: { [n: number]: Base; } = [d1, d2] } >x33 : x33 ->member : { [x: number]: Base; } +>member : { [n: number]: Base; } >n : number >Base : Base >[d1, d2] : (Derived1 | Derived2)[] @@ -442,7 +442,7 @@ class x44 { public member: Array = [d1, d2] } class x45 { public member: { [n: number]: Base; } = [d1, d2] } >x45 : x45 ->member : { [x: number]: Base; } +>member : { [n: number]: Base; } >n : number >Base : Base >[d1, d2] : (Derived1 | Derived2)[] @@ -558,7 +558,7 @@ class x56 { static member: Array = [d1, d2] } class x57 { static member: { [n: number]: Base; } = [d1, d2] } >x57 : x57 ->member : { [x: number]: Base; } +>member : { [n: number]: Base; } >n : number >Base : Base >[d1, d2] : (Derived1 | Derived2)[] @@ -674,7 +674,7 @@ class x68 { private static member: Array = [d1, d2] } class x69 { private static member: { [n: number]: Base; } = [d1, d2] } >x69 : x69 ->member : { [x: number]: Base; } +>member : { [n: number]: Base; } >n : number >Base : Base >[d1, d2] : (Derived1 | Derived2)[] @@ -790,7 +790,7 @@ class x80 { public static member: Array = [d1, d2] } class x81 { public static member: { [n: number]: Base; } = [d1, d2] } >x81 : x81 ->member : { [x: number]: Base; } +>member : { [n: number]: Base; } >n : number >Base : Base >[d1, d2] : (Derived1 | Derived2)[] @@ -906,7 +906,7 @@ class x92 { constructor(parm: Array = [d1, d2]) { } } class x93 { constructor(parm: { [n: number]: Base; } = [d1, d2]) { } } >x93 : x93 ->parm : { [x: number]: Base; } +>parm : { [n: number]: Base; } >n : number >Base : Base >[d1, d2] : (Derived1 | Derived2)[] @@ -1022,7 +1022,7 @@ class x104 { constructor(public parm: Array = [d1, d2]) { } } class x105 { constructor(public parm: { [n: number]: Base; } = [d1, d2]) { } } >x105 : x105 ->parm : { [x: number]: Base; } +>parm : { [n: number]: Base; } >n : number >Base : Base >[d1, d2] : (Derived1 | Derived2)[] @@ -1138,7 +1138,7 @@ class x116 { constructor(private parm: Array = [d1, d2]) { } } class x117 { constructor(private parm: { [n: number]: Base; } = [d1, d2]) { } } >x117 : x117 ->parm : { [x: number]: Base; } +>parm : { [n: number]: Base; } >n : number >Base : Base >[d1, d2] : (Derived1 | Derived2)[] @@ -1253,8 +1253,8 @@ function x128(parm: Array = [d1, d2]) { } >d2 : Derived2 function x129(parm: { [n: number]: Base; } = [d1, d2]) { } ->x129 : (parm?: { [x: number]: Base; }) => void ->parm : { [x: number]: Base; } +>x129 : (parm?: { [n: number]: Base; }) => void +>parm : { [n: number]: Base; } >n : number >Base : Base >[d1, d2] : (Derived1 | Derived2)[] @@ -1361,7 +1361,7 @@ function x140(): Array { return [d1, d2]; } >d2 : Derived2 function x141(): { [n: number]: Base; } { return [d1, d2]; } ->x141 : () => { [x: number]: Base; } +>x141 : () => { [n: number]: Base; } >n : number >Base : Base >[d1, d2] : (Derived1 | Derived2)[] @@ -1497,7 +1497,7 @@ function x152(): Array { return [d1, d2]; return [d1, d2]; } >d2 : Derived2 function x153(): { [n: number]: Base; } { return [d1, d2]; return [d1, d2]; } ->x153 : () => { [x: number]: Base; } +>x153 : () => { [n: number]: Base; } >n : number >Base : Base >[d1, d2] : (Derived1 | Derived2)[] @@ -1628,7 +1628,7 @@ var x164: () => Array = () => { return [d1, d2]; }; >d2 : Derived2 var x165: () => { [n: number]: Base; } = () => { return [d1, d2]; }; ->x165 : () => { [x: number]: Base; } +>x165 : () => { [n: number]: Base; } >n : number >Base : Base >() => { return [d1, d2]; } : () => (Derived1 | Derived2)[] @@ -1744,7 +1744,7 @@ var x176: () => Array = function() { return [d1, d2]; }; >d2 : Derived2 var x177: () => { [n: number]: Base; } = function() { return [d1, d2]; }; ->x177 : () => { [x: number]: Base; } +>x177 : () => { [n: number]: Base; } >n : number >Base : Base >function() { return [d1, d2]; } : () => (Derived1 | Derived2)[] @@ -1861,7 +1861,7 @@ module x188 { var t: Array = [d1, d2]; } module x189 { var t: { [n: number]: Base; } = [d1, d2]; } >x189 : typeof x189 ->t : { [x: number]: Base; } +>t : { [n: number]: Base; } >n : number >Base : Base >[d1, d2] : (Derived1 | Derived2)[] @@ -1977,7 +1977,7 @@ module x200 { export var t: Array = [d1, d2]; } module x201 { export var t: { [n: number]: Base; } = [d1, d2]; } >x201 : typeof x201 ->t : { [x: number]: Base; } +>t : { [n: number]: Base; } >n : number >Base : Base >[d1, d2] : (Derived1 | Derived2)[] @@ -2074,8 +2074,8 @@ var x212 = >[d1, d2]; >d2 : Derived2 var x213 = <{ [n: number]: Base; }>[d1, d2]; ->x213 : { [x: number]: Base; } -><{ [n: number]: Base; }>[d1, d2] : { [x: number]: Base; } +>x213 : { [n: number]: Base; } +><{ [n: number]: Base; }>[d1, d2] : { [n: number]: Base; } >n : number >Base : Base >[d1, d2] : (Derived1 | Derived2)[] @@ -2180,10 +2180,10 @@ var x222 = (>undefined) || [d1, d2]; >d2 : Derived2 var x223 = (<{ [n: number]: Base; }>undefined) || [d1, d2]; ->x223 : { [x: number]: Base; } ->(<{ [n: number]: Base; }>undefined) || [d1, d2] : { [x: number]: Base; } ->(<{ [n: number]: Base; }>undefined) : { [x: number]: Base; } -><{ [n: number]: Base; }>undefined : { [x: number]: Base; } +>x223 : { [n: number]: Base; } +>(<{ [n: number]: Base; }>undefined) || [d1, d2] : { [n: number]: Base; } +>(<{ [n: number]: Base; }>undefined) : { [n: number]: Base; } +><{ [n: number]: Base; }>undefined : { [n: number]: Base; } >n : number >Base : Base >undefined : undefined @@ -2287,11 +2287,11 @@ var x232: Array; x232 = [d1, d2]; >d2 : Derived2 var x233: { [n: number]: Base; }; x233 = [d1, d2]; ->x233 : { [x: number]: Base; } +>x233 : { [n: number]: Base; } >n : number >Base : Base >x233 = [d1, d2] : (Derived1 | Derived2)[] ->x233 : { [x: number]: Base; } +>x233 : { [n: number]: Base; } >[d1, d2] : (Derived1 | Derived2)[] >d1 : Derived1 >d2 : Derived2 @@ -2423,8 +2423,8 @@ var x244: { n: Array; } = { n: [d1, d2] }; >d2 : Derived2 var x245: { n: { [n: number]: Base; }; } = { n: [d1, d2] }; ->x245 : { n: { [x: number]: Base; }; } ->n : { [x: number]: Base; } +>x245 : { n: { [n: number]: Base; }; } +>n : { [n: number]: Base; } >n : number >Base : Base >{ n: [d1, d2] } : { n: (Derived1 | Derived2)[]; } @@ -2519,7 +2519,7 @@ var x256: Array[] = [[d1, d2]]; >d2 : Derived2 var x257: { [n: number]: Base; }[] = [[d1, d2]]; ->x257 : { [x: number]: Base; }[] +>x257 : { [n: number]: Base; }[] >n : number >Base : Base >[[d1, d2]] : (Derived1 | Derived2)[][] @@ -2613,7 +2613,7 @@ var x266: Array = [d1, d2] || undefined; >undefined : undefined var x267: { [n: number]: Base; } = [d1, d2] || undefined; ->x267 : { [x: number]: Base; } +>x267 : { [n: number]: Base; } >n : number >Base : Base >[d1, d2] || undefined : (Derived1 | Derived2)[] @@ -2696,7 +2696,7 @@ var x274: Array = undefined || [d1, d2]; >d2 : Derived2 var x275: { [n: number]: Base; } = undefined || [d1, d2]; ->x275 : { [x: number]: Base; } +>x275 : { [n: number]: Base; } >n : number >Base : Base >undefined || [d1, d2] : (Derived1 | Derived2)[] @@ -2797,7 +2797,7 @@ var x282: Array = [d1, d2] || [d1, d2]; >d2 : Derived2 var x283: { [n: number]: Base; } = [d1, d2] || [d1, d2]; ->x283 : { [x: number]: Base; } +>x283 : { [n: number]: Base; } >n : number >Base : Base >[d1, d2] || [d1, d2] : (Derived1 | Derived2)[] @@ -2930,7 +2930,7 @@ var x292: Array = true ? [d1, d2] : [d1, d2]; >d2 : Derived2 var x293: { [n: number]: Base; } = true ? [d1, d2] : [d1, d2]; ->x293 : { [x: number]: Base; } +>x293 : { [n: number]: Base; } >n : number >Base : Base >true ? [d1, d2] : [d1, d2] : (Derived1 | Derived2)[] @@ -3073,7 +3073,7 @@ var x304: Array = true ? undefined : [d1, d2]; >d2 : Derived2 var x305: { [n: number]: Base; } = true ? undefined : [d1, d2]; ->x305 : { [x: number]: Base; } +>x305 : { [n: number]: Base; } >n : number >Base : Base >true ? undefined : [d1, d2] : (Derived1 | Derived2)[] @@ -3201,7 +3201,7 @@ var x316: Array = true ? [d1, d2] : undefined; >undefined : undefined var x317: { [n: number]: Base; } = true ? [d1, d2] : undefined; ->x317 : { [x: number]: Base; } +>x317 : { [n: number]: Base; } >n : number >Base : Base >true ? [d1, d2] : undefined : (Derived1 | Derived2)[] @@ -3337,12 +3337,12 @@ function x328(n: Array) { }; x328([d1, d2]); >d2 : Derived2 function x329(n: { [n: number]: Base; }) { }; x329([d1, d2]); ->x329 : (n: { [x: number]: Base; }) => void ->n : { [x: number]: Base; } +>x329 : (n: { [n: number]: Base; }) => void +>n : { [n: number]: Base; } >n : number >Base : Base >x329([d1, d2]) : void ->x329 : (n: { [x: number]: Base; }) => void +>x329 : (n: { [n: number]: Base; }) => void >[d1, d2] : (Derived1 | Derived2)[] >d1 : Derived1 >d2 : Derived2 @@ -3493,14 +3493,14 @@ var x340 = (n: Array) => n; x340([d1, d2]); >d2 : Derived2 var x341 = (n: { [n: number]: Base; }) => n; x341([d1, d2]); ->x341 : (n: { [x: number]: Base; }) => { [x: number]: Base; } ->(n: { [n: number]: Base; }) => n : (n: { [x: number]: Base; }) => { [x: number]: Base; } ->n : { [x: number]: Base; } +>x341 : (n: { [n: number]: Base; }) => { [n: number]: Base; } +>(n: { [n: number]: Base; }) => n : (n: { [n: number]: Base; }) => { [n: number]: Base; } +>n : { [n: number]: Base; } >n : number >Base : Base ->n : { [x: number]: Base; } ->x341([d1, d2]) : { [x: number]: Base; } ->x341 : (n: { [x: number]: Base; }) => { [x: number]: Base; } +>n : { [n: number]: Base; } +>x341([d1, d2]) : { [n: number]: Base; } +>x341 : (n: { [n: number]: Base; }) => { [n: number]: Base; } >[d1, d2] : (Derived1 | Derived2)[] >d1 : Derived1 >d2 : Derived2 @@ -3649,13 +3649,13 @@ var x352 = function(n: Array) { }; x352([d1, d2]); >d2 : Derived2 var x353 = function(n: { [n: number]: Base; }) { }; x353([d1, d2]); ->x353 : (n: { [x: number]: Base; }) => void ->function(n: { [n: number]: Base; }) { } : (n: { [x: number]: Base; }) => void ->n : { [x: number]: Base; } +>x353 : (n: { [n: number]: Base; }) => void +>function(n: { [n: number]: Base; }) { } : (n: { [n: number]: Base; }) => void +>n : { [n: number]: Base; } >n : number >Base : Base >x353([d1, d2]) : void ->x353 : (n: { [x: number]: Base; }) => void +>x353 : (n: { [n: number]: Base; }) => void >[d1, d2] : (Derived1 | Derived2)[] >d1 : Derived1 >d2 : Derived2 diff --git a/tests/baselines/reference/genericBaseClassLiteralProperty2.types b/tests/baselines/reference/genericBaseClassLiteralProperty2.types index 9caa45b8b8f71..2ade6437fe7bd 100644 --- a/tests/baselines/reference/genericBaseClassLiteralProperty2.types +++ b/tests/baselines/reference/genericBaseClassLiteralProperty2.types @@ -8,16 +8,16 @@ class BaseCollection2 { >CollectionItem2 : CollectionItem2 _itemsByKey: { [key: string]: TItem; }; ->_itemsByKey : { [x: string]: TItem; } +>_itemsByKey : { [key: string]: TItem; } >key : string >TItem : TItem constructor() { this._itemsByKey = {}; >this._itemsByKey = {} : { [x: string]: undefined; } ->this._itemsByKey : { [x: string]: TItem; } +>this._itemsByKey : { [key: string]: TItem; } >this : BaseCollection2 ->_itemsByKey : { [x: string]: TItem; } +>_itemsByKey : { [key: string]: TItem; } >{} : { [x: string]: undefined; } } } @@ -35,9 +35,9 @@ class DataView2 extends BaseCollection2 { this._itemsByKey['dummy'] = item; >this._itemsByKey['dummy'] = item : CollectionItem2 >this._itemsByKey['dummy'] : CollectionItem2 ->this._itemsByKey : { [x: string]: CollectionItem2; } +>this._itemsByKey : { [key: string]: CollectionItem2; } >this : DataView2 ->_itemsByKey : { [x: string]: CollectionItem2; } +>_itemsByKey : { [key: string]: CollectionItem2; } >item : CollectionItem2 } } diff --git a/tests/baselines/reference/genericCallWithoutArgs.errors.txt b/tests/baselines/reference/genericCallWithoutArgs.errors.txt index 390fad3138906..9d2ca3c1b8350 100644 --- a/tests/baselines/reference/genericCallWithoutArgs.errors.txt +++ b/tests/baselines/reference/genericCallWithoutArgs.errors.txt @@ -1,19 +1,13 @@ -tests/cases/compiler/genericCallWithoutArgs.ts(4,17): error TS1109: Expression expected. -tests/cases/compiler/genericCallWithoutArgs.ts(4,18): error TS1003: Identifier expected. -tests/cases/compiler/genericCallWithoutArgs.ts(4,3): error TS2304: Cannot find name 'number'. -tests/cases/compiler/genericCallWithoutArgs.ts(4,10): error TS2304: Cannot find name 'string'. +tests/cases/compiler/genericCallWithoutArgs.ts(4,17): error TS1005: '(' expected. +tests/cases/compiler/genericCallWithoutArgs.ts(4,18): error TS1005: ')' expected. -==== tests/cases/compiler/genericCallWithoutArgs.ts (4 errors) ==== +==== tests/cases/compiler/genericCallWithoutArgs.ts (2 errors) ==== function f(x: X, y: Y) { } f. ~ -!!! error TS1109: Expression expected. +!!! error TS1005: '(' expected. -!!! error TS1003: Identifier expected. - ~~~~~~ -!!! error TS2304: Cannot find name 'number'. - ~~~~~~ -!!! error TS2304: Cannot find name 'string'. \ No newline at end of file +!!! error TS1005: ')' expected. \ No newline at end of file diff --git a/tests/baselines/reference/genericCallsWithoutParens.errors.txt b/tests/baselines/reference/genericCallsWithoutParens.errors.txt index aba66ed545f4c..9883efb378338 100644 --- a/tests/baselines/reference/genericCallsWithoutParens.errors.txt +++ b/tests/baselines/reference/genericCallsWithoutParens.errors.txt @@ -1,24 +1,18 @@ -tests/cases/compiler/genericCallsWithoutParens.ts(2,18): error TS1109: Expression expected. -tests/cases/compiler/genericCallsWithoutParens.ts(7,22): error TS1109: Expression expected. -tests/cases/compiler/genericCallsWithoutParens.ts(2,11): error TS2304: Cannot find name 'number'. -tests/cases/compiler/genericCallsWithoutParens.ts(7,15): error TS2304: Cannot find name 'number'. +tests/cases/compiler/genericCallsWithoutParens.ts(2,18): error TS1005: '(' expected. +tests/cases/compiler/genericCallsWithoutParens.ts(7,22): error TS1005: '(' expected. -==== tests/cases/compiler/genericCallsWithoutParens.ts (4 errors) ==== +==== tests/cases/compiler/genericCallsWithoutParens.ts (2 errors) ==== function f() { } var r = f; // parse error ~ -!!! error TS1109: Expression expected. - ~~~~~~ -!!! error TS2304: Cannot find name 'number'. +!!! error TS1005: '(' expected. class C { foo: T; } var c = new C; // parse error ~ -!!! error TS1109: Expression expected. - ~~~~~~ -!!! error TS2304: Cannot find name 'number'. +!!! error TS1005: '(' expected. \ No newline at end of file diff --git a/tests/baselines/reference/genericConstructExpressionWithoutArgs.errors.txt b/tests/baselines/reference/genericConstructExpressionWithoutArgs.errors.txt index e89bf106ff4a8..2f16241aa6c11 100644 --- a/tests/baselines/reference/genericConstructExpressionWithoutArgs.errors.txt +++ b/tests/baselines/reference/genericConstructExpressionWithoutArgs.errors.txt @@ -1,8 +1,7 @@ -tests/cases/compiler/genericConstructExpressionWithoutArgs.ts(10,1): error TS1109: Expression expected. -tests/cases/compiler/genericConstructExpressionWithoutArgs.ts(9,16): error TS2304: Cannot find name 'number'. +tests/cases/compiler/genericConstructExpressionWithoutArgs.ts(10,1): error TS1005: '(' expected. -==== tests/cases/compiler/genericConstructExpressionWithoutArgs.ts (2 errors) ==== +==== tests/cases/compiler/genericConstructExpressionWithoutArgs.ts (1 errors) ==== class B { } var b = new B; // no error @@ -12,8 +11,6 @@ tests/cases/compiler/genericConstructExpressionWithoutArgs.ts(9,16): error TS230 var c = new C // C var c2 = new C // error, type params are actually part of the arg list so you need both - ~~~~~~ -!!! error TS2304: Cannot find name 'number'. -!!! error TS1109: Expression expected. \ No newline at end of file +!!! error TS1005: '(' expected. \ No newline at end of file diff --git a/tests/baselines/reference/genericObjectCreationWithoutTypeArgs.errors.txt b/tests/baselines/reference/genericObjectCreationWithoutTypeArgs.errors.txt index 3224d577fd2fa..825fec7fa72ee 100644 --- a/tests/baselines/reference/genericObjectCreationWithoutTypeArgs.errors.txt +++ b/tests/baselines/reference/genericObjectCreationWithoutTypeArgs.errors.txt @@ -1,8 +1,7 @@ -tests/cases/compiler/genericObjectCreationWithoutTypeArgs.ts(6,26): error TS1109: Expression expected. -tests/cases/compiler/genericObjectCreationWithoutTypeArgs.ts(6,19): error TS2304: Cannot find name 'number'. +tests/cases/compiler/genericObjectCreationWithoutTypeArgs.ts(6,26): error TS1005: '(' expected. -==== tests/cases/compiler/genericObjectCreationWithoutTypeArgs.ts (2 errors) ==== +==== tests/cases/compiler/genericObjectCreationWithoutTypeArgs.ts (1 errors) ==== class SS{ } @@ -10,9 +9,7 @@ tests/cases/compiler/genericObjectCreationWithoutTypeArgs.ts(6,19): error TS2304 var x1 = new SS(); // OK var x2 = new SS < number>; // Correctly give error ~ -!!! error TS1109: Expression expected. - ~~~~~~ -!!! error TS2304: Cannot find name 'number'. +!!! error TS1005: '(' expected. var x3 = new SS(); // OK var x4 = new SS; // Should be allowed, but currently give error ('supplied parameters do not match any signature of the call target') \ No newline at end of file diff --git a/tests/baselines/reference/genericWithIndexerOfTypeParameterType1.types b/tests/baselines/reference/genericWithIndexerOfTypeParameterType1.types index f0cab6e74672b..ef42c1c6029e5 100644 --- a/tests/baselines/reference/genericWithIndexerOfTypeParameterType1.types +++ b/tests/baselines/reference/genericWithIndexerOfTypeParameterType1.types @@ -4,19 +4,19 @@ class LazyArray { >T : T private objects = <{ [objectId: string]: T; }>{}; ->objects : { [x: string]: T; } -><{ [objectId: string]: T; }>{} : { [x: string]: T; } +>objects : { [objectId: string]: T; } +><{ [objectId: string]: T; }>{} : { [objectId: string]: T; } >objectId : string >T : T >{} : { [x: string]: undefined; } array() { ->array : () => { [x: string]: T; } +>array : () => { [objectId: string]: T; } return this.objects; ->this.objects : { [x: string]: T; } +>this.objects : { [objectId: string]: T; } >this : LazyArray ->objects : { [x: string]: T; } +>objects : { [objectId: string]: T; } } } var lazyArray = new LazyArray(); @@ -27,8 +27,8 @@ var lazyArray = new LazyArray(); var value: string = lazyArray.array()["test"]; // used to be an error >value : string >lazyArray.array()["test"] : string ->lazyArray.array() : { [x: string]: string; } ->lazyArray.array : () => { [x: string]: string; } +>lazyArray.array() : { [objectId: string]: string; } +>lazyArray.array : () => { [objectId: string]: string; } >lazyArray : LazyArray ->array : () => { [x: string]: string; } +>array : () => { [objectId: string]: string; } diff --git a/tests/baselines/reference/genericWithIndexerOfTypeParameterType2.types b/tests/baselines/reference/genericWithIndexerOfTypeParameterType2.types index 1de9b6d2aa8ea..e1cdfa85f1304 100644 --- a/tests/baselines/reference/genericWithIndexerOfTypeParameterType2.types +++ b/tests/baselines/reference/genericWithIndexerOfTypeParameterType2.types @@ -5,7 +5,7 @@ export class Collection { >CollectionItem : CollectionItem _itemsByKey: { [key: string]: TItem; }; ->_itemsByKey : { [x: string]: TItem; } +>_itemsByKey : { [key: string]: TItem; } >key : string >TItem : TItem } diff --git a/tests/baselines/reference/indexSignatureWithInitializer1.errors.txt b/tests/baselines/reference/indexSignatureWithInitializer1.errors.txt new file mode 100644 index 0000000000000..899cbd5dda032 --- /dev/null +++ b/tests/baselines/reference/indexSignatureWithInitializer1.errors.txt @@ -0,0 +1,12 @@ +tests/cases/compiler/indexSignatureWithInitializer1.ts(2,4): error TS1020: An index signature parameter cannot have an initializer. +tests/cases/compiler/indexSignatureWithInitializer1.ts(2,4): error TS2371: A parameter initializer is only allowed in a function or constructor implementation. + + +==== tests/cases/compiler/indexSignatureWithInitializer1.ts (2 errors) ==== + class C { + [a: number = 1]: number; + ~ +!!! error TS1020: An index signature parameter cannot have an initializer. + ~~~~~~~~~~~~~ +!!! error TS2371: A parameter initializer is only allowed in a function or constructor implementation. + } \ No newline at end of file diff --git a/tests/baselines/reference/indexSignatureWithoutTypeAnnotation1..js b/tests/baselines/reference/indexSignatureWithoutTypeAnnotation1..js new file mode 100644 index 0000000000000..e500cfc221be2 --- /dev/null +++ b/tests/baselines/reference/indexSignatureWithoutTypeAnnotation1..js @@ -0,0 +1,4 @@ +//// [indexSignatureWithoutTypeAnnotation1..ts] + + +//// [indexSignatureWithoutTypeAnnotation1..js] diff --git a/tests/baselines/reference/indexSignatureWithoutTypeAnnotation1..types b/tests/baselines/reference/indexSignatureWithoutTypeAnnotation1..types new file mode 100644 index 0000000000000..7ab1bd72cd791 --- /dev/null +++ b/tests/baselines/reference/indexSignatureWithoutTypeAnnotation1..types @@ -0,0 +1,3 @@ +=== tests/cases/compiler/indexSignatureWithoutTypeAnnotation1..ts === + +No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/indexSignatureWithoutTypeAnnotation1.errors.txt b/tests/baselines/reference/indexSignatureWithoutTypeAnnotation1.errors.txt new file mode 100644 index 0000000000000..5562005a0b6f8 --- /dev/null +++ b/tests/baselines/reference/indexSignatureWithoutTypeAnnotation1.errors.txt @@ -0,0 +1,9 @@ +tests/cases/compiler/indexSignatureWithoutTypeAnnotation1.ts(2,3): error TS1021: An index signature must have a type annotation. + + +==== tests/cases/compiler/indexSignatureWithoutTypeAnnotation1.ts (1 errors) ==== + class C { + [a: number]; + ~~~~~~~~~~~~ +!!! error TS1021: An index signature must have a type annotation. + } \ No newline at end of file diff --git a/tests/baselines/reference/indexSignaturesInferentialTyping.types b/tests/baselines/reference/indexSignaturesInferentialTyping.types index 4054ccca227b2..9ea5a39049846 100644 --- a/tests/baselines/reference/indexSignaturesInferentialTyping.types +++ b/tests/baselines/reference/indexSignaturesInferentialTyping.types @@ -1,17 +1,17 @@ === tests/cases/compiler/indexSignaturesInferentialTyping.ts === function foo(items: { [index: number]: T }): T { return undefined; } ->foo : (items: { [x: number]: T; }) => T +>foo : (items: { [index: number]: T; }) => T >T : T ->items : { [x: number]: T; } +>items : { [index: number]: T; } >index : number >T : T >T : T >undefined : undefined function bar(items: { [index: string]: T }): T { return undefined; } ->bar : (items: { [x: string]: T; }) => T +>bar : (items: { [index: string]: T; }) => T >T : T ->items : { [x: string]: T; } +>items : { [index: string]: T; } >index : string >T : T >T : T @@ -20,13 +20,13 @@ function bar(items: { [index: string]: T }): T { return undefined; } var x1 = foo({ 0: 0, 1: 1 }); // type should be number >x1 : number >foo({ 0: 0, 1: 1 }) : number ->foo : (items: { [x: number]: T; }) => T +>foo : (items: { [index: number]: T; }) => T >{ 0: 0, 1: 1 } : { [x: number]: number; 0: number; 1: number; } var x2 = foo({ zero: 0, one: 1 }); >x2 : any >foo({ zero: 0, one: 1 }) : any ->foo : (items: { [x: number]: T; }) => T +>foo : (items: { [index: number]: T; }) => T >{ zero: 0, one: 1 } : { [x: number]: undefined; zero: number; one: number; } >zero : number >one : number @@ -34,13 +34,13 @@ var x2 = foo({ zero: 0, one: 1 }); var x3 = bar({ 0: 0, 1: 1 }); >x3 : number >bar({ 0: 0, 1: 1 }) : number ->bar : (items: { [x: string]: T; }) => T +>bar : (items: { [index: string]: T; }) => T >{ 0: 0, 1: 1 } : { [x: string]: number; 0: number; 1: number; } var x4 = bar({ zero: 0, one: 1 }); // type should be number >x4 : number >bar({ zero: 0, one: 1 }) : number ->bar : (items: { [x: string]: T; }) => T +>bar : (items: { [index: string]: T; }) => T >{ zero: 0, one: 1 } : { [x: string]: number; zero: number; one: number; } >zero : number >one : number diff --git a/tests/baselines/reference/indexerAssignability.errors.txt b/tests/baselines/reference/indexerAssignability.errors.txt index 9f28fc1e9e08d..44c2184517eca 100644 --- a/tests/baselines/reference/indexerAssignability.errors.txt +++ b/tests/baselines/reference/indexerAssignability.errors.txt @@ -1,8 +1,8 @@ -tests/cases/compiler/indexerAssignability.ts(5,1): error TS2322: Type '{ [x: number]: string; }' is not assignable to type '{ [x: string]: string; }'. - Index signature is missing in type '{ [x: number]: string; }'. -tests/cases/compiler/indexerAssignability.ts(6,1): error TS2322: Type '{}' is not assignable to type '{ [x: string]: string; }'. +tests/cases/compiler/indexerAssignability.ts(5,1): error TS2322: Type '{ [n: number]: string; }' is not assignable to type '{ [s: string]: string; }'. + Index signature is missing in type '{ [n: number]: string; }'. +tests/cases/compiler/indexerAssignability.ts(6,1): error TS2322: Type '{}' is not assignable to type '{ [s: string]: string; }'. Index signature is missing in type '{}'. -tests/cases/compiler/indexerAssignability.ts(8,1): error TS2322: Type '{}' is not assignable to type '{ [x: number]: string; }'. +tests/cases/compiler/indexerAssignability.ts(8,1): error TS2322: Type '{}' is not assignable to type '{ [n: number]: string; }'. Index signature is missing in type '{}'. @@ -13,16 +13,16 @@ tests/cases/compiler/indexerAssignability.ts(8,1): error TS2322: Type '{}' is no a = b; ~ -!!! error TS2322: Type '{ [x: number]: string; }' is not assignable to type '{ [x: string]: string; }'. -!!! error TS2322: Index signature is missing in type '{ [x: number]: string; }'. +!!! error TS2322: Type '{ [n: number]: string; }' is not assignable to type '{ [s: string]: string; }'. +!!! error TS2322: Index signature is missing in type '{ [n: number]: string; }'. a = c; ~ -!!! error TS2322: Type '{}' is not assignable to type '{ [x: string]: string; }'. +!!! error TS2322: Type '{}' is not assignable to type '{ [s: string]: string; }'. !!! error TS2322: Index signature is missing in type '{}'. b = a; b = c; ~ -!!! error TS2322: Type '{}' is not assignable to type '{ [x: number]: string; }'. +!!! error TS2322: Type '{}' is not assignable to type '{ [n: number]: string; }'. !!! error TS2322: Index signature is missing in type '{}'. c = a; c = b; \ No newline at end of file diff --git a/tests/baselines/reference/indexerReturningTypeParameter1.types b/tests/baselines/reference/indexerReturningTypeParameter1.types index 55155323c84fe..a0a70f95331ab 100644 --- a/tests/baselines/reference/indexerReturningTypeParameter1.types +++ b/tests/baselines/reference/indexerReturningTypeParameter1.types @@ -3,7 +3,7 @@ interface f { >f : f groupBy(): { [key: string]: T[]; }; ->groupBy : () => { [x: string]: T[]; } +>groupBy : () => { [key: string]: T[]; } >T : T >key : string >T : T @@ -13,17 +13,17 @@ var a: f; >f : f var r = a.groupBy(); ->r : { [x: string]: {}[]; } ->a.groupBy() : { [x: string]: {}[]; } ->a.groupBy : () => { [x: string]: T[]; } +>r : { [key: string]: {}[]; } +>a.groupBy() : { [key: string]: {}[]; } +>a.groupBy : () => { [key: string]: T[]; } >a : f ->groupBy : () => { [x: string]: T[]; } +>groupBy : () => { [key: string]: T[]; } class c { >c : c groupBy(): { [key: string]: T[]; } { ->groupBy : () => { [x: string]: T[]; } +>groupBy : () => { [key: string]: T[]; } >T : T >key : string >T : T @@ -36,9 +36,9 @@ var a2: c; >c : c var r2 = a2.groupBy(); ->r2 : { [x: string]: {}[]; } ->a2.groupBy() : { [x: string]: {}[]; } ->a2.groupBy : () => { [x: string]: T[]; } +>r2 : { [key: string]: {}[]; } +>a2.groupBy() : { [key: string]: {}[]; } +>a2.groupBy : () => { [key: string]: T[]; } >a2 : c ->groupBy : () => { [x: string]: T[]; } +>groupBy : () => { [key: string]: T[]; } diff --git a/tests/baselines/reference/invalidUndefinedValues.types b/tests/baselines/reference/invalidUndefinedValues.types index 9cc71b87c8242..3f17deede3704 100644 --- a/tests/baselines/reference/invalidUndefinedValues.types +++ b/tests/baselines/reference/invalidUndefinedValues.types @@ -68,11 +68,10 @@ x = M; >M : typeof M x = { f() { } } ->x = { f() { } } : { f: () => void; } +>x = { f() { } } : { f(): void; } >x : any ->{ f() { } } : { f: () => void; } +>{ f() { } } : { f(): void; } >f : () => void ->f() { } : () => void function f(a: T) { >f : (a: T) => void diff --git a/tests/baselines/reference/invalidVoidAssignments.errors.txt b/tests/baselines/reference/invalidVoidAssignments.errors.txt index 64decc2f5e28c..9c6be972d3b43 100644 --- a/tests/baselines/reference/invalidVoidAssignments.errors.txt +++ b/tests/baselines/reference/invalidVoidAssignments.errors.txt @@ -12,7 +12,7 @@ tests/cases/conformance/types/primitives/void/invalidVoidAssignments.ts(21,5): e tests/cases/conformance/types/primitives/void/invalidVoidAssignments.ts(23,1): error TS2364: Invalid left-hand side of assignment expression. tests/cases/conformance/types/primitives/void/invalidVoidAssignments.ts(26,1): error TS2322: Type 'typeof E' is not assignable to type 'void'. tests/cases/conformance/types/primitives/void/invalidVoidAssignments.ts(27,1): error TS2322: Type 'E' is not assignable to type 'void'. -tests/cases/conformance/types/primitives/void/invalidVoidAssignments.ts(29,1): error TS2322: Type '{ f: () => void; }' is not assignable to type 'void'. +tests/cases/conformance/types/primitives/void/invalidVoidAssignments.ts(29,1): error TS2322: Type '{ f(): void; }' is not assignable to type 'void'. ==== tests/cases/conformance/types/primitives/void/invalidVoidAssignments.ts (13 errors) ==== @@ -72,4 +72,4 @@ tests/cases/conformance/types/primitives/void/invalidVoidAssignments.ts(29,1): e x = { f() { } } ~ -!!! error TS2322: Type '{ f: () => void; }' is not assignable to type 'void'. \ No newline at end of file +!!! error TS2322: Type '{ f(): void; }' is not assignable to type 'void'. \ No newline at end of file diff --git a/tests/baselines/reference/invalidVoidValues.errors.txt b/tests/baselines/reference/invalidVoidValues.errors.txt index b8a4400e4e058..eb5ddd022593e 100644 --- a/tests/baselines/reference/invalidVoidValues.errors.txt +++ b/tests/baselines/reference/invalidVoidValues.errors.txt @@ -5,7 +5,7 @@ tests/cases/conformance/types/primitives/void/invalidVoidValues.ts(7,1): error T tests/cases/conformance/types/primitives/void/invalidVoidValues.ts(8,1): error TS2322: Type 'E' is not assignable to type 'void'. tests/cases/conformance/types/primitives/void/invalidVoidValues.ts(12,1): error TS2322: Type 'C' is not assignable to type 'void'. tests/cases/conformance/types/primitives/void/invalidVoidValues.ts(16,1): error TS2322: Type 'I' is not assignable to type 'void'. -tests/cases/conformance/types/primitives/void/invalidVoidValues.ts(18,1): error TS2322: Type '{ f: () => void; }' is not assignable to type 'void'. +tests/cases/conformance/types/primitives/void/invalidVoidValues.ts(18,1): error TS2322: Type '{ f(): void; }' is not assignable to type 'void'. tests/cases/conformance/types/primitives/void/invalidVoidValues.ts(21,1): error TS2322: Type 'typeof M' is not assignable to type 'void'. tests/cases/conformance/types/primitives/void/invalidVoidValues.ts(24,5): error TS2322: Type 'T' is not assignable to type 'void'. tests/cases/conformance/types/primitives/void/invalidVoidValues.ts(26,1): error TS2322: Type '(a: T) => void' is not assignable to type 'void'. @@ -45,7 +45,7 @@ tests/cases/conformance/types/primitives/void/invalidVoidValues.ts(26,1): error x = { f() {} } ~ -!!! error TS2322: Type '{ f: () => void; }' is not assignable to type 'void'. +!!! error TS2322: Type '{ f(): void; }' is not assignable to type 'void'. module M { export var x = 1; } x = M; diff --git a/tests/baselines/reference/letAsIdentifier.js b/tests/baselines/reference/letAsIdentifier.js new file mode 100644 index 0000000000000..ae45b4b491c76 --- /dev/null +++ b/tests/baselines/reference/letAsIdentifier.js @@ -0,0 +1,19 @@ +//// [letAsIdentifier.ts] + +var let = 10; +var a = 10; +let = 30; +let +a; + +//// [letAsIdentifier.js] +var let = 10; +var a = 10; +let = 30; +let; +a; + + +//// [letAsIdentifier.d.ts] +declare var let: number; +declare var a: number; diff --git a/tests/baselines/reference/letAsIdentifier.types b/tests/baselines/reference/letAsIdentifier.types new file mode 100644 index 0000000000000..95fe2b11ac9ee --- /dev/null +++ b/tests/baselines/reference/letAsIdentifier.types @@ -0,0 +1,18 @@ +=== tests/cases/compiler/letAsIdentifier.ts === + +var let = 10; +>let : number + +var a = 10; +>a : number + +let = 30; +>let = 30 : number +>let : number + +let +>let : number + +a; +>a : number + diff --git a/tests/baselines/reference/letAsIdentifierInStrictMode.errors.txt b/tests/baselines/reference/letAsIdentifierInStrictMode.errors.txt new file mode 100644 index 0000000000000..e332535e23be0 --- /dev/null +++ b/tests/baselines/reference/letAsIdentifierInStrictMode.errors.txt @@ -0,0 +1,30 @@ +tests/cases/compiler/letAsIdentifierInStrictMode.ts(2,5): error TS1134: Variable declaration expected. +tests/cases/compiler/letAsIdentifierInStrictMode.ts(2,9): error TS1134: Variable declaration expected. +tests/cases/compiler/letAsIdentifierInStrictMode.ts(2,11): error TS1134: Variable declaration expected. +tests/cases/compiler/letAsIdentifierInStrictMode.ts(4,5): error TS1134: Variable declaration expected. +tests/cases/compiler/letAsIdentifierInStrictMode.ts(4,7): error TS1134: Variable declaration expected. +tests/cases/compiler/letAsIdentifierInStrictMode.ts(3,5): error TS2300: Duplicate identifier 'a'. +tests/cases/compiler/letAsIdentifierInStrictMode.ts(6,1): error TS2300: Duplicate identifier 'a'. + + +==== tests/cases/compiler/letAsIdentifierInStrictMode.ts (7 errors) ==== + "use strict"; + var let = 10; + ~~~ +!!! error TS1134: Variable declaration expected. + ~ +!!! error TS1134: Variable declaration expected. + ~~ +!!! error TS1134: Variable declaration expected. + var a = 10; + ~ +!!! error TS2300: Duplicate identifier 'a'. + let = 30; + ~ +!!! error TS1134: Variable declaration expected. + ~~ +!!! error TS1134: Variable declaration expected. + let + a; + ~ +!!! error TS2300: Duplicate identifier 'a'. \ No newline at end of file diff --git a/tests/baselines/reference/letDeclarations-scopes.js b/tests/baselines/reference/letDeclarations-scopes.js index fb16a03f569f8..d0f70693d7c07 100644 --- a/tests/baselines/reference/letDeclarations-scopes.js +++ b/tests/baselines/reference/letDeclarations-scopes.js @@ -282,7 +282,7 @@ var C = (function () { })(); // object literals var o = { - f: function () { + f() { let l = 0; n = l; }, diff --git a/tests/baselines/reference/letDeclarations-validContexts.js b/tests/baselines/reference/letDeclarations-validContexts.js index 13eaafb07120d..fe9ed903bf5a1 100644 --- a/tests/baselines/reference/letDeclarations-validContexts.js +++ b/tests/baselines/reference/letDeclarations-validContexts.js @@ -240,7 +240,7 @@ var C = (function () { })(); // object literals var o = { - f: function () { + f() { let l28 = 0; }, f2: function () { diff --git a/tests/baselines/reference/modifierOnParameter1.errors.txt b/tests/baselines/reference/modifierOnParameter1.errors.txt new file mode 100644 index 0000000000000..72ec2aab93a0a --- /dev/null +++ b/tests/baselines/reference/modifierOnParameter1.errors.txt @@ -0,0 +1,9 @@ +tests/cases/compiler/modifierOnParameter1.ts(2,16): error TS1090: 'declare' modifier cannot appear on a parameter. + + +==== tests/cases/compiler/modifierOnParameter1.ts (1 errors) ==== + class C { + constructor(declare p) { } + ~~~~~~~ +!!! error TS1090: 'declare' modifier cannot appear on a parameter. + } \ No newline at end of file diff --git a/tests/baselines/reference/nameCollisionsInPropertyAssignments.types b/tests/baselines/reference/nameCollisionsInPropertyAssignments.types index 1628b67362109..41bcdd99a7149 100644 --- a/tests/baselines/reference/nameCollisionsInPropertyAssignments.types +++ b/tests/baselines/reference/nameCollisionsInPropertyAssignments.types @@ -3,10 +3,9 @@ var x = 1 >x : number var y = { x() { x++; } }; ->y : { x: () => void; } ->{ x() { x++; } } : { x: () => void; } +>y : { x(): void; } +>{ x() { x++; } } : { x(): void; } >x : () => void ->x() { x++; } : () => void >x++ : number >x : number diff --git a/tests/baselines/reference/nestedIndexer.types b/tests/baselines/reference/nestedIndexer.types index 612f6a260b73e..ade8dbbcb66ad 100644 --- a/tests/baselines/reference/nestedIndexer.types +++ b/tests/baselines/reference/nestedIndexer.types @@ -4,7 +4,7 @@ function then(x) { >x : any var match: { [index: number]: string; } ->match : { [x: number]: string; } +>match : { [index: number]: string; } >index : number } diff --git a/tests/baselines/reference/newOperatorErrorCases.errors.txt b/tests/baselines/reference/newOperatorErrorCases.errors.txt index 8b94c902e5031..11a6beb1d3970 100644 --- a/tests/baselines/reference/newOperatorErrorCases.errors.txt +++ b/tests/baselines/reference/newOperatorErrorCases.errors.txt @@ -1,10 +1,9 @@ tests/cases/conformance/expressions/newOperator/newOperatorErrorCases.ts(27,16): error TS1005: ',' expected. -tests/cases/conformance/expressions/newOperator/newOperatorErrorCases.ts(32,23): error TS1109: Expression expected. -tests/cases/conformance/expressions/newOperator/newOperatorErrorCases.ts(32,16): error TS2304: Cannot find name 'string'. +tests/cases/conformance/expressions/newOperator/newOperatorErrorCases.ts(32,23): error TS1005: '(' expected. tests/cases/conformance/expressions/newOperator/newOperatorErrorCases.ts(37,9): error TS2350: Only a void function can be called with the 'new' keyword. -==== tests/cases/conformance/expressions/newOperator/newOperatorErrorCases.ts (4 errors) ==== +==== tests/cases/conformance/expressions/newOperator/newOperatorErrorCases.ts (3 errors) ==== class C0 { @@ -40,9 +39,7 @@ tests/cases/conformance/expressions/newOperator/newOperatorErrorCases.ts(37,9): var c1: T<{}>; var c2 = new T; // Parse error ~ -!!! error TS1109: Expression expected. - ~~~~~~ -!!! error TS2304: Cannot find name 'string'. +!!! error TS1005: '(' expected. // Construct expression of non-void returning function diff --git a/tests/baselines/reference/numericIndexerConstrainsPropertyDeclarations.errors.txt b/tests/baselines/reference/numericIndexerConstrainsPropertyDeclarations.errors.txt index 19f2c700ccf55..bd9a0bcbc9348 100644 --- a/tests/baselines/reference/numericIndexerConstrainsPropertyDeclarations.errors.txt +++ b/tests/baselines/reference/numericIndexerConstrainsPropertyDeclarations.errors.txt @@ -7,7 +7,7 @@ tests/cases/conformance/types/objectTypeLiteral/indexSignatures/numericIndexerCo tests/cases/conformance/types/objectTypeLiteral/indexSignatures/numericIndexerConstrainsPropertyDeclarations.ts(21,5): error TS2412: Property '3.0' of type 'MyNumber' is not assignable to numeric index type 'string'. tests/cases/conformance/types/objectTypeLiteral/indexSignatures/numericIndexerConstrainsPropertyDeclarations.ts(50,5): error TS2412: Property '2.0' of type 'number' is not assignable to numeric index type 'string'. tests/cases/conformance/types/objectTypeLiteral/indexSignatures/numericIndexerConstrainsPropertyDeclarations.ts(68,5): error TS2412: Property '2.0' of type 'number' is not assignable to numeric index type 'string'. -tests/cases/conformance/types/objectTypeLiteral/indexSignatures/numericIndexerConstrainsPropertyDeclarations.ts(78,5): error TS2322: Type '{ [x: number]: string | number; 1.0: string; 2.0: number; a: string; b: number; c: () => void; "d": string; "e": number; "3.0": string; "4.0": number; f: any; X: string; foo: () => string; }' is not assignable to type '{ [x: number]: string; }'. +tests/cases/conformance/types/objectTypeLiteral/indexSignatures/numericIndexerConstrainsPropertyDeclarations.ts(78,5): error TS2322: Type '{ [x: number]: string | number; 1.0: string; 2.0: number; a: string; b: number; c: () => void; "d": string; "e": number; "3.0": string; "4.0": number; f: any; X: string; foo(): string; }' is not assignable to type '{ [x: number]: string; }'. Index signatures are incompatible. Type 'string | number' is not assignable to type 'string'. Type 'number' is not assignable to type 'string'. @@ -108,7 +108,7 @@ tests/cases/conformance/types/objectTypeLiteral/indexSignatures/numericIndexerCo // error var b: { [x: number]: string; } = { ~ -!!! error TS2322: Type '{ [x: number]: string | number; 1.0: string; 2.0: number; a: string; b: number; c: () => void; "d": string; "e": number; "3.0": string; "4.0": number; f: any; X: string; foo: () => string; }' is not assignable to type '{ [x: number]: string; }'. +!!! error TS2322: Type '{ [x: number]: string | number; 1.0: string; 2.0: number; a: string; b: number; c: () => void; "d": string; "e": number; "3.0": string; "4.0": number; f: any; X: string; foo(): string; }' is not assignable to type '{ [x: number]: string; }'. !!! error TS2322: Index signatures are incompatible. !!! error TS2322: Type 'string | number' is not assignable to type 'string'. !!! error TS2322: Type 'number' is not assignable to type 'string'. diff --git a/tests/baselines/reference/numericIndexerConstraint2.errors.txt b/tests/baselines/reference/numericIndexerConstraint2.errors.txt index 4260f60becfa6..385efbcead2ab 100644 --- a/tests/baselines/reference/numericIndexerConstraint2.errors.txt +++ b/tests/baselines/reference/numericIndexerConstraint2.errors.txt @@ -1,4 +1,4 @@ -tests/cases/compiler/numericIndexerConstraint2.ts(4,1): error TS2322: Type '{ one: number; }' is not assignable to type '{ [x: string]: Foo; }'. +tests/cases/compiler/numericIndexerConstraint2.ts(4,1): error TS2322: Type '{ one: number; }' is not assignable to type '{ [index: string]: Foo; }'. Index signature is missing in type '{ one: number; }'. @@ -8,5 +8,5 @@ tests/cases/compiler/numericIndexerConstraint2.ts(4,1): error TS2322: Type '{ on var a: { one: number; }; x = a; ~ -!!! error TS2322: Type '{ one: number; }' is not assignable to type '{ [x: string]: Foo; }'. +!!! error TS2322: Type '{ one: number; }' is not assignable to type '{ [index: string]: Foo; }'. !!! error TS2322: Index signature is missing in type '{ one: number; }'. \ No newline at end of file diff --git a/tests/baselines/reference/numericIndexerConstraint4.types b/tests/baselines/reference/numericIndexerConstraint4.types index 78b57d4179ee5..97e72b5088d93 100644 --- a/tests/baselines/reference/numericIndexerConstraint4.types +++ b/tests/baselines/reference/numericIndexerConstraint4.types @@ -15,7 +15,7 @@ class B extends A { } var x: { ->x : { [x: number]: A; } +>x : { [idx: number]: A; } [idx: number]: A; >idx : number diff --git a/tests/baselines/reference/numericIndexerConstraint5.errors.txt b/tests/baselines/reference/numericIndexerConstraint5.errors.txt index 445fc771218b7..98acc65eeb73c 100644 --- a/tests/baselines/reference/numericIndexerConstraint5.errors.txt +++ b/tests/baselines/reference/numericIndexerConstraint5.errors.txt @@ -1,4 +1,4 @@ -tests/cases/compiler/numericIndexerConstraint5.ts(2,5): error TS2322: Type '{ 0: Date; name: string; }' is not assignable to type '{ [x: number]: string; }'. +tests/cases/compiler/numericIndexerConstraint5.ts(2,5): error TS2322: Type '{ 0: Date; name: string; }' is not assignable to type '{ [name: number]: string; }'. Index signature is missing in type '{ 0: Date; name: string; }'. @@ -6,5 +6,5 @@ tests/cases/compiler/numericIndexerConstraint5.ts(2,5): error TS2322: Type '{ 0: var x = { name: "x", 0: new Date() }; var z: { [name: number]: string } = x; ~ -!!! error TS2322: Type '{ 0: Date; name: string; }' is not assignable to type '{ [x: number]: string; }'. +!!! error TS2322: Type '{ 0: Date; name: string; }' is not assignable to type '{ [name: number]: string; }'. !!! error TS2322: Index signature is missing in type '{ 0: Date; name: string; }'. \ No newline at end of file diff --git a/tests/baselines/reference/objectLiteralIndexerErrors.errors.txt b/tests/baselines/reference/objectLiteralIndexerErrors.errors.txt index ef084477f6daf..c35e49f02a31f 100644 --- a/tests/baselines/reference/objectLiteralIndexerErrors.errors.txt +++ b/tests/baselines/reference/objectLiteralIndexerErrors.errors.txt @@ -1,4 +1,4 @@ -tests/cases/compiler/objectLiteralIndexerErrors.ts(13,5): error TS2322: Type '{ [x: string]: A; [x: number]: A; 0: A; x: B; }' is not assignable to type '{ [x: string]: A; [x: number]: B; }'. +tests/cases/compiler/objectLiteralIndexerErrors.ts(13,5): error TS2322: Type '{ [x: string]: A; [x: number]: A; 0: A; x: B; }' is not assignable to type '{ [s: string]: A; [n: number]: B; }'. Index signatures are incompatible. Type 'A' is not assignable to type 'B'. @@ -18,7 +18,7 @@ tests/cases/compiler/objectLiteralIndexerErrors.ts(13,5): error TS2322: Type '{ var o1: { [s: string]: A;[n: number]: B; } = { x: b, 0: a }; // both indexers are A ~~ -!!! error TS2322: Type '{ [x: string]: A; [x: number]: A; 0: A; x: B; }' is not assignable to type '{ [x: string]: A; [x: number]: B; }'. +!!! error TS2322: Type '{ [x: string]: A; [x: number]: A; 0: A; x: B; }' is not assignable to type '{ [s: string]: A; [n: number]: B; }'. !!! error TS2322: Index signatures are incompatible. !!! error TS2322: Type 'A' is not assignable to type 'B'. o1 = { x: c, 0: a }; // string indexer is any, number indexer is A \ No newline at end of file diff --git a/tests/baselines/reference/objectLiteralIndexers.types b/tests/baselines/reference/objectLiteralIndexers.types index 1dce9b94adad5..d5add00ebafb6 100644 --- a/tests/baselines/reference/objectLiteralIndexers.types +++ b/tests/baselines/reference/objectLiteralIndexers.types @@ -26,7 +26,7 @@ var c: any; >c : any var o1: { [s: string]: A;[n: number]: B; } = { x: a, 0: b }; // string indexer is A, number indexer is B ->o1 : { [x: string]: A; [x: number]: B; } +>o1 : { [s: string]: A; [n: number]: B; } >s : string >A : A >n : number @@ -38,7 +38,7 @@ var o1: { [s: string]: A;[n: number]: B; } = { x: a, 0: b }; // string indexer i o1 = { x: b, 0: c }; // both indexers are any >o1 = { x: b, 0: c } : { [x: string]: any; [x: number]: any; 0: any; x: B; } ->o1 : { [x: string]: A; [x: number]: B; } +>o1 : { [s: string]: A; [n: number]: B; } >{ x: b, 0: c } : { [x: string]: any; [x: number]: any; 0: any; x: B; } >x : B >b : B @@ -46,7 +46,7 @@ o1 = { x: b, 0: c }; // both indexers are any o1 = { x: c, 0: b }; // string indexer is any, number indexer is B >o1 = { x: c, 0: b } : { [x: string]: any; [x: number]: B; 0: B; x: any; } ->o1 : { [x: string]: A; [x: number]: B; } +>o1 : { [s: string]: A; [n: number]: B; } >{ x: c, 0: b } : { [x: string]: any; [x: number]: B; 0: B; x: any; } >x : any >c : any diff --git a/tests/baselines/reference/objectLiteralShorthandProperties.types b/tests/baselines/reference/objectLiteralShorthandProperties.types index f28f25e815c48..c34b2ab79b704 100644 --- a/tests/baselines/reference/objectLiteralShorthandProperties.types +++ b/tests/baselines/reference/objectLiteralShorthandProperties.types @@ -23,7 +23,7 @@ var x2 = { var x3 = { >x3 : any ->{ a: 0, b, c, d() { }, x3, parent: x3} : { a: number; b: any; c: any; d: () => void; x3: any; parent: any; } +>{ a: 0, b, c, d() { }, x3, parent: x3} : { a: number; b: any; c: any; d(): void; x3: any; parent: any; } a: 0, >a : number @@ -36,7 +36,6 @@ var x3 = { d() { }, >d : () => void ->d() { } : () => void x3, >x3 : any diff --git a/tests/baselines/reference/objectLiteralShorthandPropertiesES6.js b/tests/baselines/reference/objectLiteralShorthandPropertiesES6.js index b398a23135161..c65087a8da7ba 100644 --- a/tests/baselines/reference/objectLiteralShorthandPropertiesES6.js +++ b/tests/baselines/reference/objectLiteralShorthandPropertiesES6.js @@ -32,7 +32,7 @@ var x3 = { a: 0, b, c, - d: function () { + d() { }, x3, parent: x3 diff --git a/tests/baselines/reference/objectLiteralShorthandPropertiesES6.types b/tests/baselines/reference/objectLiteralShorthandPropertiesES6.types index 0383a3f5d2efc..5d5acc279a5ac 100644 --- a/tests/baselines/reference/objectLiteralShorthandPropertiesES6.types +++ b/tests/baselines/reference/objectLiteralShorthandPropertiesES6.types @@ -23,7 +23,7 @@ var x2 = { var x3 = { >x3 : any ->{ a: 0, b, c, d() { }, x3, parent: x3} : { a: number; b: any; c: any; d: () => void; x3: any; parent: any; } +>{ a: 0, b, c, d() { }, x3, parent: x3} : { a: number; b: any; c: any; d(): void; x3: any; parent: any; } a: 0, >a : number @@ -36,7 +36,6 @@ var x3 = { d() { }, >d : () => void ->d() { } : () => void x3, >x3 : any diff --git a/tests/baselines/reference/objectTypesIdentityWithCallSignatures.types b/tests/baselines/reference/objectTypesIdentityWithCallSignatures.types index f73785fab0d96..efe7e32f5d7cc 100644 --- a/tests/baselines/reference/objectTypesIdentityWithCallSignatures.types +++ b/tests/baselines/reference/objectTypesIdentityWithCallSignatures.types @@ -53,10 +53,9 @@ var a: { foo(x: string): string } >x : string var b = { foo(x: string) { return ''; } }; ->b : { foo: (x: string) => string; } ->{ foo(x: string) { return ''; } } : { foo: (x: string) => string; } +>b : { foo(x: string): string; } +>{ foo(x: string) { return ''; } } : { foo(x: string): string; } >foo : (x: string) => string ->foo(x: string) { return ''; } : (x: string) => string >x : string function foo1(x: A); @@ -130,17 +129,17 @@ function foo3(x: any) { } >x : any function foo4(x: typeof b); ->foo4 : { (x: { foo: (x: string) => string; }): any; (x: { foo: (x: string) => string; }): any; } ->x : { foo: (x: string) => string; } ->b : { foo: (x: string) => string; } +>foo4 : { (x: { foo(x: string): string; }): any; (x: { foo(x: string): string; }): any; } +>x : { foo(x: string): string; } +>b : { foo(x: string): string; } function foo4(x: typeof b); // error ->foo4 : { (x: { foo: (x: string) => string; }): any; (x: { foo: (x: string) => string; }): any; } ->x : { foo: (x: string) => string; } ->b : { foo: (x: string) => string; } +>foo4 : { (x: { foo(x: string): string; }): any; (x: { foo(x: string): string; }): any; } +>x : { foo(x: string): string; } +>b : { foo(x: string): string; } function foo4(x: any) { } ->foo4 : { (x: { foo: (x: string) => string; }): any; (x: { foo: (x: string) => string; }): any; } +>foo4 : { (x: { foo(x: string): string; }): any; (x: { foo(x: string): string; }): any; } >x : any function foo5(x: A); @@ -242,17 +241,17 @@ function foo10(x: any) { } >x : any function foo11(x: B); ->foo11 : { (x: B): any; (x: { foo: (x: string) => string; }): any; } +>foo11 : { (x: B): any; (x: { foo(x: string): string; }): any; } >x : B >B : B function foo11(x: typeof b); // error ->foo11 : { (x: B): any; (x: { foo: (x: string) => string; }): any; } ->x : { foo: (x: string) => string; } ->b : { foo: (x: string) => string; } +>foo11 : { (x: B): any; (x: { foo(x: string): string; }): any; } +>x : { foo(x: string): string; } +>b : { foo(x: string): string; } function foo11(x: any) { } ->foo11 : { (x: B): any; (x: { foo: (x: string) => string; }): any; } +>foo11 : { (x: B): any; (x: { foo(x: string): string; }): any; } >x : any function foo12(x: I); @@ -298,17 +297,17 @@ function foo13(x: any) { } >x : any function foo14(x: I); ->foo14 : { (x: I): any; (x: { foo: (x: string) => string; }): any; } +>foo14 : { (x: I): any; (x: { foo(x: string): string; }): any; } >x : I >I : I function foo14(x: typeof b); // error ->foo14 : { (x: I): any; (x: { foo: (x: string) => string; }): any; } ->x : { foo: (x: string) => string; } ->b : { foo: (x: string) => string; } +>foo14 : { (x: I): any; (x: { foo(x: string): string; }): any; } +>x : { foo(x: string): string; } +>b : { foo(x: string): string; } function foo14(x: any) { } ->foo14 : { (x: I): any; (x: { foo: (x: string) => string; }): any; } +>foo14 : { (x: I): any; (x: { foo(x: string): string; }): any; } >x : any function foo15(x: I2); diff --git a/tests/baselines/reference/objectTypesIdentityWithCallSignatures2.types b/tests/baselines/reference/objectTypesIdentityWithCallSignatures2.types index 16b658d0e4340..9004a26769108 100644 --- a/tests/baselines/reference/objectTypesIdentityWithCallSignatures2.types +++ b/tests/baselines/reference/objectTypesIdentityWithCallSignatures2.types @@ -54,10 +54,9 @@ var a: { foo(x: Date): string } >Date : Date var b = { foo(x: RegExp) { return ''; } }; ->b : { foo: (x: RegExp) => string; } ->{ foo(x: RegExp) { return ''; } } : { foo: (x: RegExp) => string; } +>b : { foo(x: RegExp): string; } +>{ foo(x: RegExp) { return ''; } } : { foo(x: RegExp): string; } >foo : (x: RegExp) => string ->foo(x: RegExp) { return ''; } : (x: RegExp) => string >x : RegExp >RegExp : RegExp @@ -132,17 +131,17 @@ function foo3(x: any) { } >x : any function foo4(x: typeof b); ->foo4 : { (x: { foo: (x: RegExp) => string; }): any; (x: { foo: (x: RegExp) => string; }): any; } ->x : { foo: (x: RegExp) => string; } ->b : { foo: (x: RegExp) => string; } +>foo4 : { (x: { foo(x: RegExp): string; }): any; (x: { foo(x: RegExp): string; }): any; } +>x : { foo(x: RegExp): string; } +>b : { foo(x: RegExp): string; } function foo4(x: typeof b); // error ->foo4 : { (x: { foo: (x: RegExp) => string; }): any; (x: { foo: (x: RegExp) => string; }): any; } ->x : { foo: (x: RegExp) => string; } ->b : { foo: (x: RegExp) => string; } +>foo4 : { (x: { foo(x: RegExp): string; }): any; (x: { foo(x: RegExp): string; }): any; } +>x : { foo(x: RegExp): string; } +>b : { foo(x: RegExp): string; } function foo4(x: any) { } ->foo4 : { (x: { foo: (x: RegExp) => string; }): any; (x: { foo: (x: RegExp) => string; }): any; } +>foo4 : { (x: { foo(x: RegExp): string; }): any; (x: { foo(x: RegExp): string; }): any; } >x : any function foo5(x: A); @@ -244,17 +243,17 @@ function foo10(x: any) { } >x : any function foo11(x: B); ->foo11 : { (x: B): any; (x: { foo: (x: RegExp) => string; }): any; } +>foo11 : { (x: B): any; (x: { foo(x: RegExp): string; }): any; } >x : B >B : B function foo11(x: typeof b); // ok ->foo11 : { (x: B): any; (x: { foo: (x: RegExp) => string; }): any; } ->x : { foo: (x: RegExp) => string; } ->b : { foo: (x: RegExp) => string; } +>foo11 : { (x: B): any; (x: { foo(x: RegExp): string; }): any; } +>x : { foo(x: RegExp): string; } +>b : { foo(x: RegExp): string; } function foo11(x: any) { } ->foo11 : { (x: B): any; (x: { foo: (x: RegExp) => string; }): any; } +>foo11 : { (x: B): any; (x: { foo(x: RegExp): string; }): any; } >x : any function foo12(x: I); @@ -300,17 +299,17 @@ function foo13(x: any) { } >x : any function foo14(x: I); ->foo14 : { (x: I): any; (x: { foo: (x: RegExp) => string; }): any; } +>foo14 : { (x: I): any; (x: { foo(x: RegExp): string; }): any; } >x : I >I : I function foo14(x: typeof b); // ok ->foo14 : { (x: I): any; (x: { foo: (x: RegExp) => string; }): any; } ->x : { foo: (x: RegExp) => string; } ->b : { foo: (x: RegExp) => string; } +>foo14 : { (x: I): any; (x: { foo(x: RegExp): string; }): any; } +>x : { foo(x: RegExp): string; } +>b : { foo(x: RegExp): string; } function foo14(x: any) { } ->foo14 : { (x: I): any; (x: { foo: (x: RegExp) => string; }): any; } +>foo14 : { (x: I): any; (x: { foo(x: RegExp): string; }): any; } >x : any function foo15(x: I2); diff --git a/tests/baselines/reference/objectTypesIdentityWithCallSignaturesDifferingParamCounts.types b/tests/baselines/reference/objectTypesIdentityWithCallSignaturesDifferingParamCounts.types index 0ebbc639e5fb8..2f97c72163723 100644 --- a/tests/baselines/reference/objectTypesIdentityWithCallSignaturesDifferingParamCounts.types +++ b/tests/baselines/reference/objectTypesIdentityWithCallSignaturesDifferingParamCounts.types @@ -57,10 +57,9 @@ var a: { foo(x: string, y: string): string } >y : string var b = { foo(x: string) { return ''; } }; ->b : { foo: (x: string) => string; } ->{ foo(x: string) { return ''; } } : { foo: (x: string) => string; } +>b : { foo(x: string): string; } +>{ foo(x: string) { return ''; } } : { foo(x: string): string; } >foo : (x: string) => string ->foo(x: string) { return ''; } : (x: string) => string >x : string function foo1(x: A); @@ -134,17 +133,17 @@ function foo3(x: any) { } >x : any function foo4(x: typeof b); ->foo4 : { (x: { foo: (x: string) => string; }): any; (x: { foo: (x: string) => string; }): any; } ->x : { foo: (x: string) => string; } ->b : { foo: (x: string) => string; } +>foo4 : { (x: { foo(x: string): string; }): any; (x: { foo(x: string): string; }): any; } +>x : { foo(x: string): string; } +>b : { foo(x: string): string; } function foo4(x: typeof b); // error ->foo4 : { (x: { foo: (x: string) => string; }): any; (x: { foo: (x: string) => string; }): any; } ->x : { foo: (x: string) => string; } ->b : { foo: (x: string) => string; } +>foo4 : { (x: { foo(x: string): string; }): any; (x: { foo(x: string): string; }): any; } +>x : { foo(x: string): string; } +>b : { foo(x: string): string; } function foo4(x: any) { } ->foo4 : { (x: { foo: (x: string) => string; }): any; (x: { foo: (x: string) => string; }): any; } +>foo4 : { (x: { foo(x: string): string; }): any; (x: { foo(x: string): string; }): any; } >x : any function foo5(x: A); @@ -246,17 +245,17 @@ function foo10(x: any) { } >x : any function foo11(x: B); ->foo11 : { (x: B): any; (x: { foo: (x: string) => string; }): any; } +>foo11 : { (x: B): any; (x: { foo(x: string): string; }): any; } >x : B >B : B function foo11(x: typeof b); // ok ->foo11 : { (x: B): any; (x: { foo: (x: string) => string; }): any; } ->x : { foo: (x: string) => string; } ->b : { foo: (x: string) => string; } +>foo11 : { (x: B): any; (x: { foo(x: string): string; }): any; } +>x : { foo(x: string): string; } +>b : { foo(x: string): string; } function foo11(x: any) { } ->foo11 : { (x: B): any; (x: { foo: (x: string) => string; }): any; } +>foo11 : { (x: B): any; (x: { foo(x: string): string; }): any; } >x : any function foo12(x: I); @@ -302,17 +301,17 @@ function foo13(x: any) { } >x : any function foo14(x: I); ->foo14 : { (x: I): any; (x: { foo: (x: string) => string; }): any; } +>foo14 : { (x: I): any; (x: { foo(x: string): string; }): any; } >x : I >I : I function foo14(x: typeof b); // error ->foo14 : { (x: I): any; (x: { foo: (x: string) => string; }): any; } ->x : { foo: (x: string) => string; } ->b : { foo: (x: string) => string; } +>foo14 : { (x: I): any; (x: { foo(x: string): string; }): any; } +>x : { foo(x: string): string; } +>b : { foo(x: string): string; } function foo14(x: any) { } ->foo14 : { (x: I): any; (x: { foo: (x: string) => string; }): any; } +>foo14 : { (x: I): any; (x: { foo(x: string): string; }): any; } >x : any function foo15(x: I2); diff --git a/tests/baselines/reference/objectTypesIdentityWithCallSignaturesWithOverloads.types b/tests/baselines/reference/objectTypesIdentityWithCallSignaturesWithOverloads.types index 4d8b8ccb42ad7..c3ab4ffb837ee 100644 --- a/tests/baselines/reference/objectTypesIdentityWithCallSignaturesWithOverloads.types +++ b/tests/baselines/reference/objectTypesIdentityWithCallSignaturesWithOverloads.types @@ -100,12 +100,11 @@ var a: { } var b = { ->b : { foo: (x: any) => any; } ->{ foo(x: any) { return ''; }} : { foo: (x: any) => any; } +>b : { foo(x: any): any; } +>{ foo(x: any) { return ''; }} : { foo(x: any): any; } foo(x: any) { return ''; } >foo : (x: any) => any ->foo(x: any) { return ''; } : (x: any) => any >x : any >'' : any @@ -182,17 +181,17 @@ function foo3(x: any) { } >x : any function foo4(x: typeof b); ->foo4 : { (x: { foo: (x: any) => any; }): any; (x: { foo: (x: any) => any; }): any; } ->x : { foo: (x: any) => any; } ->b : { foo: (x: any) => any; } +>foo4 : { (x: { foo(x: any): any; }): any; (x: { foo(x: any): any; }): any; } +>x : { foo(x: any): any; } +>b : { foo(x: any): any; } function foo4(x: typeof b); // error ->foo4 : { (x: { foo: (x: any) => any; }): any; (x: { foo: (x: any) => any; }): any; } ->x : { foo: (x: any) => any; } ->b : { foo: (x: any) => any; } +>foo4 : { (x: { foo(x: any): any; }): any; (x: { foo(x: any): any; }): any; } +>x : { foo(x: any): any; } +>b : { foo(x: any): any; } function foo4(x: any) { } ->foo4 : { (x: { foo: (x: any) => any; }): any; (x: { foo: (x: any) => any; }): any; } +>foo4 : { (x: { foo(x: any): any; }): any; (x: { foo(x: any): any; }): any; } >x : any function foo5(x: A); @@ -294,17 +293,17 @@ function foo10(x: any) { } >x : any function foo11(x: B); ->foo11 : { (x: B): any; (x: { foo: (x: any) => any; }): any; } +>foo11 : { (x: B): any; (x: { foo(x: any): any; }): any; } >x : B >B : B function foo11(x: typeof b); // ok ->foo11 : { (x: B): any; (x: { foo: (x: any) => any; }): any; } ->x : { foo: (x: any) => any; } ->b : { foo: (x: any) => any; } +>foo11 : { (x: B): any; (x: { foo(x: any): any; }): any; } +>x : { foo(x: any): any; } +>b : { foo(x: any): any; } function foo11(x: any) { } ->foo11 : { (x: B): any; (x: { foo: (x: any) => any; }): any; } +>foo11 : { (x: B): any; (x: { foo(x: any): any; }): any; } >x : any function foo12(x: I); @@ -350,17 +349,17 @@ function foo13(x: any) { } >x : any function foo14(x: I); ->foo14 : { (x: I): any; (x: { foo: (x: any) => any; }): any; } +>foo14 : { (x: I): any; (x: { foo(x: any): any; }): any; } >x : I >I : I function foo14(x: typeof b); // ok ->foo14 : { (x: I): any; (x: { foo: (x: any) => any; }): any; } ->x : { foo: (x: any) => any; } ->b : { foo: (x: any) => any; } +>foo14 : { (x: I): any; (x: { foo(x: any): any; }): any; } +>x : { foo(x: any): any; } +>b : { foo(x: any): any; } function foo14(x: any) { } ->foo14 : { (x: I): any; (x: { foo: (x: any) => any; }): any; } +>foo14 : { (x: I): any; (x: { foo(x: any): any; }): any; } >x : any function foo15(x: I2); diff --git a/tests/baselines/reference/objectTypesIdentityWithConstructSignatures2.types b/tests/baselines/reference/objectTypesIdentityWithConstructSignatures2.types index c530f1ced9b43..769682c826a29 100644 --- a/tests/baselines/reference/objectTypesIdentityWithConstructSignatures2.types +++ b/tests/baselines/reference/objectTypesIdentityWithConstructSignatures2.types @@ -40,10 +40,9 @@ var a: { new(x: Date): string } >Date : Date var b = { new(x: RegExp) { return ''; } }; // not a construct signature, function called new ->b : { new: (x: RegExp) => string; } ->{ new(x: RegExp) { return ''; } } : { new: (x: RegExp) => string; } +>b : { new(x: RegExp): string; } +>{ new(x: RegExp) { return ''; } } : { new(x: RegExp): string; } >new : (x: RegExp) => string ->new(x: RegExp) { return ''; } : (x: RegExp) => string >x : RegExp >RegExp : RegExp @@ -104,17 +103,17 @@ function foo3(x: any) { } >x : any function foo4(x: typeof b); ->foo4 : { (x: { new: (x: RegExp) => string; }): any; (x: { new: (x: RegExp) => string; }): any; } ->x : { new: (x: RegExp) => string; } ->b : { new: (x: RegExp) => string; } +>foo4 : { (x: { new(x: RegExp): string; }): any; (x: { new(x: RegExp): string; }): any; } +>x : { new(x: RegExp): string; } +>b : { new(x: RegExp): string; } function foo4(x: typeof b); // error ->foo4 : { (x: { new: (x: RegExp) => string; }): any; (x: { new: (x: RegExp) => string; }): any; } ->x : { new: (x: RegExp) => string; } ->b : { new: (x: RegExp) => string; } +>foo4 : { (x: { new(x: RegExp): string; }): any; (x: { new(x: RegExp): string; }): any; } +>x : { new(x: RegExp): string; } +>b : { new(x: RegExp): string; } function foo4(x: any) { } ->foo4 : { (x: { new: (x: RegExp) => string; }): any; (x: { new: (x: RegExp) => string; }): any; } +>foo4 : { (x: { new(x: RegExp): string; }): any; (x: { new(x: RegExp): string; }): any; } >x : any function foo8(x: B); @@ -160,17 +159,17 @@ function foo10(x: any) { } >x : any function foo11(x: B); ->foo11 : { (x: B): any; (x: { new: (x: RegExp) => string; }): any; } +>foo11 : { (x: B): any; (x: { new(x: RegExp): string; }): any; } >x : B >B : B function foo11(x: typeof b); // ok ->foo11 : { (x: B): any; (x: { new: (x: RegExp) => string; }): any; } ->x : { new: (x: RegExp) => string; } ->b : { new: (x: RegExp) => string; } +>foo11 : { (x: B): any; (x: { new(x: RegExp): string; }): any; } +>x : { new(x: RegExp): string; } +>b : { new(x: RegExp): string; } function foo11(x: any) { } ->foo11 : { (x: B): any; (x: { new: (x: RegExp) => string; }): any; } +>foo11 : { (x: B): any; (x: { new(x: RegExp): string; }): any; } >x : any function foo12(x: I); @@ -216,17 +215,17 @@ function foo13(x: any) { } >x : any function foo14(x: I); ->foo14 : { (x: I): any; (x: { new: (x: RegExp) => string; }): any; } +>foo14 : { (x: I): any; (x: { new(x: RegExp): string; }): any; } >x : I >I : I function foo14(x: typeof b); // ok ->foo14 : { (x: I): any; (x: { new: (x: RegExp) => string; }): any; } ->x : { new: (x: RegExp) => string; } ->b : { new: (x: RegExp) => string; } +>foo14 : { (x: I): any; (x: { new(x: RegExp): string; }): any; } +>x : { new(x: RegExp): string; } +>b : { new(x: RegExp): string; } function foo14(x: any) { } ->foo14 : { (x: I): any; (x: { new: (x: RegExp) => string; }): any; } +>foo14 : { (x: I): any; (x: { new(x: RegExp): string; }): any; } >x : any function foo15(x: I2); diff --git a/tests/baselines/reference/objectTypesIdentityWithConstructSignaturesDifferingParamCounts.types b/tests/baselines/reference/objectTypesIdentityWithConstructSignaturesDifferingParamCounts.types index e5598f874e057..a2779e3bd35cc 100644 --- a/tests/baselines/reference/objectTypesIdentityWithConstructSignaturesDifferingParamCounts.types +++ b/tests/baselines/reference/objectTypesIdentityWithConstructSignaturesDifferingParamCounts.types @@ -43,10 +43,9 @@ var a: { new(x: string, y: string): string } >y : string var b = { new(x: string) { return ''; } }; // not a construct signature, function called new ->b : { new: (x: string) => string; } ->{ new(x: string) { return ''; } } : { new: (x: string) => string; } +>b : { new(x: string): string; } +>{ new(x: string) { return ''; } } : { new(x: string): string; } >new : (x: string) => string ->new(x: string) { return ''; } : (x: string) => string >x : string function foo1b(x: B); @@ -106,17 +105,17 @@ function foo3(x: any) { } >x : any function foo4(x: typeof b); ->foo4 : { (x: { new: (x: string) => string; }): any; (x: { new: (x: string) => string; }): any; } ->x : { new: (x: string) => string; } ->b : { new: (x: string) => string; } +>foo4 : { (x: { new(x: string): string; }): any; (x: { new(x: string): string; }): any; } +>x : { new(x: string): string; } +>b : { new(x: string): string; } function foo4(x: typeof b); // error ->foo4 : { (x: { new: (x: string) => string; }): any; (x: { new: (x: string) => string; }): any; } ->x : { new: (x: string) => string; } ->b : { new: (x: string) => string; } +>foo4 : { (x: { new(x: string): string; }): any; (x: { new(x: string): string; }): any; } +>x : { new(x: string): string; } +>b : { new(x: string): string; } function foo4(x: any) { } ->foo4 : { (x: { new: (x: string) => string; }): any; (x: { new: (x: string) => string; }): any; } +>foo4 : { (x: { new(x: string): string; }): any; (x: { new(x: string): string; }): any; } >x : any function foo8(x: B); @@ -162,17 +161,17 @@ function foo10(x: any) { } >x : any function foo11(x: B); ->foo11 : { (x: B): any; (x: { new: (x: string) => string; }): any; } +>foo11 : { (x: B): any; (x: { new(x: string): string; }): any; } >x : B >B : B function foo11(x: typeof b); // ok ->foo11 : { (x: B): any; (x: { new: (x: string) => string; }): any; } ->x : { new: (x: string) => string; } ->b : { new: (x: string) => string; } +>foo11 : { (x: B): any; (x: { new(x: string): string; }): any; } +>x : { new(x: string): string; } +>b : { new(x: string): string; } function foo11(x: any) { } ->foo11 : { (x: B): any; (x: { new: (x: string) => string; }): any; } +>foo11 : { (x: B): any; (x: { new(x: string): string; }): any; } >x : any function foo12(x: I); @@ -218,17 +217,17 @@ function foo13(x: any) { } >x : any function foo14(x: I); ->foo14 : { (x: I): any; (x: { new: (x: string) => string; }): any; } +>foo14 : { (x: I): any; (x: { new(x: string): string; }): any; } >x : I >I : I function foo14(x: typeof b); // ok ->foo14 : { (x: I): any; (x: { new: (x: string) => string; }): any; } ->x : { new: (x: string) => string; } ->b : { new: (x: string) => string; } +>foo14 : { (x: I): any; (x: { new(x: string): string; }): any; } +>x : { new(x: string): string; } +>b : { new(x: string): string; } function foo14(x: any) { } ->foo14 : { (x: I): any; (x: { new: (x: string) => string; }): any; } +>foo14 : { (x: I): any; (x: { new(x: string): string; }): any; } >x : any function foo15(x: I2); diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignatures.types b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignatures.types index 240e12b1c22da..d3cf9bc006367 100644 --- a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignatures.types +++ b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignatures.types @@ -65,10 +65,9 @@ var a: { foo(x: T): T } >T : T var b = { foo(x: T) { return x; } }; ->b : { foo: (x: T) => T; } ->{ foo(x: T) { return x; } } : { foo: (x: T) => T; } +>b : { foo(x: T): T; } +>{ foo(x: T) { return x; } } : { foo(x: T): T; } >foo : (x: T) => T ->foo(x: T) { return x; } : (x: T) => T >T : T >x : T >T : T @@ -145,17 +144,17 @@ function foo3(x: any) { } >x : any function foo4(x: typeof b); ->foo4 : { (x: { foo: (x: T) => T; }): any; (x: { foo: (x: T) => T; }): any; } ->x : { foo: (x: T) => T; } ->b : { foo: (x: T) => T; } +>foo4 : { (x: { foo(x: T): T; }): any; (x: { foo(x: T): T; }): any; } +>x : { foo(x: T): T; } +>b : { foo(x: T): T; } function foo4(x: typeof b); // error ->foo4 : { (x: { foo: (x: T) => T; }): any; (x: { foo: (x: T) => T; }): any; } ->x : { foo: (x: T) => T; } ->b : { foo: (x: T) => T; } +>foo4 : { (x: { foo(x: T): T; }): any; (x: { foo(x: T): T; }): any; } +>x : { foo(x: T): T; } +>b : { foo(x: T): T; } function foo4(x: any) { } ->foo4 : { (x: { foo: (x: T) => T; }): any; (x: { foo: (x: T) => T; }): any; } +>foo4 : { (x: { foo(x: T): T; }): any; (x: { foo(x: T): T; }): any; } >x : any function foo5(x: A); @@ -257,17 +256,17 @@ function foo10(x: any) { } >x : any function foo11(x: B); ->foo11 : { (x: B): any; (x: { foo: (x: T) => T; }): any; } +>foo11 : { (x: B): any; (x: { foo(x: T): T; }): any; } >x : B >B : B function foo11(x: typeof b); // ok ->foo11 : { (x: B): any; (x: { foo: (x: T) => T; }): any; } ->x : { foo: (x: T) => T; } ->b : { foo: (x: T) => T; } +>foo11 : { (x: B): any; (x: { foo(x: T): T; }): any; } +>x : { foo(x: T): T; } +>b : { foo(x: T): T; } function foo11(x: any) { } ->foo11 : { (x: B): any; (x: { foo: (x: T) => T; }): any; } +>foo11 : { (x: B): any; (x: { foo(x: T): T; }): any; } >x : any function foo12(x: I); @@ -313,17 +312,17 @@ function foo13(x: any) { } >x : any function foo14(x: I); ->foo14 : { (x: I): any; (x: { foo: (x: T) => T; }): any; } +>foo14 : { (x: I): any; (x: { foo(x: T): T; }): any; } >x : I >I : I function foo14(x: typeof b); // ok ->foo14 : { (x: I): any; (x: { foo: (x: T) => T; }): any; } ->x : { foo: (x: T) => T; } ->b : { foo: (x: T) => T; } +>foo14 : { (x: I): any; (x: { foo(x: T): T; }): any; } +>x : { foo(x: T): T; } +>b : { foo(x: T): T; } function foo14(x: any) { } ->foo14 : { (x: I): any; (x: { foo: (x: T) => T; }): any; } +>foo14 : { (x: I): any; (x: { foo(x: T): T; }): any; } >x : any function foo15(x: I2); diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignatures2.types b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignatures2.types index 932dbf7e9b34d..0c00e587b7868 100644 --- a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignatures2.types +++ b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignatures2.types @@ -83,10 +83,9 @@ var a: { foo(x: T, y: U): T } >T : T var b = { foo(x: T, y: U) { return x; } }; ->b : { foo: (x: T, y: U) => T; } ->{ foo(x: T, y: U) { return x; } } : { foo: (x: T, y: U) => T; } +>b : { foo(x: T, y: U): T; } +>{ foo(x: T, y: U) { return x; } } : { foo(x: T, y: U): T; } >foo : (x: T, y: U) => T ->foo(x: T, y: U) { return x; } : (x: T, y: U) => T >T : T >U : U >x : T @@ -166,17 +165,17 @@ function foo3(x: any) { } >x : any function foo4(x: typeof b); ->foo4 : { (x: { foo: (x: T, y: U) => T; }): any; (x: { foo: (x: T, y: U) => T; }): any; } ->x : { foo: (x: T, y: U) => T; } ->b : { foo: (x: T, y: U) => T; } +>foo4 : { (x: { foo(x: T, y: U): T; }): any; (x: { foo(x: T, y: U): T; }): any; } +>x : { foo(x: T, y: U): T; } +>b : { foo(x: T, y: U): T; } function foo4(x: typeof b); // error ->foo4 : { (x: { foo: (x: T, y: U) => T; }): any; (x: { foo: (x: T, y: U) => T; }): any; } ->x : { foo: (x: T, y: U) => T; } ->b : { foo: (x: T, y: U) => T; } +>foo4 : { (x: { foo(x: T, y: U): T; }): any; (x: { foo(x: T, y: U): T; }): any; } +>x : { foo(x: T, y: U): T; } +>b : { foo(x: T, y: U): T; } function foo4(x: any) { } ->foo4 : { (x: { foo: (x: T, y: U) => T; }): any; (x: { foo: (x: T, y: U) => T; }): any; } +>foo4 : { (x: { foo(x: T, y: U): T; }): any; (x: { foo(x: T, y: U): T; }): any; } >x : any function foo5(x: A); @@ -278,17 +277,17 @@ function foo10(x: any) { } >x : any function foo11(x: B); ->foo11 : { (x: B): any; (x: { foo: (x: T, y: U) => T; }): any; } +>foo11 : { (x: B): any; (x: { foo(x: T, y: U): T; }): any; } >x : B >B : B function foo11(x: typeof b); // ok ->foo11 : { (x: B): any; (x: { foo: (x: T, y: U) => T; }): any; } ->x : { foo: (x: T, y: U) => T; } ->b : { foo: (x: T, y: U) => T; } +>foo11 : { (x: B): any; (x: { foo(x: T, y: U): T; }): any; } +>x : { foo(x: T, y: U): T; } +>b : { foo(x: T, y: U): T; } function foo11(x: any) { } ->foo11 : { (x: B): any; (x: { foo: (x: T, y: U) => T; }): any; } +>foo11 : { (x: B): any; (x: { foo(x: T, y: U): T; }): any; } >x : any function foo12(x: I); @@ -334,17 +333,17 @@ function foo13(x: any) { } >x : any function foo14(x: I); ->foo14 : { (x: I): any; (x: { foo: (x: T, y: U) => T; }): any; } +>foo14 : { (x: I): any; (x: { foo(x: T, y: U): T; }): any; } >x : I >I : I function foo14(x: typeof b); // ok ->foo14 : { (x: I): any; (x: { foo: (x: T, y: U) => T; }): any; } ->x : { foo: (x: T, y: U) => T; } ->b : { foo: (x: T, y: U) => T; } +>foo14 : { (x: I): any; (x: { foo(x: T, y: U): T; }): any; } +>x : { foo(x: T, y: U): T; } +>b : { foo(x: T, y: U): T; } function foo14(x: any) { } ->foo14 : { (x: I): any; (x: { foo: (x: T, y: U) => T; }): any; } +>foo14 : { (x: I): any; (x: { foo(x: T, y: U): T; }): any; } >x : any function foo15(x: I2); diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingByConstraints.types b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingByConstraints.types index 2a5ab2dfe7042..432a618c4e235 100644 --- a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingByConstraints.types +++ b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingByConstraints.types @@ -67,10 +67,9 @@ var a: { foo>(x: T): string } >T : T var b = { foo(x: T) { return ''; } }; ->b : { foo: (x: T) => string; } ->{ foo(x: T) { return ''; } } : { foo: (x: T) => string; } +>b : { foo(x: T): string; } +>{ foo(x: T) { return ''; } } : { foo(x: T): string; } >foo : (x: T) => string ->foo(x: T) { return ''; } : (x: T) => string >T : T >RegExp : RegExp >x : T @@ -153,17 +152,17 @@ function foo3(x: any) { } >x : any function foo4(x: typeof b); ->foo4 : { (x: { foo: (x: T) => string; }): any; (x: { foo: (x: T) => string; }): any; } ->x : { foo: (x: T) => string; } ->b : { foo: (x: T) => string; } +>foo4 : { (x: { foo(x: T): string; }): any; (x: { foo(x: T): string; }): any; } +>x : { foo(x: T): string; } +>b : { foo(x: T): string; } function foo4(x: typeof b); // error ->foo4 : { (x: { foo: (x: T) => string; }): any; (x: { foo: (x: T) => string; }): any; } ->x : { foo: (x: T) => string; } ->b : { foo: (x: T) => string; } +>foo4 : { (x: { foo(x: T): string; }): any; (x: { foo(x: T): string; }): any; } +>x : { foo(x: T): string; } +>b : { foo(x: T): string; } function foo4(x: any) { } ->foo4 : { (x: { foo: (x: T) => string; }): any; (x: { foo: (x: T) => string; }): any; } +>foo4 : { (x: { foo(x: T): string; }): any; (x: { foo(x: T): string; }): any; } >x : any function foo5(x: A); @@ -273,18 +272,18 @@ function foo10(x: any) { } >x : any function foo11(x: B>); ->foo11 : { (x: B): any; (x: { foo: (x: T) => string; }): any; } +>foo11 : { (x: B): any; (x: { foo(x: T): string; }): any; } >x : B >B : B >Array : T[] function foo11(x: typeof b); // ok ->foo11 : { (x: B): any; (x: { foo: (x: T) => string; }): any; } ->x : { foo: (x: T) => string; } ->b : { foo: (x: T) => string; } +>foo11 : { (x: B): any; (x: { foo(x: T): string; }): any; } +>x : { foo(x: T): string; } +>b : { foo(x: T): string; } function foo11(x: any) { } ->foo11 : { (x: B): any; (x: { foo: (x: T) => string; }): any; } +>foo11 : { (x: B): any; (x: { foo(x: T): string; }): any; } >x : any function foo12(x: I); @@ -334,18 +333,18 @@ function foo13(x: any) { } >x : any function foo14(x: I); ->foo14 : { (x: I): any; (x: { foo: (x: T) => string; }): any; } +>foo14 : { (x: I): any; (x: { foo(x: T): string; }): any; } >x : I >I : I >Number : Number function foo14(x: typeof b); // ok ->foo14 : { (x: I): any; (x: { foo: (x: T) => string; }): any; } ->x : { foo: (x: T) => string; } ->b : { foo: (x: T) => string; } +>foo14 : { (x: I): any; (x: { foo(x: T): string; }): any; } +>x : { foo(x: T): string; } +>b : { foo(x: T): string; } function foo14(x: any) { } ->foo14 : { (x: I): any; (x: { foo: (x: T) => string; }): any; } +>foo14 : { (x: I): any; (x: { foo(x: T): string; }): any; } >x : any function foo15(x: I2); diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingByReturnType.types b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingByReturnType.types index 9de1a816ab77c..8b5a042c1e230 100644 --- a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingByReturnType.types +++ b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingByReturnType.types @@ -64,10 +64,9 @@ var a: { foo(x: T): T } >T : T var b = { foo(x: T) { return null; } }; ->b : { foo: (x: T) => any; } ->{ foo(x: T) { return null; } } : { foo: (x: T) => any; } +>b : { foo(x: T): any; } +>{ foo(x: T) { return null; } } : { foo(x: T): any; } >foo : (x: T) => any ->foo(x: T) { return null; } : (x: T) => any >T : T >x : T >T : T @@ -143,17 +142,17 @@ function foo3(x: any) { } >x : any function foo4(x: typeof b); ->foo4 : { (x: { foo: (x: T) => any; }): any; (x: { foo: (x: T) => any; }): any; } ->x : { foo: (x: T) => any; } ->b : { foo: (x: T) => any; } +>foo4 : { (x: { foo(x: T): any; }): any; (x: { foo(x: T): any; }): any; } +>x : { foo(x: T): any; } +>b : { foo(x: T): any; } function foo4(x: typeof b); // error ->foo4 : { (x: { foo: (x: T) => any; }): any; (x: { foo: (x: T) => any; }): any; } ->x : { foo: (x: T) => any; } ->b : { foo: (x: T) => any; } +>foo4 : { (x: { foo(x: T): any; }): any; (x: { foo(x: T): any; }): any; } +>x : { foo(x: T): any; } +>b : { foo(x: T): any; } function foo4(x: any) { } ->foo4 : { (x: { foo: (x: T) => any; }): any; (x: { foo: (x: T) => any; }): any; } +>foo4 : { (x: { foo(x: T): any; }): any; (x: { foo(x: T): any; }): any; } >x : any function foo5(x: A); @@ -255,17 +254,17 @@ function foo10(x: any) { } >x : any function foo11(x: B); ->foo11 : { (x: B): any; (x: { foo: (x: T) => any; }): any; } +>foo11 : { (x: B): any; (x: { foo(x: T): any; }): any; } >x : B >B : B function foo11(x: typeof b); // ok ->foo11 : { (x: B): any; (x: { foo: (x: T) => any; }): any; } ->x : { foo: (x: T) => any; } ->b : { foo: (x: T) => any; } +>foo11 : { (x: B): any; (x: { foo(x: T): any; }): any; } +>x : { foo(x: T): any; } +>b : { foo(x: T): any; } function foo11(x: any) { } ->foo11 : { (x: B): any; (x: { foo: (x: T) => any; }): any; } +>foo11 : { (x: B): any; (x: { foo(x: T): any; }): any; } >x : any function foo12(x: I); @@ -311,17 +310,17 @@ function foo13(x: any) { } >x : any function foo14(x: I); ->foo14 : { (x: I): any; (x: { foo: (x: T) => any; }): any; } +>foo14 : { (x: I): any; (x: { foo(x: T): any; }): any; } >x : I >I : I function foo14(x: typeof b); // ok ->foo14 : { (x: I): any; (x: { foo: (x: T) => any; }): any; } ->x : { foo: (x: T) => any; } ->b : { foo: (x: T) => any; } +>foo14 : { (x: I): any; (x: { foo(x: T): any; }): any; } +>x : { foo(x: T): any; } +>b : { foo(x: T): any; } function foo14(x: any) { } ->foo14 : { (x: I): any; (x: { foo: (x: T) => any; }): any; } +>foo14 : { (x: I): any; (x: { foo(x: T): any; }): any; } >x : any function foo15(x: I2); diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingByReturnType2.types b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingByReturnType2.types index f6f33890c0730..2863cafa88513 100644 --- a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingByReturnType2.types +++ b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingByReturnType2.types @@ -70,10 +70,9 @@ var a: { foo(x: T): T } >T : T var b = { foo(x: T) { return null; } }; ->b : { foo: (x: T) => any; } ->{ foo(x: T) { return null; } } : { foo: (x: T) => any; } +>b : { foo(x: T): any; } +>{ foo(x: T) { return null; } } : { foo(x: T): any; } >foo : (x: T) => any ->foo(x: T) { return null; } : (x: T) => any >T : T >Date : Date >x : T @@ -156,17 +155,17 @@ function foo3(x: any) { } >x : any function foo4(x: typeof b); ->foo4 : { (x: { foo: (x: T) => any; }): any; (x: { foo: (x: T) => any; }): any; } ->x : { foo: (x: T) => any; } ->b : { foo: (x: T) => any; } +>foo4 : { (x: { foo(x: T): any; }): any; (x: { foo(x: T): any; }): any; } +>x : { foo(x: T): any; } +>b : { foo(x: T): any; } function foo4(x: typeof b); // error ->foo4 : { (x: { foo: (x: T) => any; }): any; (x: { foo: (x: T) => any; }): any; } ->x : { foo: (x: T) => any; } ->b : { foo: (x: T) => any; } +>foo4 : { (x: { foo(x: T): any; }): any; (x: { foo(x: T): any; }): any; } +>x : { foo(x: T): any; } +>b : { foo(x: T): any; } function foo4(x: any) { } ->foo4 : { (x: { foo: (x: T) => any; }): any; (x: { foo: (x: T) => any; }): any; } +>foo4 : { (x: { foo(x: T): any; }): any; (x: { foo(x: T): any; }): any; } >x : any function foo5(x: A); @@ -276,18 +275,18 @@ function foo10(x: any) { } >x : any function foo11(x: B); ->foo11 : { (x: B): any; (x: { foo: (x: T) => any; }): any; } +>foo11 : { (x: B): any; (x: { foo(x: T): any; }): any; } >x : B >B : B >Date : Date function foo11(x: typeof b); // ok ->foo11 : { (x: B): any; (x: { foo: (x: T) => any; }): any; } ->x : { foo: (x: T) => any; } ->b : { foo: (x: T) => any; } +>foo11 : { (x: B): any; (x: { foo(x: T): any; }): any; } +>x : { foo(x: T): any; } +>b : { foo(x: T): any; } function foo11(x: any) { } ->foo11 : { (x: B): any; (x: { foo: (x: T) => any; }): any; } +>foo11 : { (x: B): any; (x: { foo(x: T): any; }): any; } >x : any function foo12(x: I); @@ -337,18 +336,18 @@ function foo13(x: any) { } >x : any function foo14(x: I); ->foo14 : { (x: I): any; (x: { foo: (x: T) => any; }): any; } +>foo14 : { (x: I): any; (x: { foo(x: T): any; }): any; } >x : I >I : I >Date : Date function foo14(x: typeof b); // ok ->foo14 : { (x: I): any; (x: { foo: (x: T) => any; }): any; } ->x : { foo: (x: T) => any; } ->b : { foo: (x: T) => any; } +>foo14 : { (x: I): any; (x: { foo(x: T): any; }): any; } +>x : { foo(x: T): any; } +>b : { foo(x: T): any; } function foo14(x: any) { } ->foo14 : { (x: I): any; (x: { foo: (x: T) => any; }): any; } +>foo14 : { (x: I): any; (x: { foo(x: T): any; }): any; } >x : any function foo15(x: I2); diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingTypeParameterCounts.types b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingTypeParameterCounts.types index dbd6d3e7d038c..125b82c9915aa 100644 --- a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingTypeParameterCounts.types +++ b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingTypeParameterCounts.types @@ -78,10 +78,9 @@ var a: { foo(x: Z): Z } >Z : Z var b = { foo(x: A) { return x; } }; ->b : { foo: (x: A) => A; } ->{ foo(x: A) { return x; } } : { foo: (x: A) => A; } +>b : { foo(x: A): A; } +>{ foo(x: A) { return x; } } : { foo(x: A): A; } >foo : (x: A) => A ->foo(x: A) { return x; } : (x: A) => A >A : A >B : B >C : C @@ -163,17 +162,17 @@ function foo3(x: any) { } >x : any function foo4(x: typeof b); ->foo4 : { (x: { foo: (x: A) => A; }): any; (x: { foo: (x: A) => A; }): any; } ->x : { foo: (x: A) => A; } ->b : { foo: (x: A) => A; } +>foo4 : { (x: { foo(x: A): A; }): any; (x: { foo(x: A): A; }): any; } +>x : { foo(x: A): A; } +>b : { foo(x: A): A; } function foo4(x: typeof b); // error ->foo4 : { (x: { foo: (x: A) => A; }): any; (x: { foo: (x: A) => A; }): any; } ->x : { foo: (x: A) => A; } ->b : { foo: (x: A) => A; } +>foo4 : { (x: { foo(x: A): A; }): any; (x: { foo(x: A): A; }): any; } +>x : { foo(x: A): A; } +>b : { foo(x: A): A; } function foo4(x: any) { } ->foo4 : { (x: { foo: (x: A) => A; }): any; (x: { foo: (x: A) => A; }): any; } +>foo4 : { (x: { foo(x: A): A; }): any; (x: { foo(x: A): A; }): any; } >x : any function foo5(x: A); @@ -278,17 +277,17 @@ function foo10(x: any) { } >x : any function foo11(x: B); ->foo11 : { (x: B): any; (x: { foo: (x: A) => A; }): any; } +>foo11 : { (x: B): any; (x: { foo(x: A): A; }): any; } >x : B >B : B function foo11(x: typeof b); // ok ->foo11 : { (x: B): any; (x: { foo: (x: A) => A; }): any; } ->x : { foo: (x: A) => A; } ->b : { foo: (x: A) => A; } +>foo11 : { (x: B): any; (x: { foo(x: A): A; }): any; } +>x : { foo(x: A): A; } +>b : { foo(x: A): A; } function foo11(x: any) { } ->foo11 : { (x: B): any; (x: { foo: (x: A) => A; }): any; } +>foo11 : { (x: B): any; (x: { foo(x: A): A; }): any; } >x : any function foo12(x: I, number, Date, string>); @@ -341,19 +340,19 @@ function foo13(x: any) { } >x : any function foo14(x: I); ->foo14 : { (x: I): any; (x: { foo: (x: A) => A; }): any; } +>foo14 : { (x: I): any; (x: { foo(x: A): A; }): any; } >x : I >I : I >Date : Date >RegExp : RegExp function foo14(x: typeof b); // ok ->foo14 : { (x: I): any; (x: { foo: (x: A) => A; }): any; } ->x : { foo: (x: A) => A; } ->b : { foo: (x: A) => A; } +>foo14 : { (x: I): any; (x: { foo(x: A): A; }): any; } +>x : { foo(x: A): A; } +>b : { foo(x: A): A; } function foo14(x: any) { } ->foo14 : { (x: I): any; (x: { foo: (x: A) => A; }): any; } +>foo14 : { (x: I): any; (x: { foo(x: A): A; }): any; } >x : any function foo15(x: I2); diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingTypeParameterNames.types b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingTypeParameterNames.types index 85e83528cd031..fd0b14a4f79ec 100644 --- a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingTypeParameterNames.types +++ b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesDifferingTypeParameterNames.types @@ -65,10 +65,9 @@ var a: { foo(x: Z): Z } >Z : Z var b = { foo(x: A) { return x; } }; ->b : { foo: (x: A) => A; } ->{ foo(x: A) { return x; } } : { foo: (x: A) => A; } +>b : { foo(x: A): A; } +>{ foo(x: A) { return x; } } : { foo(x: A): A; } >foo : (x: A) => A ->foo(x: A) { return x; } : (x: A) => A >A : A >x : A >A : A @@ -145,17 +144,17 @@ function foo3(x: any) { } >x : any function foo4(x: typeof b); ->foo4 : { (x: { foo: (x: A) => A; }): any; (x: { foo: (x: A) => A; }): any; } ->x : { foo: (x: A) => A; } ->b : { foo: (x: A) => A; } +>foo4 : { (x: { foo(x: A): A; }): any; (x: { foo(x: A): A; }): any; } +>x : { foo(x: A): A; } +>b : { foo(x: A): A; } function foo4(x: typeof b); // error ->foo4 : { (x: { foo: (x: A) => A; }): any; (x: { foo: (x: A) => A; }): any; } ->x : { foo: (x: A) => A; } ->b : { foo: (x: A) => A; } +>foo4 : { (x: { foo(x: A): A; }): any; (x: { foo(x: A): A; }): any; } +>x : { foo(x: A): A; } +>b : { foo(x: A): A; } function foo4(x: any) { } ->foo4 : { (x: { foo: (x: A) => A; }): any; (x: { foo: (x: A) => A; }): any; } +>foo4 : { (x: { foo(x: A): A; }): any; (x: { foo(x: A): A; }): any; } >x : any function foo5(x: A); @@ -257,17 +256,17 @@ function foo10(x: any) { } >x : any function foo11(x: B); ->foo11 : { (x: B): any; (x: { foo: (x: A) => A; }): any; } +>foo11 : { (x: B): any; (x: { foo(x: A): A; }): any; } >x : B >B : B function foo11(x: typeof b); // ok ->foo11 : { (x: B): any; (x: { foo: (x: A) => A; }): any; } ->x : { foo: (x: A) => A; } ->b : { foo: (x: A) => A; } +>foo11 : { (x: B): any; (x: { foo(x: A): A; }): any; } +>x : { foo(x: A): A; } +>b : { foo(x: A): A; } function foo11(x: any) { } ->foo11 : { (x: B): any; (x: { foo: (x: A) => A; }): any; } +>foo11 : { (x: B): any; (x: { foo(x: A): A; }): any; } >x : any function foo12(x: I); @@ -313,17 +312,17 @@ function foo13(x: any) { } >x : any function foo14(x: I); ->foo14 : { (x: I): any; (x: { foo: (x: A) => A; }): any; } +>foo14 : { (x: I): any; (x: { foo(x: A): A; }): any; } >x : I >I : I function foo14(x: typeof b); // ok ->foo14 : { (x: I): any; (x: { foo: (x: A) => A; }): any; } ->x : { foo: (x: A) => A; } ->b : { foo: (x: A) => A; } +>foo14 : { (x: I): any; (x: { foo(x: A): A; }): any; } +>x : { foo(x: A): A; } +>b : { foo(x: A): A; } function foo14(x: any) { } ->foo14 : { (x: I): any; (x: { foo: (x: A) => A; }): any; } +>foo14 : { (x: I): any; (x: { foo(x: A): A; }): any; } >x : any function foo15(x: I2); diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesOptionalParams.types b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesOptionalParams.types index bef916fc410d4..33fce5295a745 100644 --- a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesOptionalParams.types +++ b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesOptionalParams.types @@ -79,10 +79,9 @@ var a: { foo(x: T, y?: T): T } >T : T var b = { foo(x: T, y?: T) { return x; } }; ->b : { foo: (x: T, y?: T) => T; } ->{ foo(x: T, y?: T) { return x; } } : { foo: (x: T, y?: T) => T; } +>b : { foo(x: T, y?: T): T; } +>{ foo(x: T, y?: T) { return x; } } : { foo(x: T, y?: T): T; } >foo : (x: T, y?: T) => T ->foo(x: T, y?: T) { return x; } : (x: T, y?: T) => T >T : T >x : T >T : T @@ -161,17 +160,17 @@ function foo3(x: any) { } >x : any function foo4(x: typeof b); ->foo4 : { (x: { foo: (x: T, y?: T) => T; }): any; (x: { foo: (x: T, y?: T) => T; }): any; } ->x : { foo: (x: T, y?: T) => T; } ->b : { foo: (x: T, y?: T) => T; } +>foo4 : { (x: { foo(x: T, y?: T): T; }): any; (x: { foo(x: T, y?: T): T; }): any; } +>x : { foo(x: T, y?: T): T; } +>b : { foo(x: T, y?: T): T; } function foo4(x: typeof b); // error ->foo4 : { (x: { foo: (x: T, y?: T) => T; }): any; (x: { foo: (x: T, y?: T) => T; }): any; } ->x : { foo: (x: T, y?: T) => T; } ->b : { foo: (x: T, y?: T) => T; } +>foo4 : { (x: { foo(x: T, y?: T): T; }): any; (x: { foo(x: T, y?: T): T; }): any; } +>x : { foo(x: T, y?: T): T; } +>b : { foo(x: T, y?: T): T; } function foo4(x: any) { } ->foo4 : { (x: { foo: (x: T, y?: T) => T; }): any; (x: { foo: (x: T, y?: T) => T; }): any; } +>foo4 : { (x: { foo(x: T, y?: T): T; }): any; (x: { foo(x: T, y?: T): T; }): any; } >x : any function foo5(x: A); @@ -273,17 +272,17 @@ function foo10(x: any) { } >x : any function foo11(x: B); ->foo11 : { (x: B): any; (x: { foo: (x: T, y?: T) => T; }): any; } +>foo11 : { (x: B): any; (x: { foo(x: T, y?: T): T; }): any; } >x : B >B : B function foo11(x: typeof b); // ok ->foo11 : { (x: B): any; (x: { foo: (x: T, y?: T) => T; }): any; } ->x : { foo: (x: T, y?: T) => T; } ->b : { foo: (x: T, y?: T) => T; } +>foo11 : { (x: B): any; (x: { foo(x: T, y?: T): T; }): any; } +>x : { foo(x: T, y?: T): T; } +>b : { foo(x: T, y?: T): T; } function foo11(x: any) { } ->foo11 : { (x: B): any; (x: { foo: (x: T, y?: T) => T; }): any; } +>foo11 : { (x: B): any; (x: { foo(x: T, y?: T): T; }): any; } >x : any function foo12(x: I); @@ -329,17 +328,17 @@ function foo13(x: any) { } >x : any function foo14(x: I); ->foo14 : { (x: I): any; (x: { foo: (x: T, y?: T) => T; }): any; } +>foo14 : { (x: I): any; (x: { foo(x: T, y?: T): T; }): any; } >x : I >I : I function foo14(x: typeof b); // ok ->foo14 : { (x: I): any; (x: { foo: (x: T, y?: T) => T; }): any; } ->x : { foo: (x: T, y?: T) => T; } ->b : { foo: (x: T, y?: T) => T; } +>foo14 : { (x: I): any; (x: { foo(x: T, y?: T): T; }): any; } +>x : { foo(x: T, y?: T): T; } +>b : { foo(x: T, y?: T): T; } function foo14(x: any) { } ->foo14 : { (x: I): any; (x: { foo: (x: T, y?: T) => T; }): any; } +>foo14 : { (x: I): any; (x: { foo(x: T, y?: T): T; }): any; } >x : any function foo15(x: I2); diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesOptionalParams2.types b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesOptionalParams2.types index c8a4ad6be29e7..2d9eab7c54062 100644 --- a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesOptionalParams2.types +++ b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesOptionalParams2.types @@ -85,10 +85,9 @@ var a: { foo(x: T, y?: U): T } >T : T var b = { foo(x: T, y?: U) { return x; } }; ->b : { foo: (x: T, y?: U) => T; } ->{ foo(x: T, y?: U) { return x; } } : { foo: (x: T, y?: U) => T; } +>b : { foo(x: T, y?: U): T; } +>{ foo(x: T, y?: U) { return x; } } : { foo(x: T, y?: U): T; } >foo : (x: T, y?: U) => T ->foo(x: T, y?: U) { return x; } : (x: T, y?: U) => T >T : T >U : U >x : T @@ -168,17 +167,17 @@ function foo3(x: any) { } >x : any function foo4(x: typeof b); ->foo4 : { (x: { foo: (x: T, y?: U) => T; }): any; (x: { foo: (x: T, y?: U) => T; }): any; } ->x : { foo: (x: T, y?: U) => T; } ->b : { foo: (x: T, y?: U) => T; } +>foo4 : { (x: { foo(x: T, y?: U): T; }): any; (x: { foo(x: T, y?: U): T; }): any; } +>x : { foo(x: T, y?: U): T; } +>b : { foo(x: T, y?: U): T; } function foo4(x: typeof b); // error ->foo4 : { (x: { foo: (x: T, y?: U) => T; }): any; (x: { foo: (x: T, y?: U) => T; }): any; } ->x : { foo: (x: T, y?: U) => T; } ->b : { foo: (x: T, y?: U) => T; } +>foo4 : { (x: { foo(x: T, y?: U): T; }): any; (x: { foo(x: T, y?: U): T; }): any; } +>x : { foo(x: T, y?: U): T; } +>b : { foo(x: T, y?: U): T; } function foo4(x: any) { } ->foo4 : { (x: { foo: (x: T, y?: U) => T; }): any; (x: { foo: (x: T, y?: U) => T; }): any; } +>foo4 : { (x: { foo(x: T, y?: U): T; }): any; (x: { foo(x: T, y?: U): T; }): any; } >x : any function foo5(x: A); @@ -280,17 +279,17 @@ function foo10(x: any) { } >x : any function foo11(x: B); ->foo11 : { (x: B): any; (x: { foo: (x: T, y?: U) => T; }): any; } +>foo11 : { (x: B): any; (x: { foo(x: T, y?: U): T; }): any; } >x : B >B : B function foo11(x: typeof b); // ok ->foo11 : { (x: B): any; (x: { foo: (x: T, y?: U) => T; }): any; } ->x : { foo: (x: T, y?: U) => T; } ->b : { foo: (x: T, y?: U) => T; } +>foo11 : { (x: B): any; (x: { foo(x: T, y?: U): T; }): any; } +>x : { foo(x: T, y?: U): T; } +>b : { foo(x: T, y?: U): T; } function foo11(x: any) { } ->foo11 : { (x: B): any; (x: { foo: (x: T, y?: U) => T; }): any; } +>foo11 : { (x: B): any; (x: { foo(x: T, y?: U): T; }): any; } >x : any function foo12(x: I); @@ -336,17 +335,17 @@ function foo13(x: any) { } >x : any function foo14(x: I); ->foo14 : { (x: I): any; (x: { foo: (x: T, y?: U) => T; }): any; } +>foo14 : { (x: I): any; (x: { foo(x: T, y?: U): T; }): any; } >x : I >I : I function foo14(x: typeof b); // ok ->foo14 : { (x: I): any; (x: { foo: (x: T, y?: U) => T; }): any; } ->x : { foo: (x: T, y?: U) => T; } ->b : { foo: (x: T, y?: U) => T; } +>foo14 : { (x: I): any; (x: { foo(x: T, y?: U): T; }): any; } +>x : { foo(x: T, y?: U): T; } +>b : { foo(x: T, y?: U): T; } function foo14(x: any) { } ->foo14 : { (x: I): any; (x: { foo: (x: T, y?: U) => T; }): any; } +>foo14 : { (x: I): any; (x: { foo(x: T, y?: U): T; }): any; } >x : any function foo15(x: I2); diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesOptionalParams3.types b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesOptionalParams3.types index 06c23dcd0b10c..54ec438104e2a 100644 --- a/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesOptionalParams3.types +++ b/tests/baselines/reference/objectTypesIdentityWithGenericCallSignaturesOptionalParams3.types @@ -85,10 +85,9 @@ var a: { foo(x: T, y?: U): T } >T : T var b = { foo(x: T, y: U) { return x; } }; ->b : { foo: (x: T, y: U) => T; } ->{ foo(x: T, y: U) { return x; } } : { foo: (x: T, y: U) => T; } +>b : { foo(x: T, y: U): T; } +>{ foo(x: T, y: U) { return x; } } : { foo(x: T, y: U): T; } >foo : (x: T, y: U) => T ->foo(x: T, y: U) { return x; } : (x: T, y: U) => T >T : T >U : U >x : T @@ -168,17 +167,17 @@ function foo3(x: any) { } >x : any function foo4(x: typeof b); ->foo4 : { (x: { foo: (x: T, y: U) => T; }): any; (x: { foo: (x: T, y: U) => T; }): any; } ->x : { foo: (x: T, y: U) => T; } ->b : { foo: (x: T, y: U) => T; } +>foo4 : { (x: { foo(x: T, y: U): T; }): any; (x: { foo(x: T, y: U): T; }): any; } +>x : { foo(x: T, y: U): T; } +>b : { foo(x: T, y: U): T; } function foo4(x: typeof b); // error ->foo4 : { (x: { foo: (x: T, y: U) => T; }): any; (x: { foo: (x: T, y: U) => T; }): any; } ->x : { foo: (x: T, y: U) => T; } ->b : { foo: (x: T, y: U) => T; } +>foo4 : { (x: { foo(x: T, y: U): T; }): any; (x: { foo(x: T, y: U): T; }): any; } +>x : { foo(x: T, y: U): T; } +>b : { foo(x: T, y: U): T; } function foo4(x: any) { } ->foo4 : { (x: { foo: (x: T, y: U) => T; }): any; (x: { foo: (x: T, y: U) => T; }): any; } +>foo4 : { (x: { foo(x: T, y: U): T; }): any; (x: { foo(x: T, y: U): T; }): any; } >x : any function foo5(x: A); @@ -280,17 +279,17 @@ function foo10(x: any) { } >x : any function foo11(x: B); ->foo11 : { (x: B): any; (x: { foo: (x: T, y: U) => T; }): any; } +>foo11 : { (x: B): any; (x: { foo(x: T, y: U): T; }): any; } >x : B >B : B function foo11(x: typeof b); // ok ->foo11 : { (x: B): any; (x: { foo: (x: T, y: U) => T; }): any; } ->x : { foo: (x: T, y: U) => T; } ->b : { foo: (x: T, y: U) => T; } +>foo11 : { (x: B): any; (x: { foo(x: T, y: U): T; }): any; } +>x : { foo(x: T, y: U): T; } +>b : { foo(x: T, y: U): T; } function foo11(x: any) { } ->foo11 : { (x: B): any; (x: { foo: (x: T, y: U) => T; }): any; } +>foo11 : { (x: B): any; (x: { foo(x: T, y: U): T; }): any; } >x : any function foo12(x: I); @@ -336,17 +335,17 @@ function foo13(x: any) { } >x : any function foo14(x: I); ->foo14 : { (x: I): any; (x: { foo: (x: T, y: U) => T; }): any; } +>foo14 : { (x: I): any; (x: { foo(x: T, y: U): T; }): any; } >x : I >I : I function foo14(x: typeof b); // ok ->foo14 : { (x: I): any; (x: { foo: (x: T, y: U) => T; }): any; } ->x : { foo: (x: T, y: U) => T; } ->b : { foo: (x: T, y: U) => T; } +>foo14 : { (x: I): any; (x: { foo(x: T, y: U): T; }): any; } +>x : { foo(x: T, y: U): T; } +>b : { foo(x: T, y: U): T; } function foo14(x: any) { } ->foo14 : { (x: I): any; (x: { foo: (x: T, y: U) => T; }): any; } +>foo14 : { (x: I): any; (x: { foo(x: T, y: U): T; }): any; } >x : any function foo15(x: I2); diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByConstraints.types b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByConstraints.types index 8a41814e1a906..7acc93db124ce 100644 --- a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByConstraints.types +++ b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByConstraints.types @@ -51,10 +51,9 @@ var a: { new>(x: T): string } >T : T var b = { new(x: T) { return ''; } }; // not a construct signature, function called new ->b : { new: (x: T) => string; } ->{ new(x: T) { return ''; } } : { new: (x: T) => string; } +>b : { new(x: T): string; } +>{ new(x: T) { return ''; } } : { new(x: T): string; } >new : (x: T) => string ->new(x: T) { return ''; } : (x: T) => string >T : T >RegExp : RegExp >x : T @@ -123,17 +122,17 @@ function foo3(x: any) { } >x : any function foo4(x: typeof b); ->foo4 : { (x: { new: (x: T) => string; }): any; (x: { new: (x: T) => string; }): any; } ->x : { new: (x: T) => string; } ->b : { new: (x: T) => string; } +>foo4 : { (x: { new(x: T): string; }): any; (x: { new(x: T): string; }): any; } +>x : { new(x: T): string; } +>b : { new(x: T): string; } function foo4(x: typeof b); // error ->foo4 : { (x: { new: (x: T) => string; }): any; (x: { new: (x: T) => string; }): any; } ->x : { new: (x: T) => string; } ->b : { new: (x: T) => string; } +>foo4 : { (x: { new(x: T): string; }): any; (x: { new(x: T): string; }): any; } +>x : { new(x: T): string; } +>b : { new(x: T): string; } function foo4(x: any) { } ->foo4 : { (x: { new: (x: T) => string; }): any; (x: { new: (x: T) => string; }): any; } +>foo4 : { (x: { new(x: T): string; }): any; (x: { new(x: T): string; }): any; } >x : any function foo8(x: B>); @@ -184,18 +183,18 @@ function foo10(x: any) { } >x : any function foo11(x: B>); ->foo11 : { (x: B): any; (x: { new: (x: T) => string; }): any; } +>foo11 : { (x: B): any; (x: { new(x: T): string; }): any; } >x : B >B : B >Array : T[] function foo11(x: typeof b); // ok ->foo11 : { (x: B): any; (x: { new: (x: T) => string; }): any; } ->x : { new: (x: T) => string; } ->b : { new: (x: T) => string; } +>foo11 : { (x: B): any; (x: { new(x: T): string; }): any; } +>x : { new(x: T): string; } +>b : { new(x: T): string; } function foo11(x: any) { } ->foo11 : { (x: B): any; (x: { new: (x: T) => string; }): any; } +>foo11 : { (x: B): any; (x: { new(x: T): string; }): any; } >x : any function foo12(x: I); @@ -245,17 +244,17 @@ function foo13(x: any) { } >x : any function foo14(x: I); ->foo14 : { (x: I): any; (x: { new: (x: T) => string; }): any; } +>foo14 : { (x: I): any; (x: { new(x: T): string; }): any; } >x : I >I : I >Number : Number function foo14(x: typeof b); // ok ->foo14 : { (x: I): any; (x: { new: (x: T) => string; }): any; } ->x : { new: (x: T) => string; } ->b : { new: (x: T) => string; } +>foo14 : { (x: I): any; (x: { new(x: T): string; }): any; } +>x : { new(x: T): string; } +>b : { new(x: T): string; } function foo14(x: any) { } ->foo14 : { (x: I): any; (x: { new: (x: T) => string; }): any; } +>foo14 : { (x: I): any; (x: { new(x: T): string; }): any; } >x : any diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByReturnType.types b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByReturnType.types index 1eac69f7f23a5..4b2e628ad5d0c 100644 --- a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByReturnType.types +++ b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByReturnType.types @@ -49,10 +49,9 @@ var a: { new(x: T): T } >T : T var b = { new(x: T): T { return null; } }; // not a construct signature, function called new ->b : { new: (x: T) => T; } ->{ new(x: T): T { return null; } } : { new: (x: T) => T; } +>b : { new(x: T): T; } +>{ new(x: T): T { return null; } } : { new(x: T): T; } >new : (x: T) => T ->new(x: T): T { return null; } : (x: T) => T >T : T >x : T >T : T @@ -115,31 +114,31 @@ function foo3(x: any) { } >x : any function foo4(x: typeof b); ->foo4 : { (x: { new: (x: T) => T; }): any; (x: { new: (x: T) => T; }): any; } ->x : { new: (x: T) => T; } ->b : { new: (x: T) => T; } +>foo4 : { (x: { new(x: T): T; }): any; (x: { new(x: T): T; }): any; } +>x : { new(x: T): T; } +>b : { new(x: T): T; } function foo4(x: typeof b); // error ->foo4 : { (x: { new: (x: T) => T; }): any; (x: { new: (x: T) => T; }): any; } ->x : { new: (x: T) => T; } ->b : { new: (x: T) => T; } +>foo4 : { (x: { new(x: T): T; }): any; (x: { new(x: T): T; }): any; } +>x : { new(x: T): T; } +>b : { new(x: T): T; } function foo4(x: any) { } ->foo4 : { (x: { new: (x: T) => T; }): any; (x: { new: (x: T) => T; }): any; } +>foo4 : { (x: { new(x: T): T; }): any; (x: { new(x: T): T; }): any; } >x : any function foo5(x: typeof a): number; ->foo5 : { (x: new (x: T) => T): number; (x: { new: (x: T) => T; }): string; } +>foo5 : { (x: new (x: T) => T): number; (x: { new(x: T): T; }): string; } >x : new (x: T) => T >a : new (x: T) => T function foo5(x: typeof b): string; // ok ->foo5 : { (x: new (x: T) => T): number; (x: { new: (x: T) => T; }): string; } ->x : { new: (x: T) => T; } ->b : { new: (x: T) => T; } +>foo5 : { (x: new (x: T) => T): number; (x: { new(x: T): T; }): string; } +>x : { new(x: T): T; } +>b : { new(x: T): T; } function foo5(x: any): any { } ->foo5 : { (x: new (x: T) => T): number; (x: { new: (x: T) => T; }): string; } +>foo5 : { (x: new (x: T) => T): number; (x: { new(x: T): T; }): string; } >x : any function foo8(x: B); @@ -185,17 +184,17 @@ function foo10(x: any) { } >x : any function foo11(x: B); ->foo11 : { (x: B): any; (x: { new: (x: T) => T; }): any; } +>foo11 : { (x: B): any; (x: { new(x: T): T; }): any; } >x : B >B : B function foo11(x: typeof b); // ok ->foo11 : { (x: B): any; (x: { new: (x: T) => T; }): any; } ->x : { new: (x: T) => T; } ->b : { new: (x: T) => T; } +>foo11 : { (x: B): any; (x: { new(x: T): T; }): any; } +>x : { new(x: T): T; } +>b : { new(x: T): T; } function foo11(x: any) { } ->foo11 : { (x: B): any; (x: { new: (x: T) => T; }): any; } +>foo11 : { (x: B): any; (x: { new(x: T): T; }): any; } >x : any function foo12(x: I); @@ -241,17 +240,17 @@ function foo13(x: any) { } >x : any function foo14(x: I); ->foo14 : { (x: I): any; (x: { new: (x: T) => T; }): any; } +>foo14 : { (x: I): any; (x: { new(x: T): T; }): any; } >x : I >I : I function foo14(x: typeof b); // ok ->foo14 : { (x: I): any; (x: { new: (x: T) => T; }): any; } ->x : { new: (x: T) => T; } ->b : { new: (x: T) => T; } +>foo14 : { (x: I): any; (x: { new(x: T): T; }): any; } +>x : { new(x: T): T; } +>b : { new(x: T): T; } function foo14(x: any) { } ->foo14 : { (x: I): any; (x: { new: (x: T) => T; }): any; } +>foo14 : { (x: I): any; (x: { new(x: T): T; }): any; } >x : any function foo15(x: I2); diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByReturnType2.types b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByReturnType2.types index 308f592ef127e..a25fb5b876aaa 100644 --- a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByReturnType2.types +++ b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingByReturnType2.types @@ -54,10 +54,9 @@ var a: { new(x: T): T } >T : T var b = { new(x: T) { return null; } }; // not a construct signature, function called new ->b : { new: (x: T) => any; } ->{ new(x: T) { return null; } } : { new: (x: T) => any; } +>b : { new(x: T): any; } +>{ new(x: T) { return null; } } : { new(x: T): any; } >new : (x: T) => any ->new(x: T) { return null; } : (x: T) => any >T : T >Date : Date >x : T @@ -126,17 +125,17 @@ function foo3(x: any) { } >x : any function foo4(x: typeof b); ->foo4 : { (x: { new: (x: T) => any; }): any; (x: { new: (x: T) => any; }): any; } ->x : { new: (x: T) => any; } ->b : { new: (x: T) => any; } +>foo4 : { (x: { new(x: T): any; }): any; (x: { new(x: T): any; }): any; } +>x : { new(x: T): any; } +>b : { new(x: T): any; } function foo4(x: typeof b); // error ->foo4 : { (x: { new: (x: T) => any; }): any; (x: { new: (x: T) => any; }): any; } ->x : { new: (x: T) => any; } ->b : { new: (x: T) => any; } +>foo4 : { (x: { new(x: T): any; }): any; (x: { new(x: T): any; }): any; } +>x : { new(x: T): any; } +>b : { new(x: T): any; } function foo4(x: any) { } ->foo4 : { (x: { new: (x: T) => any; }): any; (x: { new: (x: T) => any; }): any; } +>foo4 : { (x: { new(x: T): any; }): any; (x: { new(x: T): any; }): any; } >x : any function foo8(x: B); @@ -187,18 +186,18 @@ function foo10(x: any) { } >x : any function foo11(x: B); ->foo11 : { (x: B): any; (x: { new: (x: T) => any; }): any; } +>foo11 : { (x: B): any; (x: { new(x: T): any; }): any; } >x : B >B : B >Date : Date function foo11(x: typeof b); // ok ->foo11 : { (x: B): any; (x: { new: (x: T) => any; }): any; } ->x : { new: (x: T) => any; } ->b : { new: (x: T) => any; } +>foo11 : { (x: B): any; (x: { new(x: T): any; }): any; } +>x : { new(x: T): any; } +>b : { new(x: T): any; } function foo11(x: any) { } ->foo11 : { (x: B): any; (x: { new: (x: T) => any; }): any; } +>foo11 : { (x: B): any; (x: { new(x: T): any; }): any; } >x : any function foo12(x: I); @@ -248,18 +247,18 @@ function foo13(x: any) { } >x : any function foo14(x: I); ->foo14 : { (x: I): any; (x: { new: (x: T) => any; }): any; } +>foo14 : { (x: I): any; (x: { new(x: T): any; }): any; } >x : I >I : I >Date : Date function foo14(x: typeof b); // ok ->foo14 : { (x: I): any; (x: { new: (x: T) => any; }): any; } ->x : { new: (x: T) => any; } ->b : { new: (x: T) => any; } +>foo14 : { (x: I): any; (x: { new(x: T): any; }): any; } +>x : { new(x: T): any; } +>b : { new(x: T): any; } function foo14(x: any) { } ->foo14 : { (x: I): any; (x: { new: (x: T) => any; }): any; } +>foo14 : { (x: I): any; (x: { new(x: T): any; }): any; } >x : any function foo15(x: I2); diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingTypeParameterCounts.types b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingTypeParameterCounts.types index 0276458ea915b..683c3ace9f9c6 100644 --- a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingTypeParameterCounts.types +++ b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingTypeParameterCounts.types @@ -68,10 +68,9 @@ var a: { new (x: Z): C; } >B : B var b = { new(x: A) { return x; } }; ->b : { new: (x: A) => A; } ->{ new(x: A) { return x; } } : { new: (x: A) => A; } +>b : { new(x: A): A; } +>{ new(x: A) { return x; } } : { new(x: A): A; } >new : (x: A) => A ->new(x: A) { return x; } : (x: A) => A >A : A >B : B >C : C @@ -139,17 +138,17 @@ function foo3(x: any) { } >x : any function foo4(x: typeof b); ->foo4 : { (x: { new: (x: A) => A; }): any; (x: { new: (x: A) => A; }): any; } ->x : { new: (x: A) => A; } ->b : { new: (x: A) => A; } +>foo4 : { (x: { new(x: A): A; }): any; (x: { new(x: A): A; }): any; } +>x : { new(x: A): A; } +>b : { new(x: A): A; } function foo4(x: typeof b); // error ->foo4 : { (x: { new: (x: A) => A; }): any; (x: { new: (x: A) => A; }): any; } ->x : { new: (x: A) => A; } ->b : { new: (x: A) => A; } +>foo4 : { (x: { new(x: A): A; }): any; (x: { new(x: A): A; }): any; } +>x : { new(x: A): A; } +>b : { new(x: A): A; } function foo4(x: any) { } ->foo4 : { (x: { new: (x: A) => A; }): any; (x: { new: (x: A) => A; }): any; } +>foo4 : { (x: { new(x: A): A; }): any; (x: { new(x: A): A; }): any; } >x : any function foo8(x: B); @@ -197,17 +196,17 @@ function foo10(x: any) { } >x : any function foo11(x: B); ->foo11 : { (x: B): any; (x: { new: (x: A) => A; }): any; } +>foo11 : { (x: B): any; (x: { new(x: A): A; }): any; } >x : B >B : B function foo11(x: typeof b); // ok ->foo11 : { (x: B): any; (x: { new: (x: A) => A; }): any; } ->x : { new: (x: A) => A; } ->b : { new: (x: A) => A; } +>foo11 : { (x: B): any; (x: { new(x: A): A; }): any; } +>x : { new(x: A): A; } +>b : { new(x: A): A; } function foo11(x: any) { } ->foo11 : { (x: B): any; (x: { new: (x: A) => A; }): any; } +>foo11 : { (x: B): any; (x: { new(x: A): A; }): any; } >x : any function foo12(x: I, number, Date, string>); @@ -260,18 +259,18 @@ function foo13(x: any) { } >x : any function foo14(x: I); ->foo14 : { (x: I): any; (x: { new: (x: A) => A; }): any; } +>foo14 : { (x: I): any; (x: { new(x: A): A; }): any; } >x : I >I : I >Date : Date >RegExp : RegExp function foo14(x: typeof b); // ok ->foo14 : { (x: I): any; (x: { new: (x: A) => A; }): any; } ->x : { new: (x: A) => A; } ->b : { new: (x: A) => A; } +>foo14 : { (x: I): any; (x: { new(x: A): A; }): any; } +>x : { new(x: A): A; } +>b : { new(x: A): A; } function foo14(x: any) { } ->foo14 : { (x: I): any; (x: { new: (x: A) => A; }): any; } +>foo14 : { (x: I): any; (x: { new(x: A): A; }): any; } >x : any diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingTypeParameterNames.types b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingTypeParameterNames.types index 10a8da269078f..af65ca5b91142 100644 --- a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingTypeParameterNames.types +++ b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesDifferingTypeParameterNames.types @@ -50,10 +50,9 @@ var a: { new(x: Z): B } >Z : Z var b = { new(x: A) { return new C(x); } }; ->b : { new: (x: A) => C; } ->{ new(x: A) { return new C(x); } } : { new: (x: A) => C; } +>b : { new(x: A): C; } +>{ new(x: A) { return new C(x); } } : { new(x: A): C; } >new : (x: A) => C ->new(x: A) { return new C(x); } : (x: A) => C >A : A >x : A >A : A @@ -119,17 +118,17 @@ function foo3(x: any) { } >x : any function foo4(x: typeof b); ->foo4 : { (x: { new: (x: A) => C; }): any; (x: { new: (x: A) => C; }): any; } ->x : { new: (x: A) => C; } ->b : { new: (x: A) => C; } +>foo4 : { (x: { new(x: A): C; }): any; (x: { new(x: A): C; }): any; } +>x : { new(x: A): C; } +>b : { new(x: A): C; } function foo4(x: typeof b); // error ->foo4 : { (x: { new: (x: A) => C; }): any; (x: { new: (x: A) => C; }): any; } ->x : { new: (x: A) => C; } ->b : { new: (x: A) => C; } +>foo4 : { (x: { new(x: A): C; }): any; (x: { new(x: A): C; }): any; } +>x : { new(x: A): C; } +>b : { new(x: A): C; } function foo4(x: any) { } ->foo4 : { (x: { new: (x: A) => C; }): any; (x: { new: (x: A) => C; }): any; } +>foo4 : { (x: { new(x: A): C; }): any; (x: { new(x: A): C; }): any; } >x : any function foo8(x: B); @@ -175,17 +174,17 @@ function foo10(x: any) { } >x : any function foo11(x: B); ->foo11 : { (x: B): any; (x: { new: (x: A) => C; }): any; } +>foo11 : { (x: B): any; (x: { new(x: A): C; }): any; } >x : B >B : B function foo11(x: typeof b); // ok ->foo11 : { (x: B): any; (x: { new: (x: A) => C; }): any; } ->x : { new: (x: A) => C; } ->b : { new: (x: A) => C; } +>foo11 : { (x: B): any; (x: { new(x: A): C; }): any; } +>x : { new(x: A): C; } +>b : { new(x: A): C; } function foo11(x: any) { } ->foo11 : { (x: B): any; (x: { new: (x: A) => C; }): any; } +>foo11 : { (x: B): any; (x: { new(x: A): C; }): any; } >x : any function foo12(x: I); @@ -231,16 +230,16 @@ function foo13(x: any) { } >x : any function foo14(x: I); ->foo14 : { (x: I): any; (x: { new: (x: A) => C; }): any; } +>foo14 : { (x: I): any; (x: { new(x: A): C; }): any; } >x : I >I : I function foo14(x: typeof b); // ok ->foo14 : { (x: I): any; (x: { new: (x: A) => C; }): any; } ->x : { new: (x: A) => C; } ->b : { new: (x: A) => C; } +>foo14 : { (x: I): any; (x: { new(x: A): C; }): any; } +>x : { new(x: A): C; } +>b : { new(x: A): C; } function foo14(x: any) { } ->foo14 : { (x: I): any; (x: { new: (x: A) => C; }): any; } +>foo14 : { (x: I): any; (x: { new(x: A): C; }): any; } >x : any diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesOptionalParams.types b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesOptionalParams.types index 28ef6a815055a..a6dea7c2518ff 100644 --- a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesOptionalParams.types +++ b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesOptionalParams.types @@ -62,10 +62,9 @@ var a: { new(x: T, y?: T): B } >T : T var b = { new(x: T, y?: T) { return new C(x, y); } }; // not a construct signature, function called new ->b : { new: (x: T, y?: T) => C; } ->{ new(x: T, y?: T) { return new C(x, y); } } : { new: (x: T, y?: T) => C; } +>b : { new(x: T, y?: T): C; } +>{ new(x: T, y?: T) { return new C(x, y); } } : { new(x: T, y?: T): C; } >new : (x: T, y?: T) => C ->new(x: T, y?: T) { return new C(x, y); } : (x: T, y?: T) => C >T : T >x : T >T : T @@ -134,17 +133,17 @@ function foo3(x: any) { } >x : any function foo4(x: typeof b); ->foo4 : { (x: { new: (x: T, y?: T) => C; }): any; (x: { new: (x: T, y?: T) => C; }): any; } ->x : { new: (x: T, y?: T) => C; } ->b : { new: (x: T, y?: T) => C; } +>foo4 : { (x: { new(x: T, y?: T): C; }): any; (x: { new(x: T, y?: T): C; }): any; } +>x : { new(x: T, y?: T): C; } +>b : { new(x: T, y?: T): C; } function foo4(x: typeof b); // error ->foo4 : { (x: { new: (x: T, y?: T) => C; }): any; (x: { new: (x: T, y?: T) => C; }): any; } ->x : { new: (x: T, y?: T) => C; } ->b : { new: (x: T, y?: T) => C; } +>foo4 : { (x: { new(x: T, y?: T): C; }): any; (x: { new(x: T, y?: T): C; }): any; } +>x : { new(x: T, y?: T): C; } +>b : { new(x: T, y?: T): C; } function foo4(x: any) { } ->foo4 : { (x: { new: (x: T, y?: T) => C; }): any; (x: { new: (x: T, y?: T) => C; }): any; } +>foo4 : { (x: { new(x: T, y?: T): C; }): any; (x: { new(x: T, y?: T): C; }): any; } >x : any function foo8(x: B): string; @@ -190,17 +189,17 @@ function foo10(x: any) { } >x : any function foo11(x: B); ->foo11 : { (x: B): any; (x: { new: (x: T, y?: T) => C; }): any; } +>foo11 : { (x: B): any; (x: { new(x: T, y?: T): C; }): any; } >x : B >B : B function foo11(x: typeof b); // ok ->foo11 : { (x: B): any; (x: { new: (x: T, y?: T) => C; }): any; } ->x : { new: (x: T, y?: T) => C; } ->b : { new: (x: T, y?: T) => C; } +>foo11 : { (x: B): any; (x: { new(x: T, y?: T): C; }): any; } +>x : { new(x: T, y?: T): C; } +>b : { new(x: T, y?: T): C; } function foo11(x: any) { } ->foo11 : { (x: B): any; (x: { new: (x: T, y?: T) => C; }): any; } +>foo11 : { (x: B): any; (x: { new(x: T, y?: T): C; }): any; } >x : any function foo12(x: I); @@ -246,16 +245,16 @@ function foo13(x: any) { } >x : any function foo14(x: I); ->foo14 : { (x: I): any; (x: { new: (x: T, y?: T) => C; }): any; } +>foo14 : { (x: I): any; (x: { new(x: T, y?: T): C; }): any; } >x : I >I : I function foo14(x: typeof b); // ok ->foo14 : { (x: I): any; (x: { new: (x: T, y?: T) => C; }): any; } ->x : { new: (x: T, y?: T) => C; } ->b : { new: (x: T, y?: T) => C; } +>foo14 : { (x: I): any; (x: { new(x: T, y?: T): C; }): any; } +>x : { new(x: T, y?: T): C; } +>b : { new(x: T, y?: T): C; } function foo14(x: any) { } ->foo14 : { (x: I): any; (x: { new: (x: T, y?: T) => C; }): any; } +>foo14 : { (x: I): any; (x: { new(x: T, y?: T): C; }): any; } >x : any diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesOptionalParams2.types b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesOptionalParams2.types index e75f1ce7cbbae..3c0f09e61da96 100644 --- a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesOptionalParams2.types +++ b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesOptionalParams2.types @@ -70,10 +70,9 @@ var a: { new(x: T, y?: U): B } >U : U var b = { new(x: T, y?: U) { return new C(x, y); } }; // not a construct signature, function called new ->b : { new: (x: T, y?: U) => C; } ->{ new(x: T, y?: U) { return new C(x, y); } } : { new: (x: T, y?: U) => C; } +>b : { new(x: T, y?: U): C; } +>{ new(x: T, y?: U) { return new C(x, y); } } : { new(x: T, y?: U): C; } >new : (x: T, y?: U) => C ->new(x: T, y?: U) { return new C(x, y); } : (x: T, y?: U) => C >T : T >U : U >x : T @@ -144,17 +143,17 @@ function foo3(x: any) { } >x : any function foo4(x: typeof b); ->foo4 : { (x: { new: (x: T, y?: U) => C; }): any; (x: { new: (x: T, y?: U) => C; }): any; } ->x : { new: (x: T, y?: U) => C; } ->b : { new: (x: T, y?: U) => C; } +>foo4 : { (x: { new(x: T, y?: U): C; }): any; (x: { new(x: T, y?: U): C; }): any; } +>x : { new(x: T, y?: U): C; } +>b : { new(x: T, y?: U): C; } function foo4(x: typeof b); // error ->foo4 : { (x: { new: (x: T, y?: U) => C; }): any; (x: { new: (x: T, y?: U) => C; }): any; } ->x : { new: (x: T, y?: U) => C; } ->b : { new: (x: T, y?: U) => C; } +>foo4 : { (x: { new(x: T, y?: U): C; }): any; (x: { new(x: T, y?: U): C; }): any; } +>x : { new(x: T, y?: U): C; } +>b : { new(x: T, y?: U): C; } function foo4(x: any) { } ->foo4 : { (x: { new: (x: T, y?: U) => C; }): any; (x: { new: (x: T, y?: U) => C; }): any; } +>foo4 : { (x: { new(x: T, y?: U): C; }): any; (x: { new(x: T, y?: U): C; }): any; } >x : any function foo8(x: B); @@ -200,17 +199,17 @@ function foo10(x: any) { } >x : any function foo11(x: B); ->foo11 : { (x: B): any; (x: { new: (x: T, y?: U) => C; }): any; } +>foo11 : { (x: B): any; (x: { new(x: T, y?: U): C; }): any; } >x : B >B : B function foo11(x: typeof b); // ok ->foo11 : { (x: B): any; (x: { new: (x: T, y?: U) => C; }): any; } ->x : { new: (x: T, y?: U) => C; } ->b : { new: (x: T, y?: U) => C; } +>foo11 : { (x: B): any; (x: { new(x: T, y?: U): C; }): any; } +>x : { new(x: T, y?: U): C; } +>b : { new(x: T, y?: U): C; } function foo11(x: any) { } ->foo11 : { (x: B): any; (x: { new: (x: T, y?: U) => C; }): any; } +>foo11 : { (x: B): any; (x: { new(x: T, y?: U): C; }): any; } >x : any function foo12(x: I); @@ -256,16 +255,16 @@ function foo13(x: any) { } >x : any function foo14(x: I); ->foo14 : { (x: I): any; (x: { new: (x: T, y?: U) => C; }): any; } +>foo14 : { (x: I): any; (x: { new(x: T, y?: U): C; }): any; } >x : I >I : I function foo14(x: typeof b); // ok ->foo14 : { (x: I): any; (x: { new: (x: T, y?: U) => C; }): any; } ->x : { new: (x: T, y?: U) => C; } ->b : { new: (x: T, y?: U) => C; } +>foo14 : { (x: I): any; (x: { new(x: T, y?: U): C; }): any; } +>x : { new(x: T, y?: U): C; } +>b : { new(x: T, y?: U): C; } function foo14(x: any) { } ->foo14 : { (x: I): any; (x: { new: (x: T, y?: U) => C; }): any; } +>foo14 : { (x: I): any; (x: { new(x: T, y?: U): C; }): any; } >x : any diff --git a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesOptionalParams3.types b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesOptionalParams3.types index 5f5d592df343b..f21ccc15abb49 100644 --- a/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesOptionalParams3.types +++ b/tests/baselines/reference/objectTypesIdentityWithGenericConstructSignaturesOptionalParams3.types @@ -70,10 +70,9 @@ var a: { new (x: T, y?: U): B }; >U : U var b = { new(x: T, y: U) { return new C(x, y); } }; // not a construct signature, function called new ->b : { new: (x: T, y: U) => C; } ->{ new(x: T, y: U) { return new C(x, y); } } : { new: (x: T, y: U) => C; } +>b : { new(x: T, y: U): C; } +>{ new(x: T, y: U) { return new C(x, y); } } : { new(x: T, y: U): C; } >new : (x: T, y: U) => C ->new(x: T, y: U) { return new C(x, y); } : (x: T, y: U) => C >T : T >U : U >x : T @@ -144,17 +143,17 @@ function foo3(x: any) { } >x : any function foo4(x: typeof b); ->foo4 : { (x: { new: (x: T, y: U) => C; }): any; (x: { new: (x: T, y: U) => C; }): any; } ->x : { new: (x: T, y: U) => C; } ->b : { new: (x: T, y: U) => C; } +>foo4 : { (x: { new(x: T, y: U): C; }): any; (x: { new(x: T, y: U): C; }): any; } +>x : { new(x: T, y: U): C; } +>b : { new(x: T, y: U): C; } function foo4(x: typeof b); // error ->foo4 : { (x: { new: (x: T, y: U) => C; }): any; (x: { new: (x: T, y: U) => C; }): any; } ->x : { new: (x: T, y: U) => C; } ->b : { new: (x: T, y: U) => C; } +>foo4 : { (x: { new(x: T, y: U): C; }): any; (x: { new(x: T, y: U): C; }): any; } +>x : { new(x: T, y: U): C; } +>b : { new(x: T, y: U): C; } function foo4(x: any) { } ->foo4 : { (x: { new: (x: T, y: U) => C; }): any; (x: { new: (x: T, y: U) => C; }): any; } +>foo4 : { (x: { new(x: T, y: U): C; }): any; (x: { new(x: T, y: U): C; }): any; } >x : any function foo8(x: B); @@ -200,17 +199,17 @@ function foo10(x: any) { } >x : any function foo11(x: B); ->foo11 : { (x: B): any; (x: { new: (x: T, y: U) => C; }): any; } +>foo11 : { (x: B): any; (x: { new(x: T, y: U): C; }): any; } >x : B >B : B function foo11(x: typeof b); // ok ->foo11 : { (x: B): any; (x: { new: (x: T, y: U) => C; }): any; } ->x : { new: (x: T, y: U) => C; } ->b : { new: (x: T, y: U) => C; } +>foo11 : { (x: B): any; (x: { new(x: T, y: U): C; }): any; } +>x : { new(x: T, y: U): C; } +>b : { new(x: T, y: U): C; } function foo11(x: any) { } ->foo11 : { (x: B): any; (x: { new: (x: T, y: U) => C; }): any; } +>foo11 : { (x: B): any; (x: { new(x: T, y: U): C; }): any; } >x : any function foo12(x: I); @@ -256,16 +255,16 @@ function foo13(x: any) { } >x : any function foo14(x: I); ->foo14 : { (x: I): any; (x: { new: (x: T, y: U) => C; }): any; } +>foo14 : { (x: I): any; (x: { new(x: T, y: U): C; }): any; } >x : I >I : I function foo14(x: typeof b); // ok ->foo14 : { (x: I): any; (x: { new: (x: T, y: U) => C; }): any; } ->x : { new: (x: T, y: U) => C; } ->b : { new: (x: T, y: U) => C; } +>foo14 : { (x: I): any; (x: { new(x: T, y: U): C; }): any; } +>x : { new(x: T, y: U): C; } +>b : { new(x: T, y: U): C; } function foo14(x: any) { } ->foo14 : { (x: I): any; (x: { new: (x: T, y: U) => C; }): any; } +>foo14 : { (x: I): any; (x: { new(x: T, y: U): C; }): any; } >x : any diff --git a/tests/baselines/reference/parametersWithNoAnnotationAreAny.types b/tests/baselines/reference/parametersWithNoAnnotationAreAny.types index 9629d06c1144b..0424a169331e6 100644 --- a/tests/baselines/reference/parametersWithNoAnnotationAreAny.types +++ b/tests/baselines/reference/parametersWithNoAnnotationAreAny.types @@ -58,12 +58,11 @@ var a: { } var b = { ->b : { foo: (x: any) => any; a: (x: any) => any; b: (x: any) => any; } ->{ foo(x) { return x; }, a: function foo(x) { return x; }, b: (x) => x} : { foo: (x: any) => any; a: (x: any) => any; b: (x: any) => any; } +>b : { foo(x: any): any; a: (x: any) => any; b: (x: any) => any; } +>{ foo(x) { return x; }, a: function foo(x) { return x; }, b: (x) => x} : { foo(x: any): any; a: (x: any) => any; b: (x: any) => any; } foo(x) { >foo : (x: any) => any ->foo(x) { return x; } : (x: any) => any >x : any return x; diff --git a/tests/baselines/reference/parseShortform.types b/tests/baselines/reference/parseShortform.types index 21aff67ead46b..e9e3f68b559e6 100644 --- a/tests/baselines/reference/parseShortform.types +++ b/tests/baselines/reference/parseShortform.types @@ -3,7 +3,7 @@ interface I { >I : I w: { ->w : { (): boolean; [x: string]: { x: any; y: any; }; [x: number]: { x: any; y: any; }; z: I; } +>w : { (): boolean; [s: string]: { x: any; y: any; }; [n: number]: { x: any; y: any; }; z: I; } z: I; >z : I diff --git a/tests/baselines/reference/parserComputedPropertyName3.js b/tests/baselines/reference/parserComputedPropertyName3.js index edb8533ad8124..2e73fe87d3ae1 100644 --- a/tests/baselines/reference/parserComputedPropertyName3.js +++ b/tests/baselines/reference/parserComputedPropertyName3.js @@ -2,5 +2,5 @@ var v = { [e]() { } }; //// [parserComputedPropertyName3.js] -var v = { [e]: function () { +var v = { [e]() { } }; diff --git a/tests/baselines/reference/parserComputedPropertyName3.types b/tests/baselines/reference/parserComputedPropertyName3.types index f673d9fbeb840..8a5cfafbd40e4 100644 --- a/tests/baselines/reference/parserComputedPropertyName3.types +++ b/tests/baselines/reference/parserComputedPropertyName3.types @@ -3,5 +3,4 @@ var v = { [e]() { } }; >v : {} >{ [e]() { } } : {} >e : unknown ->[e]() { } : () => void diff --git a/tests/baselines/reference/parserConstructorAmbiguity3.errors.txt b/tests/baselines/reference/parserConstructorAmbiguity3.errors.txt index 674bb1ff17bf1..0562bc6c49892 100644 --- a/tests/baselines/reference/parserConstructorAmbiguity3.errors.txt +++ b/tests/baselines/reference/parserConstructorAmbiguity3.errors.txt @@ -1,10 +1,13 @@ -tests/cases/conformance/parser/ecmascript5/Generics/parserConstructorAmbiguity3.ts(1,12): error TS1109: Expression expected. +tests/cases/conformance/parser/ecmascript5/Generics/parserConstructorAmbiguity3.ts(1,12): error TS1005: '(' expected. +tests/cases/conformance/parser/ecmascript5/Generics/parserConstructorAmbiguity3.ts(1,1): error TS2346: Supplied parameters do not match any signature of call target. tests/cases/conformance/parser/ecmascript5/Generics/parserConstructorAmbiguity3.ts(1,10): error TS2304: Cannot find name 'A'. -==== tests/cases/conformance/parser/ecmascript5/Generics/parserConstructorAmbiguity3.ts (2 errors) ==== +==== tests/cases/conformance/parser/ecmascript5/Generics/parserConstructorAmbiguity3.ts (3 errors) ==== new Date -!!! error TS1109: Expression expected. +!!! error TS1005: '(' expected. + ~~~~~~~~~~~ +!!! error TS2346: Supplied parameters do not match any signature of call target. ~ !!! error TS2304: Cannot find name 'A'. \ No newline at end of file diff --git a/tests/baselines/reference/parserFunctionPropertyAssignment1.types b/tests/baselines/reference/parserFunctionPropertyAssignment1.types index d84e798d02327..1b552cdfefd01 100644 --- a/tests/baselines/reference/parserFunctionPropertyAssignment1.types +++ b/tests/baselines/reference/parserFunctionPropertyAssignment1.types @@ -1,7 +1,6 @@ === tests/cases/conformance/parser/ecmascript5/PropertyAssignments/parserFunctionPropertyAssignment1.ts === var v = { foo() { } }; ->v : { foo: () => void; } ->{ foo() { } } : { foo: () => void; } +>v : { foo(): void; } +>{ foo() { } } : { foo(): void; } >foo : () => void ->foo() { } : () => void diff --git a/tests/baselines/reference/parserFunctionPropertyAssignment2.types b/tests/baselines/reference/parserFunctionPropertyAssignment2.types index 21d182993bbf8..747b66978af00 100644 --- a/tests/baselines/reference/parserFunctionPropertyAssignment2.types +++ b/tests/baselines/reference/parserFunctionPropertyAssignment2.types @@ -1,6 +1,5 @@ === tests/cases/conformance/parser/ecmascript5/PropertyAssignments/parserFunctionPropertyAssignment2.ts === var v = { 0() { } }; ->v : { 0: () => void; } ->{ 0() { } } : { 0: () => void; } ->0() { } : () => void +>v : { 0(): void; } +>{ 0() { } } : { 0(): void; } diff --git a/tests/baselines/reference/parserFunctionPropertyAssignment3.types b/tests/baselines/reference/parserFunctionPropertyAssignment3.types index 2c76fdf07a4d1..9fb2bb45feff9 100644 --- a/tests/baselines/reference/parserFunctionPropertyAssignment3.types +++ b/tests/baselines/reference/parserFunctionPropertyAssignment3.types @@ -1,6 +1,5 @@ === tests/cases/conformance/parser/ecmascript5/PropertyAssignments/parserFunctionPropertyAssignment3.ts === var v = { "foo"() { } }; ->v : { "foo": () => void; } ->{ "foo"() { } } : { "foo": () => void; } ->"foo"() { } : () => void +>v : { "foo"(): void; } +>{ "foo"() { } } : { "foo"(): void; } diff --git a/tests/baselines/reference/parserFunctionPropertyAssignment4.types b/tests/baselines/reference/parserFunctionPropertyAssignment4.types index 4aec89e265f2e..6ab031518d4fd 100644 --- a/tests/baselines/reference/parserFunctionPropertyAssignment4.types +++ b/tests/baselines/reference/parserFunctionPropertyAssignment4.types @@ -1,7 +1,6 @@ === tests/cases/conformance/parser/ecmascript5/PropertyAssignments/parserFunctionPropertyAssignment4.ts === var v = { 0() { } }; ->v : { 0: () => void; } ->{ 0() { } } : { 0: () => void; } ->0() { } : () => void +>v : { 0(): void; } +>{ 0() { } } : { 0(): void; } >T : T diff --git a/tests/baselines/reference/parserMemberAccessExpression1.errors.txt b/tests/baselines/reference/parserMemberAccessExpression1.errors.txt index 90980e6fc18b9..266f84457d37e 100644 --- a/tests/baselines/reference/parserMemberAccessExpression1.errors.txt +++ b/tests/baselines/reference/parserMemberAccessExpression1.errors.txt @@ -1,14 +1,16 @@ -tests/cases/conformance/parser/ecmascript5/Generics/parserMemberAccessExpression1.ts(3,7): error TS1109: Expression expected. -tests/cases/conformance/parser/ecmascript5/Generics/parserMemberAccessExpression1.ts(4,7): error TS1109: Expression expected. +tests/cases/conformance/parser/ecmascript5/Generics/parserMemberAccessExpression1.ts(3,7): error TS1005: '(' expected. +tests/cases/conformance/parser/ecmascript5/Generics/parserMemberAccessExpression1.ts(3,13): error TS1005: ')' expected. +tests/cases/conformance/parser/ecmascript5/Generics/parserMemberAccessExpression1.ts(4,7): error TS1005: '(' expected. +tests/cases/conformance/parser/ecmascript5/Generics/parserMemberAccessExpression1.ts(4,16): error TS1005: ')' expected. tests/cases/conformance/parser/ecmascript5/Generics/parserMemberAccessExpression1.ts(1,1): error TS2304: Cannot find name 'Foo'. tests/cases/conformance/parser/ecmascript5/Generics/parserMemberAccessExpression1.ts(2,1): error TS2304: Cannot find name 'Foo'. tests/cases/conformance/parser/ecmascript5/Generics/parserMemberAccessExpression1.ts(3,1): error TS2304: Cannot find name 'Foo'. -tests/cases/conformance/parser/ecmascript5/Generics/parserMemberAccessExpression1.ts(3,5): error TS2304: Cannot find name 'T'. +tests/cases/conformance/parser/ecmascript5/Generics/parserMemberAccessExpression1.ts(3,8): error TS2304: Cannot find name 'Bar'. tests/cases/conformance/parser/ecmascript5/Generics/parserMemberAccessExpression1.ts(4,1): error TS2304: Cannot find name 'Foo'. -tests/cases/conformance/parser/ecmascript5/Generics/parserMemberAccessExpression1.ts(4,5): error TS2304: Cannot find name 'T'. +tests/cases/conformance/parser/ecmascript5/Generics/parserMemberAccessExpression1.ts(4,8): error TS2304: Cannot find name 'Bar'. -==== tests/cases/conformance/parser/ecmascript5/Generics/parserMemberAccessExpression1.ts (8 errors) ==== +==== tests/cases/conformance/parser/ecmascript5/Generics/parserMemberAccessExpression1.ts (10 errors) ==== Foo(); ~~~ !!! error TS2304: Cannot find name 'Foo'. @@ -17,16 +19,20 @@ tests/cases/conformance/parser/ecmascript5/Generics/parserMemberAccessExpression !!! error TS2304: Cannot find name 'Foo'. Foo.Bar(); ~ -!!! error TS1109: Expression expected. +!!! error TS1005: '(' expected. + ~ +!!! error TS1005: ')' expected. ~~~ !!! error TS2304: Cannot find name 'Foo'. - ~ -!!! error TS2304: Cannot find name 'T'. + ~~~ +!!! error TS2304: Cannot find name 'Bar'. Foo.Bar(); ~ -!!! error TS1109: Expression expected. +!!! error TS1005: '(' expected. + ~ +!!! error TS1005: ')' expected. ~~~ !!! error TS2304: Cannot find name 'Foo'. - ~ -!!! error TS2304: Cannot find name 'T'. + ~~~ +!!! error TS2304: Cannot find name 'Bar'. \ No newline at end of file diff --git a/tests/baselines/reference/parserMemberAccessOffOfGenericType1.errors.txt b/tests/baselines/reference/parserMemberAccessOffOfGenericType1.errors.txt index 29d321e849d43..8040ff52bdd2d 100644 --- a/tests/baselines/reference/parserMemberAccessOffOfGenericType1.errors.txt +++ b/tests/baselines/reference/parserMemberAccessOffOfGenericType1.errors.txt @@ -1,13 +1,16 @@ -tests/cases/conformance/parser/ecmascript5/Generics/parserMemberAccessOffOfGenericType1.ts(1,21): error TS1109: Expression expected. +tests/cases/conformance/parser/ecmascript5/Generics/parserMemberAccessOffOfGenericType1.ts(1,21): error TS1005: '(' expected. +tests/cases/conformance/parser/ecmascript5/Generics/parserMemberAccessOffOfGenericType1.ts(1,33): error TS1005: ')' expected. tests/cases/conformance/parser/ecmascript5/Generics/parserMemberAccessOffOfGenericType1.ts(1,9): error TS2304: Cannot find name 'List'. -tests/cases/conformance/parser/ecmascript5/Generics/parserMemberAccessOffOfGenericType1.ts(1,14): error TS2304: Cannot find name 'number'. +tests/cases/conformance/parser/ecmascript5/Generics/parserMemberAccessOffOfGenericType1.ts(1,22): error TS2304: Cannot find name 'makeChild'. -==== tests/cases/conformance/parser/ecmascript5/Generics/parserMemberAccessOffOfGenericType1.ts (3 errors) ==== +==== tests/cases/conformance/parser/ecmascript5/Generics/parserMemberAccessOffOfGenericType1.ts (4 errors) ==== var v = List.makeChild(); ~ -!!! error TS1109: Expression expected. +!!! error TS1005: '(' expected. + ~ +!!! error TS1005: ')' expected. ~~~~ !!! error TS2304: Cannot find name 'List'. - ~~~~~~ -!!! error TS2304: Cannot find name 'number'. \ No newline at end of file + ~~~~~~~~~ +!!! error TS2304: Cannot find name 'makeChild'. \ No newline at end of file diff --git a/tests/baselines/reference/parserX_ArrowFunction3.errors.txt b/tests/baselines/reference/parserX_ArrowFunction3.errors.txt index 14b37b96ec75f..e2be2abc48235 100644 --- a/tests/baselines/reference/parserX_ArrowFunction3.errors.txt +++ b/tests/baselines/reference/parserX_ArrowFunction3.errors.txt @@ -1,15 +1,12 @@ -tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ArrowFunctions/parserX_ArrowFunction3.ts(1,12): error TS1005: ',' expected. -tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ArrowFunctions/parserX_ArrowFunction3.ts(1,14): error TS1005: ';' expected. -tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ArrowFunctions/parserX_ArrowFunction3.ts(1,10): error TS2304: Cannot find name 'a'. +tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ArrowFunctions/parserX_ArrowFunction3.ts(1,14): error TS1110: Type expected. +tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ArrowFunctions/parserX_ArrowFunction3.ts(1,13): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value or consist of a single 'throw' statement. -==== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ArrowFunctions/parserX_ArrowFunction3.ts (3 errors) ==== +==== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ArrowFunctions/parserX_ArrowFunction3.ts (2 errors) ==== var v = (a): => { - ~ -!!! error TS1005: ',' expected. ~~ -!!! error TS1005: ';' expected. - ~ -!!! error TS2304: Cannot find name 'a'. +!!! error TS1110: Type expected. + +!!! error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value or consist of a single 'throw' statement. }; \ No newline at end of file diff --git a/tests/baselines/reference/parserX_TypeArgumentList1.errors.txt b/tests/baselines/reference/parserX_TypeArgumentList1.errors.txt index 9ad9d839a27a4..67fc7e323805f 100644 --- a/tests/baselines/reference/parserX_TypeArgumentList1.errors.txt +++ b/tests/baselines/reference/parserX_TypeArgumentList1.errors.txt @@ -1,19 +1,10 @@ tests/cases/conformance/parser/ecmascript5/ErrorRecovery/TypeArgumentLists/parserX_TypeArgumentList1.ts(1,9): error TS1127: Invalid character. tests/cases/conformance/parser/ecmascript5/ErrorRecovery/TypeArgumentLists/parserX_TypeArgumentList1.ts(1,1): error TS2304: Cannot find name 'Foo'. -tests/cases/conformance/parser/ecmascript5/ErrorRecovery/TypeArgumentLists/parserX_TypeArgumentList1.ts(1,5): error TS2304: Cannot find name 'A'. -tests/cases/conformance/parser/ecmascript5/ErrorRecovery/TypeArgumentLists/parserX_TypeArgumentList1.ts(1,7): error TS2304: Cannot find name 'B'. -tests/cases/conformance/parser/ecmascript5/ErrorRecovery/TypeArgumentLists/parserX_TypeArgumentList1.ts(1,11): error TS2304: Cannot find name 'C'. -==== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/TypeArgumentLists/parserX_TypeArgumentList1.ts (5 errors) ==== +==== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/TypeArgumentLists/parserX_TypeArgumentList1.ts (2 errors) ==== Foo(4, 5, 6); !!! error TS1127: Invalid character. ~~~ -!!! error TS2304: Cannot find name 'Foo'. - ~ -!!! error TS2304: Cannot find name 'A'. - ~ -!!! error TS2304: Cannot find name 'B'. - ~ -!!! error TS2304: Cannot find name 'C'. \ No newline at end of file +!!! error TS2304: Cannot find name 'Foo'. \ No newline at end of file diff --git a/tests/baselines/reference/privatePropertyUsingObjectType.types b/tests/baselines/reference/privatePropertyUsingObjectType.types index 678418b1ddf7f..4c6b6820fc063 100644 --- a/tests/baselines/reference/privatePropertyUsingObjectType.types +++ b/tests/baselines/reference/privatePropertyUsingObjectType.types @@ -8,7 +8,7 @@ export class FilterManager { >IFilterProvider : IFilterProvider private _filterProviders2: { [index: number]: IFilterProvider; }; ->_filterProviders2 : { [x: number]: IFilterProvider; } +>_filterProviders2 : { [index: number]: IFilterProvider; } >index : number >IFilterProvider : IFilterProvider diff --git a/tests/baselines/reference/recursiveTypesWithTypeof.types b/tests/baselines/reference/recursiveTypesWithTypeof.types index f75bae79c5b7c..14ff5a6d5b937 100644 --- a/tests/baselines/reference/recursiveTypesWithTypeof.types +++ b/tests/baselines/reference/recursiveTypesWithTypeof.types @@ -135,21 +135,21 @@ var j2 = new j2(j2); // Indexers var k: { [n: number]: typeof k;[s: string]: typeof k }; ->k : { [x: string]: any; [x: number]: any; } +>k : { [s: string]: any; [n: number]: any; } >n : number ->k : { [x: string]: any; [x: number]: any; } +>k : { [s: string]: any; [n: number]: any; } >s : string ->k : { [x: string]: any; [x: number]: any; } +>k : { [s: string]: any; [n: number]: any; } var k = k[0]; ->k : { [x: string]: any; [x: number]: any; } ->k[0] : { [x: string]: any; [x: number]: any; } ->k : { [x: string]: any; [x: number]: any; } +>k : { [s: string]: any; [n: number]: any; } +>k[0] : { [s: string]: any; [n: number]: any; } +>k : { [s: string]: any; [n: number]: any; } var k = k['']; ->k : { [x: string]: any; [x: number]: any; } ->k[''] : { [x: string]: any; [x: number]: any; } ->k : { [x: string]: any; [x: number]: any; } +>k : { [s: string]: any; [n: number]: any; } +>k[''] : { [s: string]: any; [n: number]: any; } +>k : { [s: string]: any; [n: number]: any; } // Hybrid - contains type literals as well as type arguments // These two are recursive diff --git a/tests/baselines/reference/sourceMapValidationFunctionPropertyAssignment.js.map b/tests/baselines/reference/sourceMapValidationFunctionPropertyAssignment.js.map index 74b7201ea8f84..cc78ea833bba0 100644 --- a/tests/baselines/reference/sourceMapValidationFunctionPropertyAssignment.js.map +++ b/tests/baselines/reference/sourceMapValidationFunctionPropertyAssignment.js.map @@ -1,2 +1,2 @@ //// [sourceMapValidationFunctionPropertyAssignment.js.map] -{"version":3,"file":"sourceMapValidationFunctionPropertyAssignment.js","sourceRoot":"","sources":["sourceMapValidationFunctionPropertyAssignment.ts"],"names":[],"mappings":"AAAA,IAAI,CAAC,GAAG,EAAE,CAAC,EAAD;AAAM,CAAC,EAAE,CAAC"} \ No newline at end of file +{"version":3,"file":"sourceMapValidationFunctionPropertyAssignment.js","sourceRoot":"","sources":["sourceMapValidationFunctionPropertyAssignment.ts"],"names":["n"],"mappings":"AAAA,IAAI,CAAC,GAAG,EAAE,CAAC;AAAKA,CAACA,EAAE,CAAC"} \ No newline at end of file diff --git a/tests/baselines/reference/sourceMapValidationFunctionPropertyAssignment.sourcemap.txt b/tests/baselines/reference/sourceMapValidationFunctionPropertyAssignment.sourcemap.txt index c34558a11a303..a1f780ae2fe3b 100644 --- a/tests/baselines/reference/sourceMapValidationFunctionPropertyAssignment.sourcemap.txt +++ b/tests/baselines/reference/sourceMapValidationFunctionPropertyAssignment.sourcemap.txt @@ -15,21 +15,18 @@ sourceFile:sourceMapValidationFunctionPropertyAssignment.ts 4 > ^^^ 5 > ^^ 6 > ^ -7 > ^^ 1 > 2 >var 3 > x 4 > = 5 > { 6 > n -7 > 1 >Emitted(1, 1) Source(1, 1) + SourceIndex(0) 2 >Emitted(1, 5) Source(1, 5) + SourceIndex(0) 3 >Emitted(1, 6) Source(1, 6) + SourceIndex(0) 4 >Emitted(1, 9) Source(1, 9) + SourceIndex(0) 5 >Emitted(1, 11) Source(1, 11) + SourceIndex(0) 6 >Emitted(1, 12) Source(1, 12) + SourceIndex(0) -7 >Emitted(1, 14) Source(1, 11) + SourceIndex(0) --- >>>} }; 1 > @@ -37,12 +34,12 @@ sourceFile:sourceMapValidationFunctionPropertyAssignment.ts 3 > ^^ 4 > ^ 5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> -1 >n() { +1 >() { 2 >} 3 > } 4 > ; -1 >Emitted(2, 1) Source(1, 17) + SourceIndex(0) -2 >Emitted(2, 2) Source(1, 18) + SourceIndex(0) +1 >Emitted(2, 1) Source(1, 17) + SourceIndex(0) name (n) +2 >Emitted(2, 2) Source(1, 18) + SourceIndex(0) name (n) 3 >Emitted(2, 4) Source(1, 20) + SourceIndex(0) 4 >Emitted(2, 5) Source(1, 21) + SourceIndex(0) --- diff --git a/tests/baselines/reference/sourceMapValidationFunctionPropertyAssignment.types b/tests/baselines/reference/sourceMapValidationFunctionPropertyAssignment.types index a00f5fd0eff9d..4644782c5510f 100644 --- a/tests/baselines/reference/sourceMapValidationFunctionPropertyAssignment.types +++ b/tests/baselines/reference/sourceMapValidationFunctionPropertyAssignment.types @@ -1,7 +1,6 @@ === tests/cases/compiler/sourceMapValidationFunctionPropertyAssignment.ts === var x = { n() { } }; ->x : { n: () => void; } ->{ n() { } } : { n: () => void; } +>x : { n(): void; } +>{ n() { } } : { n(): void; } >n : () => void ->n() { } : () => void diff --git a/tests/baselines/reference/stringIndexerAssignments1.errors.txt b/tests/baselines/reference/stringIndexerAssignments1.errors.txt index 3939ceba1bb06..908371bc7dd0e 100644 --- a/tests/baselines/reference/stringIndexerAssignments1.errors.txt +++ b/tests/baselines/reference/stringIndexerAssignments1.errors.txt @@ -1,6 +1,6 @@ -tests/cases/compiler/stringIndexerAssignments1.ts(4,1): error TS2322: Type '{ one: string; }' is not assignable to type '{ [x: string]: string; one: string; }'. +tests/cases/compiler/stringIndexerAssignments1.ts(4,1): error TS2322: Type '{ one: string; }' is not assignable to type '{ [index: string]: string; one: string; }'. Index signature is missing in type '{ one: string; }'. -tests/cases/compiler/stringIndexerAssignments1.ts(5,1): error TS2322: Type '{ one: number; two: string; }' is not assignable to type '{ [x: string]: string; one: string; }'. +tests/cases/compiler/stringIndexerAssignments1.ts(5,1): error TS2322: Type '{ one: number; two: string; }' is not assignable to type '{ [index: string]: string; one: string; }'. Types of property 'one' are incompatible. Type 'number' is not assignable to type 'string'. @@ -11,11 +11,11 @@ tests/cases/compiler/stringIndexerAssignments1.ts(5,1): error TS2322: Type '{ on var b: { one: number; two: string; }; x = a; ~ -!!! error TS2322: Type '{ one: string; }' is not assignable to type '{ [x: string]: string; one: string; }'. +!!! error TS2322: Type '{ one: string; }' is not assignable to type '{ [index: string]: string; one: string; }'. !!! error TS2322: Index signature is missing in type '{ one: string; }'. x = b; // error ~ -!!! error TS2322: Type '{ one: number; two: string; }' is not assignable to type '{ [x: string]: string; one: string; }'. +!!! error TS2322: Type '{ one: number; two: string; }' is not assignable to type '{ [index: string]: string; one: string; }'. !!! error TS2322: Types of property 'one' are incompatible. !!! error TS2322: Type 'number' is not assignable to type 'string'. \ No newline at end of file diff --git a/tests/baselines/reference/stringIndexerConstrainsPropertyDeclarations.errors.txt b/tests/baselines/reference/stringIndexerConstrainsPropertyDeclarations.errors.txt index e4e8de5918575..bdb122f61085c 100644 --- a/tests/baselines/reference/stringIndexerConstrainsPropertyDeclarations.errors.txt +++ b/tests/baselines/reference/stringIndexerConstrainsPropertyDeclarations.errors.txt @@ -24,7 +24,7 @@ tests/cases/conformance/types/objectTypeLiteral/indexSignatures/stringIndexerCon tests/cases/conformance/types/objectTypeLiteral/indexSignatures/stringIndexerConstrainsPropertyDeclarations.ts(71,5): error TS2411: Property 'foo' of type '() => string' is not assignable to string index type 'string'. tests/cases/conformance/types/objectTypeLiteral/indexSignatures/stringIndexerConstrainsPropertyDeclarations.ts(73,5): error TS2411: Property '"4.0"' of type 'number' is not assignable to string index type 'string'. tests/cases/conformance/types/objectTypeLiteral/indexSignatures/stringIndexerConstrainsPropertyDeclarations.ts(74,5): error TS2411: Property 'f' of type 'MyString' is not assignable to string index type 'string'. -tests/cases/conformance/types/objectTypeLiteral/indexSignatures/stringIndexerConstrainsPropertyDeclarations.ts(78,5): error TS2322: Type '{ [x: string]: string | number | MyString | (() => void); 1.0: string; 2.0: number; a: string; b: number; c: () => void; "d": string; "e": number; "3.0": string; "4.0": number; f: MyString; X: string; foo: () => string; }' is not assignable to type '{ [x: string]: string; }'. +tests/cases/conformance/types/objectTypeLiteral/indexSignatures/stringIndexerConstrainsPropertyDeclarations.ts(78,5): error TS2322: Type '{ [x: string]: string | number | MyString | (() => void); 1.0: string; 2.0: number; a: string; b: number; c: () => void; "d": string; "e": number; "3.0": string; "4.0": number; f: MyString; X: string; foo(): string; }' is not assignable to type '{ [x: string]: string; }'. Index signatures are incompatible. Type 'string | number | MyString | (() => void)' is not assignable to type 'string'. Type 'number' is not assignable to type 'string'. @@ -160,7 +160,7 @@ tests/cases/conformance/types/objectTypeLiteral/indexSignatures/stringIndexerCon // error var b: { [x: string]: string; } = { ~ -!!! error TS2322: Type '{ [x: string]: string | number | MyString | (() => void); 1.0: string; 2.0: number; a: string; b: number; c: () => void; "d": string; "e": number; "3.0": string; "4.0": number; f: MyString; X: string; foo: () => string; }' is not assignable to type '{ [x: string]: string; }'. +!!! error TS2322: Type '{ [x: string]: string | number | MyString | (() => void); 1.0: string; 2.0: number; a: string; b: number; c: () => void; "d": string; "e": number; "3.0": string; "4.0": number; f: MyString; X: string; foo(): string; }' is not assignable to type '{ [x: string]: string; }'. !!! error TS2322: Index signatures are incompatible. !!! error TS2322: Type 'string | number | MyString | (() => void)' is not assignable to type 'string'. !!! error TS2322: Type 'number' is not assignable to type 'string'. diff --git a/tests/baselines/reference/thisInObjectLiterals.types b/tests/baselines/reference/thisInObjectLiterals.types index 8a279923e19f0..d3853389a9e12 100644 --- a/tests/baselines/reference/thisInObjectLiterals.types +++ b/tests/baselines/reference/thisInObjectLiterals.types @@ -29,12 +29,11 @@ class MyClass { //type of 'this' in an object literal property of a function type is Any var obj = { ->obj : { f: () => any; } ->{ f() { return this.spaaace; }} : { f: () => any; } +>obj : { f(): any; } +>{ f() { return this.spaaace; }} : { f(): any; } f() { >f : () => any ->f() { return this.spaaace; } : () => any return this.spaaace; >this.spaaace : any @@ -43,6 +42,6 @@ var obj = { } }; var obj: { f: () => any; }; ->obj : { f: () => any; } +>obj : { f(): any; } >f : () => any diff --git a/tests/baselines/reference/throwInEnclosingStatements.types b/tests/baselines/reference/throwInEnclosingStatements.types index d642dc55b0b14..dc5b8fb76a586 100644 --- a/tests/baselines/reference/throwInEnclosingStatements.types +++ b/tests/baselines/reference/throwInEnclosingStatements.types @@ -83,15 +83,14 @@ class C { } var aa = { ->aa : { id: number; biz: () => void; } ->{ id:12, biz() { throw this; }} : { id: number; biz: () => void; } +>aa : { id: number; biz(): void; } +>{ id:12, biz() { throw this; }} : { id: number; biz(): void; } id:12, >id : number biz() { >biz : () => void ->biz() { throw this; } : () => void throw this; >this : any diff --git a/tests/baselines/reference/throwWithoutNewLine1.errors.txt b/tests/baselines/reference/throwWithoutNewLine1.errors.txt new file mode 100644 index 0000000000000..6cc1c8f6fce07 --- /dev/null +++ b/tests/baselines/reference/throwWithoutNewLine1.errors.txt @@ -0,0 +1,7 @@ +tests/cases/compiler/throwWithoutNewLine1.ts(1,6): error TS1109: Expression expected. + + +==== tests/cases/compiler/throwWithoutNewLine1.ts (1 errors) ==== + throw + +!!! error TS1109: Expression expected. \ No newline at end of file diff --git a/tests/baselines/reference/throwWithoutNewLine2.errors.txt b/tests/baselines/reference/throwWithoutNewLine2.errors.txt new file mode 100644 index 0000000000000..6930d240e7b82 --- /dev/null +++ b/tests/baselines/reference/throwWithoutNewLine2.errors.txt @@ -0,0 +1,11 @@ +tests/cases/compiler/throwWithoutNewLine2.ts(1,6): error TS1142: Line break not permitted here. +tests/cases/compiler/throwWithoutNewLine2.ts(2,1): error TS2304: Cannot find name 'a'. + + +==== tests/cases/compiler/throwWithoutNewLine2.ts (2 errors) ==== + throw + +!!! error TS1142: Line break not permitted here. + a; + ~ +!!! error TS2304: Cannot find name 'a'. \ No newline at end of file diff --git a/tests/baselines/reference/typeGuardsObjectMethods.types b/tests/baselines/reference/typeGuardsObjectMethods.types index a063145ce245e..ecb4b8083eaf6 100644 --- a/tests/baselines/reference/typeGuardsObjectMethods.types +++ b/tests/baselines/reference/typeGuardsObjectMethods.types @@ -14,13 +14,12 @@ var var1: string | number; >var1 : string | number var obj1 = { ->obj1 : { method: (param: string | number) => string | number; prop: string | number; } ->{ // Inside method method(param: string | number) { // global vars in function declaration num = typeof var1 === "string" && var1.length; // string // variables in function declaration var var2: string | number; num = typeof var2 === "string" && var2.length; // string // parameters in function declaration num = typeof param === "string" && param.length; // string return strOrNum; }, get prop() { // global vars in function declaration num = typeof var1 === "string" && var1.length; // string // variables in function declaration var var2: string | number; num = typeof var2 === "string" && var2.length; // string return strOrNum; }, set prop(param: string | number) { // global vars in function declaration num = typeof var1 === "string" && var1.length; // string // variables in function declaration var var2: string | number; num = typeof var2 === "string" && var2.length; // string // parameters in function declaration num = typeof param === "string" && param.length; // string }} : { method: (param: string | number) => string | number; prop: string | number; } +>obj1 : { method(param: string | number): string | number; prop: string | number; } +>{ // Inside method method(param: string | number) { // global vars in function declaration num = typeof var1 === "string" && var1.length; // string // variables in function declaration var var2: string | number; num = typeof var2 === "string" && var2.length; // string // parameters in function declaration num = typeof param === "string" && param.length; // string return strOrNum; }, get prop() { // global vars in function declaration num = typeof var1 === "string" && var1.length; // string // variables in function declaration var var2: string | number; num = typeof var2 === "string" && var2.length; // string return strOrNum; }, set prop(param: string | number) { // global vars in function declaration num = typeof var1 === "string" && var1.length; // string // variables in function declaration var var2: string | number; num = typeof var2 === "string" && var2.length; // string // parameters in function declaration num = typeof param === "string" && param.length; // string }} : { method(param: string | number): string | number; prop: string | number; } // Inside method method(param: string | number) { >method : (param: string | number) => string | number ->method(param: string | number) { // global vars in function declaration num = typeof var1 === "string" && var1.length; // string // variables in function declaration var var2: string | number; num = typeof var2 === "string" && var2.length; // string // parameters in function declaration num = typeof param === "string" && param.length; // string return strOrNum; } : (param: string | number) => string | number >param : string | number // global vars in function declaration @@ -153,12 +152,12 @@ strOrNum = typeof obj1.method(strOrNum) === "string" && obj1.method(strOrNum); >typeof obj1.method(strOrNum) : string >obj1.method(strOrNum) : string | number >obj1.method : (param: string | number) => string | number ->obj1 : { method: (param: string | number) => string | number; prop: string | number; } +>obj1 : { method(param: string | number): string | number; prop: string | number; } >method : (param: string | number) => string | number >strOrNum : string | number >obj1.method(strOrNum) : string | number >obj1.method : (param: string | number) => string | number ->obj1 : { method: (param: string | number) => string | number; prop: string | number; } +>obj1 : { method(param: string | number): string | number; prop: string | number; } >method : (param: string | number) => string | number >strOrNum : string | number @@ -170,9 +169,9 @@ strOrNum = typeof obj1.prop === "string" && obj1.prop; >typeof obj1.prop === "string" : boolean >typeof obj1.prop : string >obj1.prop : string | number ->obj1 : { method: (param: string | number) => string | number; prop: string | number; } +>obj1 : { method(param: string | number): string | number; prop: string | number; } >prop : string | number >obj1.prop : string | number ->obj1 : { method: (param: string | number) => string | number; prop: string | number; } +>obj1 : { method(param: string | number): string | number; prop: string | number; } >prop : string | number diff --git a/tests/baselines/reference/typeName1.errors.txt b/tests/baselines/reference/typeName1.errors.txt index 64a32663875c9..84c8be360bd16 100644 --- a/tests/baselines/reference/typeName1.errors.txt +++ b/tests/baselines/reference/typeName1.errors.txt @@ -10,7 +10,7 @@ tests/cases/compiler/typeName1.ts(13,5): error TS2322: Type 'number' is not assi tests/cases/compiler/typeName1.ts(14,5): error TS2322: Type 'number' is not assignable to type '{ z: number; f: { (n: number): string; (s: string): number; }; }'. Property 'z' is missing in type 'Number'. tests/cases/compiler/typeName1.ts(15,5): error TS2322: Type 'number' is not assignable to type '(s: string) => boolean'. -tests/cases/compiler/typeName1.ts(16,5): error TS2322: Type 'number' is not assignable to type '{ (): boolean; [x: string]: { x: any; y: any; }; [x: number]: { x: any; y: any; }; z: I; }'. +tests/cases/compiler/typeName1.ts(16,5): error TS2322: Type 'number' is not assignable to type '{ (): boolean; [s: string]: { x: any; y: any; }; [n: number]: { x: any; y: any; }; z: I; }'. Property 'z' is missing in type 'Number'. tests/cases/compiler/typeName1.ts(16,10): error TS2411: Property 'z' of type 'I' is not assignable to string index type '{ x: any; y: any; }'. tests/cases/compiler/typeName1.ts(17,5): error TS2322: Type 'number' is not assignable to type 'I'. @@ -19,7 +19,7 @@ tests/cases/compiler/typeName1.ts(18,5): error TS2322: Type 'number' is not assi Property 'length' is missing in type 'Number'. tests/cases/compiler/typeName1.ts(19,5): error TS2322: Type 'number' is not assignable to type '{ z: I; x: boolean; }[][]'. Property 'length' is missing in type 'Number'. -tests/cases/compiler/typeName1.ts(20,5): error TS2322: Type 'number' is not assignable to type '{ z: I; x: boolean; y: (s: string) => boolean; w: { (): boolean; [x: string]: { x: any; y: any; }; [x: number]: { x: any; y: any; }; z: I; }; }[][]'. +tests/cases/compiler/typeName1.ts(20,5): error TS2322: Type 'number' is not assignable to type '{ z: I; x: boolean; y: (s: string) => boolean; w: { (): boolean; [s: string]: { x: any; y: any; }; [n: number]: { x: any; y: any; }; z: I; }; }[][]'. Property 'length' is missing in type 'Number'. tests/cases/compiler/typeName1.ts(20,50): error TS2411: Property 'z' of type 'I' is not assignable to string index type '{ x: any; y: any; }'. tests/cases/compiler/typeName1.ts(21,5): error TS2322: Type 'number' is not assignable to type '{ (): {}; new (): number; new (n: number): number; x: string; w: { y: number; }; }'. @@ -66,7 +66,7 @@ tests/cases/compiler/typeName1.ts(23,5): error TS2322: Type 'typeof C' is not as !!! error TS2322: Type 'number' is not assignable to type '(s: string) => boolean'. var x8:{ z:I;[s:string]:{ x; y; };[n:number]:{x; y;};():boolean; }=3; ~~ -!!! error TS2322: Type 'number' is not assignable to type '{ (): boolean; [x: string]: { x: any; y: any; }; [x: number]: { x: any; y: any; }; z: I; }'. +!!! error TS2322: Type 'number' is not assignable to type '{ (): boolean; [s: string]: { x: any; y: any; }; [n: number]: { x: any; y: any; }; z: I; }'. !!! error TS2322: Property 'z' is missing in type 'Number'. ~~~~ !!! error TS2411: Property 'z' of type 'I' is not assignable to string index type '{ x: any; y: any; }'. @@ -84,7 +84,7 @@ tests/cases/compiler/typeName1.ts(23,5): error TS2322: Type 'typeof C' is not as !!! error TS2322: Property 'length' is missing in type 'Number'. var x12:{z:I;x:boolean;y:(s:string)=>boolean;w:{ z:I;[s:string]:{ x; y; };[n:number]:{x; y;};():boolean; };}[][]=3; ~~~ -!!! error TS2322: Type 'number' is not assignable to type '{ z: I; x: boolean; y: (s: string) => boolean; w: { (): boolean; [x: string]: { x: any; y: any; }; [x: number]: { x: any; y: any; }; z: I; }; }[][]'. +!!! error TS2322: Type 'number' is not assignable to type '{ z: I; x: boolean; y: (s: string) => boolean; w: { (): boolean; [s: string]: { x: any; y: any; }; [n: number]: { x: any; y: any; }; z: I; }; }[][]'. !!! error TS2322: Property 'length' is missing in type 'Number'. ~~~~ !!! error TS2411: Property 'z' of type 'I' is not assignable to string index type '{ x: any; y: any; }'. diff --git a/tests/baselines/reference/typeParameterInConstraint1.errors.txt b/tests/baselines/reference/typeParameterInConstraint1.errors.txt new file mode 100644 index 0000000000000..ee8e9dcf37ff3 --- /dev/null +++ b/tests/baselines/reference/typeParameterInConstraint1.errors.txt @@ -0,0 +1,8 @@ +tests/cases/compiler/typeParameterInConstraint1.ts(1,12): error TS2313: Constraint of a type parameter cannot reference any type parameter from the same type parameter list. + + +==== tests/cases/compiler/typeParameterInConstraint1.ts (1 errors) ==== + class C { + ~~~~~~~~~~~ +!!! error TS2313: Constraint of a type parameter cannot reference any type parameter from the same type parameter list. + } \ No newline at end of file diff --git a/tests/baselines/reference/typeParameterInConstraint1.js b/tests/baselines/reference/typeParameterInConstraint1.js new file mode 100644 index 0000000000000..1cce707112d04 --- /dev/null +++ b/tests/baselines/reference/typeParameterInConstraint1.js @@ -0,0 +1,10 @@ +//// [typeParameterInConstraint1.ts] +class C { +} + +//// [typeParameterInConstraint1.js] +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/typeParameterListWithTrailingComma1.js b/tests/baselines/reference/typeParameterListWithTrailingComma1.js new file mode 100644 index 0000000000000..3891310fcb45b --- /dev/null +++ b/tests/baselines/reference/typeParameterListWithTrailingComma1.js @@ -0,0 +1,10 @@ +//// [typeParameterListWithTrailingComma1.ts] +class C { +} + +//// [typeParameterListWithTrailingComma1.js] +var C = (function () { + function C() { + } + return C; +})(); diff --git a/tests/baselines/reference/typeParameterListWithTrailingComma1.types b/tests/baselines/reference/typeParameterListWithTrailingComma1.types new file mode 100644 index 0000000000000..9c68a7ac30072 --- /dev/null +++ b/tests/baselines/reference/typeParameterListWithTrailingComma1.types @@ -0,0 +1,5 @@ +=== tests/cases/compiler/typeParameterListWithTrailingComma1.ts === +class C { +>C : C +>T : T +} diff --git a/tests/baselines/reference/unionTypeIndexSignature.types b/tests/baselines/reference/unionTypeIndexSignature.types index 96453cffcb425..4502a3ddfc37c 100644 --- a/tests/baselines/reference/unionTypeIndexSignature.types +++ b/tests/baselines/reference/unionTypeIndexSignature.types @@ -10,7 +10,7 @@ var anyVar: number; // U has a string index signature of a union type of the types of the string index signatures from each type in U. var unionOfDifferentReturnType: { [a: string]: number; } | { [a: string]: Date; }; ->unionOfDifferentReturnType : { [x: string]: number; } | { [x: string]: Date; } +>unionOfDifferentReturnType : { [a: string]: number; } | { [a: string]: Date; } >a : string >a : string >Date : Date @@ -19,34 +19,34 @@ numOrDate = unionOfDifferentReturnType["hello"]; // number | Date >numOrDate = unionOfDifferentReturnType["hello"] : number | Date >numOrDate : number | Date >unionOfDifferentReturnType["hello"] : number | Date ->unionOfDifferentReturnType : { [x: string]: number; } | { [x: string]: Date; } +>unionOfDifferentReturnType : { [a: string]: number; } | { [a: string]: Date; } numOrDate = unionOfDifferentReturnType[10]; // number | Date >numOrDate = unionOfDifferentReturnType[10] : number | Date >numOrDate : number | Date >unionOfDifferentReturnType[10] : number | Date ->unionOfDifferentReturnType : { [x: string]: number; } | { [x: string]: Date; } +>unionOfDifferentReturnType : { [a: string]: number; } | { [a: string]: Date; } var unionOfTypesWithAndWithoutStringSignature: { [a: string]: number; } | boolean; ->unionOfTypesWithAndWithoutStringSignature : boolean | { [x: string]: number; } +>unionOfTypesWithAndWithoutStringSignature : boolean | { [a: string]: number; } >a : string anyVar = unionOfTypesWithAndWithoutStringSignature["hello"]; // any >anyVar = unionOfTypesWithAndWithoutStringSignature["hello"] : any >anyVar : number >unionOfTypesWithAndWithoutStringSignature["hello"] : any ->unionOfTypesWithAndWithoutStringSignature : boolean | { [x: string]: number; } +>unionOfTypesWithAndWithoutStringSignature : boolean | { [a: string]: number; } anyVar = unionOfTypesWithAndWithoutStringSignature[10]; // any >anyVar = unionOfTypesWithAndWithoutStringSignature[10] : any >anyVar : number >unionOfTypesWithAndWithoutStringSignature[10] : any ->unionOfTypesWithAndWithoutStringSignature : boolean | { [x: string]: number; } +>unionOfTypesWithAndWithoutStringSignature : boolean | { [a: string]: number; } // If each type in U has a numeric index signature, // U has a numeric index signature of a union type of the types of the numeric index signatures from each type in U. var unionOfDifferentReturnType1: { [a: number]: number; } | { [a: number]: Date; }; ->unionOfDifferentReturnType1 : { [x: number]: number; } | { [x: number]: Date; } +>unionOfDifferentReturnType1 : { [a: number]: number; } | { [a: number]: Date; } >a : number >a : number >Date : Date @@ -55,27 +55,27 @@ numOrDate = unionOfDifferentReturnType1["hello"]; // any >numOrDate = unionOfDifferentReturnType1["hello"] : any >numOrDate : number | Date >unionOfDifferentReturnType1["hello"] : any ->unionOfDifferentReturnType1 : { [x: number]: number; } | { [x: number]: Date; } +>unionOfDifferentReturnType1 : { [a: number]: number; } | { [a: number]: Date; } numOrDate = unionOfDifferentReturnType1[10]; // number | Date >numOrDate = unionOfDifferentReturnType1[10] : number | Date >numOrDate : number | Date >unionOfDifferentReturnType1[10] : number | Date ->unionOfDifferentReturnType1 : { [x: number]: number; } | { [x: number]: Date; } +>unionOfDifferentReturnType1 : { [a: number]: number; } | { [a: number]: Date; } var unionOfTypesWithAndWithoutStringSignature1: { [a: number]: number; } | boolean; ->unionOfTypesWithAndWithoutStringSignature1 : boolean | { [x: number]: number; } +>unionOfTypesWithAndWithoutStringSignature1 : boolean | { [a: number]: number; } >a : number anyVar = unionOfTypesWithAndWithoutStringSignature1["hello"]; // any >anyVar = unionOfTypesWithAndWithoutStringSignature1["hello"] : any >anyVar : number >unionOfTypesWithAndWithoutStringSignature1["hello"] : any ->unionOfTypesWithAndWithoutStringSignature1 : boolean | { [x: number]: number; } +>unionOfTypesWithAndWithoutStringSignature1 : boolean | { [a: number]: number; } anyVar = unionOfTypesWithAndWithoutStringSignature1[10]; // any >anyVar = unionOfTypesWithAndWithoutStringSignature1[10] : any >anyVar : number >unionOfTypesWithAndWithoutStringSignature1[10] : any ->unionOfTypesWithAndWithoutStringSignature1 : boolean | { [x: number]: number; } +>unionOfTypesWithAndWithoutStringSignature1 : boolean | { [a: number]: number; } diff --git a/tests/baselines/reference/vardecl.types b/tests/baselines/reference/vardecl.types index 25257e57d78c4..d6847dc3be7c9 100644 --- a/tests/baselines/reference/vardecl.types +++ b/tests/baselines/reference/vardecl.types @@ -52,7 +52,7 @@ complicatedArrayVar.push({ x: 30, y : 'hello world' }); >y : string var n1: { [s: string]: number; }; ->n1 : { [x: string]: number; } +>n1 : { [s: string]: number; } >s : string var c : { diff --git a/tests/baselines/reference/variableDeclarationInStrictMode1.errors.txt b/tests/baselines/reference/variableDeclarationInStrictMode1.errors.txt new file mode 100644 index 0000000000000..aa2ccdbed9f14 --- /dev/null +++ b/tests/baselines/reference/variableDeclarationInStrictMode1.errors.txt @@ -0,0 +1,12 @@ +tests/cases/compiler/variableDeclarationInStrictMode1.ts(2,5): error TS1100: Invalid use of 'eval' in strict mode. +lib.d.ts(29,18): error TS2300: Duplicate identifier 'eval'. +tests/cases/compiler/variableDeclarationInStrictMode1.ts(2,5): error TS2300: Duplicate identifier 'eval'. + + +==== tests/cases/compiler/variableDeclarationInStrictMode1.ts (2 errors) ==== + "use strict"; + var eval; + ~~~~ +!!! error TS1100: Invalid use of 'eval' in strict mode. + ~~~~ +!!! error TS2300: Duplicate identifier 'eval'. \ No newline at end of file diff --git a/tests/baselines/reference/yieldExpression1.errors.txt b/tests/baselines/reference/yieldExpression1.errors.txt new file mode 100644 index 0000000000000..ecac77698c531 --- /dev/null +++ b/tests/baselines/reference/yieldExpression1.errors.txt @@ -0,0 +1,9 @@ +tests/cases/compiler/yieldExpression1.ts(1,9): error TS9001: 'generators' are not currently supported. + + +==== tests/cases/compiler/yieldExpression1.ts (1 errors) ==== + function* foo() { + ~ +!!! error TS9001: 'generators' are not currently supported. + yield + } \ No newline at end of file diff --git a/tests/cases/compiler/accessorWithoutBody1.ts b/tests/cases/compiler/accessorWithoutBody1.ts new file mode 100644 index 0000000000000..2cf246affbae0 --- /dev/null +++ b/tests/cases/compiler/accessorWithoutBody1.ts @@ -0,0 +1,2 @@ +// @target: ES5 +var v = { get foo() } \ No newline at end of file diff --git a/tests/cases/compiler/accessorWithoutBody2.ts b/tests/cases/compiler/accessorWithoutBody2.ts new file mode 100644 index 0000000000000..11ece4b4d96ae --- /dev/null +++ b/tests/cases/compiler/accessorWithoutBody2.ts @@ -0,0 +1,2 @@ +// @target: ES5 +var v = { set foo(a) } \ No newline at end of file diff --git a/tests/cases/compiler/callExpressionWithMissingTypeArgument1.ts b/tests/cases/compiler/callExpressionWithMissingTypeArgument1.ts new file mode 100644 index 0000000000000..ea118fc4d4c1b --- /dev/null +++ b/tests/cases/compiler/callExpressionWithMissingTypeArgument1.ts @@ -0,0 +1 @@ +Foo(); \ No newline at end of file diff --git a/tests/cases/compiler/declareModifierOnImport1.ts b/tests/cases/compiler/declareModifierOnImport1.ts new file mode 100644 index 0000000000000..8ccd19247904b --- /dev/null +++ b/tests/cases/compiler/declareModifierOnImport1.ts @@ -0,0 +1 @@ +declare import a = b; \ No newline at end of file diff --git a/tests/cases/compiler/indexSignatureWithInitializer1.ts b/tests/cases/compiler/indexSignatureWithInitializer1.ts new file mode 100644 index 0000000000000..d60fb81f0a461 --- /dev/null +++ b/tests/cases/compiler/indexSignatureWithInitializer1.ts @@ -0,0 +1,3 @@ +class C { + [a: number = 1]: number; +} \ No newline at end of file diff --git a/tests/cases/compiler/indexSignatureWithoutTypeAnnotation1..ts b/tests/cases/compiler/indexSignatureWithoutTypeAnnotation1..ts new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/tests/cases/compiler/indexSignatureWithoutTypeAnnotation1.ts b/tests/cases/compiler/indexSignatureWithoutTypeAnnotation1.ts new file mode 100644 index 0000000000000..0bd92d441629a --- /dev/null +++ b/tests/cases/compiler/indexSignatureWithoutTypeAnnotation1.ts @@ -0,0 +1,3 @@ +class C { + [a: number]; +} \ No newline at end of file diff --git a/tests/cases/compiler/letAsIdentifier.ts b/tests/cases/compiler/letAsIdentifier.ts new file mode 100644 index 0000000000000..d4473aa99c089 --- /dev/null +++ b/tests/cases/compiler/letAsIdentifier.ts @@ -0,0 +1,7 @@ +// @declaration: true + +var let = 10; +var a = 10; +let = 30; +let +a; \ No newline at end of file diff --git a/tests/cases/compiler/letAsIdentifierInStrictMode.ts b/tests/cases/compiler/letAsIdentifierInStrictMode.ts new file mode 100644 index 0000000000000..59a9d7da885bc --- /dev/null +++ b/tests/cases/compiler/letAsIdentifierInStrictMode.ts @@ -0,0 +1,6 @@ +"use strict"; +var let = 10; +var a = 10; +let = 30; +let +a; \ No newline at end of file diff --git a/tests/cases/compiler/modifierOnParameter1.ts b/tests/cases/compiler/modifierOnParameter1.ts new file mode 100644 index 0000000000000..931911af9b4be --- /dev/null +++ b/tests/cases/compiler/modifierOnParameter1.ts @@ -0,0 +1,3 @@ +class C { + constructor(declare p) { } +} \ No newline at end of file diff --git a/tests/cases/compiler/throwWithoutNewLine1.ts b/tests/cases/compiler/throwWithoutNewLine1.ts new file mode 100644 index 0000000000000..755c8ff38429f --- /dev/null +++ b/tests/cases/compiler/throwWithoutNewLine1.ts @@ -0,0 +1 @@ +throw \ No newline at end of file diff --git a/tests/cases/compiler/throwWithoutNewLine2.ts b/tests/cases/compiler/throwWithoutNewLine2.ts new file mode 100644 index 0000000000000..731b23ecb4743 --- /dev/null +++ b/tests/cases/compiler/throwWithoutNewLine2.ts @@ -0,0 +1,2 @@ +throw +a; \ No newline at end of file diff --git a/tests/cases/compiler/typeParameterInConstraint1.ts b/tests/cases/compiler/typeParameterInConstraint1.ts new file mode 100644 index 0000000000000..49c2ab18aee8c --- /dev/null +++ b/tests/cases/compiler/typeParameterInConstraint1.ts @@ -0,0 +1,2 @@ +class C { +} \ No newline at end of file diff --git a/tests/cases/compiler/typeParameterListWithTrailingComma1.ts b/tests/cases/compiler/typeParameterListWithTrailingComma1.ts new file mode 100644 index 0000000000000..68a11982cbe5b --- /dev/null +++ b/tests/cases/compiler/typeParameterListWithTrailingComma1.ts @@ -0,0 +1,2 @@ +class C { +} \ No newline at end of file diff --git a/tests/cases/compiler/variableDeclarationInStrictMode1.ts b/tests/cases/compiler/variableDeclarationInStrictMode1.ts new file mode 100644 index 0000000000000..266e5af44aee3 --- /dev/null +++ b/tests/cases/compiler/variableDeclarationInStrictMode1.ts @@ -0,0 +1,2 @@ +"use strict"; +var eval; \ No newline at end of file diff --git a/tests/cases/compiler/yieldExpression1.ts b/tests/cases/compiler/yieldExpression1.ts new file mode 100644 index 0000000000000..15c950f724f32 --- /dev/null +++ b/tests/cases/compiler/yieldExpression1.ts @@ -0,0 +1,3 @@ +function* foo() { + yield +} \ No newline at end of file diff --git a/tests/cases/fourslash/fourslash.ts b/tests/cases/fourslash/fourslash.ts index c0372d4606378..85197dd3ccb9f 100644 --- a/tests/cases/fourslash/fourslash.ts +++ b/tests/cases/fourslash/fourslash.ts @@ -87,6 +87,10 @@ module FourSlashInterface { public ranges(): Range[] { return FourSlash.currentTestState.getRanges(); } + + public markerByName(s: string): Marker { + return FourSlash.currentTestState.getMarkerByName(s); + } } export class diagnostics { @@ -227,7 +231,7 @@ module FourSlashInterface { } public quickInfoIs(expectedText?: string, expectedDocumentation?: string) { - FourSlash.currentTestState.verifyQuickInfo(this.negative, expectedText, expectedDocumentation); + FourSlash.currentTestState.verifyQuickInfoString(this.negative, expectedText, expectedDocumentation); } public quickInfoExists() { @@ -383,14 +387,14 @@ module FourSlashInterface { searchValue: string, matchKind: string, fileName?: string, - parenetName?: string) { + parentName?: string) { FourSlash.currentTestState.verifyNavigationItemsListContains( name, kind, searchValue, matchKind, fileName, - parenetName); + parentName); } public occurrencesAtPositionContains(range: Range, isWriteAccess?: boolean) { @@ -430,6 +434,11 @@ module FourSlashInterface { public renameLocations(findInStrings: boolean, findInComments: boolean) { FourSlash.currentTestState.verifyRenameLocations(findInStrings, findInComments); } + + public verifyQuickInfoDisplayParts(kind: string, kindModifiers: string, textSpan: { start: number; length: number; }, + displayParts: ts.SymbolDisplayPart[], documentation: ts.SymbolDisplayPart[]) { + FourSlash.currentTestState.verifyQuickInfoDisplayParts(kind, kindModifiers, textSpan, displayParts, documentation); + } } export class edit { @@ -630,6 +639,10 @@ module FourSlashInterface { return getClassification("typeParameterName", text, position); } + export function typeAlias(text: string, position?: number): { classificationType: string; text: string; textSpan?: TextSpan } { + return getClassification("typeAlias", text, position); + } + function getClassification(type: string, text: string, position?: number) { return { classificationType: type, @@ -650,6 +663,12 @@ module fs { export var diagnostics = new FourSlashInterface.diagnostics(); export var cancellation = new FourSlashInterface.cancellation(); } +module ts { + export interface SymbolDisplayPart { + text: string; + kind: string; + } +} function verifyOperationIsCancelled(f) { FourSlash.verifyOperationIsCancelled(f); } diff --git a/tests/cases/fourslash/functionProperty.ts b/tests/cases/fourslash/functionProperty.ts index e9ffdcf2cdff4..f19ac86c01ad4 100644 --- a/tests/cases/fourslash/functionProperty.ts +++ b/tests/cases/fourslash/functionProperty.ts @@ -31,7 +31,7 @@ goTo.marker('signatureC'); verify.currentSignatureHelpIs('x(a: number): void'); goTo.marker('completionA'); -verify.completionListContains("x", "(property) x: (a: number) => void"); +verify.completionListContains("x", "(method) x(a: number): void"); goTo.marker('completionB'); verify.completionListContains("x", "(property) x: (a: number) => void"); @@ -40,7 +40,7 @@ goTo.marker('completionC'); verify.completionListContains("x", "(property) x: (a: number) => void"); goTo.marker('quickInfoA'); -verify.quickInfoIs("(property) x: (a: number) => void", undefined); +verify.quickInfoIs("(method) x(a: number): void", undefined); goTo.marker('quickInfoB'); verify.quickInfoIs("(property) x: (a: number) => void", undefined); diff --git a/tests/cases/fourslash/memberListOfVarInArrowExpression.ts b/tests/cases/fourslash/memberListOfVarInArrowExpression.ts new file mode 100644 index 0000000000000..03da06989ae9b --- /dev/null +++ b/tests/cases/fourslash/memberListOfVarInArrowExpression.ts @@ -0,0 +1,18 @@ +/// + +////interface IMap { +//// [key: string]: T; +////} +////var map: IMap<{ a1: string; }[]>; +////var categories: string[]; +////each(categories, category => { +//// var changes = map[category]; +//// changes[0]./*1*/a1; +//// return each(changes, change => { +//// }); +////}); +////function each(items: T[], handler: (item: T) => void) { } + +goTo.marker('1'); +verify.quickInfoIs("(property) a1: string"); +verify.memberListContains("a1", "(property) a1: string"); \ No newline at end of file diff --git a/tests/cases/fourslash/navigationItemsComputedProperties.ts b/tests/cases/fourslash/navigationItemsComputedProperties.ts index 8a88966b2efcd..3c2ead0d2b438 100644 --- a/tests/cases/fourslash/navigationItemsComputedProperties.ts +++ b/tests/cases/fourslash/navigationItemsComputedProperties.ts @@ -1,13 +1,13 @@ -/// - -////{| "itemName": "C", "kind": "class", "parentName": "" |} -////class C { -//// {| "itemName": "foo", "kind": "method", "parentName": "C" |} -//// foo() { } -//// ["hi" + "bye"]() { } -//// {| "itemName": "bar", "kind": "method", "parentName": "C" |} -//// bar() { } -////} +/// + +////{| "itemName": "C", "kind": "class", "parentName": "" |} +////class C { +//// {| "itemName": "foo", "kind": "method", "parentName": "C" |} +//// foo() { } +//// ["hi" + "bye"]() { } +//// {| "itemName": "bar", "kind": "method", "parentName": "C" |} +//// bar() { } +////} test.markers().forEach(marker => { verify.navigationItemsListContains( diff --git a/tests/cases/fourslash/quickInfoDisplayPartsArrowFunctionExpression.ts b/tests/cases/fourslash/quickInfoDisplayPartsArrowFunctionExpression.ts new file mode 100644 index 0000000000000..3d996ae53caf2 --- /dev/null +++ b/tests/cases/fourslash/quickInfoDisplayPartsArrowFunctionExpression.ts @@ -0,0 +1,50 @@ +/// + +////var /*1*/x = /*5*/a => 10; +////var /*2*/y = (/*6*/a, /*7*/b) => 10; +////var /*3*/z = (/*8*/a: number) => 10; +////var /*4*/z2 = () => 10; + +var marker = 0; +function verifyInstance(instanceName: string, paramCount: number, type: string) { + marker++; + goTo.marker(marker.toString()); + var displayParts = [{ text: "(", kind: "punctuation" }, { text: "var", kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: instanceName, kind: "localName" }, { text: ":", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: "(", kind: "punctuation" }]; + + for (var i = 0; i < paramCount; i++) { + if (i) { + displayParts.push({ text: ",", kind: "punctuation" }, { text: " ", kind: "space" }); + } + displayParts.push({ text: !i ? "a" : "b", kind: "parameterName" }, { text: ":", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: type, kind: "keyword" }); + } + displayParts.push({ text: ")", kind: "punctuation" }, { text: " ", kind: "space" }, + { text: "=>", kind: "punctuation" }, { text: " ", kind: "space" }, + { text: "number", kind: "keyword" }); + + + verify.verifyQuickInfoDisplayParts("var", "", { start: test.markerByName(marker.toString()).position, length: instanceName.length }, + displayParts, []); +} + +function verifyParameter(parameterName: string, type: string) { + marker++; + goTo.marker(marker.toString()); + verify.verifyQuickInfoDisplayParts("parameter", "", { start: test.markerByName(marker.toString()).position, length: parameterName.length }, + [{ text: "(", kind: "punctuation" }, { text: "parameter", kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: parameterName, kind: "parameterName" }, { text: ":", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: type, kind: "keyword" }], + []); +} + +verifyInstance("x", 1, "any"); +verifyInstance("y", 2, "any"); +verifyInstance("z", 1, "number"); +verifyInstance("z2", 0, "any"); + +verifyParameter("a", "any"); +verifyParameter("a", "any"); +verifyParameter("b", "any"); +verifyParameter("a", "number"); diff --git a/tests/cases/fourslash/quickInfoDisplayPartsClass.ts b/tests/cases/fourslash/quickInfoDisplayPartsClass.ts new file mode 100644 index 0000000000000..ee38c71792284 --- /dev/null +++ b/tests/cases/fourslash/quickInfoDisplayPartsClass.ts @@ -0,0 +1,39 @@ +/// + +////class /*1*/c { +////} +////var /*2*/cInstance = new /*3*/c(); +////var /*4*/cVal = /*5*/c; + +goTo.marker('1'); +verify.verifyQuickInfoDisplayParts("class", "", { start: test.markerByName("1").position, length: "c".length }, + [{ text: "class", kind: "keyword" }, { text: " ", kind: "space" }, { text: "c", kind: "className" }], + []); + +goTo.marker('2'); +verify.verifyQuickInfoDisplayParts("var", "", { start: test.markerByName("2").position, length: "cInstance".length }, + [{ text: "(", kind: "punctuation" }, { text: "var", kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: "cInstance", kind: "localName" }, { text: ":", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: "c", kind: "className" }], + []); + +goTo.marker('3'); +verify.verifyQuickInfoDisplayParts("constructor", "", { start: test.markerByName("3").position, length: "c".length }, + [{ text: "(", kind: "punctuation" }, { text: "constructor", kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: "c", kind: "className" }, + { text: "(", kind: "punctuation" }, { text: ")", kind: "punctuation" }, { text: ":", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: "c", kind: "className" }], + []); + +goTo.marker('4'); +verify.verifyQuickInfoDisplayParts("var", "", { start: test.markerByName("4").position, length: "cVal".length }, + [{ text: "(", kind: "punctuation" }, { text: "var", kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: "cVal", kind: "localName" }, { text: ":", kind: "punctuation" }, + { text: " ", kind: "space" }, + { text: "typeof", kind: "keyword" }, { text: " ", kind: "space" }, { text: "c", kind: "className" }], + []); + +goTo.marker('5'); +verify.verifyQuickInfoDisplayParts("class", "", { start: test.markerByName("5").position, length: "c".length }, + [{ text: "class", kind: "keyword" }, { text: " ", kind: "space" }, { text: "c", kind: "className" }], + []); \ No newline at end of file diff --git a/tests/cases/fourslash/quickInfoDisplayPartsClassAccessors.ts b/tests/cases/fourslash/quickInfoDisplayPartsClassAccessors.ts new file mode 100644 index 0000000000000..f3a0f90ea33fb --- /dev/null +++ b/tests/cases/fourslash/quickInfoDisplayPartsClassAccessors.ts @@ -0,0 +1,129 @@ +/// + +////class c { +//// public get /*1*/publicProperty() { return ""; } +//// public set /*1s*/publicProperty(x: string) { } +//// private get /*2*/privateProperty() { return ""; } +//// private set /*2s*/privateProperty(x: string) { } +//// protected get /*21*/protectedProperty() { return ""; } +//// protected set /*21s*/protectedProperty(x: string) { } +//// static get /*3*/staticProperty() { return ""; } +//// static set /*3s*/staticProperty(x: string) { } +//// private static get /*4*/privateStaticProperty() { return ""; } +//// private static set /*4s*/privateStaticProperty(x: string) { } +//// protected static get /*41*/protectedStaticProperty() { return ""; } +//// protected static set /*41s*/protectedStaticProperty(x: string) { } +//// method() { +//// var x : string; +//// x = this./*5*/publicProperty; +//// x = this./*6*/privateProperty; +//// x = this./*61*/protectedProperty; +//// x = c./*7*/staticProperty; +//// x = c./*8*/privateStaticProperty; +//// x = c./*81*/protectedStaticProperty; +//// this./*5s*/publicProperty = ""; +//// this./*6s*/privateProperty = ""; +//// this./*61s*/protectedProperty = ""; +//// c./*7s*/staticProperty = ""; +//// c./*8s*/privateStaticProperty = ""; +//// c./*81s*/protectedStaticProperty = ""; +//// } +////} +////var cInstance = new c(); +////var y: string; +////y = /*9*/cInstance./*10*/publicProperty; +////y = /*11*/c./*12*/staticProperty; +/////*9s*/cInstance./*10s*/publicProperty = y; +/////*11s*/c./*12s*/staticProperty = y; + +function verifyClassProperty(markerName: string, kindModifiers: string, propertyName: string) { + goTo.marker(markerName); + verify.verifyQuickInfoDisplayParts("property", kindModifiers, { start: test.markerByName(markerName).position, length: propertyName.length }, + [{ text: "(", kind: "punctuation" }, { text: "property", kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, + { text: "c", kind: "className" }, { text: ".", kind: "punctuation" }, { text: propertyName, kind: "propertyName" }, + { text: ":", kind: "punctuation" }, { text: " ", kind: "space" }, { text: "string", kind: "keyword" }], + []); +} + +function verifyPublicProperty(markerName: string) { + verifyClassProperty(markerName, "public", "publicProperty"); +} + +function verifyPrivateProperty(markerName: string) { + verifyClassProperty(markerName, "private", "privateProperty"); +} + +function verifyProtectedProperty(markerName: string) { + verifyClassProperty(markerName, "protected", "protectedProperty"); +} + +function verifyStaticProperty(markerName: string) { + verifyClassProperty(markerName, "static", "staticProperty"); +} + +function verifyPrivateStaticProperty(markerName: string) { + verifyClassProperty(markerName, "private,static", "privateStaticProperty"); +} + +function verifyProtectedStaticProperty(markerName: string) { + verifyClassProperty(markerName, "protected,static", "protectedStaticProperty"); +} + +verifyPublicProperty('1'); +verifyPublicProperty('1s'); +verifyPrivateProperty('2'); +verifyPrivateProperty('2s'); +verifyProtectedProperty('21'); +verifyProtectedProperty('21s'); +verifyStaticProperty('3'); +verifyStaticProperty('3s'); +verifyPrivateStaticProperty('4'); +verifyPrivateStaticProperty('4s'); +verifyProtectedStaticProperty('41'); +verifyProtectedStaticProperty('41s'); + +verifyPublicProperty('5'); +verifyPublicProperty('5s'); +verifyPrivateProperty('6'); +verifyPrivateProperty('6s'); +verifyProtectedProperty('61'); +verifyProtectedProperty('61s'); +verifyStaticProperty('7'); +verifyStaticProperty('7s'); +verifyPrivateStaticProperty('8'); +verifyPrivateStaticProperty('8s'); +verifyProtectedStaticProperty('81'); +verifyProtectedStaticProperty('81s'); + +goTo.marker('9'); +verify.verifyQuickInfoDisplayParts("var", "", { start: test.markerByName("9").position, length: "cInstance".length }, + [{ text: "(", kind: "punctuation" }, { text: "var", kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: "cInstance", kind: "localName" }, { text: ":", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: "c", kind: "className" }], + []); + +verifyPublicProperty('10'); + +goTo.marker('11'); +verify.verifyQuickInfoDisplayParts("class", "", { start: test.markerByName("11").position, length: "c".length }, + [{ text: "class", kind: "keyword" }, { text: " ", kind: "space" }, { text: "c", kind: "className" }], + []); + +verifyStaticProperty('12'); + +goTo.marker('9s'); +verify.verifyQuickInfoDisplayParts("var", "", { start: test.markerByName("9s").position, length: "cInstance".length }, + [{ text: "(", kind: "punctuation" }, { text: "var", kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: "cInstance", kind: "localName" }, { text: ":", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: "c", kind: "className" }], + []); + +verifyPublicProperty('10s'); + +goTo.marker('11s'); +verify.verifyQuickInfoDisplayParts("class", "", { start: test.markerByName("11s").position, length: "c".length }, + [{ text: "class", kind: "keyword" }, { text: " ", kind: "space" }, { text: "c", kind: "className" }], + []); + +verifyStaticProperty('12s'); \ No newline at end of file diff --git a/tests/cases/fourslash/quickInfoDisplayPartsClassConstructor.ts b/tests/cases/fourslash/quickInfoDisplayPartsClassConstructor.ts new file mode 100644 index 0000000000000..1145e43e1dac2 --- /dev/null +++ b/tests/cases/fourslash/quickInfoDisplayPartsClassConstructor.ts @@ -0,0 +1,126 @@ +/// + +////class c { +//// /*1*/constructor() { +//// } +////} +////var /*2*/cInstance = new /*3*/c(); +////var /*4*/cVal = /*5*/c; +////class cWithOverloads { +//// /*6*/constructor(x: string); +//// /*7*/constructor(x: number); +//// /*8*/constructor(x: any) { +//// } +////} +////var /*9*/cWithOverloadsInstance = new /*10*/cWithOverloads("hello"); +////var /*11*/cWithOverloadsInstance2 = new /*12*/cWithOverloads(10); +////var /*13*/cWithOverloadsVal = /*14*/cWithOverloads; +////class cWithMultipleOverloads { +//// /*15*/constructor(x: string); +//// /*16*/constructor(x: number); +//// /*17*/constructor(x: boolean); +//// /*18*/constructor(x: any) { +//// } +////} +////var /*19*/cWithMultipleOverloadsInstance = new /*20*/cWithMultipleOverloads("hello"); +////var /*21*/cWithMultipleOverloadsInstance2 = new /*22*/cWithMultipleOverloads(10); +////var /*23*/cWithMultipleOverloadsInstance3 = new /*24*/cWithMultipleOverloads(true); +////var /*25*/cWithMultipleOverloadsVal = /*26*/cWithMultipleOverloads; + +function verifyNonOverloadSignature(marker: string, textSpanLength: number) { + goTo.marker(marker); + verify.verifyQuickInfoDisplayParts("constructor", "", { start: test.markerByName(marker).position, length: textSpanLength }, + [{ text: "(", kind: "punctuation" }, { text: "constructor", kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: "c", kind: "className" }, + { text: "(", kind: "punctuation" }, { text: ")", kind: "punctuation" }, { text: ":", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: "c", kind: "className" }], + []); +} + +function verifyClassInstance(markerName: string, instanceName: string, className: string) { + goTo.marker(markerName); + verify.verifyQuickInfoDisplayParts("var", "", { start: test.markerByName(markerName).position, length: instanceName.length }, + [{ text: "(", kind: "punctuation" }, { text: "var", kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: instanceName, kind: "localName" }, { text: ":", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: className, kind: "className" }], + []); +} + +function verifyClass(markerName: string, className: string) { + goTo.marker(markerName); + verify.verifyQuickInfoDisplayParts("class", "", { start: test.markerByName(markerName).position, length: className.length }, + [{ text: "class", kind: "keyword" }, { text: " ", kind: "space" }, { text: className, kind: "className" }], + []); +} + +function verifyTypeOfClass(markerName: string, typeOfVarName: string, className: string) { + goTo.marker(markerName); + verify.verifyQuickInfoDisplayParts("var", "", { start: test.markerByName(markerName).position, length: typeOfVarName.length }, + [{ text: "(", kind: "punctuation" }, { text: "var", kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: typeOfVarName, kind: "localName" }, { text: ":", kind: "punctuation" }, + { text: " ", kind: "space" }, + { text: "typeof", kind: "keyword" }, { text: " ", kind: "space" }, { text: className, kind: "className" }], + []); +} + +function verifySingleOverloadSignature(marker: string, textSpanLength: number, parameterType: string) { + goTo.marker(marker); + verify.verifyQuickInfoDisplayParts("constructor", "", { start: test.markerByName(marker).position, length: textSpanLength }, + [{ text: "(", kind: "punctuation" }, { text: "constructor", kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: "cWithOverloads", kind: "className" }, { text: "(", kind: "punctuation" }, + { text: "x", kind: "parameterName" }, { text: ":", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: parameterType, kind: "keyword" }, + { text: ")", kind: "punctuation" }, { text: ":", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: "cWithOverloads", kind: "className" }, + { text: " ", kind: "space" }, { text: "(", kind: "punctuation" }, + { text: "+", kind: "operator" }, { text: "1", kind: "numericLiteral" }, + { text: " ", kind: "space" }, { text: "overload", kind: "text" }, + { text: ")", kind: "punctuation" }], + []); +} + +function verifyMultipleOverloadSignature(marker: string, textSpanLength: number, parameterType: string) { + goTo.marker(marker); + verify.verifyQuickInfoDisplayParts("constructor", "", { start: test.markerByName(marker).position, length: textSpanLength }, + [{ text: "(", kind: "punctuation" }, { text: "constructor", kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: "cWithMultipleOverloads", kind: "className" }, { text: "(", kind: "punctuation" }, + { text: "x", kind: "parameterName" }, { text: ":", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: parameterType, kind: "keyword" }, + { text: ")", kind: "punctuation" }, { text: ":", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: "cWithMultipleOverloads", kind: "className" }, + { text: " ", kind: "space" }, { text: "(", kind: "punctuation" }, + { text: "+", kind: "operator" }, { text: "2", kind: "numericLiteral" }, + { text: " ", kind: "space" }, { text: "overloads", kind: "text" }, + { text: ")", kind: "punctuation" }], + []); +} + + +verifyNonOverloadSignature("1", "constructor".length); +verifyClassInstance("2", "cInstance", "c"); +verifyNonOverloadSignature("3", "c".length); +verifyTypeOfClass("4", "cVal", "c"); +verifyClass("5", "c"); + +verifySingleOverloadSignature("6", "constructor".length, "string"); +verifySingleOverloadSignature("7", "constructor".length, "number"); +verifySingleOverloadSignature("8", "constructor".length, "string"); +verifyClassInstance("9", "cWithOverloadsInstance", "cWithOverloads"); +verifySingleOverloadSignature("10", "cWithOverloads".length, "string"); +verifyClassInstance("11", "cWithOverloadsInstance2", "cWithOverloads"); +verifySingleOverloadSignature("12", "cWithOverloads".length, "number"); +verifyTypeOfClass("13", "cWithOverloadsVal", "cWithOverloads"); +verifyClass("14", "cWithOverloads"); + +verifyMultipleOverloadSignature("15", "constructor".length, "string"); +verifyMultipleOverloadSignature("16", "constructor".length, "number"); +verifyMultipleOverloadSignature("17", "constructor".length, "boolean"); +verifyMultipleOverloadSignature("18", "constructor".length, "string"); +verifyClassInstance("19", "cWithMultipleOverloadsInstance", "cWithMultipleOverloads"); +verifyMultipleOverloadSignature("20", "cWithMultipleOverloads".length, "string"); +verifyClassInstance("21", "cWithMultipleOverloadsInstance2", "cWithMultipleOverloads"); +verifyMultipleOverloadSignature("22", "cWithMultipleOverloads".length, "number"); +verifyClassInstance("23", "cWithMultipleOverloadsInstance3", "cWithMultipleOverloads"); +verifyMultipleOverloadSignature("24", "cWithMultipleOverloads".length, "boolean"); +verifyTypeOfClass("25", "cWithMultipleOverloadsVal", "cWithMultipleOverloads"); +verifyClass("26", "cWithMultipleOverloads"); \ No newline at end of file diff --git a/tests/cases/fourslash/quickInfoDisplayPartsClassMethod.ts b/tests/cases/fourslash/quickInfoDisplayPartsClassMethod.ts new file mode 100644 index 0000000000000..dbe225aa124fc --- /dev/null +++ b/tests/cases/fourslash/quickInfoDisplayPartsClassMethod.ts @@ -0,0 +1,86 @@ +/// + +////class c { +//// public /*1*/publicMethod() { } +//// private /*2*/privateMethod() { } +//// protected /*21*/protectedMethod() { } +//// static /*3*/staticMethod() { } +//// private static /*4*/privateStaticMethod() { } +//// protected static /*41*/protectedStaticMethod() { } +//// method() { +//// this./*5*/publicMethod(); +//// this./*6*/privateMethod(); +//// this./*61*/protectedMethod(); +//// c./*7*/staticMethod(); +//// c./*8*/privateStaticMethod(); +//// c./*81*/protectedStaticMethod(); +//// } +////} +////var cInstance = new c(); +/////*9*/cInstance./*10*/publicMethod(); +/////*11*/c./*12*/staticMethod(); + +function verifyClassMethod(markerName: string, kindModifiers: string, methodName: string) { + goTo.marker(markerName); + verify.verifyQuickInfoDisplayParts("method", kindModifiers, { start: test.markerByName(markerName).position, length: methodName.length }, + [{ text: "(", kind: "punctuation" }, { text: "method", kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, + { text: "c", kind: "className" }, { text: ".", kind: "punctuation" }, { text: methodName, kind: "methodName" }, + { text: "(", kind: "punctuation" }, { text: ")", kind: "punctuation" }, { text: ":", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: "void", kind: "keyword" }], + []); +} + +function verifyPublicMethod(markerName: string) { + verifyClassMethod(markerName, "public", "publicMethod"); +} + +function verifyPrivateMethod(markerName: string) { + verifyClassMethod(markerName, "private", "privateMethod"); +} + +function verifyProtectedMethod(markerName: string) { + verifyClassMethod(markerName, "protected", "protectedMethod"); +} + +function verifyStaticMethod(markerName: string) { + verifyClassMethod(markerName, "static", "staticMethod"); +} + +function verifyPrivateStaticMethod(markerName: string) { + verifyClassMethod(markerName, "private,static", "privateStaticMethod"); +} + +function verifyProtectedStaticMethod(markerName: string) { + verifyClassMethod(markerName, "protected,static", "protectedStaticMethod"); +} + +verifyPublicMethod('1'); +verifyPrivateMethod('2'); +verifyProtectedMethod('21'); +verifyStaticMethod('3'); +verifyPrivateStaticMethod('4'); +verifyProtectedStaticMethod('41'); + +verifyPublicMethod('5'); +verifyPrivateMethod('6'); +verifyProtectedMethod('61'); +verifyStaticMethod('7'); +verifyPrivateStaticMethod('8'); +verifyProtectedStaticMethod('81'); + +goTo.marker('9'); +verify.verifyQuickInfoDisplayParts("var", "", { start: test.markerByName("9").position, length: "cInstance".length }, + [{ text: "(", kind: "punctuation" }, { text: "var", kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: "cInstance", kind: "localName" }, { text: ":", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: "c", kind: "className" }], + []); + +verifyPublicMethod('10'); + +goTo.marker('11'); +verify.verifyQuickInfoDisplayParts("class", "", { start: test.markerByName("11").position, length: "c".length }, + [{ text: "class", kind: "keyword" }, { text: " ", kind: "space" }, { text: "c", kind: "className" }], + []); + +verifyStaticMethod('12'); \ No newline at end of file diff --git a/tests/cases/fourslash/quickInfoDisplayPartsClassProperty.ts b/tests/cases/fourslash/quickInfoDisplayPartsClassProperty.ts new file mode 100644 index 0000000000000..a03bc3cd42b99 --- /dev/null +++ b/tests/cases/fourslash/quickInfoDisplayPartsClassProperty.ts @@ -0,0 +1,85 @@ +/// + +////class c { +//// public /*1*/publicProperty: string; +//// private /*2*/privateProperty: string; +//// protected /*21*/protectedProperty: string; +//// static /*3*/staticProperty: string; +//// private static /*4*/privateStaticProperty: string; +//// protected static /*41*/protectedStaticProperty: string; +//// method() { +//// this./*5*/publicProperty; +//// this./*6*/privateProperty; +//// this./*61*/protectedProperty; +//// c./*7*/staticProperty; +//// c./*8*/privateStaticProperty; +//// c./*81*/protectedStaticProperty; +//// } +////} +////var cInstance = new c(); +/////*9*/cInstance./*10*/publicProperty; +/////*11*/c./*12*/staticProperty; + +function verifyClassProperty(markerName: string, kindModifiers: string, propertyName: string) { + goTo.marker(markerName); + verify.verifyQuickInfoDisplayParts("property", kindModifiers, { start: test.markerByName(markerName).position, length: propertyName.length }, + [{ text: "(", kind: "punctuation" }, { text: "property", kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, + { text: "c", kind: "className" }, { text: ".", kind: "punctuation" }, { text: propertyName, kind: "propertyName" }, + { text: ":", kind: "punctuation" }, { text: " ", kind: "space" }, { text: "string", kind: "keyword" }], + []); +} + +function verifyPublicProperty(markerName: string) { + verifyClassProperty(markerName, "public", "publicProperty"); +} + +function verifyPrivateProperty(markerName: string) { + verifyClassProperty(markerName, "private", "privateProperty"); +} + +function verifyProtectedProperty(markerName: string) { + verifyClassProperty(markerName, "protected", "protectedProperty"); +} + +function verifyStaticProperty(markerName: string) { + verifyClassProperty(markerName, "static", "staticProperty"); +} + +function verifyPrivateStaticProperty(markerName: string) { + verifyClassProperty(markerName, "private,static", "privateStaticProperty"); +} + +function verifyProtectedStaticProperty(markerName: string) { + verifyClassProperty(markerName, "protected,static", "protectedStaticProperty"); +} + +verifyPublicProperty('1'); +verifyPrivateProperty('2'); +verifyProtectedProperty('21'); +verifyStaticProperty('3'); +verifyPrivateStaticProperty('4'); +verifyProtectedStaticProperty('41'); + +verifyPublicProperty('5'); +verifyPrivateProperty('6'); +verifyProtectedProperty('61'); +verifyStaticProperty('7'); +verifyPrivateStaticProperty('8'); +verifyProtectedStaticProperty('81'); + +goTo.marker('9'); +verify.verifyQuickInfoDisplayParts("var", "", { start: test.markerByName("9").position, length: "cInstance".length }, + [{ text: "(", kind: "punctuation" }, { text: "var", kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: "cInstance", kind: "localName" }, { text: ":", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: "c", kind: "className" }], + []); + +verifyPublicProperty('10'); + +goTo.marker('11'); +verify.verifyQuickInfoDisplayParts("class", "", { start: test.markerByName("11").position, length: "c".length }, + [{ text: "class", kind: "keyword" }, { text: " ", kind: "space" }, { text: "c", kind: "className" }], + []); + +verifyStaticProperty('12'); \ No newline at end of file diff --git a/tests/cases/fourslash/quickInfoDisplayPartsConst.ts b/tests/cases/fourslash/quickInfoDisplayPartsConst.ts new file mode 100644 index 0000000000000..62295017dfc76 --- /dev/null +++ b/tests/cases/fourslash/quickInfoDisplayPartsConst.ts @@ -0,0 +1,83 @@ +/// + +////const /*1*/a = 10; +////function foo() { +//// const /*2*/b = /*3*/a; +//// if (b) { +//// const /*4*/b1 = 10; +//// } +////} +////module m { +//// const /*5*/c = 10; +//// export const /*6*/d = 10; +//// if (c) { +//// const /*7*/e = 10; +//// } +////} +////const /*8*/f: () => number = () => 10; +////const /*9*/g = /*10*/f; +/////*11*/f(); +////const /*12*/h: { (a: string): number; (a: number): string; } = a => a; +////const /*13*/i = /*14*/h; +/////*15*/h(10); +/////*16*/h("hello"); + +var marker = 0; +function verifyConst(name: string, typeDisplay: ts.SymbolDisplayPart[], optionalNameDisplay?: ts.SymbolDisplayPart[], optionalKindModifiers?: string) { + marker++; + goTo.marker(marker.toString()); + verify.verifyQuickInfoDisplayParts("const", optionalKindModifiers || "", { start: test.markerByName(marker.toString()).position, length: name.length }, + [{ text: "(", kind: "punctuation" }, { text: "const", kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }].concat(optionalNameDisplay || [{ text: name, kind: "localName" }]).concat( + { text: ":", kind: "punctuation" }, { text: " ", kind: "space" }).concat(typeDisplay), + []); +} + +var numberTypeDisplay: ts.SymbolDisplayPart[] = [{ text: "number", kind: "keyword" }]; + +verifyConst("a", numberTypeDisplay); +verifyConst("b", numberTypeDisplay); +verifyConst("a", numberTypeDisplay); +verifyConst("b1", numberTypeDisplay); +verifyConst("c", numberTypeDisplay); +verifyConst("d", numberTypeDisplay, [{ text: "m", kind: "moduleName" }, { text: ".", kind: "punctuation" }, { text: "d", kind: "localName" }], "export"); +verifyConst("e", numberTypeDisplay); + +var functionTypeReturningNumber: ts.SymbolDisplayPart[] = [{ text: "(", kind: "punctuation" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: "=>", kind: "punctuation" }, { text: " ", kind: "space" }, { text: "number", kind: "keyword" }]; +verifyConst("f", functionTypeReturningNumber); +verifyConst("g", functionTypeReturningNumber); +verifyConst("f", functionTypeReturningNumber); +verifyConst("f", functionTypeReturningNumber); + + +function getFunctionType(parametertype: string, returnType: string, isArrow?: boolean): ts.SymbolDisplayPart[] { + var functionTypeDisplay = [{ text: "(", kind: "punctuation" }, { text: "a", kind: "parameterName" }, { text: ":", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: parametertype, kind: "keyword" }, { text: ")", kind: "punctuation" }]; + + if (isArrow) { + functionTypeDisplay = functionTypeDisplay.concat({ text: " ", kind: "space" }, { text: "=>", kind: "punctuation" }); + } + else { + functionTypeDisplay = functionTypeDisplay.concat({ text: ":", kind: "punctuation" }); + } + + return functionTypeDisplay.concat({ text: " ", kind: "space" }, { text: returnType, kind: "keyword" }); +} + +var typeLiteralWithOverloadCall: ts.SymbolDisplayPart[] = [{ text: "{", kind: "punctuation" }, { text: "\n", kind: "lineBreak" }, + { text: " ", kind: "space" }].concat(getFunctionType("string", "number")).concat( + { text: ";", kind: "punctuation" }, { text: "\n", kind: "lineBreak" }, + { text: " ", kind: "space" }).concat(getFunctionType("number", "string")).concat( + { text: ";", kind: "punctuation" }, { text: "\n", kind: "lineBreak" }, { text: "}", kind: "punctuation" }); + +verifyConst("h", typeLiteralWithOverloadCall); +verifyConst("i", typeLiteralWithOverloadCall); +verifyConst("h", typeLiteralWithOverloadCall); + +var overloadDisplay: ts.SymbolDisplayPart[] = [{ text: " ", kind: "space" }, { text: "(", kind: "punctuation" }, + { text: "+", kind: "operator" }, { text: "1", kind: "numericLiteral" }, + { text: " ", kind: "space" }, { text: "overload", kind: "text" }, { text: ")", kind: "punctuation" }]; + +verifyConst("h", getFunctionType("number", "string", /*isArrow*/true).concat(overloadDisplay)); +verifyConst("h", getFunctionType("string", "number", /*isArrow*/true).concat(overloadDisplay)); \ No newline at end of file diff --git a/tests/cases/fourslash/quickInfoDisplayPartsEnum.ts b/tests/cases/fourslash/quickInfoDisplayPartsEnum.ts new file mode 100644 index 0000000000000..405f9db936e8b --- /dev/null +++ b/tests/cases/fourslash/quickInfoDisplayPartsEnum.ts @@ -0,0 +1,76 @@ +/// + +////enum /*1*/E { +//// /*2*/e1, +//// /*3*/e2 = 10, +//// /*4*/e3 +////} +////var /*5*/eInstance: /*6*/E; +/////*7*/eInstance = /*8*/E./*9*/e1; +/////*10*/eInstance = /*11*/E./*12*/e2; +/////*13*/eInstance = /*14*/E./*15*/e3; +////const enum /*16*/constE { +//// /*17*/e1, +//// /*18*/e2 = 10, +//// /*19*/e3 +////} +////var /*20*/eInstance1: /*21*/constE; +/////*22*/eInstance1 = /*23*/constE./*24*/e1; +/////*25*/eInstance1 = /*26*/constE./*27*/e2; +/////*28*/eInstance1 = /*29*/constE./*30*/e3; + +var marker = 0; +function verifyEnumDeclaration(enumName: string, instanceName: string, isConst?: boolean) { + verifyEnumDisplay(); + + verifyEnumMemberDisplay("e1", 0); + verifyEnumMemberDisplay("e2", 10); + verifyEnumMemberDisplay("e3", 11); + + verifyInstance(); + verifyEnumDisplay(); + + verifyInstance(); + verifyEnumDisplay(); + verifyEnumMemberDisplay("e1", 0); + + verifyInstance(); + verifyEnumDisplay(); + verifyEnumMemberDisplay("e2", 10); + + verifyInstance(); + verifyEnumDisplay(); + verifyEnumMemberDisplay("e3", 11); + + function verifyEnumDisplay() { + marker++; + goTo.marker(marker.toString()); + verify.verifyQuickInfoDisplayParts("enum", "", { start: test.markerByName(marker.toString()).position, length: enumName.length }, + (isConst ? [{ text: "const", kind: "keyword" }, { text: " ", kind: "space" }] : []).concat( + [{ text: "enum", kind: "keyword" }, { text: " ", kind: "space" }, { text: enumName, kind: "enumName" }]), + []);; + } + + function verifyEnumMemberDisplay(enumMemberName: string, initializer: number) { + marker++; + goTo.marker(marker.toString()); + verify.verifyQuickInfoDisplayParts("var", "", { start: test.markerByName(marker.toString()).position, length: enumMemberName.length }, + [{ text: "(", kind: "punctuation" }, { text: "enum member", kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: enumName, kind: "enumName" }, { text: ".", kind: "punctuation" }, { text: enumMemberName, kind: "enumMemberName" }, + { text: " ", kind: "space" }, { text: "=", kind: "operator" }, { text: " ", kind: "space" }, { text: initializer.toString(), kind: "numericLiteral" }], + []); + } + + function verifyInstance() { + marker++; + goTo.marker(marker.toString()); + verify.verifyQuickInfoDisplayParts("var", "", { start: test.markerByName(marker.toString()).position, length: instanceName.length }, + [{ text: "(", kind: "punctuation" }, { text: "var", kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: instanceName, kind: "localName" }, { text: ":", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: enumName, kind: "enumName" }], + []); + } +} + +verifyEnumDeclaration("E", "eInstance"); +verifyEnumDeclaration("constE", "eInstance1", /*isConst*/ true); diff --git a/tests/cases/fourslash/quickInfoDisplayPartsExternalModuleAlias.ts b/tests/cases/fourslash/quickInfoDisplayPartsExternalModuleAlias.ts new file mode 100644 index 0000000000000..2c43326469cbb --- /dev/null +++ b/tests/cases/fourslash/quickInfoDisplayPartsExternalModuleAlias.ts @@ -0,0 +1,44 @@ +/// + +// @Filename: quickInfoDisplayPartsExternalModuleAlias_file0.ts +////export module m1 { +//// export class c { +//// } +////} + +// @Filename: quickInfoDisplayPartsExternalModuleAlias_file1.ts +////import /*1*/a1 = require(/*mod1*/"quickInfoDisplayPartsExternalModuleAlias_file0"); +////new /*2*/a1.m1.c(); +////export import /*3*/a2 = require(/*mod2*/"quickInfoDisplayPartsExternalModuleAlias_file0"); +////new /*4*/a2.m1.c(); + +var marker = 0; +function goToMarker() { + marker++; + goTo.marker(marker.toString()); +} + +function verifyImport(name: string, isExported: boolean) { + goToMarker(); + verify.verifyQuickInfoDisplayParts("alias", isExported ? "export" : "", { start: test.markerByName(marker.toString()).position, length: name.length }, + [{ text: "import", kind: "keyword" }, { text: " ", kind: "space" }, { text: name, kind: "aliasName" }, + { text: " ", kind: "space" }, { text: "=", kind: "operator" }, { text: " ", kind: "space" }, + { text: "require", kind: "keyword" }, { text: "(", kind: "punctuation" }, + { text: "\"quickInfoDisplayPartsExternalModuleAlias_file0\"", kind: "stringLiteral" }, + { text: ")", kind: "punctuation" }], + []); +} +verifyImport("a1", /*isExported*/false); +verifyImport("a1", /*isExported*/false); +verifyImport("a2", /*isExported*/true); +verifyImport("a2", /*isExported*/true); + +function verifyExternalModuleStringLiteral(marker: string) { + goTo.marker(marker); + verify.verifyQuickInfoDisplayParts("module", "", { start: test.markerByName(marker).position, length: "\"quickInfoDisplayPartsExternalModuleAlias_file0\"".length }, + [{ text: "module", kind: "keyword" }, { text: " ", kind: "space" }, { text: "a1", kind: "aliasName" }], + []); +} + +verifyExternalModuleStringLiteral("mod1"); +verifyExternalModuleStringLiteral("mod2"); \ No newline at end of file diff --git a/tests/cases/fourslash/quickInfoDisplayPartsExternalModules.ts b/tests/cases/fourslash/quickInfoDisplayPartsExternalModules.ts new file mode 100644 index 0000000000000..5a2f5e76d7f38 --- /dev/null +++ b/tests/cases/fourslash/quickInfoDisplayPartsExternalModules.ts @@ -0,0 +1,63 @@ +/// + +////export module /*1*/m { +//// var /*2*/moduleElemWithoutExport = 10; +//// export var /*3*/moduleElemWithExport = 10; +////} +////export var /*4*/a = /*5*/m; +////export var /*6*/b: typeof /*7*/m; +////export module /*8*/m1./*9*/m2 { +//// var /*10*/moduleElemWithoutExport = 10; +//// export var /*11*/moduleElemWithExport = 10; +////} +////export var /*12*/x = /*13*/m1./*14*/m2; +////export var /*15*/y: typeof /*16*/m1./*17*/m2; + +var marker = 0; +function goToMarker() { + marker++; + goTo.marker(marker.toString()); +} + +function verifyModule(name: string, optionalParentName?: string) { + goToMarker(); + var moduleNameDisplay = [{ text: name, kind: "moduleName" }]; + if (optionalParentName) { + moduleNameDisplay = [{ text: optionalParentName, kind: "moduleName" }, { text: ".", kind: "punctuation" }].concat(moduleNameDisplay); + } + verify.verifyQuickInfoDisplayParts("module", "export", { start: test.markerByName(marker.toString()).position, length: name.length }, + [{ text: "module", kind: "keyword" }, { text: " ", kind: "space" }].concat(moduleNameDisplay), + []); +} + +function verifyVar(name: string, optionalFullName?: ts.SymbolDisplayPart[], typeDisplay: ts.SymbolDisplayPart[]= [{ text: "number", kind: "keyword" }]) { + goToMarker(); + verify.verifyQuickInfoDisplayParts("var", name === "moduleElemWithoutExport" ? "" : "export", { start: test.markerByName(marker.toString()).position, length: name.length }, + [{ text: "(", kind: "punctuation" }, { text: "var", kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }].concat(optionalFullName || [{ text: name, kind: "localName" }]).concat( + { text: ":", kind: "punctuation" }, { text: " ", kind: "space" }).concat(typeDisplay), + []); +} + +verifyModule("m"); +verifyVar("moduleElemWithoutExport"); +verifyVar("moduleElemWithExport", [{ text: "m", kind: "moduleName" }, { text: ".", kind: "punctuation" }, { text: "moduleElemWithExport", kind: "localName" }]); + +verifyVar("a", /*optionalFullName*/ undefined, [{ text: "typeof", kind: "keyword" }, { text: " ", kind: "space" }, { text: "m", kind: "moduleName" }]); +verifyModule("m"); +verifyVar("b", /*optionalFullName*/ undefined, [{ text: "typeof", kind: "keyword" }, { text: " ", kind: "space" }, { text: "m", kind: "moduleName" }]); +verifyModule("m"); + +verifyModule("m1"); +verifyModule("m2", "m1"); +verifyVar("moduleElemWithoutExport"); +verifyVar("moduleElemWithExport", [{ text: "m1", kind: "moduleName" }, { text: ".", kind: "punctuation" }, + { text: "m2", kind: "moduleName" }, { text: ".", kind: "punctuation" }, { text: "moduleElemWithExport", kind: "localName" }]); +verifyVar("x", /*optionalFullName*/ undefined, [{ text: "typeof", kind: "keyword" }, { text: " ", kind: "space" }, + { text: "m1", kind: "moduleName" }, { text: ".", kind: "punctuation" }, { text: "m2", kind: "moduleName" }]); +verifyModule("m1"); +verifyModule("m2", "m1"); +verifyVar("y", /*optionalFullName*/ undefined, [{ text: "typeof", kind: "keyword" }, { text: " ", kind: "space" }, + { text: "m1", kind: "moduleName" }, { text: ".", kind: "punctuation" }, { text: "m2", kind: "moduleName" }]); +verifyModule("m1"); +verifyModule("m2", "m1"); diff --git a/tests/cases/fourslash/quickInfoDisplayPartsFunction.ts b/tests/cases/fourslash/quickInfoDisplayPartsFunction.ts new file mode 100644 index 0000000000000..a3c94a511b905 --- /dev/null +++ b/tests/cases/fourslash/quickInfoDisplayPartsFunction.ts @@ -0,0 +1,76 @@ +/// + +////function /*1*/foo(param: string, optionalParam?: string, paramWithInitializer = "hello", ...restParam: string[]) { +////} +////function /*2*/foowithoverload(a: string): string; +////function /*3*/foowithoverload(a: number): number; +////function /*4*/foowithoverload(a: any): any { +//// return a; +////} +////function /*5*/foowith3overload(a: string): string; +////function /*6*/foowith3overload(a: number): number; +////function /*7*/foowith3overload(a: boolean): boolean; +////function /*8*/foowith3overload(a: any): any { +//// return a; +////} +/////*9*/foo("hello"); +/////*10*/foowithoverload("hello"); +/////*11*/foowithoverload(10); +/////*12*/foowith3overload("hello"); +/////*13*/foowith3overload(10); +/////*14*/foowith3overload(true); + +var marker = 0; +function verifyFunctionWithoutOverload() { + marker++; + goTo.marker(marker.toString()); + verify.verifyQuickInfoDisplayParts("function", "", { start: test.markerByName(marker.toString()).position, length: "foo".length }, + [{ text: "(", kind: "punctuation" }, { text: "function", kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: "foo", kind: "functionName" }, { text: "(", kind: "punctuation" }, + { text: "param", kind: "parameterName" }, { text: ":", kind: "punctuation" }, { text: " ", kind: "space" }, { text: "string", kind: "keyword" }, + { text: ",", kind: "punctuation" }, { text: " ", kind: "space" }, + { text: "optionalParam", kind: "parameterName" }, { text: "?", kind: "punctuation" }, { text: ":", kind: "punctuation" }, { text: " ", kind: "space" }, { text: "string", kind: "keyword" }, + { text: ",", kind: "punctuation" }, { text: " ", kind: "space" }, + { text: "paramWithInitializer", kind: "parameterName" }, { text: "?", kind: "punctuation" }, { text: ":", kind: "punctuation" }, { text: " ", kind: "space" }, { text: "string", kind: "keyword" }, + { text: ",", kind: "punctuation" }, { text: " ", kind: "space" }, + { text: "...", kind: "punctuation" }, { text: "restParam", kind: "parameterName" }, { text: ":", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: "string", kind: "keyword" }, { text: "[", kind: "punctuation" }, { text: "]", kind: "punctuation" }, + { text: ")", kind: "punctuation" }, { text: ":", kind: "punctuation" }, { text: " ", kind: "space" }, { text: "void", kind: "keyword" }], + []); +} + +function verifyFunctionWithOverload(functionName: string, type: string, overloadCount: number) { + marker++; + goTo.marker(marker.toString()); + verify.verifyQuickInfoDisplayParts("function", "", { start: test.markerByName(marker.toString()).position, length: functionName.length }, + [{ text: "(", kind: "punctuation" }, { text: "function", kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: functionName, kind: "functionName" }, { text: "(", kind: "punctuation" }, + { text: "a", kind: "parameterName" }, { text: ":", kind: "punctuation" }, { text: " ", kind: "space" }, { text: type, kind: "keyword" }, + { text: ")", kind: "punctuation" }, { text: ":", kind: "punctuation" }, { text: " ", kind: "space" }, { text: type, kind: "keyword" }, + { text: " ", kind: "space" }, { text: "(", kind: "punctuation" }, { text: "+", kind: "operator" }, { text: overloadCount.toString(), kind: "numericLiteral" }, + { text: " ", kind: "space" }, { text: overloadCount === 1 ? "overload" : "overloads", kind: "text" }, { text: ")", kind: "punctuation" }], + []); +} + + +// Declarations +verifyFunctionWithoutOverload(); + +verifyFunctionWithOverload("foowithoverload", "string", 1); +verifyFunctionWithOverload("foowithoverload", "number", 1); +verifyFunctionWithOverload("foowithoverload", "string", 1); + +verifyFunctionWithOverload("foowith3overload", "string", 2); +verifyFunctionWithOverload("foowith3overload", "number", 2); +verifyFunctionWithOverload("foowith3overload", "boolean", 2); +verifyFunctionWithOverload("foowith3overload", "string", 2); + +// Calls +verifyFunctionWithoutOverload(); + +verifyFunctionWithOverload("foowithoverload", "string", 1); +verifyFunctionWithOverload("foowithoverload", "number", 1); + +verifyFunctionWithOverload("foowith3overload", "string", 2); +verifyFunctionWithOverload("foowith3overload", "number", 2); +verifyFunctionWithOverload("foowith3overload", "boolean", 2); \ No newline at end of file diff --git a/tests/cases/fourslash/quickInfoDisplayPartsFunctionExpression.ts b/tests/cases/fourslash/quickInfoDisplayPartsFunctionExpression.ts new file mode 100644 index 0000000000000..2b88812d60df4 --- /dev/null +++ b/tests/cases/fourslash/quickInfoDisplayPartsFunctionExpression.ts @@ -0,0 +1,45 @@ +/// + +////var /*1*/x = function /*2*/foo() { +//// /*3*/foo(); +////}; +////var /*4*/y = function () { +////}; +////(function /*5*/foo1() { +//// /*6*/foo1(); +////})(); + +var marker = 0; +function verifyInstance(instanceName: string) { + marker++; + goTo.marker(marker.toString()); + verify.verifyQuickInfoDisplayParts("var", "", { start: test.markerByName(marker.toString()).position, length: instanceName.length }, + [{ text: "(", kind: "punctuation" }, { text: "var", kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: instanceName, kind: "localName" }, { text: ":", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: "(", kind: "punctuation" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: "=>", kind: "punctuation" }, { text: " ", kind: "space" }, { text: "void", kind: "keyword" }], + []); +} + +function verifyNamedFunctionExpression(functionName: string) { + marker++; + goTo.marker(marker.toString()); + verify.verifyQuickInfoDisplayParts("local function", "", { start: test.markerByName(marker.toString()).position, length: functionName.length }, + [{ text: "(", kind: "punctuation" }, { text: "local function", kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: functionName, kind: "functionName" }, { text: "(", kind: "punctuation" }, + { text: ")", kind: "punctuation" }, { text: ":", kind: "punctuation" }, { text: " ", kind: "space" }, { text: "void", kind: "keyword" }], + []); +} + +verifyInstance("x"); +// Declaration +verifyNamedFunctionExpression("foo"); +// Call +verifyNamedFunctionExpression("foo"); + +verifyInstance("y"); + +// Declaration +verifyNamedFunctionExpression("foo1"); +// Call +verifyNamedFunctionExpression("foo1"); diff --git a/tests/cases/fourslash/quickInfoDisplayPartsInterface.ts b/tests/cases/fourslash/quickInfoDisplayPartsInterface.ts new file mode 100644 index 0000000000000..410d45d32a156 --- /dev/null +++ b/tests/cases/fourslash/quickInfoDisplayPartsInterface.ts @@ -0,0 +1,22 @@ +/// + +////interface /*1*/i { +////} +////var /*2*/iInstance: /*3*/i; + +goTo.marker('1'); +verify.verifyQuickInfoDisplayParts("interface", "", { start: test.markerByName("1").position, length: "i".length }, + [{ text: "interface", kind: "keyword" }, { text: " ", kind: "space" }, { text: "i", kind: "interfaceName" }], + []); + +goTo.marker('2'); +verify.verifyQuickInfoDisplayParts("var", "", { start: test.markerByName("2").position, length: "iInstance".length }, + [{ text: "(", kind: "punctuation" }, { text: "var", kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: "iInstance", kind: "localName" }, { text: ":", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: "i", kind: "interfaceName" }], + []); + +goTo.marker('3'); +verify.verifyQuickInfoDisplayParts("interface", "", { start: test.markerByName("3").position, length: "i".length }, + [{ text: "interface", kind: "keyword" }, { text: " ", kind: "space" }, { text: "i", kind: "interfaceName" }], + []); \ No newline at end of file diff --git a/tests/cases/fourslash/quickInfoDisplayPartsInterfaceMembers.ts b/tests/cases/fourslash/quickInfoDisplayPartsInterfaceMembers.ts new file mode 100644 index 0000000000000..1b7fdad23aafc --- /dev/null +++ b/tests/cases/fourslash/quickInfoDisplayPartsInterfaceMembers.ts @@ -0,0 +1,75 @@ +/// + +////interface I { +//// /*1*/property: string; +//// /*2*/method(): string; +//// (): string; +//// new (): I; +////} +////var iInstance: I; +/////*3*/iInstance./*4*/property = /*5*/iInstance./*6*/method(); +/////*7*/iInstance(); +////var /*8*/anotherInstance = new /*9*/iInstance(); + +function verifyInterfaceProperty(markerName: string) { + goTo.marker(markerName); + verify.verifyQuickInfoDisplayParts("property", "", { start: test.markerByName(markerName).position, length: "property".length }, + [{ text: "(", kind: "punctuation" }, { text: "property", kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, + { text: "I", kind: "interfaceName" }, { text: ".", kind: "punctuation" }, { text: "property", kind: "propertyName" }, + { text: ":", kind: "punctuation" }, { text: " ", kind: "space" }, { text: "string", kind: "keyword" }], + []); +} + +function verifyInterfaceMethod(markerName: string) { + goTo.marker(markerName); + verify.verifyQuickInfoDisplayParts("method", "", { start: test.markerByName(markerName).position, length: "method".length }, + [{ text: "(", kind: "punctuation" }, { text: "method", kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, + { text: "I", kind: "interfaceName" }, { text: ".", kind: "punctuation" }, { text: "method", kind: "methodName" }, + { text: "(", kind: "punctuation" }, { text: ")", kind: "punctuation" }, + { text: ":", kind: "punctuation" }, { text: " ", kind: "space" }, { text: "string", kind: "keyword" }], + []); +} + +function verifyInterfaceInstanceVar(markerName: string, instanceName: string) { + goTo.marker(markerName); + verify.verifyQuickInfoDisplayParts("var", "", { start: test.markerByName(markerName).position, length: instanceName.length }, + [{ text: "(", kind: "punctuation" }, { text: "var", kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: instanceName, kind: "localName" }, { text: ":", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: "I", kind: "interfaceName" }], + []); +} + +verifyInterfaceProperty('1'); +verifyInterfaceMethod("2"); + +verifyInterfaceInstanceVar("3", "iInstance"); +verifyInterfaceProperty("4"); +verifyInterfaceInstanceVar("5", "iInstance"); +verifyInterfaceMethod("6"); + +// Call signature +goTo.marker("7"); +verify.verifyQuickInfoDisplayParts("var", "", { start: test.markerByName("7").position, length: "iInstance".length }, + [{ text: "(", kind: "punctuation" }, { text: "var", kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: "iInstance", kind: "localName" }, + { text: ":", kind: "punctuation" }, { text: " ", kind: "space" }, { text: "I", kind: "interfaceName" }, + { text: "(", kind: "punctuation" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: "=>", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: "string", kind: "keyword" }], + []); + +verifyInterfaceInstanceVar("8", "anotherInstance"); + +// Cosntruct signature +goTo.marker("9"); +verify.verifyQuickInfoDisplayParts("var", "", { start: test.markerByName("9").position, length: "iInstance".length }, + [{ text: "(", kind: "punctuation" }, { text: "var", kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: "iInstance", kind: "localName" }, + { text: ":", kind: "punctuation" }, { text: " ", kind: "space" }, + { text: "new", kind: "keyword" }, { text: " ", kind: "space" }, { text: "I", kind: "interfaceName" }, + { text: "(", kind: "punctuation" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: "=>", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: "I", kind: "interfaceName" }], + []); \ No newline at end of file diff --git a/tests/cases/fourslash/quickInfoDisplayPartsInternalModuleAlias.ts b/tests/cases/fourslash/quickInfoDisplayPartsInternalModuleAlias.ts new file mode 100644 index 0000000000000..335544a62db77 --- /dev/null +++ b/tests/cases/fourslash/quickInfoDisplayPartsInternalModuleAlias.ts @@ -0,0 +1,47 @@ +/// + +////module m.m1 { +//// export class c { +//// } +////} +////module m2 { +//// import /*1*/a1 = m; +//// new /*2*/a1.m1.c(); +//// import /*3*/a2 = m.m1; +//// new /*4*/a2.c(); +//// export import /*5*/a3 = m; +//// new /*6*/a3.m1.c(); +//// export import /*7*/a4 = m.m1; +//// new /*8*/a4.c(); +////} + +var marker = 0; +function goToMarker() { + marker++; + goTo.marker(marker.toString()); +} + +function verifyImport(name: string, assigningDisplay:ts.SymbolDisplayPart[], optionalParentName?: string) { + goToMarker(); + var moduleNameDisplay = [{ text: name, kind: "aliasName" }]; + if (optionalParentName) { + moduleNameDisplay = [{ text: optionalParentName, kind: "moduleName" }, { text: ".", kind: "punctuation" }].concat(moduleNameDisplay); + } + verify.verifyQuickInfoDisplayParts("alias", optionalParentName ? "export" : "", { start: test.markerByName(marker.toString()).position, length: name.length }, + [{ text: "import", kind: "keyword" }, { text: " ", kind: "space" }].concat(moduleNameDisplay).concat( + { text: " ", kind: "space" }, { text: "=", kind: "operator" }, { text: " ", kind: "space" }).concat(assigningDisplay), + []); +} + +var moduleMDisplay = [{ text: "m", kind: "moduleName" }]; +var moduleMDotM1Display = moduleMDisplay.concat({ text: ".", kind: "punctuation" }, { text: "m1", kind: "moduleName" }); + +verifyImport("a1", moduleMDisplay); +verifyImport("a1", moduleMDisplay); +verifyImport("a2", moduleMDotM1Display); +verifyImport("a2", moduleMDotM1Display); + +verifyImport("a3", moduleMDisplay, "m2"); +verifyImport("a3", moduleMDisplay, "m2"); +verifyImport("a4", moduleMDotM1Display, "m2"); +verifyImport("a4", moduleMDotM1Display, "m2"); \ No newline at end of file diff --git a/tests/cases/fourslash/quickInfoDisplayPartsLet.ts b/tests/cases/fourslash/quickInfoDisplayPartsLet.ts new file mode 100644 index 0000000000000..b54617faa0e9f --- /dev/null +++ b/tests/cases/fourslash/quickInfoDisplayPartsLet.ts @@ -0,0 +1,83 @@ +/// + +////let /*1*/a = 10; +////function foo() { +//// let /*2*/b = /*3*/a; +//// if (b) { +//// let /*4*/b1 = 10; +//// } +////} +////module m { +//// let /*5*/c = 10; +//// export let /*6*/d = 10; +//// if (c) { +//// let /*7*/e = 10; +//// } +////} +////let /*8*/f: () => number; +////let /*9*/g = /*10*/f; +/////*11*/f(); +////let /*12*/h: { (a: string): number; (a: number): string; }; +////let /*13*/i = /*14*/h; +/////*15*/h(10); +/////*16*/h("hello"); + +var marker = 0; +function verifyVar(name: string, typeDisplay: ts.SymbolDisplayPart[], optionalNameDisplay?: ts.SymbolDisplayPart[], optionalKindModifiers?: string) { + marker++; + goTo.marker(marker.toString()); + verify.verifyQuickInfoDisplayParts("let", optionalKindModifiers || "", { start: test.markerByName(marker.toString()).position, length: name.length }, + [{ text: "(", kind: "punctuation" }, { text: "let", kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }].concat(optionalNameDisplay || [{ text: name, kind: "localName" }]).concat( + { text: ":", kind: "punctuation" }, { text: " ", kind: "space" }).concat(typeDisplay), + []); +} + +var numberTypeDisplay: ts.SymbolDisplayPart[] = [{ text: "number", kind: "keyword" }]; + +verifyVar("a", numberTypeDisplay); +verifyVar("b", numberTypeDisplay); +verifyVar("a", numberTypeDisplay); +verifyVar("b1", numberTypeDisplay); +verifyVar("c", numberTypeDisplay); +verifyVar("d", numberTypeDisplay, [{ text: "m", kind: "moduleName" }, { text: ".", kind: "punctuation" }, { text: "d", kind: "localName" }], "export"); +verifyVar("e", numberTypeDisplay); + +var functionTypeReturningNumber: ts.SymbolDisplayPart[] = [{ text: "(", kind: "punctuation" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: "=>", kind: "punctuation" }, { text: " ", kind: "space" }, { text: "number", kind: "keyword" }]; +verifyVar("f", functionTypeReturningNumber); +verifyVar("g", functionTypeReturningNumber); +verifyVar("f", functionTypeReturningNumber); +verifyVar("f", functionTypeReturningNumber); + + +function getFunctionType(parametertype: string, returnType: string, isArrow?: boolean): ts.SymbolDisplayPart[] { + var functionTypeDisplay = [{ text: "(", kind: "punctuation" }, { text: "a", kind: "parameterName" }, { text: ":", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: parametertype, kind: "keyword" }, { text: ")", kind: "punctuation" }]; + + if (isArrow) { + functionTypeDisplay = functionTypeDisplay.concat({ text: " ", kind: "space" }, { text: "=>", kind: "punctuation" }); + } + else { + functionTypeDisplay = functionTypeDisplay.concat({ text: ":", kind: "punctuation" }); + } + + return functionTypeDisplay.concat({ text: " ", kind: "space" }, { text: returnType, kind: "keyword" }); +} + +var typeLiteralWithOverloadCall: ts.SymbolDisplayPart[] = [{ text: "{", kind: "punctuation" }, { text: "\n", kind: "lineBreak" }, + { text: " ", kind: "space" }].concat(getFunctionType("string", "number")).concat( + { text: ";", kind: "punctuation" }, { text: "\n", kind: "lineBreak" }, + { text: " ", kind: "space" }).concat(getFunctionType("number", "string")).concat( + { text: ";", kind: "punctuation" }, { text: "\n", kind: "lineBreak" }, { text: "}", kind: "punctuation" }); + +verifyVar("h", typeLiteralWithOverloadCall); +verifyVar("i", typeLiteralWithOverloadCall); +verifyVar("h", typeLiteralWithOverloadCall); + +var overloadDisplay: ts.SymbolDisplayPart[] = [{ text: " ", kind: "space" }, { text: "(", kind: "punctuation" }, + { text: "+", kind: "operator" }, { text: "1", kind: "numericLiteral" }, + { text: " ", kind: "space" }, { text: "overload", kind: "text" }, { text: ")", kind: "punctuation" }]; + +verifyVar("h", getFunctionType("number", "string", /*isArrow*/true).concat(overloadDisplay)); +verifyVar("h", getFunctionType("string", "number", /*isArrow*/true).concat(overloadDisplay)); \ No newline at end of file diff --git a/tests/cases/fourslash/quickInfoDisplayPartsLocalFunction.ts b/tests/cases/fourslash/quickInfoDisplayPartsLocalFunction.ts new file mode 100644 index 0000000000000..b9578c7f5227f --- /dev/null +++ b/tests/cases/fourslash/quickInfoDisplayPartsLocalFunction.ts @@ -0,0 +1,92 @@ +/// + +////function /*1*/outerFoo() { +//// function /*2*/foo(param: string, optionalParam?: string, paramWithInitializer = "hello", ...restParam: string[]) { +//// } +//// function /*3*/foowithoverload(a: string): string; +//// function /*4*/foowithoverload(a: number): number; +//// function /*5*/foowithoverload(a: any): any { +//// return a; +//// } +//// function /*6*/foowith3overload(a: string): string; +//// function /*7*/foowith3overload(a: number): number; +//// function /*8*/foowith3overload(a: boolean): boolean; +//// function /*9*/foowith3overload(a: any): any { +//// return a; +//// } +//// /*10*/foo("hello"); +//// /*11*/foowithoverload("hello"); +//// /*12*/foowithoverload(10); +//// /*13*/foowith3overload("hello"); +//// /*14*/foowith3overload(10); +//// /*15*/foowith3overload(true); +////} +/////*16*/outerFoo(); + +var marker = 0; +function verifyOuterFunction() { + marker++; + goTo.marker(marker.toString()); + verify.verifyQuickInfoDisplayParts("function", "", { start: test.markerByName(marker.toString()).position, length: "outerFoo".length }, + [{ text: "(", kind: "punctuation" }, { text: "function", kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: "outerFoo", kind: "functionName" }, { text: "(", kind: "punctuation" }, + { text: ")", kind: "punctuation" }, { text: ":", kind: "punctuation" }, { text: " ", kind: "space" }, { text: "void", kind: "keyword" }], + []); +} + +function verifyFunctionWithoutOverload() { + marker++; + goTo.marker(marker.toString()); + verify.verifyQuickInfoDisplayParts("local function", "", { start: test.markerByName(marker.toString()).position, length: "foo".length }, + [{ text: "(", kind: "punctuation" }, { text: "local function", kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: "foo", kind: "functionName" }, { text: "(", kind: "punctuation" }, + { text: "param", kind: "parameterName" }, { text: ":", kind: "punctuation" }, { text: " ", kind: "space" }, { text: "string", kind: "keyword" }, + { text: ",", kind: "punctuation" }, { text: " ", kind: "space" }, + { text: "optionalParam", kind: "parameterName" }, { text: "?", kind: "punctuation" }, { text: ":", kind: "punctuation" }, { text: " ", kind: "space" }, { text: "string", kind: "keyword" }, + { text: ",", kind: "punctuation" }, { text: " ", kind: "space" }, + { text: "paramWithInitializer", kind: "parameterName" }, { text: "?", kind: "punctuation" }, { text: ":", kind: "punctuation" }, { text: " ", kind: "space" }, { text: "string", kind: "keyword" }, + { text: ",", kind: "punctuation" }, { text: " ", kind: "space" }, + { text: "...", kind: "punctuation" }, { text: "restParam", kind: "parameterName" }, { text: ":", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: "string", kind: "keyword" }, { text: "[", kind: "punctuation" }, { text: "]", kind: "punctuation" }, + { text: ")", kind: "punctuation" }, { text: ":", kind: "punctuation" }, { text: " ", kind: "space" }, { text: "void", kind: "keyword" }], + []); +} + +function verifyFunctionWithOverload(functionName: string, type: string, overloadCount: number) { + marker++; + goTo.marker(marker.toString()); + verify.verifyQuickInfoDisplayParts("local function", "", { start: test.markerByName(marker.toString()).position, length: functionName.length }, + [{ text: "(", kind: "punctuation" }, { text: "local function", kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: functionName, kind: "functionName" }, { text: "(", kind: "punctuation" }, + { text: "a", kind: "parameterName" }, { text: ":", kind: "punctuation" }, { text: " ", kind: "space" }, { text: type, kind: "keyword" }, + { text: ")", kind: "punctuation" }, { text: ":", kind: "punctuation" }, { text: " ", kind: "space" }, { text: type, kind: "keyword" }, + { text: " ", kind: "space" }, { text: "(", kind: "punctuation" }, { text: "+", kind: "operator" }, { text: overloadCount.toString(), kind: "numericLiteral" }, + { text: " ", kind: "space" }, { text: overloadCount === 1 ? "overload" : "overloads", kind: "text" }, { text: ")", kind: "punctuation" }], + []); +} + + +// Declarations +verifyOuterFunction(); + +verifyFunctionWithoutOverload(); + +verifyFunctionWithOverload("foowithoverload", "string", 1); +verifyFunctionWithOverload("foowithoverload", "number", 1); +verifyFunctionWithOverload("foowithoverload", "string", 1); + +verifyFunctionWithOverload("foowith3overload", "string", 2); +verifyFunctionWithOverload("foowith3overload", "number", 2); +verifyFunctionWithOverload("foowith3overload", "boolean", 2); +verifyFunctionWithOverload("foowith3overload", "string", 2); + +// Calls +verifyFunctionWithoutOverload(); + +verifyFunctionWithOverload("foowithoverload", "string", 1); +verifyFunctionWithOverload("foowithoverload", "number", 1); + +verifyFunctionWithOverload("foowith3overload", "string", 2); +verifyFunctionWithOverload("foowith3overload", "number", 2); +verifyFunctionWithOverload("foowith3overload", "boolean", 2); +verifyOuterFunction(); diff --git a/tests/cases/fourslash/quickInfoDisplayPartsModules.ts b/tests/cases/fourslash/quickInfoDisplayPartsModules.ts new file mode 100644 index 0000000000000..c86bce474ffd6 --- /dev/null +++ b/tests/cases/fourslash/quickInfoDisplayPartsModules.ts @@ -0,0 +1,63 @@ +/// + +////module /*1*/m { +//// var /*2*/moduleElemWithoutExport = 10; +//// export var /*3*/moduleElemWithExport = 10; +////} +////var /*4*/a = /*5*/m; +////var /*6*/b: typeof /*7*/m; +////module /*8*/m1./*9*/m2 { +//// var /*10*/moduleElemWithoutExport = 10; +//// export var /*11*/moduleElemWithExport = 10; +////} +////var /*12*/x = /*13*/m1./*14*/m2; +////var /*15*/y: typeof /*16*/m1./*17*/m2; + +var marker = 0; +function goToMarker() { + marker++; + goTo.marker(marker.toString()); +} + +function verifyModule(name: string, optionalParentName?: string) { + goToMarker(); + var moduleNameDisplay = [{ text: name, kind: "moduleName" }]; + if (optionalParentName) { + moduleNameDisplay = [{ text: optionalParentName, kind: "moduleName" }, { text: ".", kind: "punctuation" }].concat(moduleNameDisplay); + } + verify.verifyQuickInfoDisplayParts("module", optionalParentName ? "export" : "", { start: test.markerByName(marker.toString()).position, length: name.length }, + [{ text: "module", kind: "keyword" }, { text: " ", kind: "space" }].concat(moduleNameDisplay), + []); +} + +function verifyVar(name: string, optionalFullName?: ts.SymbolDisplayPart[], typeDisplay: ts.SymbolDisplayPart[]= [{ text: "number", kind: "keyword" }]) { + goToMarker(); + verify.verifyQuickInfoDisplayParts("var", optionalFullName ? "export" : "", { start: test.markerByName(marker.toString()).position, length: name.length }, + [{ text: "(", kind: "punctuation" }, { text: "var", kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }].concat(optionalFullName || [{ text: name, kind: "localName" }]).concat( + { text: ":", kind: "punctuation" }, { text: " ", kind: "space" }).concat(typeDisplay), + []); +} + +verifyModule("m"); +verifyVar("moduleElemWithoutExport"); +verifyVar("moduleElemWithExport", [{ text: "m", kind: "moduleName" }, { text: ".", kind: "punctuation" }, { text: "moduleElemWithExport", kind: "localName" }]); + +verifyVar("a", /*optionalFullName*/ undefined, [{ text: "typeof", kind: "keyword" }, { text: " ", kind: "space" }, { text: "m", kind: "moduleName" }]); +verifyModule("m"); +verifyVar("b", /*optionalFullName*/ undefined, [{ text: "typeof", kind: "keyword" }, { text: " ", kind: "space" }, { text: "m", kind: "moduleName" }]); +verifyModule("m"); + +verifyModule("m1"); +verifyModule("m2", "m1"); +verifyVar("moduleElemWithoutExport"); +verifyVar("moduleElemWithExport", [{ text: "m1", kind: "moduleName" }, { text: ".", kind: "punctuation" }, + { text: "m2", kind: "moduleName" }, { text: ".", kind: "punctuation" }, { text: "moduleElemWithExport", kind: "localName" }]); +verifyVar("x", /*optionalFullName*/ undefined, [{ text: "typeof", kind: "keyword" }, { text: " ", kind: "space" }, + { text: "m1", kind: "moduleName" }, { text: ".", kind: "punctuation" }, { text: "m2", kind: "moduleName" }]); +verifyModule("m1"); +verifyModule("m2", "m1"); +verifyVar("y", /*optionalFullName*/ undefined, [{ text: "typeof", kind: "keyword" }, { text: " ", kind: "space" }, + { text: "m1", kind: "moduleName" }, { text: ".", kind: "punctuation" }, { text: "m2", kind: "moduleName" }]); +verifyModule("m1"); +verifyModule("m2", "m1"); diff --git a/tests/cases/fourslash/quickInfoDisplayPartsParameters.ts b/tests/cases/fourslash/quickInfoDisplayPartsParameters.ts new file mode 100644 index 0000000000000..a825030c98701 --- /dev/null +++ b/tests/cases/fourslash/quickInfoDisplayPartsParameters.ts @@ -0,0 +1,45 @@ +/// + +////function /*1*/foo(/*2*/param: string, /*3*/optionalParam?: string, /*4*/paramWithInitializer = "hello", .../*5*/restParam: string[]) { +//// /*6*/param = "Hello"; +//// /*7*/optionalParam = "World"; +//// /*8*/paramWithInitializer = "Hello"; +//// /*9*/restParam[0] = "World"; +////} + +goTo.marker("1"); +verify.verifyQuickInfoDisplayParts("function", "", { start: test.markerByName('1').position, length: "foo".length }, + [{ text: "(", kind: "punctuation" }, { text: "function", kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: "foo", kind: "functionName" }, { text: "(", kind: "punctuation" }, + { text: "param", kind: "parameterName" }, { text: ":", kind: "punctuation" }, { text: " ", kind: "space" }, { text: "string", kind: "keyword" }, + { text: ",", kind: "punctuation" }, { text: " ", kind: "space" }, + { text: "optionalParam", kind: "parameterName" }, { text: "?", kind: "punctuation" }, { text: ":", kind: "punctuation" }, { text: " ", kind: "space" }, { text: "string", kind: "keyword" }, + { text: ",", kind: "punctuation" }, { text: " ", kind: "space" }, + { text: "paramWithInitializer", kind: "parameterName" }, { text: "?", kind: "punctuation" }, { text: ":", kind: "punctuation" }, { text: " ", kind: "space" }, { text: "string", kind: "keyword" }, + { text: ",", kind: "punctuation" }, { text: " ", kind: "space" }, + { text: "...", kind: "punctuation" }, { text: "restParam", kind: "parameterName" }, { text: ":", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: "string", kind: "keyword" } , { text: "[", kind: "punctuation" }, { text: "]", kind: "punctuation" }, + { text: ")", kind: "punctuation" }, { text: ":", kind: "punctuation" }, { text: " ", kind: "space" }, { text: "void", kind: "keyword" }], + []); + +var marker = 1; +function verifyParam(parameterName: string, isRest: boolean) { + marker++; + goTo.marker(marker.toString()); + var displayParts = [{ text: "(", kind: "punctuation" }, { text: "parameter", kind: "text" }, { text: ")", kind: "punctuation" }, { text: " ", kind: "space" }, + { text: parameterName, kind: "parameterName" }, { text: ":", kind: "punctuation" }, { text: " ", kind: "space" }, { text: "string", kind: "keyword" }]; + if (isRest) { + displayParts.push({ text: "[", kind: "punctuation" }, { text: "]", kind: "punctuation" }); + } + verify.verifyQuickInfoDisplayParts("parameter", "", { start: test.markerByName(marker.toString()).position, length: parameterName.length }, displayParts, []); +} + +verifyParam('param', /*isRest*/false); +verifyParam('optionalParam', /*isRest*/false); +verifyParam('paramWithInitializer', /*isRest*/false); +verifyParam('restParam', /*isRest*/true); + +verifyParam('param', /*isRest*/false); +verifyParam('optionalParam', /*isRest*/false); +verifyParam('paramWithInitializer', /*isRest*/false); +verifyParam('restParam', /*isRest*/true); diff --git a/tests/cases/fourslash/quickInfoDisplayPartsTypeAlias.ts b/tests/cases/fourslash/quickInfoDisplayPartsTypeAlias.ts new file mode 100644 index 0000000000000..5441ca353647c --- /dev/null +++ b/tests/cases/fourslash/quickInfoDisplayPartsTypeAlias.ts @@ -0,0 +1,42 @@ +/// + +////class /*1*/c { +////} +////type /*2*/t1 = /*3*/c; +////var /*4*/cInstance: /*5*/t1 = new /*6*/c(); + +function verifyClassDisplay(markerName: string) { + goTo.marker(markerName); + verify.verifyQuickInfoDisplayParts("class", "", { start: test.markerByName(markerName).position, length: "c".length }, + [{ text: "class", kind: "keyword" }, { text: " ", kind: "space" }, { text: "c", kind: "className" }], + []); +} + +function verifyTypeAliasDisplay(markerName: string) { + goTo.marker(markerName); + verify.verifyQuickInfoDisplayParts("type", "", { start: test.markerByName(markerName).position, length: "t1".length }, + [{ text: "type", kind: "keyword" }, { text: " ", kind: "space" }, { text: "t1", kind: "aliasName" }, + { text: " ", kind: "space" }, { text: "=", kind: "operator" }, { text: " ", kind: "space" }, { text: "c", kind: "className" }], + []); +} + +verifyClassDisplay('1'); +verifyTypeAliasDisplay('2'); +verifyClassDisplay('3'); + +goTo.marker('4'); +verify.verifyQuickInfoDisplayParts("var", "", { start: test.markerByName("4").position, length: "cInstance".length }, + [{ text: "(", kind: "punctuation" }, { text: "var", kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: "cInstance", kind: "localName" }, { text: ":", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: "c", kind: "className" }], + []); + +verifyTypeAliasDisplay('5'); + +goTo.marker('6'); +verify.verifyQuickInfoDisplayParts("constructor", "", { start: test.markerByName("6").position, length: "c".length }, + [{ text: "(", kind: "punctuation" }, { text: "constructor", kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: "c", kind: "className" }, + { text: "(", kind: "punctuation" }, { text: ")", kind: "punctuation" }, { text: ":", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: "c", kind: "className" }], + []); \ No newline at end of file diff --git a/tests/cases/fourslash/quickInfoDisplayPartsTypeParameterInClass.ts b/tests/cases/fourslash/quickInfoDisplayPartsTypeParameterInClass.ts new file mode 100644 index 0000000000000..dd32c8b236abe --- /dev/null +++ b/tests/cases/fourslash/quickInfoDisplayPartsTypeParameterInClass.ts @@ -0,0 +1,239 @@ +/// + +////class /*1*/c { +//// /*3*/constructor(/*4*/a: /*5*/T) { +//// } +//// /*6*/method(/*8*/a: /*9*/U, /*10*/b: /*11*/T) { +//// return /*12*/a; +//// } +////} +////var /*13*/cInstance = new /*14*/c("Hello"); +////var /*15*/cVal = /*16*/c; +/////*17*/cInstance./*18*/method("hello", "cello"); +////class /*19*/c2> { +//// /*22*/constructor(/*23*/a: /*24*/T) { +//// } +//// /*25*/method>(/*28*/a: /*29*/U, /*30*/b: /*31*/T) { +//// return /*32*/a; +//// } +////} +////var /*33*/cInstance1 = new /*34*/c2(/*35*/cInstance); +////var /*36*/cVal2 = /*37*/c2; +/////*38*/cInstance1./*39*/method(/*40*/cInstance, /*41*/cInstance); + +var marker = 0; +var markerName: string; + +function goToMarker() { + marker++; + markerName = marker.toString(); + goTo.marker(markerName); +} + +function getTypeParameterDisplay(instanceType: ts.SymbolDisplayPart[], + name: string, optionalExtends?: ts.SymbolDisplayPart[]) { + return instanceType || + function () { + var typeParameterDisplay = [{ text: name, kind: "typeParameterName" }]; + if (optionalExtends) { + typeParameterDisplay.push({ text: " ", kind: "space" }, { text: "extends", kind: "keyword" }, + { text: " ", kind: "space" }); + typeParameterDisplay = typeParameterDisplay.concat(optionalExtends); + } + return typeParameterDisplay + } (); +} + +function getClassDisplay(name: string, optionalInstanceType?: ts.SymbolDisplayPart[], + optionalExtends?: ts.SymbolDisplayPart[]) { + var classDisplay = [{ text: name, kind: "className" }, { text: "<", kind: "punctuation" }]; + classDisplay = classDisplay.concat(getTypeParameterDisplay(optionalInstanceType, "T", optionalExtends)); + classDisplay.push({ text: ">", kind: "punctuation" }); + return classDisplay; +} + +function verifyClassDisplay(name: string, optionalExtends?: ts.SymbolDisplayPart[]) { + goToMarker(); + + verify.verifyQuickInfoDisplayParts("class", "", { start: test.markerByName(markerName).position, length: name.length }, + [{ text: "class", kind: "keyword" }, { text: " ", kind: "space" }].concat( + getClassDisplay(name, undefined, optionalExtends)), []); +} + +function verifyTypeParameter(name: string, inDisplay: ts.SymbolDisplayPart[]) { + goToMarker(); + + var typeParameterDisplay = [{ text: "(", kind: "punctuation" }, { text: "type parameter", kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: name, kind: "typeParameterName" }, + { text: " ", kind: "space" }, { text: "in", kind: "keyword" }, { text: " ", kind: "space" }]; + typeParameterDisplay = typeParameterDisplay.concat(inDisplay); + + verify.verifyQuickInfoDisplayParts("type parameter", "", { start: test.markerByName(markerName).position, length: name.length }, + typeParameterDisplay, []); +} + +function verifyConstructor(name: string, optionalInstanceType?: ts.SymbolDisplayPart[], + optionalExtends?: ts.SymbolDisplayPart[]) { + goToMarker(); + var constructorDisplay = [{ text: "(", kind: "punctuation" }, { text: "constructor", kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }]; + constructorDisplay = constructorDisplay.concat(getClassDisplay(name, optionalInstanceType, optionalExtends)); + + constructorDisplay.push({ text: "(", kind: "punctuation" }, { text: "a", kind: "parameterName" }, + { text: ":", kind: "punctuation" }, { text: " ", kind: "space" }); + + constructorDisplay = constructorDisplay.concat( + getTypeParameterDisplay(optionalInstanceType, "T")); + + constructorDisplay.push({ text: ")", kind: "punctuation" }, + { text: ":", kind: "punctuation" }, { text: " ", kind: "space" }); + + constructorDisplay = constructorDisplay.concat(getClassDisplay(name, optionalInstanceType)); + + verify.verifyQuickInfoDisplayParts("constructor", "", { start: test.markerByName(markerName).position, length: optionalInstanceType ? name.length : "constructor".length }, + constructorDisplay, []); +} + +function verifyParameter(name: string, type: string, optionalExtends?: ts.SymbolDisplayPart[]) { + goToMarker(); + var parameterDisplay = [{ text: "(", kind: "punctuation" }, { text: "parameter", kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: name, kind: "parameterName" }, { text: ":", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: type, kind: "typeParameterName" }]; + if (optionalExtends) { + parameterDisplay.push({ text: " ", kind: "space" }, { text: "extends", kind: "keyword" }, + { text: " ", kind: "space" }); + parameterDisplay = parameterDisplay.concat(optionalExtends); + } + verify.verifyQuickInfoDisplayParts("parameter", "", { start: test.markerByName(markerName).position, length: name.length }, + parameterDisplay, []); +} + +function getMethodDisplay(name: string, className: string, + optionalInstanceType?: ts.SymbolDisplayPart[], optionalExtends?: ts.SymbolDisplayPart[]) { + var functionDisplay = getClassDisplay(className, optionalInstanceType, optionalExtends); + + functionDisplay.push({ text: ".", kind: "punctuation" }, { text: name, kind: "methodName" }, + { text: "<", kind: "punctuation" }); + + functionDisplay = functionDisplay.concat( + getTypeParameterDisplay(optionalInstanceType, "U", optionalExtends)); + + functionDisplay.push({ text: ">", kind: "punctuation" }, { text: "(", kind: "punctuation" }, + { text: "a", kind: "parameterName" }, { text: ":", kind: "punctuation" }, + { text: " ", kind: "space" }); + functionDisplay = functionDisplay.concat( + getTypeParameterDisplay(optionalInstanceType, "U")); + functionDisplay.push({ text: ",", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: "b", kind: "parameterName" }, + { text: ":", kind: "punctuation" }, { text: " ", kind: "space" }); + functionDisplay = functionDisplay.concat( + getTypeParameterDisplay(optionalInstanceType, "T")); + + functionDisplay.push({ text: ")", kind: "punctuation" }, + { text: ":", kind: "punctuation" }, { text: " ", kind: "space" }); + + functionDisplay = functionDisplay.concat( + getTypeParameterDisplay(optionalInstanceType, "U")); + + return functionDisplay; +} + +function verifyMethodDisplay(name: string, className: string, + optionalInstanceType?: ts.SymbolDisplayPart[], optionalExtends?: ts.SymbolDisplayPart[]) { + goToMarker(); + var functionDisplay = [{ text: "(", kind: "punctuation" }, { text: "method", kind: "text" }, + { text: ")", kind: "punctuation" }, { text: " ", kind: "space" }].concat( + getMethodDisplay(name, className, optionalInstanceType, optionalExtends)); + + verify.verifyQuickInfoDisplayParts("method", "", + { start: test.markerByName(markerName).position, length: name.length }, + functionDisplay, []); +} + +function verifyClassInstance(name: string, typeDisplay: ts.SymbolDisplayPart[]) { + goToMarker(); + verify.verifyQuickInfoDisplayParts("var", "", { start: test.markerByName(markerName).position, length: name.length }, + [{ text: "(", kind: "punctuation" }, { text: "var", kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: name, kind: "localName" }, { text: ":", kind: "punctuation" }, + { text: " ", kind: "space" }].concat(typeDisplay), + []); +} + +function verifyVarTypeOf(name: string, typeOfSymbol: ts.SymbolDisplayPart) { + goToMarker(); + verify.verifyQuickInfoDisplayParts("var", "", { start: test.markerByName(markerName).position, length: name.length }, + [{ text: "(", kind: "punctuation" }, { text: "var", kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: name, kind: "localName" }, { text: ":", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: "typeof", kind: "keyword" }, + { text: " ", kind: "space" }].concat(typeOfSymbol), + []); +} + +var stringTypeDisplay = [{ text: "string", kind: "keyword" }]; +var extendsTypeDisplay = getClassDisplay("c", stringTypeDisplay); + +// Declaration +verifyClassDisplay("c"); +verifyTypeParameter("T", getClassDisplay("c")); + +// Constructor declaration +verifyConstructor("c"); +verifyParameter("a", "T"); +verifyTypeParameter("T", getClassDisplay("c")); + +// Method declaration +verifyMethodDisplay("method", "c"); +verifyTypeParameter("U", getMethodDisplay("method", "c")); +verifyParameter("a", "U"); +verifyTypeParameter("U", getMethodDisplay("method", "c")); +verifyParameter("b", "T"); +verifyTypeParameter("T", getClassDisplay("c")); +verifyParameter("a", "U"); + +// Instance creation +verifyClassInstance("cInstance", getClassDisplay("c", stringTypeDisplay)); +verifyConstructor("c", stringTypeDisplay); + +// typeof assignment +verifyVarTypeOf("cVal", { text: "c", kind: "className" }); +verifyClassDisplay("c"); + +// Method call +verifyClassInstance("cInstance", getClassDisplay("c", stringTypeDisplay)); +verifyMethodDisplay("method", "c", stringTypeDisplay); + +// With constraint +// Declaration +verifyClassDisplay("c2", getClassDisplay("c", stringTypeDisplay)); +verifyTypeParameter("T", getClassDisplay("c2", /*instanceType*/undefined, extendsTypeDisplay)); +verifyClassDisplay("c"); + +// Constructor declaration +verifyConstructor("c2", /*instanceType*/undefined, extendsTypeDisplay); +verifyParameter("a", "T", extendsTypeDisplay); +verifyTypeParameter("T", getClassDisplay("c2", /*instanceType*/undefined, extendsTypeDisplay)); + +// Method declaration +verifyMethodDisplay("method", "c2", /*instance*/undefined, extendsTypeDisplay); +verifyTypeParameter("U", getMethodDisplay("method", "c2", /*instance*/undefined, extendsTypeDisplay)); +verifyClassDisplay("c"); +verifyParameter("a", "U", extendsTypeDisplay); +verifyTypeParameter("U", getMethodDisplay("method", "c2", /*instance*/undefined, extendsTypeDisplay)); +verifyParameter("b", "T", extendsTypeDisplay); +verifyTypeParameter("T", getClassDisplay("c2", /*instanceType*/undefined, extendsTypeDisplay)); +verifyParameter("a", "U", extendsTypeDisplay); + +// Instance creation +verifyClassInstance("cInstance1", getClassDisplay("c2", extendsTypeDisplay)); +verifyConstructor("c2", extendsTypeDisplay); +verifyClassInstance("cInstance", getClassDisplay("c", stringTypeDisplay)); + +// typeof assignment +verifyVarTypeOf("cVal2", { text: "c2", kind: "className" }); +verifyClassDisplay("c2", getClassDisplay("c", stringTypeDisplay)); + +// Method call +verifyClassInstance("cInstance1", getClassDisplay("c2", extendsTypeDisplay)); +verifyMethodDisplay("method", "c2", extendsTypeDisplay); +verifyClassInstance("cInstance", getClassDisplay("c", stringTypeDisplay)); +verifyClassInstance("cInstance", getClassDisplay("c", stringTypeDisplay)); \ No newline at end of file diff --git a/tests/cases/fourslash/quickInfoDisplayPartsTypeParameterInFunction.ts b/tests/cases/fourslash/quickInfoDisplayPartsTypeParameterInFunction.ts new file mode 100644 index 0000000000000..0daabd43ad7c4 --- /dev/null +++ b/tests/cases/fourslash/quickInfoDisplayPartsTypeParameterInFunction.ts @@ -0,0 +1,118 @@ +/// + + +////function /*1*/foo(/*3*/a: /*4*/U) { +//// return /*5*/a; +////} +/////*6*/foo("Hello"); +////function /*7*/foo2(/*9*/a: /*10*/U) { +//// return /*11*/a; +////} +/////*12*/foo2("hello"); + +var marker = 0; +var markerName: string; + +function goToMarker() { + marker++; + markerName = marker.toString(); + goTo.marker(markerName); +} + +function getTypeParameterDisplay(instanceType: ts.SymbolDisplayPart[], + name: string, optionalExtends?: ts.SymbolDisplayPart[]) { + return instanceType || + function () { + var typeParameterDisplay = [{ text: name, kind: "typeParameterName" }]; + if (optionalExtends) { + typeParameterDisplay.push({ text: " ", kind: "space" }, { text: "extends", kind: "keyword" }, + { text: " ", kind: "space" }); + typeParameterDisplay = typeParameterDisplay.concat(optionalExtends); + } + return typeParameterDisplay + } (); +} + +function verifyTypeParameter(name: string, inDisplay: ts.SymbolDisplayPart[]) { + goToMarker(); + + var typeParameterDisplay = [{ text: "(", kind: "punctuation" }, { text: "type parameter", kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: name, kind: "typeParameterName" }, + { text: " ", kind: "space" }, { text: "in", kind: "keyword" }, { text: " ", kind: "space" }]; + typeParameterDisplay = typeParameterDisplay.concat(inDisplay); + + verify.verifyQuickInfoDisplayParts("type parameter", "", { start: test.markerByName(markerName).position, length: name.length }, + typeParameterDisplay, []); +} + +function verifyParameter(name: string, typeParameterName: string, optionalExtends?: ts.SymbolDisplayPart[]) { + goToMarker(); + var parameterDisplay = [{ text: "(", kind: "punctuation" }, { text: "parameter", kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: name, kind: "parameterName" }, { text: ":", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: typeParameterName, kind: "typeParameterName" }]; + if (optionalExtends) { + parameterDisplay.push({ text: " ", kind: "space" }, { text: "extends", kind: "keyword" }, + { text: " ", kind: "space" }); + parameterDisplay = parameterDisplay.concat(optionalExtends); + } + verify.verifyQuickInfoDisplayParts("parameter", "", { start: test.markerByName(markerName).position, length: name.length }, + parameterDisplay, []); +} + +function getFunctionDisplay(name: string, optionalInstanceType?: ts.SymbolDisplayPart[], + optionalExtends?: ts.SymbolDisplayPart[]) { + var functionDisplay = [{ text: name, kind: "functionName" }, { text: "<", kind: "punctuation" }]; + + functionDisplay = functionDisplay.concat( + getTypeParameterDisplay(optionalInstanceType, "U", optionalExtends)); + + functionDisplay.push({ text: ">", kind: "punctuation" }, { text: "(", kind: "punctuation" }, + { text: "a", kind: "parameterName" }, { text: ":", kind: "punctuation" }, + { text: " ", kind: "space" }); + + functionDisplay = functionDisplay.concat( + getTypeParameterDisplay(optionalInstanceType, "U")); + + functionDisplay.push({ text: ")", kind: "punctuation" }, { text: ":", kind: "punctuation" }, + { text: " ", kind: "space" }); + + functionDisplay = functionDisplay.concat( + getTypeParameterDisplay(optionalInstanceType, "U")); + + return functionDisplay; +} + +function verifyFunctionDisplay(name: string, optionalInstanceType?: ts.SymbolDisplayPart[], + optionalExtends?: ts.SymbolDisplayPart[]) { + goToMarker(); + var functionDisplay = [{ text: "(", kind: "punctuation" }, { text: "function", kind: "text" }, + { text: ")", kind: "punctuation" }, { text: " ", kind: "space" }].concat( + getFunctionDisplay(name, optionalInstanceType, optionalExtends)); + + verify.verifyQuickInfoDisplayParts("function", "", + { start: test.markerByName(markerName).position, length: name.length }, + functionDisplay, []); +} + +var stringTypeDisplay = [{ text: "string", kind: "keyword" }]; + +// Declaration +verifyFunctionDisplay("foo"); +verifyTypeParameter("U", getFunctionDisplay("foo")); +verifyParameter("a", "U"); +verifyTypeParameter("U", getFunctionDisplay("foo")); +verifyParameter("a", "U"); + +// Call +verifyFunctionDisplay("foo", stringTypeDisplay); + +// With constraint +// Declaration +verifyFunctionDisplay("foo2", /*instance*/ undefined, stringTypeDisplay); +verifyTypeParameter("U", getFunctionDisplay("foo2", /*instance*/ undefined, stringTypeDisplay)); +verifyParameter("a", "U", stringTypeDisplay); +verifyTypeParameter("U", getFunctionDisplay("foo2", /*instance*/ undefined, stringTypeDisplay)); +verifyParameter("a", "U", stringTypeDisplay); + +// Call +verifyFunctionDisplay("foo2", stringTypeDisplay); \ No newline at end of file diff --git a/tests/cases/fourslash/quickInfoDisplayPartsTypeParameterInInterface.ts b/tests/cases/fourslash/quickInfoDisplayPartsTypeParameterInInterface.ts new file mode 100644 index 0000000000000..95797166ea28b --- /dev/null +++ b/tests/cases/fourslash/quickInfoDisplayPartsTypeParameterInInterface.ts @@ -0,0 +1,263 @@ +/// + +////interface /*1*/I { +//// new (/*4*/a: /*5*/U, /*6*/b: /*7*/T): /*8*/U; +//// (/*10*/a: /*11*/U, /*12*/b: /*13*/T): /*14*/U; +//// /*15*/method(/*17*/a: /*18*/U, /*19*/b: /*20*/T): /*21*/U; +////} +////var /*22*/iVal: /*23*/I; +////new /*24*/iVal("hello", "hello"); +/////*25*/iVal("hello", "hello"); +/////*26*/iVal./*27*/method("hello", "hello"); +////interface /*28*/I1> { +//// new >(/*33*/a: /*34*/U, /*35*/b: /*36*/T): /*37*/U; +//// >(/*40*/a: /*41*/U, /*42*/b: /*43*/T): /*44*/U; +//// /*45*/method>(/*48*/a: /*49*/U, /*50*/b: /*51*/T): /*52*/U; +////} +////var /*53*/iVal1: /*54*/I1>; +////new /*56*/iVal1(/*57*/iVal, /*58*/iVal); +/////*59*/iVal1(/*60*/iVal, /*61*/iVal); +/////*62*/iVal1./*63*/method(/*64*/iVal, /*65*/iVal); + +var marker = 0; +var markerName: string; + +function goToMarker() { + marker++; + markerName = marker.toString(); + goTo.marker(markerName); +} + +function getTypeParameterDisplay(instanceType: ts.SymbolDisplayPart[], + name: string, optionalExtends?: ts.SymbolDisplayPart[]) { + return instanceType || + function () { + var typeParameterDisplay = [{ text: name, kind: "typeParameterName" }]; + if (optionalExtends) { + typeParameterDisplay.push({ text: " ", kind: "space" }, { text: "extends", kind: "keyword" }, + { text: " ", kind: "space" }); + typeParameterDisplay = typeParameterDisplay.concat(optionalExtends); + } + return typeParameterDisplay + } (); +} + +function getInterfaceDisplay(name: string, optionalInstanceType?: ts.SymbolDisplayPart[], + optionalExtends?: ts.SymbolDisplayPart[]) { + var interfaceDisplay = [{ text: name, kind: "interfaceName" }, { text: "<", kind: "punctuation" }]; + interfaceDisplay = interfaceDisplay.concat(getTypeParameterDisplay(optionalInstanceType, "T", optionalExtends)); + interfaceDisplay.push({ text: ">", kind: "punctuation" }); + return interfaceDisplay; +} + +function verifyInterfaceDisplay(name: string, optionalExtends?: ts.SymbolDisplayPart[]) { + goToMarker(); + + verify.verifyQuickInfoDisplayParts("interface", "", { start: test.markerByName(markerName).position, length: name.length }, + [{ text: "interface", kind: "keyword" }, { text: " ", kind: "space" }].concat( + getInterfaceDisplay(name, undefined, optionalExtends)), []); +} + +function verifyTypeParameter(name: string, inDisplay: ts.SymbolDisplayPart[]) { + goToMarker(); + + var typeParameterDisplay = [{ text: "(", kind: "punctuation" }, { text: "type parameter", kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: name, kind: "typeParameterName" }, + { text: " ", kind: "space" }, { text: "in", kind: "keyword" }, { text: " ", kind: "space" }]; + typeParameterDisplay = typeParameterDisplay.concat(inDisplay); + + verify.verifyQuickInfoDisplayParts("type parameter", "", { start: test.markerByName(markerName).position, length: name.length }, + typeParameterDisplay, []); +} + +function verifyParameter(name: string, typeParameterName: string, optionalExtends?: ts.SymbolDisplayPart[]) { + goToMarker(); + var parameterDisplay = [{ text: "(", kind: "punctuation" }, { text: "parameter", kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: name, kind: "parameterName" }, { text: ":", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: typeParameterName, kind: "typeParameterName" }]; + if (optionalExtends) { + parameterDisplay.push({ text: " ", kind: "space" }, { text: "extends", kind: "keyword" }, + { text: " ", kind: "space" }); + parameterDisplay = parameterDisplay.concat(optionalExtends); + } + verify.verifyQuickInfoDisplayParts("parameter", "", { start: test.markerByName(markerName).position, length: name.length }, + parameterDisplay, []); +} + +function getSignatureDisplay(isArrow: boolean, optionalInstanceType?: ts.SymbolDisplayPart[], + optionalExtends?: ts.SymbolDisplayPart[]) { + var functionDisplay: ts.SymbolDisplayPart[] = []; + + functionDisplay.push({ text: "<", kind: "punctuation" }); + + functionDisplay = functionDisplay.concat( + getTypeParameterDisplay(optionalInstanceType, "U", optionalExtends)); + + functionDisplay.push({ text: ">", kind: "punctuation" }, { text: "(", kind: "punctuation" }, + { text: "a", kind: "parameterName" }, { text: ":", kind: "punctuation" }, + { text: " ", kind: "space" }); + functionDisplay = functionDisplay.concat( + getTypeParameterDisplay(optionalInstanceType, "U")); + functionDisplay.push({ text: ",", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: "b", kind: "parameterName" }, + { text: ":", kind: "punctuation" }, { text: " ", kind: "space" }); + functionDisplay = functionDisplay.concat( + getTypeParameterDisplay(optionalInstanceType, "T")); + + functionDisplay.push({ text: ")", kind: "punctuation" }); + if (isArrow) { + functionDisplay.push({ text: " ", kind: "space" }, { text: "=>", kind: "punctuation" }); + } + else { + functionDisplay.push({ text: ":", kind: "punctuation" }); + } + functionDisplay.push({ text: " ", kind: "space" }); + + functionDisplay = functionDisplay.concat( + getTypeParameterDisplay(optionalInstanceType, "U")); + + return functionDisplay; +} + +function getMethodDisplay(name: string, interfaceName: string, optionalInstanceType?: ts.SymbolDisplayPart[], + optionalExtends?: ts.SymbolDisplayPart[]) { + return getInterfaceDisplay(interfaceName, optionalInstanceType, optionalExtends).concat( + { text: ".", kind: "punctuation" }, { text: name, kind: "methodName" }).concat( + getSignatureDisplay(/*isArrow*/ false, optionalInstanceType, optionalExtends)); +} + +function getCallOrNewSignatureDisplay(isNew: boolean, isArrow: boolean, interfaceName?: string, + optionalInstanceType?: ts.SymbolDisplayPart[], optionalExtends?: ts.SymbolDisplayPart[]) { + var result: ts.SymbolDisplayPart[] = []; + if (isNew) { + result.push({ text: "new", kind: "keyword" }, { text: " ", kind: "space" }); + } + if (interfaceName) { + result.push({ text: interfaceName, kind: "interfaceName" }); + } + + return result.concat(getSignatureDisplay(isArrow, optionalInstanceType, optionalExtends)); +} + +function verifyMethodDisplay(name: string, interfaceName: string, + optionalInstanceType?: ts.SymbolDisplayPart[], optionalExtends?: ts.SymbolDisplayPart[]) { + goToMarker(); + var functionDisplay = [{ text: "(", kind: "punctuation" }, { text: "method", kind: "text" }, + { text: ")", kind: "punctuation" }, { text: " ", kind: "space" }].concat( + getMethodDisplay(name, interfaceName, optionalInstanceType, optionalExtends)); + + verify.verifyQuickInfoDisplayParts("method", "", + { start: test.markerByName(markerName).position, length: name.length }, + functionDisplay, []); +} + +function verifyInterfaceVar(name: string, typeDisplay: ts.SymbolDisplayPart[]) { + goToMarker(); + verify.verifyQuickInfoDisplayParts("var", "", { start: test.markerByName(markerName).position, length: name.length }, + [{ text: "(", kind: "punctuation" }, { text: "var", kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: name, kind: "localName" }, { text: ":", kind: "punctuation" }, + { text: " ", kind: "space" }].concat(typeDisplay), + []); +} + +var stringTypeDisplay = [{ text: "string", kind: "keyword" }]; +var extendsTypeDisplay = getInterfaceDisplay("I", stringTypeDisplay); + + +// Declaration +verifyInterfaceDisplay("I"); +verifyTypeParameter("T", getInterfaceDisplay("I")); + +// New declaration +verifyTypeParameter("U", getCallOrNewSignatureDisplay(/*isNew*/ true, /*isArrow*/ false)); +verifyParameter("a", "U"); +verifyTypeParameter("U", getCallOrNewSignatureDisplay(/*isNew*/ true, /*isArrow*/ false)); +verifyParameter("b", "T"); +verifyTypeParameter("T", getInterfaceDisplay("I")); +verifyTypeParameter("U", getCallOrNewSignatureDisplay(/*isNew*/ true, /*isArrow*/ false)); + +// Call declaration +verifyTypeParameter("U", getCallOrNewSignatureDisplay(/*isNew*/ false, /*isArrow*/ false)); +verifyParameter("a", "U"); +verifyTypeParameter("U", getCallOrNewSignatureDisplay(/*isNew*/ false, /*isArrow*/ false)); +verifyParameter("b", "T"); +verifyTypeParameter("T", getInterfaceDisplay("I")); +verifyTypeParameter("U", getCallOrNewSignatureDisplay(/*isNew*/ false, /*isArrow*/ false)); + +// Method declaration +verifyMethodDisplay("method", "I"); +verifyTypeParameter("U", getMethodDisplay("method", "I")); +verifyParameter("a", "U"); +verifyTypeParameter("U", getMethodDisplay("method", "I")); +verifyParameter("b", "T"); +verifyTypeParameter("T", getInterfaceDisplay("I")); +verifyTypeParameter("U", getMethodDisplay("method", "I")); + +// Instance +verifyInterfaceVar("iVal", getInterfaceDisplay("I", stringTypeDisplay)); +verifyInterfaceDisplay("I"); + +// new +verifyInterfaceVar("iVal", getCallOrNewSignatureDisplay(/*isNew*/ true, /*isArrow*/ true, "I", stringTypeDisplay)); + +// call +verifyInterfaceVar("iVal", getCallOrNewSignatureDisplay(/*isNew*/ false, /*isArrow*/ true, "I", stringTypeDisplay)); + +// Method call +verifyInterfaceVar("iVal", getInterfaceDisplay("I", stringTypeDisplay)); +verifyMethodDisplay("method", "I", stringTypeDisplay); + +// With constraint +// Declaration +verifyInterfaceDisplay("I1", extendsTypeDisplay); +verifyTypeParameter("T", getInterfaceDisplay("I1", /*instance*/undefined, extendsTypeDisplay)); +verifyInterfaceDisplay("I"); + +// New declaration +verifyTypeParameter("U", getCallOrNewSignatureDisplay(/*isNew*/ true, /*isArrow*/ false, /*interfaceName*/undefined, /*instance*/undefined, extendsTypeDisplay)); +verifyInterfaceDisplay("I"); +verifyParameter("a", "U", extendsTypeDisplay); +verifyTypeParameter("U", getCallOrNewSignatureDisplay(/*isNew*/ true, /*isArrow*/ false, /*interfaceName*/undefined, /*instance*/undefined, extendsTypeDisplay)); +verifyParameter("b", "T", extendsTypeDisplay); +verifyTypeParameter("T", getInterfaceDisplay("I1", /*instance*/undefined, extendsTypeDisplay)); +verifyTypeParameter("U", getCallOrNewSignatureDisplay(/*isNew*/ true, /*isArrow*/ false, /*interfaceName*/undefined, /*instance*/undefined, extendsTypeDisplay)); + +// Call declaration +verifyTypeParameter("U", getCallOrNewSignatureDisplay(/*isNew*/ false, /*isArrow*/ false, /*interfaceName*/undefined, /*instance*/undefined, extendsTypeDisplay)); +verifyInterfaceDisplay("I"); +verifyParameter("a", "U", extendsTypeDisplay); +verifyTypeParameter("U", getCallOrNewSignatureDisplay(/*isNew*/ false, /*isArrow*/ false, /*interfaceName*/undefined, /*instance*/undefined, extendsTypeDisplay)); +verifyParameter("b", "T", extendsTypeDisplay); +verifyTypeParameter("T", getInterfaceDisplay("I1", /*instance*/undefined, extendsTypeDisplay)); +verifyTypeParameter("U", getCallOrNewSignatureDisplay(/*isNew*/ false, /*isArrow*/ false, /*interfaceName*/undefined, /*instance*/undefined, extendsTypeDisplay)); + +// Method declaration +verifyMethodDisplay("method", "I1", /*instance*/ undefined, extendsTypeDisplay); +verifyTypeParameter("U", getMethodDisplay("method", "I1", /*instance*/ undefined, extendsTypeDisplay)); +verifyInterfaceDisplay("I"); +verifyParameter("a", "U", extendsTypeDisplay); +verifyTypeParameter("U", getMethodDisplay("method", "I1", /*instance*/ undefined, extendsTypeDisplay)); +verifyParameter("b", "T", extendsTypeDisplay); +verifyTypeParameter("T", getInterfaceDisplay("I1", /*instance*/undefined, extendsTypeDisplay)); +verifyTypeParameter("U", getMethodDisplay("method", "I1", /*instance*/ undefined, extendsTypeDisplay)); + +// Instance +verifyInterfaceVar("iVal1", getInterfaceDisplay("I1", extendsTypeDisplay)); +verifyInterfaceDisplay("I1", extendsTypeDisplay); +verifyInterfaceDisplay("I"); + +// new +verifyInterfaceVar("iVal1", getCallOrNewSignatureDisplay(/*isNew*/ true, /*isArrow*/ true, "I1", extendsTypeDisplay)); +verifyInterfaceVar("iVal", getInterfaceDisplay("I", stringTypeDisplay)); +verifyInterfaceVar("iVal", getInterfaceDisplay("I", stringTypeDisplay)); + +// call +verifyInterfaceVar("iVal1", getCallOrNewSignatureDisplay(/*isNew*/ false, /*isArrow*/ true, "I1", extendsTypeDisplay)); +verifyInterfaceVar("iVal", getInterfaceDisplay("I", stringTypeDisplay)); +verifyInterfaceVar("iVal", getInterfaceDisplay("I", stringTypeDisplay)); + +// Method call +verifyInterfaceVar("iVal1", getInterfaceDisplay("I1", extendsTypeDisplay)); +verifyMethodDisplay("method", "I1", extendsTypeDisplay); +verifyInterfaceVar("iVal", getInterfaceDisplay("I", stringTypeDisplay)); +verifyInterfaceVar("iVal", getInterfaceDisplay("I", stringTypeDisplay)); diff --git a/tests/cases/fourslash/quickInfoDisplayPartsVar.ts b/tests/cases/fourslash/quickInfoDisplayPartsVar.ts new file mode 100644 index 0000000000000..56ccceb3ab376 --- /dev/null +++ b/tests/cases/fourslash/quickInfoDisplayPartsVar.ts @@ -0,0 +1,76 @@ +/// + +////var /*1*/a = 10; +////function foo() { +//// var /*2*/b = /*3*/a; +////} +////module m { +//// var /*4*/c = 10; +//// export var /*5*/d = 10; +////} +////var /*6*/f: () => number; +////var /*7*/g = /*8*/f; +/////*9*/f(); +////var /*10*/h: { (a: string): number; (a: number): string; }; +////var /*11*/i = /*12*/h; +/////*13*/h(10); +/////*14*/h("hello"); + +var marker = 0; +function verifyVar(name: string, isLocal: boolean, typeDisplay: ts.SymbolDisplayPart[], optionalNameDisplay?: ts.SymbolDisplayPart[], optionalKindModifiers?: string) { + marker++; + goTo.marker(marker.toString()); + var kind = isLocal ? "local var" : "var"; + verify.verifyQuickInfoDisplayParts(kind, optionalKindModifiers || "", { start: test.markerByName(marker.toString()).position, length: name.length }, + [{ text: "(", kind: "punctuation" }, { text: kind, kind: "text" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }].concat(optionalNameDisplay || [{ text: name, kind: "localName" }]).concat( + { text: ":", kind: "punctuation" }, { text: " ", kind: "space" }).concat(typeDisplay), + []); +} + +var numberTypeDisplay: ts.SymbolDisplayPart[] = [{ text: "number", kind: "keyword" }]; + +verifyVar("a", /*isLocal*/false, numberTypeDisplay); +verifyVar("b", /*isLocal*/true, numberTypeDisplay); +verifyVar("a", /*isLocal*/false, numberTypeDisplay); +verifyVar("c", /*isLocal*/false, numberTypeDisplay); +verifyVar("d", /*isLocal*/false, numberTypeDisplay, [{ text: "m", kind: "moduleName" }, { text: ".", kind: "punctuation" }, { text: "d", kind: "localName" }], "export"); + +var functionTypeReturningNumber: ts.SymbolDisplayPart[] = [{ text: "(", kind: "punctuation" }, { text: ")", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: "=>", kind: "punctuation" }, { text: " ", kind: "space" }, { text: "number", kind: "keyword" }]; +verifyVar("f", /*isLocal*/ false, functionTypeReturningNumber); +verifyVar("g", /*isLocal*/ false, functionTypeReturningNumber); +verifyVar("f", /*isLocal*/ false, functionTypeReturningNumber); +verifyVar("f", /*isLocal*/ false, functionTypeReturningNumber); + + +function getFunctionType(parametertype: string, returnType: string, isArrow?: boolean): ts.SymbolDisplayPart[] { + var functionTypeDisplay = [{ text: "(", kind: "punctuation" }, { text: "a", kind: "parameterName" }, { text: ":", kind: "punctuation" }, + { text: " ", kind: "space" }, { text: parametertype, kind: "keyword" }, { text: ")", kind: "punctuation" }]; + + if (isArrow) { + functionTypeDisplay = functionTypeDisplay.concat({ text: " ", kind: "space" }, { text: "=>", kind: "punctuation" }); + } + else { + functionTypeDisplay = functionTypeDisplay.concat({ text: ":", kind: "punctuation" }); + } + + return functionTypeDisplay.concat({ text: " ", kind: "space" }, { text: returnType, kind: "keyword" }); +} + +var typeLiteralWithOverloadCall: ts.SymbolDisplayPart[] = [{ text: "{", kind: "punctuation" }, { text: "\n", kind: "lineBreak" }, + { text: " ", kind: "space" }].concat(getFunctionType("string", "number")).concat( + { text: ";", kind: "punctuation" }, { text: "\n", kind: "lineBreak" }, + { text: " ", kind: "space" }).concat(getFunctionType("number", "string")).concat( + { text: ";", kind: "punctuation" }, { text: "\n", kind: "lineBreak" }, { text: "}", kind: "punctuation" }); + +verifyVar("h", /*isLocal*/ false, typeLiteralWithOverloadCall); +verifyVar("i", /*isLocal*/ false, typeLiteralWithOverloadCall); +verifyVar("h", /*isLocal*/ false, typeLiteralWithOverloadCall); + +var overloadDisplay: ts.SymbolDisplayPart[] = [{ text: " ", kind: "space" }, { text: "(", kind: "punctuation" }, + { text: "+", kind: "operator" }, { text: "1", kind: "numericLiteral" }, + { text: " ", kind: "space" }, { text: "overload", kind: "text" }, { text: ")", kind: "punctuation" }]; + +verifyVar("h", /*isLocal*/ false, getFunctionType("number", "string", /*isArrow*/true).concat(overloadDisplay)); +verifyVar("h", /*isLocal*/ false, getFunctionType("string", "number", /*isArrow*/true).concat(overloadDisplay)); \ No newline at end of file diff --git a/tests/cases/fourslash/quickInfoOnVarInArrowExpression.ts b/tests/cases/fourslash/quickInfoOnVarInArrowExpression.ts new file mode 100644 index 0000000000000..54287c7695293 --- /dev/null +++ b/tests/cases/fourslash/quickInfoOnVarInArrowExpression.ts @@ -0,0 +1,16 @@ +/// + +////interface IMap { +//// [key: string]: T; +////} +////var map: IMap; +////var categories: string[]; +////each(categories, category => { +//// var /*1*/changes = map[category]; +//// return each(changes, change => { +//// }); +////}); +////function each(items: T[], handler: (item: T) => void) { } + +goTo.marker('1'); +verify.quickInfoIs("(local var) changes: string[]", undefined); \ No newline at end of file diff --git a/tests/cases/fourslash/scriptLexicalStructureMissingName1.ts b/tests/cases/fourslash/scriptLexicalStructureMissingName1.ts new file mode 100644 index 0000000000000..60d858b608940 --- /dev/null +++ b/tests/cases/fourslash/scriptLexicalStructureMissingName1.ts @@ -0,0 +1,16 @@ +////export function +/////** +//// * This is a class. +//// */ +////{| "itemName": "C", "kind": "class" |} class C { +//// {| "itemName": "foo", "kind": "method" |} foo() { +//// } +////} + + +test.markers().forEach((marker) => { + verify.getScriptLexicalStructureListContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); +}); + +/// Only have two named elements. +verify.getScriptLexicalStructureListCount(2); diff --git a/tests/cases/fourslash/scriptLexicalStructureMissingName2.ts b/tests/cases/fourslash/scriptLexicalStructureMissingName2.ts new file mode 100644 index 0000000000000..0ee0d1197bf34 --- /dev/null +++ b/tests/cases/fourslash/scriptLexicalStructureMissingName2.ts @@ -0,0 +1,11 @@ +/////** +//// * This is a class. +//// */ +////class /* But it has no name! */ { +//// foo() { +//// } +////} + + +// The class is unnamed, so its method is not included either. +verify.getScriptLexicalStructureListCount(0); diff --git a/tests/cases/fourslash/semanticClassificatonTypeAlias.ts b/tests/cases/fourslash/semanticClassificatonTypeAlias.ts new file mode 100644 index 0000000000000..726588a2c9e01 --- /dev/null +++ b/tests/cases/fourslash/semanticClassificatonTypeAlias.ts @@ -0,0 +1,15 @@ +/// + +////type /*0*/Alias = number +////var x: /*1*/Alias; +////var y = {}; +////function f(x: /*3*/Alias): /*4*/Alias { return undefined; } + +var c = classification; +verify.semanticClassificationsAre( + c.typeAlias("Alias", test.marker("0").position), + c.typeAlias("Alias", test.marker("1").position), + c.typeAlias("Alias", test.marker("2").position), + c.typeAlias("Alias", test.marker("3").position), + c.typeAlias("Alias", test.marker("4").position) + ); \ No newline at end of file