From d6888b2834f37f880822c40953149d5d9b57550f Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Tue, 16 Sep 2014 15:30:19 -0700 Subject: [PATCH 001/110] Moved nav bar functionality into more 'functional' style. --- .../getScriptLexicalStructureWalker.ts | 269 +++++++++--------- src/services/services.ts | 6 +- 2 files changed, 137 insertions(+), 138 deletions(-) diff --git a/src/services/getScriptLexicalStructureWalker.ts b/src/services/getScriptLexicalStructureWalker.ts index bfce8e0067c..f30810ee2f4 100644 --- a/src/services/getScriptLexicalStructureWalker.ts +++ b/src/services/getScriptLexicalStructureWalker.ts @@ -1,15 +1,17 @@ /// module TypeScript.Services { - export class NavigationBarItemGetter { - private hasGlobalNode = false; + export function getNavigationBarItemsHelper(sourceUnit: TypeScript.SourceUnitSyntax): ts.NavigationBarItem[] { + var hasGlobalNode = false; - private getIndent(node: ISyntaxNode): number { - var indent = this.hasGlobalNode ? 1 : 0; + return getItemsWorker(getTopLevelNodes(sourceUnit), createTopLevelItem); + + function getIndent(node: ISyntaxNode): number { + var indent = hasGlobalNode ? 1 : 0; var current = node.parent; - while (current != null) { - if (current.kind() == SyntaxKind.ModuleDeclaration || current.kind() === SyntaxKind.FunctionDeclaration) { + while (current) { + if (current.kind() === SyntaxKind.ModuleDeclaration || current.kind() === SyntaxKind.FunctionDeclaration) { indent++; } @@ -19,7 +21,7 @@ module TypeScript.Services { return indent; } - private getKindModifiers(modifiers: TypeScript.ISyntaxToken[]): string { + function getKindModifiers(modifiers: TypeScript.ISyntaxToken[]): string { var result: string[] = []; for (var i = 0, n = modifiers.length; i < n; i++) { @@ -29,11 +31,7 @@ module TypeScript.Services { return result.length > 0 ? result.join(',') : ts.ScriptElementKindModifier.none; } - public getItems(node: TypeScript.SourceUnitSyntax): ts.NavigationBarItem[] { - return this.getItemsWorker(() => this.getTopLevelNodes(node), n => this.createTopLevelItem(n)); - } - - private getChildNodes(nodes: IModuleElementSyntax[]): ISyntaxNode[] { + function getChildNodes(nodes: IModuleElementSyntax[]): ISyntaxNode[] { var childNodes: ISyntaxNode[] = []; for (var i = 0, n = nodes.length; i < n; i++) { @@ -51,16 +49,16 @@ module TypeScript.Services { return childNodes; } - private getTopLevelNodes(node: SourceUnitSyntax): ISyntaxNode[] { + function getTopLevelNodes(node: SourceUnitSyntax): ISyntaxNode[] { var topLevelNodes: ISyntaxNode[] = []; topLevelNodes.push(node); - this.addTopLevelNodes(node.moduleElements, topLevelNodes); + addTopLevelNodes(node.moduleElements, topLevelNodes); return topLevelNodes; } - private addTopLevelNodes(nodes: IModuleElementSyntax[], topLevelNodes: ISyntaxNode[]): void { + function addTopLevelNodes(nodes: IModuleElementSyntax[], topLevelNodes: ISyntaxNode[]): void { for (var i = 0, n = nodes.length; i < n; i++) { var node = nodes[i]; switch (node.kind()) { @@ -73,43 +71,42 @@ module TypeScript.Services { case SyntaxKind.ModuleDeclaration: var moduleDeclaration = node; topLevelNodes.push(node); - this.addTopLevelNodes(moduleDeclaration.moduleElements, topLevelNodes); + addTopLevelNodes(moduleDeclaration.moduleElements, topLevelNodes); break; case SyntaxKind.FunctionDeclaration: var functionDeclaration = node; - if (this.isTopLevelFunctionDeclaration(functionDeclaration)) { + if (isTopLevelFunctionDeclaration(functionDeclaration)) { topLevelNodes.push(node); - this.addTopLevelNodes(functionDeclaration.block.statements, topLevelNodes); + addTopLevelNodes(functionDeclaration.block.statements, topLevelNodes); } break; } } } - public isTopLevelFunctionDeclaration(functionDeclaration: FunctionDeclarationSyntax) { + function isTopLevelFunctionDeclaration(functionDeclaration: FunctionDeclarationSyntax) { // A function declaration is 'top level' if it contains any function declarations // within it. return functionDeclaration.block && ArrayUtilities.any(functionDeclaration.block.statements, s => s.kind() === SyntaxKind.FunctionDeclaration); } - private getItemsWorker(getNodes: () => ISyntaxNode[], createItem: (n: ISyntaxNode) => ts.NavigationBarItem): ts.NavigationBarItem[] { + function getItemsWorker(nodes: ISyntaxNode[], createItem: (n: ISyntaxNode) => ts.NavigationBarItem): ts.NavigationBarItem[] { var items: ts.NavigationBarItem[] = []; var keyToItem = createIntrinsicsObject(); - var nodes = getNodes(); for (var i = 0, n = nodes.length; i < n; i++) { var child = nodes[i]; var item = createItem(child); - if (item != null) { + if (item !== undefined) { if (item.text.length > 0) { var key = item.text + "-" + item.kind; var itemWithSameName = keyToItem[key]; if (itemWithSameName) { // We had an item with the same name. Merge these items together. - this.merge(itemWithSameName, item); + merge(itemWithSameName, item); } else { keyToItem[key] = item; @@ -122,7 +119,7 @@ module TypeScript.Services { return items; } - private merge(target: ts.NavigationBarItem, source: ts.NavigationBarItem) { + function merge(target: ts.NavigationBarItem, source: ts.NavigationBarItem) { // First, add any spans in the source to the target. target.spans.push.apply(target.spans, source.spans); @@ -141,7 +138,7 @@ module TypeScript.Services { if (targetChild.text === sourceChild.text && targetChild.kind === sourceChild.kind) { // Found a match. merge them. - this.merge(targetChild, sourceChild); + merge(targetChild, sourceChild); continue outer; } } @@ -152,26 +149,26 @@ module TypeScript.Services { } } - private createChildItem(node: ISyntaxNode): ts.NavigationBarItem { + function createChildItem(node: ISyntaxNode): ts.NavigationBarItem { switch (node.kind()) { case SyntaxKind.Parameter: var parameter = node; if (parameter.modifiers.length === 0) { - return null; + return undefined; } - return new ts.NavigationBarItem(parameter.identifier.text(), ts.ScriptElementKind.memberVariableElement, this.getKindModifiers(parameter.modifiers), [TextSpan.fromBounds(start(node), end(node))]); + return new ts.NavigationBarItem(parameter.identifier.text(), ts.ScriptElementKind.memberVariableElement, getKindModifiers(parameter.modifiers), [TextSpan.fromBounds(start(node), end(node))]); case SyntaxKind.MemberFunctionDeclaration: var memberFunction = node; - return new ts.NavigationBarItem(memberFunction.propertyName.text(), ts.ScriptElementKind.memberFunctionElement, this.getKindModifiers(memberFunction.modifiers), [TextSpan.fromBounds(start(node), end(node))]); + return new ts.NavigationBarItem(memberFunction.propertyName.text(), ts.ScriptElementKind.memberFunctionElement, getKindModifiers(memberFunction.modifiers), [TextSpan.fromBounds(start(node), end(node))]); case SyntaxKind.GetAccessor: var getAccessor = node; - return new ts.NavigationBarItem(getAccessor.propertyName.text(), ts.ScriptElementKind.memberGetAccessorElement, this.getKindModifiers(getAccessor.modifiers), [TextSpan.fromBounds(start(node), end(node))]); + return new ts.NavigationBarItem(getAccessor.propertyName.text(), ts.ScriptElementKind.memberGetAccessorElement, getKindModifiers(getAccessor.modifiers), [TextSpan.fromBounds(start(node), end(node))]); case SyntaxKind.SetAccessor: var setAccessor = node; - return new ts.NavigationBarItem(setAccessor.propertyName.text(), ts.ScriptElementKind.memberSetAccessorElement, this.getKindModifiers(setAccessor.modifiers), [TextSpan.fromBounds(start(node), end(node))]); + return new ts.NavigationBarItem(setAccessor.propertyName.text(), ts.ScriptElementKind.memberSetAccessorElement, getKindModifiers(setAccessor.modifiers), [TextSpan.fromBounds(start(node), end(node))]); case SyntaxKind.IndexSignature: var indexSignature = node; @@ -199,14 +196,14 @@ module TypeScript.Services { case SyntaxKind.FunctionDeclaration: var functionDeclaration = node; - if (!this.isTopLevelFunctionDeclaration(functionDeclaration)) { - return new ts.NavigationBarItem(functionDeclaration.identifier.text(), ts.ScriptElementKind.functionElement, this.getKindModifiers(functionDeclaration.modifiers), [TextSpan.fromBounds(start(node), end(node))]); + if (!isTopLevelFunctionDeclaration(functionDeclaration)) { + return new ts.NavigationBarItem(functionDeclaration.identifier.text(), ts.ScriptElementKind.functionElement, getKindModifiers(functionDeclaration.modifiers), [TextSpan.fromBounds(start(node), end(node))]); } break; case SyntaxKind.MemberVariableDeclaration: var memberVariableDeclaration = node; - return new ts.NavigationBarItem(memberVariableDeclaration.variableDeclarator.propertyName.text(), ts.ScriptElementKind.memberVariableElement, this.getKindModifiers(memberVariableDeclaration.modifiers), [TextSpan.fromBounds(start(memberVariableDeclaration.variableDeclarator), end(memberVariableDeclaration.variableDeclarator))]); + return new ts.NavigationBarItem(memberVariableDeclaration.variableDeclarator.propertyName.text(), ts.ScriptElementKind.memberVariableElement, getKindModifiers(memberVariableDeclaration.modifiers), [TextSpan.fromBounds(start(memberVariableDeclaration.variableDeclarator), end(memberVariableDeclaration.variableDeclarator))]); case SyntaxKind.VariableDeclarator: var variableDeclarator = node; @@ -217,135 +214,135 @@ module TypeScript.Services { return new ts.NavigationBarItem("constructor", ts.ScriptElementKind.constructorImplementationElement, ts.ScriptElementKindModifier.none, [TextSpan.fromBounds(start(node), end(node))]); } - return null; + return undefined; } - private createTopLevelItem(node: ISyntaxNode): ts.NavigationBarItem { + function createTopLevelItem(node: ISyntaxNode): ts.NavigationBarItem { switch (node.kind()) { case SyntaxKind.SourceUnit: - return this.createSourceUnitItem(node); + return createSourceUnitItem(node); case SyntaxKind.ClassDeclaration: - return this.createClassItem(node); + return createClassItem(node); case SyntaxKind.EnumDeclaration: - return this.createEnumItem(node); + return createEnumItem(node); case SyntaxKind.InterfaceDeclaration: - return this.createIterfaceItem(node); + return createIterfaceItem(node); case SyntaxKind.ModuleDeclaration: - return this.createModuleItem(node); + return createModuleItem(node); case SyntaxKind.FunctionDeclaration: - return this.createFunctionItem(node); + return createFunctionItem(node); } - return null; - } + return undefined; - private getModuleNames(node: TypeScript.ModuleDeclarationSyntax): string[] { - var result: string[] = []; + function getModuleNames(node: TypeScript.ModuleDeclarationSyntax): string[] { + var result: string[] = []; - if (node.stringLiteral) { - result.push(node.stringLiteral.text()); - } - else { - this.getModuleNamesHelper(node.name, result); + if (node.stringLiteral) { + result.push(node.stringLiteral.text()); + } + else { + getModuleNamesHelper(node.name, result); + } + + return result; } - return result; - } - - private getModuleNamesHelper(name: TypeScript.INameSyntax, result: string[]): void { - if (name.kind() === TypeScript.SyntaxKind.QualifiedName) { - var qualifiedName = name; - this.getModuleNamesHelper(qualifiedName.left, result); - result.push(qualifiedName.right.text()); - } - else { - result.push((name).text()); - } - } - - private createModuleItem(node: ModuleDeclarationSyntax): ts.NavigationBarItem { - var moduleNames = this.getModuleNames(node); - - var childItems = this.getItemsWorker(() => this.getChildNodes(node.moduleElements), n => this.createChildItem(n)); - - return new ts.NavigationBarItem(moduleNames.join("."), - ts.ScriptElementKind.moduleElement, - this.getKindModifiers(node.modifiers), - [TextSpan.fromBounds(start(node), end(node))], - childItems, - this.getIndent(node)); - } - - private createFunctionItem(node: FunctionDeclarationSyntax) { - var childItems = this.getItemsWorker(() => node.block.statements, n => this.createChildItem(n)); - - return new ts.NavigationBarItem(node.identifier.text(), - ts.ScriptElementKind.functionElement, - this.getKindModifiers(node.modifiers), - [TextSpan.fromBounds(start(node), end(node))], - childItems, - this.getIndent(node)); - } - - private createSourceUnitItem(node: SourceUnitSyntax): ts.NavigationBarItem { - var childItems = this.getItemsWorker(() => this.getChildNodes(node.moduleElements), n => this.createChildItem(n)); - - if (childItems === null || childItems.length === 0) { - return null; + function getModuleNamesHelper(name: TypeScript.INameSyntax, result: string[]): void { + if (name.kind() === TypeScript.SyntaxKind.QualifiedName) { + var qualifiedName = name; + getModuleNamesHelper(qualifiedName.left, result); + result.push(qualifiedName.right.text()); + } + else { + result.push((name).text()); + } } - this.hasGlobalNode = true; - return new ts.NavigationBarItem("", - ts.ScriptElementKind.moduleElement, - ts.ScriptElementKindModifier.none, - [TextSpan.fromBounds(start(node), end(node))], - childItems); - } + function createModuleItem(node: ModuleDeclarationSyntax): ts.NavigationBarItem { + var moduleNames = getModuleNames(node); - private createClassItem(node: ClassDeclarationSyntax): ts.NavigationBarItem { - var constructor = ArrayUtilities.firstOrDefault( - node.classElements, n => n.kind() === SyntaxKind.ConstructorDeclaration); + var childItems = getItemsWorker(getChildNodes(node.moduleElements), n => createChildItem(n)); - // Add the constructor parameters in as children of hte class (for property parameters). - var nodes: ISyntaxNode[] = constructor - ? (constructor.callSignature.parameterList.parameters).concat(node.classElements) - : node.classElements; + return new ts.NavigationBarItem(moduleNames.join("."), + ts.ScriptElementKind.moduleElement, + getKindModifiers(node.modifiers), + [TextSpan.fromBounds(start(node), end(node))], + childItems, + getIndent(node)); + } - var childItems = this.getItemsWorker(() => nodes, n => this.createChildItem(n)); - return new ts.NavigationBarItem( - node.identifier.text(), - ts.ScriptElementKind.classElement, - this.getKindModifiers(node.modifiers), - [TextSpan.fromBounds(start(node), end(node))], - childItems, - this.getIndent(node)); - } + function createFunctionItem(node: FunctionDeclarationSyntax) { + var childItems = getItemsWorker(node.block.statements, n => createChildItem(n)); - private createEnumItem(node: TypeScript.EnumDeclarationSyntax): ts.NavigationBarItem { - var childItems = this.getItemsWorker(() => node.enumElements, n => this.createChildItem(n)); - return new ts.NavigationBarItem( - node.identifier.text(), - ts.ScriptElementKind.enumElement, - this.getKindModifiers(node.modifiers), - [TextSpan.fromBounds(start(node), end(node))], - childItems, - this.getIndent(node)); - } + return new ts.NavigationBarItem(node.identifier.text(), + ts.ScriptElementKind.functionElement, + getKindModifiers(node.modifiers), + [TextSpan.fromBounds(start(node), end(node))], + childItems, + getIndent(node)); + } - private createIterfaceItem(node: TypeScript.InterfaceDeclarationSyntax): ts.NavigationBarItem { - var childItems = this.getItemsWorker(() => node.body.typeMembers, n => this.createChildItem(n)); - return new ts.NavigationBarItem( - node.identifier.text(), - ts.ScriptElementKind.interfaceElement, - this.getKindModifiers(node.modifiers), - [TextSpan.fromBounds(start(node), end(node))], - childItems, - this.getIndent(node)); + function createSourceUnitItem(node: SourceUnitSyntax): ts.NavigationBarItem { + var childItems = getItemsWorker(getChildNodes(node.moduleElements), n => createChildItem(n)); + + if (childItems === undefined || childItems.length === 0) { + return undefined; + } + + hasGlobalNode = true; + return new ts.NavigationBarItem("", + ts.ScriptElementKind.moduleElement, + ts.ScriptElementKindModifier.none, + [TextSpan.fromBounds(start(node), end(node))], + childItems); + } + + function createClassItem(node: ClassDeclarationSyntax): ts.NavigationBarItem { + var constructor = ArrayUtilities.firstOrDefault( + node.classElements, n => n.kind() === SyntaxKind.ConstructorDeclaration); + + // Add the constructor parameters in as children of the class (for property parameters). + var nodes: ISyntaxNode[] = constructor + ? (constructor.callSignature.parameterList.parameters).concat(node.classElements) + : node.classElements; + + var childItems = getItemsWorker(nodes, n => createChildItem(n)); + return new ts.NavigationBarItem( + node.identifier.text(), + ts.ScriptElementKind.classElement, + getKindModifiers(node.modifiers), + [TextSpan.fromBounds(start(node), end(node))], + childItems, + getIndent(node)); + } + + function createEnumItem(node: TypeScript.EnumDeclarationSyntax): ts.NavigationBarItem { + var childItems = getItemsWorker(node.enumElements, n => createChildItem(n)); + return new ts.NavigationBarItem( + node.identifier.text(), + ts.ScriptElementKind.enumElement, + getKindModifiers(node.modifiers), + [TextSpan.fromBounds(start(node), end(node))], + childItems, + getIndent(node)); + } + + function createIterfaceItem(node: TypeScript.InterfaceDeclarationSyntax): ts.NavigationBarItem { + var childItems = getItemsWorker(node.body.typeMembers, n => createChildItem(n)); + return new ts.NavigationBarItem( + node.identifier.text(), + ts.ScriptElementKind.interfaceElement, + getKindModifiers(node.modifiers), + [TextSpan.fromBounds(start(node), end(node))], + childItems, + getIndent(node)); + } } } } \ No newline at end of file diff --git a/src/services/services.ts b/src/services/services.ts index d51eeee97c0..ed32721a1ac 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -3118,10 +3118,12 @@ module ts { return TypeScript.Services.Breakpoints.getBreakpointLocation(syntaxtree, position); } - function getNavigationBarItems(filename: string) { + function getNavigationBarItems(filename: string): NavigationBarItem[] { filename = TypeScript.switchToForwardSlashes(filename); + + var syntaxTree = getSyntaxTree(filename); - return new TypeScript.Services.NavigationBarItemGetter().getItems(syntaxTree.sourceUnit()); + return TypeScript.Services.getNavigationBarItemsHelper(syntaxTree.sourceUnit()); } function getOutliningSpans(filename: string): OutliningSpan[] { From e69b9e6362aeb8a8fa3cf1ae076e5b7618d26543 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Wed, 17 Sep 2014 15:28:41 -0700 Subject: [PATCH 002/110] Fixed issue where parser improperly parses a function declaration with no identifier. --- src/compiler/checker.ts | 4 ++++ src/compiler/parser.ts | 5 ++++- .../parserEqualsGreaterThanAfterFunction1.errors.txt | 6 ++---- .../parserEqualsGreaterThanAfterFunction2.errors.txt | 6 ++---- 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index b99d6d27d20..db876da3b9f 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -5379,6 +5379,10 @@ module ts { var isConstructor = (symbol.flags & SymbolFlags.Constructor) !== 0; function reportImplementationExpectedError(node: FunctionDeclaration): void { + if (node.name && node.name.kind === SyntaxKind.Missing) { + return; + } + var seen = false; var subsequentNode = forEachChild(node.parent, c => { if (seen) { diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 25ca24ae61b..6fa2cdd244a 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -953,7 +953,10 @@ module ts { return finishNode(node); } error(Diagnostics.Identifier_expected); - return createMissingNode(); + + var node = createMissingNode(); + node.text = ""; + return node; } function parseIdentifier(): Identifier { diff --git a/tests/baselines/reference/parserEqualsGreaterThanAfterFunction1.errors.txt b/tests/baselines/reference/parserEqualsGreaterThanAfterFunction1.errors.txt index 9f428d7fea7..fd3e1c42779 100644 --- a/tests/baselines/reference/parserEqualsGreaterThanAfterFunction1.errors.txt +++ b/tests/baselines/reference/parserEqualsGreaterThanAfterFunction1.errors.txt @@ -1,6 +1,4 @@ -==== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserEqualsGreaterThanAfterFunction1.ts (2 errors) ==== +==== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserEqualsGreaterThanAfterFunction1.ts (1 errors) ==== function => ~~ -!!! Identifier expected. - -!!! Function implementation is missing or not immediately following the declaration. \ No newline at end of file +!!! Identifier expected. \ No newline at end of file diff --git a/tests/baselines/reference/parserEqualsGreaterThanAfterFunction2.errors.txt b/tests/baselines/reference/parserEqualsGreaterThanAfterFunction2.errors.txt index 4e9b5fbaa86..0d81cd7f35d 100644 --- a/tests/baselines/reference/parserEqualsGreaterThanAfterFunction2.errors.txt +++ b/tests/baselines/reference/parserEqualsGreaterThanAfterFunction2.errors.txt @@ -1,4 +1,4 @@ -==== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserEqualsGreaterThanAfterFunction2.ts (5 errors) ==== +==== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/parserEqualsGreaterThanAfterFunction2.ts (4 errors) ==== function (a => b; ~ !!! Identifier expected. @@ -7,6 +7,4 @@ ~ !!! ',' expected. -!!! ')' expected. - -!!! Function implementation is missing or not immediately following the declaration. \ No newline at end of file +!!! ')' expected. \ No newline at end of file From 55e772cfe086e69c2336c17f89a745a903d942e9 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Wed, 17 Sep 2014 15:30:26 -0700 Subject: [PATCH 003/110] Re-added tests. --- .../scriptLexicalStructureItemsContainsNoAnonymouseFunctions.ts | 0 .../scriptLexicalStructureItemsModuleVariables.ts | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename tests/cases/{fourslash_old => fourslash}/scriptLexicalStructureItemsContainsNoAnonymouseFunctions.ts (100%) rename tests/cases/{fourslash_old => fourslash}/scriptLexicalStructureItemsModuleVariables.ts (100%) diff --git a/tests/cases/fourslash_old/scriptLexicalStructureItemsContainsNoAnonymouseFunctions.ts b/tests/cases/fourslash/scriptLexicalStructureItemsContainsNoAnonymouseFunctions.ts similarity index 100% rename from tests/cases/fourslash_old/scriptLexicalStructureItemsContainsNoAnonymouseFunctions.ts rename to tests/cases/fourslash/scriptLexicalStructureItemsContainsNoAnonymouseFunctions.ts diff --git a/tests/cases/fourslash_old/scriptLexicalStructureItemsModuleVariables.ts b/tests/cases/fourslash/scriptLexicalStructureItemsModuleVariables.ts similarity index 100% rename from tests/cases/fourslash_old/scriptLexicalStructureItemsModuleVariables.ts rename to tests/cases/fourslash/scriptLexicalStructureItemsModuleVariables.ts From b285ef165bfe6f16994e610bb2dbde6ca0180c60 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Wed, 17 Sep 2014 17:40:32 -0700 Subject: [PATCH 004/110] Added fourslash tests. --- .../scriptLexicalStructureFunctions.ts | 23 ++++++++++ .../scriptLexicalStructureFunctionsBroken.ts | 12 +++++ .../scriptLexicalStructureFunctionsBroken2.ts | 13 ++++++ .../fourslash/scriptLexicalStructureItems.ts | 1 + ...iptLexicalStructureItemsExternalModules.ts | 4 +- .../scriptLexicalStructureModules.ts | 44 +++++++++++++++++++ 6 files changed, 95 insertions(+), 2 deletions(-) create mode 100644 tests/cases/fourslash/scriptLexicalStructureFunctions.ts create mode 100644 tests/cases/fourslash/scriptLexicalStructureFunctionsBroken.ts create mode 100644 tests/cases/fourslash/scriptLexicalStructureFunctionsBroken2.ts create mode 100644 tests/cases/fourslash/scriptLexicalStructureModules.ts diff --git a/tests/cases/fourslash/scriptLexicalStructureFunctions.ts b/tests/cases/fourslash/scriptLexicalStructureFunctions.ts new file mode 100644 index 00000000000..7723bd0ee68 --- /dev/null +++ b/tests/cases/fourslash/scriptLexicalStructureFunctions.ts @@ -0,0 +1,23 @@ +/// + +////{| "itemName": "", "kind": "module" |} +//// +////{| "itemName": "foo", "kind": "function" |}function foo() { +//// var x = 10; +//// {| "itemName": "bar", "kind": "function", "parentName": "foo" |}function bar() { +//// var y = 10; +//// {| "itemName": "biz", "kind": "function", "parentName": "bar" |}function biz() { +//// var z = 10; +//// } +//// } +////} +//// +////{| "itemName": "baz", "kind": "function" |}function baz() { +//// var v = 10; +////} + +test.markers().forEach((marker) => { + verify.getScriptLexicalStructureListContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); +}); + +verify.getScriptLexicalStructureListCount(5); // 4 functions + global diff --git a/tests/cases/fourslash/scriptLexicalStructureFunctionsBroken.ts b/tests/cases/fourslash/scriptLexicalStructureFunctionsBroken.ts new file mode 100644 index 00000000000..687b9b87296 --- /dev/null +++ b/tests/cases/fourslash/scriptLexicalStructureFunctionsBroken.ts @@ -0,0 +1,12 @@ +/// + +////{| "itemName": "f", "kind": "function" |} +////function f() { +//// function; +////} + +test.markers().forEach((marker) => { + verify.getScriptLexicalStructureListContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); +}); + +verify.getScriptLexicalStructureListCount(1); // 1 function - no global since the inner function thinks it has a declaration. diff --git a/tests/cases/fourslash/scriptLexicalStructureFunctionsBroken2.ts b/tests/cases/fourslash/scriptLexicalStructureFunctionsBroken2.ts new file mode 100644 index 00000000000..1ac7ed09ad8 --- /dev/null +++ b/tests/cases/fourslash/scriptLexicalStructureFunctionsBroken2.ts @@ -0,0 +1,13 @@ +/// + +////function; +////{| "itemName": "f", "kind": "function" |} +////function f() { +//// function; +////} + +test.markers().forEach((marker) => { + verify.getScriptLexicalStructureListContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); +}); + +verify.getScriptLexicalStructureListCount(1); // 1 function with no global - the broken declaration adds nothing for us at the global scope. diff --git a/tests/cases/fourslash/scriptLexicalStructureItems.ts b/tests/cases/fourslash/scriptLexicalStructureItems.ts index 025fd223fb9..e18f49c1db9 100644 --- a/tests/cases/fourslash/scriptLexicalStructureItems.ts +++ b/tests/cases/fourslash/scriptLexicalStructureItems.ts @@ -49,3 +49,4 @@ test.markers().forEach((marker) => { } }); +verify.getScriptLexicalStructureListCount(23); diff --git a/tests/cases/fourslash/scriptLexicalStructureItemsExternalModules.ts b/tests/cases/fourslash/scriptLexicalStructureItemsExternalModules.ts index dd8f64d87a2..550f1aed783 100644 --- a/tests/cases/fourslash/scriptLexicalStructureItemsExternalModules.ts +++ b/tests/cases/fourslash/scriptLexicalStructureItemsExternalModules.ts @@ -4,8 +4,8 @@ //// {| "itemName": "s", "kind": "property", "parentName": "Bar" |}public s: string; ////} -verify.getScriptLexicalStructureListCount(2); // external module node + class + property - test.markers().forEach((marker) => { verify.getScriptLexicalStructureListContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); }); + +verify.getScriptLexicalStructureListCount(2); // external module node + class + property diff --git a/tests/cases/fourslash/scriptLexicalStructureModules.ts b/tests/cases/fourslash/scriptLexicalStructureModules.ts new file mode 100644 index 00000000000..c7446111a0a --- /dev/null +++ b/tests/cases/fourslash/scriptLexicalStructureModules.ts @@ -0,0 +1,44 @@ + +////{| "itemName": "\"X.Y.Z\"", "kind": "module" |} +////declare module "X.Y.Z" { +////} +//// +////{| "itemName": "A.B.C", "kind": "module" |} +////module A.B.C { +//// {| "itemName": "x", "kind": "var", "parent": "A.B.C" |} +//// export var x; +////} +//// +////{| "itemName": "A.B", "kind": "module" |} +////module A.B { +//// {| "itemName": "y", "kind": "var", "parent": "A.B" |} +//// export var y; +////} +//// +////{| "itemName": "A", "kind": "module" |} +////module A { +//// {| "itemName": "z", "kind": "var", "parent": "A" |} +//// export var z; +////} +//// +////{| "itemName": "A", "kind": "module" |} +////module A { +//// {| "itemName": "B", "kind": "module", "parent": "E" |} +//// module B { +//// {| "itemName": "C", "kind": "module", "parent": "F" |} +//// module C { +//// {| "itemName": "x", "kind": "var", "parent": "C" |} +//// declare var x; +//// } +//// } +////} + + +test.markers().forEach((marker) => { + verify.getScriptLexicalStructureListContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); +}); + +/// We have 7 module keywords, and 4 var keywords. +/// The declarations of A.B.C.x do not get merged, so the 4 vars are independent. +/// The two 'A' modules, however, do get merged, so in reality we have 6 modules. +verify.getScriptLexicalStructureListCount(10); From a9e071c9604c3d397611eb956c15a93c77ead953 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Wed, 17 Sep 2014 17:52:57 -0700 Subject: [PATCH 005/110] Renamed file. --- ...=> scriptLexicalStructureItemsContainsNoAnonymousFunctions.ts} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename tests/cases/fourslash/{scriptLexicalStructureItemsContainsNoAnonymouseFunctions.ts => scriptLexicalStructureItemsContainsNoAnonymousFunctions.ts} (100%) diff --git a/tests/cases/fourslash/scriptLexicalStructureItemsContainsNoAnonymouseFunctions.ts b/tests/cases/fourslash/scriptLexicalStructureItemsContainsNoAnonymousFunctions.ts similarity index 100% rename from tests/cases/fourslash/scriptLexicalStructureItemsContainsNoAnonymouseFunctions.ts rename to tests/cases/fourslash/scriptLexicalStructureItemsContainsNoAnonymousFunctions.ts From e3077e34b7532c582ed3859063663caad201b71d Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Wed, 17 Sep 2014 18:11:37 -0700 Subject: [PATCH 006/110] Amended test for quoted module names. --- tests/cases/fourslash/scriptLexicalStructureModules.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/tests/cases/fourslash/scriptLexicalStructureModules.ts b/tests/cases/fourslash/scriptLexicalStructureModules.ts index c7446111a0a..4331e64e0b0 100644 --- a/tests/cases/fourslash/scriptLexicalStructureModules.ts +++ b/tests/cases/fourslash/scriptLexicalStructureModules.ts @@ -3,6 +3,10 @@ ////declare module "X.Y.Z" { ////} //// +////{| "itemName": "'X2.Y2.Z2'", "kind": "module" |} +////declare module 'X2.Y2.Z2' { +////} +//// ////{| "itemName": "A.B.C", "kind": "module" |} ////module A.B.C { //// {| "itemName": "x", "kind": "var", "parent": "A.B.C" |} @@ -38,7 +42,7 @@ test.markers().forEach((marker) => { verify.getScriptLexicalStructureListContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); }); -/// We have 7 module keywords, and 4 var keywords. +/// We have 8 module keywords, and 4 var keywords. /// The declarations of A.B.C.x do not get merged, so the 4 vars are independent. -/// The two 'A' modules, however, do get merged, so in reality we have 6 modules. -verify.getScriptLexicalStructureListCount(10); +/// The two 'A' modules, however, do get merged, so in reality we have 7 modules. +verify.getScriptLexicalStructureListCount(11); From ad12b8bf765decfebb5b818564ea274bda0f5f16 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Wed, 17 Sep 2014 18:12:16 -0700 Subject: [PATCH 007/110] Changed order of count check. --- tests/cases/fourslash/navbar_contains-no-duplicates.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/cases/fourslash/navbar_contains-no-duplicates.ts b/tests/cases/fourslash/navbar_contains-no-duplicates.ts index 4334d30229f..49d570ed770 100644 --- a/tests/cases/fourslash/navbar_contains-no-duplicates.ts +++ b/tests/cases/fourslash/navbar_contains-no-duplicates.ts @@ -27,7 +27,6 @@ //// export var {| "itemName": "x", "kind": "var" |}x = 3; //// } -verify.getScriptLexicalStructureListCount(12); test.markers().forEach(marker => { if (marker.data) { verify.getScriptLexicalStructureListContains( @@ -39,3 +38,4 @@ test.markers().forEach(marker => { marker.position); } }); +verify.getScriptLexicalStructureListCount(12); \ No newline at end of file From be18ada22f2560fd0a2790a780fd89ba1095c66a Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Wed, 17 Sep 2014 18:13:06 -0700 Subject: [PATCH 008/110] Finally using new tree. --- .../getScriptLexicalStructureWalker.ts | 297 ++++++++++-------- src/services/services.ts | 4 +- 2 files changed, 159 insertions(+), 142 deletions(-) diff --git a/src/services/getScriptLexicalStructureWalker.ts b/src/services/getScriptLexicalStructureWalker.ts index f30810ee2f4..d65e1d4a48d 100644 --- a/src/services/getScriptLexicalStructureWalker.ts +++ b/src/services/getScriptLexicalStructureWalker.ts @@ -1,17 +1,17 @@ /// -module TypeScript.Services { - export function getNavigationBarItemsHelper(sourceUnit: TypeScript.SourceUnitSyntax): ts.NavigationBarItem[] { +module ts { + export function getNavigationBarItemsHelper(sourceFile: SourceFile): ts.NavigationBarItem[] { var hasGlobalNode = false; - return getItemsWorker(getTopLevelNodes(sourceUnit), createTopLevelItem); + return getItemsWorker(getTopLevelNodes(sourceFile), createTopLevelItem); - function getIndent(node: ISyntaxNode): number { + function getIndent(node: Node): number { var indent = hasGlobalNode ? 1 : 0; var current = node.parent; while (current) { - if (current.kind() === SyntaxKind.ModuleDeclaration || current.kind() === SyntaxKind.FunctionDeclaration) { + if (current.kind === SyntaxKind.ModuleDeclaration || current.kind === SyntaxKind.FunctionDeclaration) { indent++; } @@ -21,47 +21,38 @@ module TypeScript.Services { return indent; } - function getKindModifiers(modifiers: TypeScript.ISyntaxToken[]): string { - var result: string[] = []; - - for (var i = 0, n = modifiers.length; i < n; i++) { - result.push(modifiers[i].text()); - } - - return result.length > 0 ? result.join(',') : ts.ScriptElementKindModifier.none; - } - - function getChildNodes(nodes: IModuleElementSyntax[]): ISyntaxNode[] { - var childNodes: ISyntaxNode[] = []; + function getChildNodes(nodes: Node[]): Node[] { + var childNodes: Node[] = []; for (var i = 0, n = nodes.length; i < n; i++) { - var node = nodes[i]; + var node = nodes[i]; - if (node.kind() === SyntaxKind.FunctionDeclaration) { + if (node.kind === SyntaxKind.FunctionDeclaration) { childNodes.push(node); } - else if (node.kind() === SyntaxKind.VariableStatement) { - var variableDeclaration = (node).variableDeclaration; - childNodes.push.apply(childNodes, variableDeclaration.variableDeclarators); + else if (node.kind === SyntaxKind.VariableStatement) { + forEach((node).declarations, declaration => { + childNodes.push(declaration); + }); } } return childNodes; } - function getTopLevelNodes(node: SourceUnitSyntax): ISyntaxNode[] { - var topLevelNodes: ISyntaxNode[] = []; + function getTopLevelNodes(node: SourceFile): Node[] { + var topLevelNodes: Node[] = []; topLevelNodes.push(node); - addTopLevelNodes(node.moduleElements, topLevelNodes); + addTopLevelNodes(node.statements, topLevelNodes); return topLevelNodes; } - function addTopLevelNodes(nodes: IModuleElementSyntax[], topLevelNodes: ISyntaxNode[]): void { + function addTopLevelNodes(nodes: Node[], topLevelNodes: Node[]): void { for (var i = 0, n = nodes.length; i < n; i++) { var node = nodes[i]; - switch (node.kind()) { + switch (node.kind) { case SyntaxKind.ClassDeclaration: case SyntaxKind.EnumDeclaration: case SyntaxKind.InterfaceDeclaration: @@ -69,32 +60,39 @@ module TypeScript.Services { break; case SyntaxKind.ModuleDeclaration: - var moduleDeclaration = node; + var moduleDeclaration = node; topLevelNodes.push(node); - addTopLevelNodes(moduleDeclaration.moduleElements, topLevelNodes); + addTopLevelNodes((getInnermostModule(moduleDeclaration).body).statements, topLevelNodes); break; case SyntaxKind.FunctionDeclaration: - var functionDeclaration = node; + var functionDeclaration = node; if (isTopLevelFunctionDeclaration(functionDeclaration)) { topLevelNodes.push(node); - addTopLevelNodes(functionDeclaration.block.statements, topLevelNodes); + addTopLevelNodes((functionDeclaration.body).statements, topLevelNodes); } break; } } } - function isTopLevelFunctionDeclaration(functionDeclaration: FunctionDeclarationSyntax) { + function isTopLevelFunctionDeclaration(functionDeclaration: FunctionDeclaration) { // A function declaration is 'top level' if it contains any function declarations // within it. - return functionDeclaration.block && ArrayUtilities.any(functionDeclaration.block.statements, s => s.kind() === SyntaxKind.FunctionDeclaration); + return functionDeclaration.kind === SyntaxKind.FunctionDeclaration && + functionDeclaration.body && + functionDeclaration.body.kind === SyntaxKind.FunctionBlock && + forEach((functionDeclaration.body).statements, s => s.kind === SyntaxKind.FunctionDeclaration); } - function getItemsWorker(nodes: ISyntaxNode[], createItem: (n: ISyntaxNode) => ts.NavigationBarItem): ts.NavigationBarItem[] { + function getItemsWorker(nodes: Node[], createItem: (n: Node) => ts.NavigationBarItem): ts.NavigationBarItem[]{ var items: ts.NavigationBarItem[] = []; - var keyToItem = createIntrinsicsObject(); + if (!nodes) { + return items; + } + + var keyToItem: Map = {}; for (var i = 0, n = nodes.length; i < n; i++) { var child = nodes[i]; @@ -149,147 +147,135 @@ module TypeScript.Services { } } - function createChildItem(node: ISyntaxNode): ts.NavigationBarItem { - switch (node.kind()) { + function createChildItem(node: Node): ts.NavigationBarItem { + switch (node.kind) { case SyntaxKind.Parameter: - var parameter = node; - if (parameter.modifiers.length === 0) { + var parameter = node; + if ((node.flags & NodeFlags.Modifier) === 0) { return undefined; } - return new ts.NavigationBarItem(parameter.identifier.text(), ts.ScriptElementKind.memberVariableElement, getKindModifiers(parameter.modifiers), [TextSpan.fromBounds(start(node), end(node))]); + return new ts.NavigationBarItem(parameter.name.text, ts.ScriptElementKind.memberVariableElement, getNodeModifiers(node), [getNodeSpan(node)]); - case SyntaxKind.MemberFunctionDeclaration: - var memberFunction = node; - return new ts.NavigationBarItem(memberFunction.propertyName.text(), ts.ScriptElementKind.memberFunctionElement, getKindModifiers(memberFunction.modifiers), [TextSpan.fromBounds(start(node), end(node))]); + case SyntaxKind.Method: + var memberFunction = node; + return new ts.NavigationBarItem(memberFunction.name.text, ts.ScriptElementKind.memberFunctionElement, getNodeModifiers(node), [getNodeSpan(node)]); case SyntaxKind.GetAccessor: - var getAccessor = node; - return new ts.NavigationBarItem(getAccessor.propertyName.text(), ts.ScriptElementKind.memberGetAccessorElement, getKindModifiers(getAccessor.modifiers), [TextSpan.fromBounds(start(node), end(node))]); + var getAccessor = node; + return new ts.NavigationBarItem(getAccessor.name.text, ts.ScriptElementKind.memberGetAccessorElement, getNodeModifiers(node), [getNodeSpan(node)]); case SyntaxKind.SetAccessor: - var setAccessor = node; - return new ts.NavigationBarItem(setAccessor.propertyName.text(), ts.ScriptElementKind.memberSetAccessorElement, getKindModifiers(setAccessor.modifiers), [TextSpan.fromBounds(start(node), end(node))]); + var setAccessor = node; + return new ts.NavigationBarItem(setAccessor.name.text, ts.ScriptElementKind.memberSetAccessorElement, getNodeModifiers(node), [getNodeSpan(node)]); case SyntaxKind.IndexSignature: - var indexSignature = node; - return new ts.NavigationBarItem("[]", ts.ScriptElementKind.indexSignatureElement, ts.ScriptElementKindModifier.none, [TextSpan.fromBounds(start(node), end(node))]); + return new ts.NavigationBarItem("[]", ts.ScriptElementKind.indexSignatureElement, ts.ScriptElementKindModifier.none, [getNodeSpan(node)]); - case SyntaxKind.EnumElement: - var enumElement = node; - return new ts.NavigationBarItem(enumElement.propertyName.text(), ts.ScriptElementKind.memberVariableElement, ts.ScriptElementKindModifier.none, [TextSpan.fromBounds(start(node), end(node))]); + case SyntaxKind.EnumMember: + var enumElement = node; + return new ts.NavigationBarItem(enumElement.name.text, ts.ScriptElementKind.memberVariableElement, ts.ScriptElementKindModifier.none, [getNodeSpan(node)]); case SyntaxKind.CallSignature: - var callSignature = node; - return new ts.NavigationBarItem("()", ts.ScriptElementKind.callSignatureElement, ts.ScriptElementKindModifier.none, [TextSpan.fromBounds(start(node), end(node))]); + return new ts.NavigationBarItem("()", ts.ScriptElementKind.callSignatureElement, ts.ScriptElementKindModifier.none, []); case SyntaxKind.ConstructSignature: - var constructSignature = node; - return new ts.NavigationBarItem("new()", ts.ScriptElementKind.constructSignatureElement, ts.ScriptElementKindModifier.none, [TextSpan.fromBounds(start(node), end(node))]); + return new ts.NavigationBarItem("new()", ts.ScriptElementKind.constructSignatureElement, ts.ScriptElementKindModifier.none, [getNodeSpan(node)]); - case SyntaxKind.MethodSignature: - var methodSignature = node; - return new ts.NavigationBarItem(methodSignature.propertyName.text(), ts.ScriptElementKind.memberFunctionElement, ts.ScriptElementKindModifier.none, [TextSpan.fromBounds(start(node), end(node))]); - - case SyntaxKind.PropertySignature: - var propertySignature = node; - return new ts.NavigationBarItem(propertySignature.propertyName.text(), ts.ScriptElementKind.memberVariableElement, ts.ScriptElementKindModifier.none, [TextSpan.fromBounds(start(node), end(node))]); + case SyntaxKind.Property: + var propertySignature = node; + return new ts.NavigationBarItem(propertySignature.name.text, ts.ScriptElementKind.memberVariableElement, getNodeModifiers(node), [getNodeSpan(node)]); case SyntaxKind.FunctionDeclaration: - var functionDeclaration = node; + var functionDeclaration = node; if (!isTopLevelFunctionDeclaration(functionDeclaration)) { - return new ts.NavigationBarItem(functionDeclaration.identifier.text(), ts.ScriptElementKind.functionElement, getKindModifiers(functionDeclaration.modifiers), [TextSpan.fromBounds(start(node), end(node))]); + return new ts.NavigationBarItem(functionDeclaration.name.text, ts.ScriptElementKind.functionElement, getNodeModifiers(node), [getNodeSpan(node)]); } break; - case SyntaxKind.MemberVariableDeclaration: - var memberVariableDeclaration = node; - return new ts.NavigationBarItem(memberVariableDeclaration.variableDeclarator.propertyName.text(), ts.ScriptElementKind.memberVariableElement, getKindModifiers(memberVariableDeclaration.modifiers), [TextSpan.fromBounds(start(memberVariableDeclaration.variableDeclarator), end(memberVariableDeclaration.variableDeclarator))]); + case SyntaxKind.VariableDeclaration: + var variableDeclaration = node; + return new ts.NavigationBarItem(variableDeclaration.name.text, ts.ScriptElementKind.variableElement, ts.ScriptElementKindModifier.none, [getNodeSpan(node)]); - case SyntaxKind.VariableDeclarator: - var variableDeclarator = node; - return new ts.NavigationBarItem(variableDeclarator.propertyName.text(), ts.ScriptElementKind.variableElement, ts.ScriptElementKindModifier.none, [TextSpan.fromBounds(start(variableDeclarator), end(variableDeclarator))]); - - case SyntaxKind.ConstructorDeclaration: - var constructorDeclaration = node; - return new ts.NavigationBarItem("constructor", ts.ScriptElementKind.constructorImplementationElement, ts.ScriptElementKindModifier.none, [TextSpan.fromBounds(start(node), end(node))]); + case SyntaxKind.Constructor: + return new ts.NavigationBarItem("constructor", ts.ScriptElementKind.constructorImplementationElement, ts.ScriptElementKindModifier.none, [getNodeSpan(node)]); } return undefined; } - function createTopLevelItem(node: ISyntaxNode): ts.NavigationBarItem { - switch (node.kind()) { - case SyntaxKind.SourceUnit: - return createSourceUnitItem(node); + function createTopLevelItem(node: Node): ts.NavigationBarItem { + switch (node.kind) { + case SyntaxKind.SourceFile: + return createSourceFileItem(node); case SyntaxKind.ClassDeclaration: - return createClassItem(node); + return createClassItem(node); case SyntaxKind.EnumDeclaration: - return createEnumItem(node); + return createEnumItem(node); case SyntaxKind.InterfaceDeclaration: - return createIterfaceItem(node); + return createIterfaceItem(node); case SyntaxKind.ModuleDeclaration: - return createModuleItem(node); + return createModuleItem(node); case SyntaxKind.FunctionDeclaration: - return createFunctionItem(node); + return createFunctionItem(node); } return undefined; - function getModuleNames(node: TypeScript.ModuleDeclarationSyntax): string[] { + function getModuleNames(moduleDeclaration: ModuleDeclaration): string[]{ + // We want to maintain quotation marks. + if (moduleDeclaration.name.kind === SyntaxKind.StringLiteral) { + return [getSourceTextOfNode(moduleDeclaration.name)]; + } + + // Otherwise, we need to aggregate each identifier of the qualified name. var result: string[] = []; - if (node.stringLiteral) { - result.push(node.stringLiteral.text()); - } - else { - getModuleNamesHelper(node.name, result); - } + result.push(moduleDeclaration.name.text); + + while (moduleDeclaration.body && moduleDeclaration.body.kind === SyntaxKind.ModuleDeclaration) { + moduleDeclaration = moduleDeclaration.body; + + result.push(moduleDeclaration.name.text); + } return result; } - function getModuleNamesHelper(name: TypeScript.INameSyntax, result: string[]): void { - if (name.kind() === TypeScript.SyntaxKind.QualifiedName) { - var qualifiedName = name; - getModuleNamesHelper(qualifiedName.left, result); - result.push(qualifiedName.right.text()); - } - else { - result.push((name).text()); - } - } - - function createModuleItem(node: ModuleDeclarationSyntax): ts.NavigationBarItem { + function createModuleItem(node: ModuleDeclaration): NavigationBarItem { var moduleNames = getModuleNames(node); - - var childItems = getItemsWorker(getChildNodes(node.moduleElements), n => createChildItem(n)); + + var childItems = getItemsWorker(getChildNodes((getInnermostModule(node).body).statements), createChildItem); return new ts.NavigationBarItem(moduleNames.join("."), ts.ScriptElementKind.moduleElement, - getKindModifiers(node.modifiers), - [TextSpan.fromBounds(start(node), end(node))], + getNodeModifiers(node), + [getNodeSpan(node)], childItems, getIndent(node)); } - function createFunctionItem(node: FunctionDeclarationSyntax) { - var childItems = getItemsWorker(node.block.statements, n => createChildItem(n)); + function createFunctionItem(node: FunctionDeclaration) { + if (node.name && node.body && node.body.kind === SyntaxKind.FunctionBlock) { + var childItems = getItemsWorker((node.body).statements, createChildItem); - return new ts.NavigationBarItem(node.identifier.text(), - ts.ScriptElementKind.functionElement, - getKindModifiers(node.modifiers), - [TextSpan.fromBounds(start(node), end(node))], - childItems, - getIndent(node)); + return new ts.NavigationBarItem(node.name.text, + ts.ScriptElementKind.functionElement, + getNodeModifiers(node), + [getNodeSpan(node)], + childItems, + getIndent(node)); + } + + return undefined; } - function createSourceUnitItem(node: SourceUnitSyntax): ts.NavigationBarItem { - var childItems = getItemsWorker(getChildNodes(node.moduleElements), n => createChildItem(n)); + function createSourceFileItem(node: SourceFile): ts.NavigationBarItem { + var childItems = getItemsWorker(getChildNodes(node.statements), createChildItem); if (childItems === undefined || childItems.length === 0) { return undefined; @@ -299,50 +285,83 @@ module TypeScript.Services { return new ts.NavigationBarItem("", ts.ScriptElementKind.moduleElement, ts.ScriptElementKindModifier.none, - [TextSpan.fromBounds(start(node), end(node))], + [getNodeSpan(node)], childItems); } - function createClassItem(node: ClassDeclarationSyntax): ts.NavigationBarItem { - var constructor = ArrayUtilities.firstOrDefault( - node.classElements, n => n.kind() === SyntaxKind.ConstructorDeclaration); + function createClassItem(node: ClassDeclaration): ts.NavigationBarItem { + var childItems: NavigationBarItem[]; - // Add the constructor parameters in as children of the class (for property parameters). - var nodes: ISyntaxNode[] = constructor - ? (constructor.callSignature.parameterList.parameters).concat(node.classElements) - : node.classElements; + if (node.members) { + var constructor = forEach(node.members, member => { + return member.kind === SyntaxKind.Constructor && member; + }); + + // Add the constructor parameters in as children of the class (for property parameters). + var nodes: Node[] = constructor + ? (constructor.parameters).concat(node.members) + : node.members; + + var childItems = getItemsWorker(nodes, createChildItem); + } - var childItems = getItemsWorker(nodes, n => createChildItem(n)); return new ts.NavigationBarItem( - node.identifier.text(), + node.name.text, ts.ScriptElementKind.classElement, - getKindModifiers(node.modifiers), - [TextSpan.fromBounds(start(node), end(node))], + getNodeModifiers(node), + [getNodeSpan(node)], childItems, getIndent(node)); } - function createEnumItem(node: TypeScript.EnumDeclarationSyntax): ts.NavigationBarItem { - var childItems = getItemsWorker(node.enumElements, n => createChildItem(n)); + function createEnumItem(node: EnumDeclaration): ts.NavigationBarItem { + var childItems = getItemsWorker(node.members, createChildItem); return new ts.NavigationBarItem( - node.identifier.text(), + node.name.text, ts.ScriptElementKind.enumElement, - getKindModifiers(node.modifiers), - [TextSpan.fromBounds(start(node), end(node))], + getNodeModifiers(node), + [getNodeSpan(node)], childItems, getIndent(node)); } - function createIterfaceItem(node: TypeScript.InterfaceDeclarationSyntax): ts.NavigationBarItem { - var childItems = getItemsWorker(node.body.typeMembers, n => createChildItem(n)); + function createIterfaceItem(node: InterfaceDeclaration): ts.NavigationBarItem { + var childItems = getItemsWorker(node.members, createChildItem); return new ts.NavigationBarItem( - node.identifier.text(), + node.name.text, ts.ScriptElementKind.interfaceElement, - getKindModifiers(node.modifiers), - [TextSpan.fromBounds(start(node), end(node))], + getNodeModifiers(node), + [getNodeSpan(node)], childItems, getIndent(node)); } } + + // TODO: use implementation in services.ts + function getNodeModifiers(node: Node): string { + var flags = node.flags; + var result: string[] = []; + + if (flags & NodeFlags.Private) result.push(ScriptElementKindModifier.privateMemberModifier); + if (flags & NodeFlags.Public) result.push(ScriptElementKindModifier.publicMemberModifier); + if (flags & NodeFlags.Static) result.push(ScriptElementKindModifier.staticModifier); + if (flags & NodeFlags.Export) result.push(ScriptElementKindModifier.exportedModifier); + if (isInAmbientContext(node)) result.push(ScriptElementKindModifier.ambientModifier); + + return result.length > 0 ? result.join(',') : ScriptElementKindModifier.none; + } + + function getInnermostModule(node: ModuleDeclaration): ModuleDeclaration { + + while (node.body.kind === SyntaxKind.ModuleDeclaration) { + node = node.body; + } + + return node; + } + + function getNodeSpan(node: Node) { + return TypeScript.TextSpan.fromBounds(node.getStart(), node.getEnd()); + } } } \ No newline at end of file diff --git a/src/services/services.ts b/src/services/services.ts index ed32721a1ac..daaeb6d21bc 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -3121,9 +3121,7 @@ module ts { function getNavigationBarItems(filename: string): NavigationBarItem[] { filename = TypeScript.switchToForwardSlashes(filename); - - var syntaxTree = getSyntaxTree(filename); - return TypeScript.Services.getNavigationBarItemsHelper(syntaxTree.sourceUnit()); + return getNavigationBarItemsHelper(getCurrentSourceFile(filename)); } function getOutliningSpans(filename: string): OutliningSpan[] { From 915a27fc1aa24f252ab72d0f45b2f1a496a84ea5 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Thu, 18 Sep 2014 12:36:06 -0700 Subject: [PATCH 009/110] Added helper function for creating child items. --- .../getScriptLexicalStructureWalker.ts | 28 +++++++++++-------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/src/services/getScriptLexicalStructureWalker.ts b/src/services/getScriptLexicalStructureWalker.ts index d65e1d4a48d..653d2ffaf29 100644 --- a/src/services/getScriptLexicalStructureWalker.ts +++ b/src/services/getScriptLexicalStructureWalker.ts @@ -154,55 +154,59 @@ module ts { if ((node.flags & NodeFlags.Modifier) === 0) { return undefined; } - return new ts.NavigationBarItem(parameter.name.text, ts.ScriptElementKind.memberVariableElement, getNodeModifiers(node), [getNodeSpan(node)]); + return basicChildItem(node, parameter.name.text, ts.ScriptElementKind.memberVariableElement); case SyntaxKind.Method: var memberFunction = node; - return new ts.NavigationBarItem(memberFunction.name.text, ts.ScriptElementKind.memberFunctionElement, getNodeModifiers(node), [getNodeSpan(node)]); + return basicChildItem(node, memberFunction.name.text, ts.ScriptElementKind.memberFunctionElement); case SyntaxKind.GetAccessor: var getAccessor = node; - return new ts.NavigationBarItem(getAccessor.name.text, ts.ScriptElementKind.memberGetAccessorElement, getNodeModifiers(node), [getNodeSpan(node)]); + return basicChildItem(node, getAccessor.name.text, ts.ScriptElementKind.memberGetAccessorElement); case SyntaxKind.SetAccessor: var setAccessor = node; - return new ts.NavigationBarItem(setAccessor.name.text, ts.ScriptElementKind.memberSetAccessorElement, getNodeModifiers(node), [getNodeSpan(node)]); + return basicChildItem(node, setAccessor.name.text, ts.ScriptElementKind.memberSetAccessorElement); case SyntaxKind.IndexSignature: - return new ts.NavigationBarItem("[]", ts.ScriptElementKind.indexSignatureElement, ts.ScriptElementKindModifier.none, [getNodeSpan(node)]); + return basicChildItem(node, "[]", ts.ScriptElementKind.indexSignatureElement); case SyntaxKind.EnumMember: var enumElement = node; - return new ts.NavigationBarItem(enumElement.name.text, ts.ScriptElementKind.memberVariableElement, ts.ScriptElementKindModifier.none, [getNodeSpan(node)]); + return basicChildItem(node, enumElement.name.text, ts.ScriptElementKind.memberVariableElement); case SyntaxKind.CallSignature: - return new ts.NavigationBarItem("()", ts.ScriptElementKind.callSignatureElement, ts.ScriptElementKindModifier.none, []); + return basicChildItem(node, "()", ts.ScriptElementKind.callSignatureElement); case SyntaxKind.ConstructSignature: - return new ts.NavigationBarItem("new()", ts.ScriptElementKind.constructSignatureElement, ts.ScriptElementKindModifier.none, [getNodeSpan(node)]); + return basicChildItem(node, "new()", ts.ScriptElementKind.constructSignatureElement); case SyntaxKind.Property: var propertySignature = node; - return new ts.NavigationBarItem(propertySignature.name.text, ts.ScriptElementKind.memberVariableElement, getNodeModifiers(node), [getNodeSpan(node)]); + return basicChildItem(node, propertySignature.name.text, ts.ScriptElementKind.memberVariableElement); case SyntaxKind.FunctionDeclaration: var functionDeclaration = node; if (!isTopLevelFunctionDeclaration(functionDeclaration)) { - return new ts.NavigationBarItem(functionDeclaration.name.text, ts.ScriptElementKind.functionElement, getNodeModifiers(node), [getNodeSpan(node)]); + return basicChildItem(node, functionDeclaration.name.text, ts.ScriptElementKind.functionElement); } break; case SyntaxKind.VariableDeclaration: var variableDeclaration = node; - return new ts.NavigationBarItem(variableDeclaration.name.text, ts.ScriptElementKind.variableElement, ts.ScriptElementKindModifier.none, [getNodeSpan(node)]); + return basicChildItem(node, variableDeclaration.name.text, ts.ScriptElementKind.variableElement); case SyntaxKind.Constructor: - return new ts.NavigationBarItem("constructor", ts.ScriptElementKind.constructorImplementationElement, ts.ScriptElementKindModifier.none, [getNodeSpan(node)]); + return basicChildItem(node, "constructor", ts.ScriptElementKind.constructorImplementationElement); } return undefined; } + function basicChildItem(node: Node, name: string, scriptElementKind: string): NavigationBarItem { + return new NavigationBarItem(name, scriptElementKind, getNodeModifiers(node), [getNodeSpan(node)]); + } + function createTopLevelItem(node: Node): ts.NavigationBarItem { switch (node.kind) { case SyntaxKind.SourceFile: From 84c1d03dd2336fcaf48051838e5d209fb2ce3adc Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Thu, 18 Sep 2014 16:52:22 -0700 Subject: [PATCH 010/110] Removed duplicate 'getNodeModifiers'. --- .../getScriptLexicalStructureWalker.ts | 16 +----------- src/services/services.ts | 26 +++++++++---------- 2 files changed, 14 insertions(+), 28 deletions(-) diff --git a/src/services/getScriptLexicalStructureWalker.ts b/src/services/getScriptLexicalStructureWalker.ts index 653d2ffaf29..565c580c3b4 100644 --- a/src/services/getScriptLexicalStructureWalker.ts +++ b/src/services/getScriptLexicalStructureWalker.ts @@ -85,7 +85,7 @@ module ts { forEach((functionDeclaration.body).statements, s => s.kind === SyntaxKind.FunctionDeclaration); } - function getItemsWorker(nodes: Node[], createItem: (n: Node) => ts.NavigationBarItem): ts.NavigationBarItem[]{ + function getItemsWorker(nodes: Node[], createItem: (n: Node) => ts.NavigationBarItem): ts.NavigationBarItem[] { var items: ts.NavigationBarItem[] = []; if (!nodes) { @@ -341,20 +341,6 @@ module ts { } } - // TODO: use implementation in services.ts - function getNodeModifiers(node: Node): string { - var flags = node.flags; - var result: string[] = []; - - if (flags & NodeFlags.Private) result.push(ScriptElementKindModifier.privateMemberModifier); - if (flags & NodeFlags.Public) result.push(ScriptElementKindModifier.publicMemberModifier); - if (flags & NodeFlags.Static) result.push(ScriptElementKindModifier.staticModifier); - if (flags & NodeFlags.Export) result.push(ScriptElementKindModifier.exportedModifier); - if (isInAmbientContext(node)) result.push(ScriptElementKindModifier.ambientModifier); - - return result.length > 0 ? result.join(',') : ScriptElementKindModifier.none; - } - function getInnermostModule(node: ModuleDeclaration): ModuleDeclaration { while (node.body.kind === SyntaxKind.ModuleDeclaration) { diff --git a/src/services/services.ts b/src/services/services.ts index 5bb632ba975..8d22c964e09 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -1351,6 +1351,19 @@ module ts { } /// Helpers + export function getNodeModifiers(node: Node): string { + var flags = node.flags; + var result: string[] = []; + + if (flags & NodeFlags.Private) result.push(ScriptElementKindModifier.privateMemberModifier); + if (flags & NodeFlags.Public) result.push(ScriptElementKindModifier.publicMemberModifier); + if (flags & NodeFlags.Static) result.push(ScriptElementKindModifier.staticModifier); + if (flags & NodeFlags.Export) result.push(ScriptElementKindModifier.exportedModifier); + if (isInAmbientContext(node)) result.push(ScriptElementKindModifier.ambientModifier); + + return result.length > 0 ? result.join(',') : ScriptElementKindModifier.none; + } + function getTargetLabel(referenceNode: Node, labelName: string): Identifier { while (referenceNode) { if (referenceNode.kind === SyntaxKind.LabeledStatement && (referenceNode).label.text === labelName) { @@ -2198,19 +2211,6 @@ module ts { } } - function getNodeModifiers(node: Node): string { - var flags = node.flags; - var result: string[] = []; - - if (flags & NodeFlags.Private) result.push(ScriptElementKindModifier.privateMemberModifier); - if (flags & NodeFlags.Public) result.push(ScriptElementKindModifier.publicMemberModifier); - if (flags & NodeFlags.Static) result.push(ScriptElementKindModifier.staticModifier); - if (flags & NodeFlags.Export) result.push(ScriptElementKindModifier.exportedModifier); - if (isInAmbientContext(node)) result.push(ScriptElementKindModifier.ambientModifier); - - return result.length > 0 ? result.join(',') : ScriptElementKindModifier.none; - } - /// QuickInfo function getTypeAtPosition(fileName: string, position: number): TypeInfo { synchronizeHostData(); From 7bcab8b616672d16e3e662f73e8bd719e7c6989c Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Fri, 19 Sep 2014 12:28:49 -0700 Subject: [PATCH 011/110] Minor edit to test. --- tests/cases/fourslash/scriptLexicalStructureFunctions.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/cases/fourslash/scriptLexicalStructureFunctions.ts b/tests/cases/fourslash/scriptLexicalStructureFunctions.ts index 7723bd0ee68..a42a226c2c0 100644 --- a/tests/cases/fourslash/scriptLexicalStructureFunctions.ts +++ b/tests/cases/fourslash/scriptLexicalStructureFunctions.ts @@ -12,7 +12,7 @@ //// } ////} //// -////{| "itemName": "baz", "kind": "function" |}function baz() { +////{| "itemName": "baz", "kind": "function", "parentName": "" |}function baz() { //// var v = 10; ////} From 01d93b22ba88bc06ff9026f0d94f0047c8576d23 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Fri, 19 Sep 2014 13:54:34 -0700 Subject: [PATCH 012/110] External module items now display their base file name in quotes. --- src/compiler/core.ts | 14 ++++++++++++++ src/compiler/parser.ts | 9 +-------- src/services/getScriptLexicalStructureWalker.ts | 8 ++++++-- ...scriptLexicalStructureItemsExternalModules2.ts | 15 +++++++++++++++ 4 files changed, 36 insertions(+), 10 deletions(-) create mode 100644 tests/cases/fourslash/scriptLexicalStructureItemsExternalModules2.ts diff --git a/src/compiler/core.ts b/src/compiler/core.ts index 6bfa537c9f2..e6935afd599 100644 --- a/src/compiler/core.ts +++ b/src/compiler/core.ts @@ -521,6 +521,20 @@ module ts { return pathLen > extLen && path.substr(pathLen - extLen, extLen) === extension; } + var supportedExtensions = [".d.ts", ".ts", ".js"]; + export function removeFileExtension(path: string): string { + + for (var i = 0; i < supportedExtensions.length; i++) { + var ext = supportedExtensions[i]; + + if (fileExtensionIs(path, ext)) { + return path.substr(0, path.length - ext.length); + } + } + + return path; + } + export interface ObjectAllocator { getNodeConstructor(kind: SyntaxKind): new () => Node; getSymbolConstructor(): new (flags: SymbolFlags, name: string) => Symbol; diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 4005a000dc8..8a977c8c764 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -17,20 +17,13 @@ module ts { return node; } - var moduleExtensions = [".d.ts", ".ts", ".js"]; - interface ReferenceComments { referencedFiles: FileReference[]; amdDependencies: string[]; } export function getModuleNameFromFilename(filename: string) { - for (var i = 0; i < moduleExtensions.length; i++) { - var ext = moduleExtensions[i]; - var len = filename.length - ext.length; - if (len > 0 && filename.substr(len) === ext) return filename.substr(0, len); - } - return filename; + return removeFileExtension(filename); } export function getSourceFileOfNode(node: Node): SourceFile { diff --git a/src/services/getScriptLexicalStructureWalker.ts b/src/services/getScriptLexicalStructureWalker.ts index 565c580c3b4..6c3de09af67 100644 --- a/src/services/getScriptLexicalStructureWalker.ts +++ b/src/services/getScriptLexicalStructureWalker.ts @@ -195,7 +195,7 @@ module ts { case SyntaxKind.VariableDeclaration: var variableDeclaration = node; return basicChildItem(node, variableDeclaration.name.text, ts.ScriptElementKind.variableElement); - + case SyntaxKind.Constructor: return basicChildItem(node, "constructor", ts.ScriptElementKind.constructorImplementationElement); } @@ -286,7 +286,11 @@ module ts { } hasGlobalNode = true; - return new ts.NavigationBarItem("", + var rootName = isExternalModule(node) ? + "\"" + getBaseFilename(removeFileExtension(normalizePath(node.filename))) + "\"" : + "" + + return new ts.NavigationBarItem(rootName, ts.ScriptElementKind.moduleElement, ts.ScriptElementKindModifier.none, [getNodeSpan(node)], diff --git a/tests/cases/fourslash/scriptLexicalStructureItemsExternalModules2.ts b/tests/cases/fourslash/scriptLexicalStructureItemsExternalModules2.ts new file mode 100644 index 00000000000..b0bf6eb3fa2 --- /dev/null +++ b/tests/cases/fourslash/scriptLexicalStructureItemsExternalModules2.ts @@ -0,0 +1,15 @@ +/// + +// @Filename: test/file.ts +////{| "itemName": "Bar", "kind": "class" |}export class Bar { +//// {| "itemName": "s", "kind": "property", "parentName": "Bar" |}public s: string; +////} +////{| "itemName": "\"file\"", "kind": "module" |} +////{| "itemName": "x", "kind": "var", "parentName": "\"file\"" |} +////export var x: number; + +test.markers().forEach((marker) => { + verify.getScriptLexicalStructureListContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); +}); + +verify.getScriptLexicalStructureListCount(4); // external module node + variable in module + class + property From be373647d0f78d4e78a5866323dac00b8b738a25 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Mon, 22 Sep 2014 11:43:52 -0700 Subject: [PATCH 013/110] Addressed CR feedback. --- src/compiler/core.ts | 2 +- .../getScriptLexicalStructureWalker.ts | 24 ++++++++----------- .../scriptLexicalStructureModules.ts | 12 +++++----- 3 files changed, 17 insertions(+), 21 deletions(-) diff --git a/src/compiler/core.ts b/src/compiler/core.ts index e6935afd599..2ca50ae4923 100644 --- a/src/compiler/core.ts +++ b/src/compiler/core.ts @@ -522,8 +522,8 @@ module ts { } var supportedExtensions = [".d.ts", ".ts", ".js"]; - export function removeFileExtension(path: string): string { + export function removeFileExtension(path: string): string { for (var i = 0; i < supportedExtensions.length; i++) { var ext = supportedExtensions[i]; diff --git a/src/services/getScriptLexicalStructureWalker.ts b/src/services/getScriptLexicalStructureWalker.ts index 6c3de09af67..7dbfb0fbd14 100644 --- a/src/services/getScriptLexicalStructureWalker.ts +++ b/src/services/getScriptLexicalStructureWalker.ts @@ -88,10 +88,6 @@ module ts { function getItemsWorker(nodes: Node[], createItem: (n: Node) => ts.NavigationBarItem): ts.NavigationBarItem[] { var items: ts.NavigationBarItem[] = []; - if (!nodes) { - return items; - } - var keyToItem: Map = {}; for (var i = 0, n = nodes.length; i < n; i++) { @@ -162,39 +158,39 @@ module ts { case SyntaxKind.GetAccessor: var getAccessor = node; - return basicChildItem(node, getAccessor.name.text, ts.ScriptElementKind.memberGetAccessorElement); + return basicChildItem(node, getAccessor.name.text, ts.ScriptElementKind.memberGetAccessorElement); case SyntaxKind.SetAccessor: var setAccessor = node; - return basicChildItem(node, setAccessor.name.text, ts.ScriptElementKind.memberSetAccessorElement); + return basicChildItem(node, setAccessor.name.text, ts.ScriptElementKind.memberSetAccessorElement); case SyntaxKind.IndexSignature: - return basicChildItem(node, "[]", ts.ScriptElementKind.indexSignatureElement); + return basicChildItem(node, "[]", ts.ScriptElementKind.indexSignatureElement); case SyntaxKind.EnumMember: var enumElement = node; - return basicChildItem(node, enumElement.name.text, ts.ScriptElementKind.memberVariableElement); + return basicChildItem(node, enumElement.name.text, ts.ScriptElementKind.memberVariableElement); case SyntaxKind.CallSignature: - return basicChildItem(node, "()", ts.ScriptElementKind.callSignatureElement); + return basicChildItem(node, "()", ts.ScriptElementKind.callSignatureElement); case SyntaxKind.ConstructSignature: - return basicChildItem(node, "new()", ts.ScriptElementKind.constructSignatureElement); + return basicChildItem(node, "new()", ts.ScriptElementKind.constructSignatureElement); case SyntaxKind.Property: var propertySignature = node; - return basicChildItem(node, propertySignature.name.text, ts.ScriptElementKind.memberVariableElement); + return basicChildItem(node, propertySignature.name.text, ts.ScriptElementKind.memberVariableElement); case SyntaxKind.FunctionDeclaration: var functionDeclaration = node; if (!isTopLevelFunctionDeclaration(functionDeclaration)) { - return basicChildItem(node, functionDeclaration.name.text, ts.ScriptElementKind.functionElement); + return basicChildItem(node, functionDeclaration.name.text, ts.ScriptElementKind.functionElement); } break; case SyntaxKind.VariableDeclaration: var variableDeclaration = node; - return basicChildItem(node, variableDeclaration.name.text, ts.ScriptElementKind.variableElement); + return basicChildItem(node, variableDeclaration.name.text, ts.ScriptElementKind.variableElement); case SyntaxKind.Constructor: return basicChildItem(node, "constructor", ts.ScriptElementKind.constructorImplementationElement); @@ -307,7 +303,7 @@ module ts { // Add the constructor parameters in as children of the class (for property parameters). var nodes: Node[] = constructor - ? (constructor.parameters).concat(node.members) + ? constructor.parameters.concat(node.members) : node.members; var childItems = getItemsWorker(nodes, createChildItem); diff --git a/tests/cases/fourslash/scriptLexicalStructureModules.ts b/tests/cases/fourslash/scriptLexicalStructureModules.ts index 4331e64e0b0..ee0f91cc73c 100644 --- a/tests/cases/fourslash/scriptLexicalStructureModules.ts +++ b/tests/cases/fourslash/scriptLexicalStructureModules.ts @@ -9,29 +9,29 @@ //// ////{| "itemName": "A.B.C", "kind": "module" |} ////module A.B.C { -//// {| "itemName": "x", "kind": "var", "parent": "A.B.C" |} +//// {| "itemName": "x", "kind": "var", "parentName": "A.B.C" |} //// export var x; ////} //// ////{| "itemName": "A.B", "kind": "module" |} ////module A.B { -//// {| "itemName": "y", "kind": "var", "parent": "A.B" |} +//// {| "itemName": "y", "kind": "var", "parentName": "A.B" |} //// export var y; ////} //// ////{| "itemName": "A", "kind": "module" |} ////module A { -//// {| "itemName": "z", "kind": "var", "parent": "A" |} +//// {| "itemName": "z", "kind": "var", "parentName": "A" |} //// export var z; ////} //// ////{| "itemName": "A", "kind": "module" |} ////module A { -//// {| "itemName": "B", "kind": "module", "parent": "E" |} +//// {| "itemName": "B", "kind": "module", "parentName": "E" |} //// module B { -//// {| "itemName": "C", "kind": "module", "parent": "F" |} +//// {| "itemName": "C", "kind": "module", "parentName": "F" |} //// module C { -//// {| "itemName": "x", "kind": "var", "parent": "C" |} +//// {| "itemName": "x", "kind": "var", "parentName": "C" |} //// declare var x; //// } //// } From 2c99556b3122bec68993d09b05156f00459f60d0 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Tue, 23 Sep 2014 08:18:37 -0700 Subject: [PATCH 014/110] Use push.apply to push multiple elements. --- src/services/getScriptLexicalStructureWalker.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/services/getScriptLexicalStructureWalker.ts b/src/services/getScriptLexicalStructureWalker.ts index 7dbfb0fbd14..7013460598f 100644 --- a/src/services/getScriptLexicalStructureWalker.ts +++ b/src/services/getScriptLexicalStructureWalker.ts @@ -31,9 +31,7 @@ module ts { childNodes.push(node); } else if (node.kind === SyntaxKind.VariableStatement) { - forEach((node).declarations, declaration => { - childNodes.push(declaration); - }); + childNodes.push.apply(childNodes, (node).declarations); } } From cafa481843bcea80fb879754f3997322bf18db51 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 25 Sep 2014 08:44:46 -0700 Subject: [PATCH 015/110] Added error checking for references that reference the same file along with 3 tests, --- .../diagnosticInformationMap.generated.ts | 1 + src/compiler/diagnosticMessages.json | 4 ++++ src/compiler/parser.ts | 17 ++++++++++++----- .../reference/selfReferencingFile.errors.txt | 11 +++++++++++ .../reference/selfReferencingFile2.errors.txt | 11 +++++++++++ .../reference/selfReferencingFile3.errors.txt | 11 +++++++++++ tests/cases/compiler/selfReferencingFile.ts | 5 +++++ tests/cases/compiler/selfReferencingFile2.ts | 5 +++++ tests/cases/compiler/selfReferencingFile3.ts | 5 +++++ 9 files changed, 65 insertions(+), 5 deletions(-) create mode 100644 tests/baselines/reference/selfReferencingFile.errors.txt create mode 100644 tests/baselines/reference/selfReferencingFile2.errors.txt create mode 100644 tests/baselines/reference/selfReferencingFile3.errors.txt create mode 100644 tests/cases/compiler/selfReferencingFile.ts create mode 100644 tests/cases/compiler/selfReferencingFile2.ts create mode 100644 tests/cases/compiler/selfReferencingFile3.ts diff --git a/src/compiler/diagnosticInformationMap.generated.ts b/src/compiler/diagnosticInformationMap.generated.ts index ba6f742c4c1..10fa0e27b97 100644 --- a/src/compiler/diagnosticInformationMap.generated.ts +++ b/src/compiler/diagnosticInformationMap.generated.ts @@ -340,6 +340,7 @@ module ts { Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2: { code: 4077, category: DiagnosticCategory.Error, key: "Parameter '{0}' of exported function has or is using name '{1}' from private module '{2}'." }, Parameter_0_of_exported_function_has_or_is_using_private_name_1: { code: 4078, category: DiagnosticCategory.Error, key: "Parameter '{0}' of exported function has or is using private name '{1}'." }, The_current_host_does_not_support_the_0_option: { code: 5001, category: DiagnosticCategory.Error, key: "The current host does not support the '{0}' option." }, + A_file_cannot_have_a_reference_to_itself: { code: 5006, category: DiagnosticCategory.Error, key: "A file cannot have a reference to itself." }, Cannot_find_the_common_subdirectory_path_for_the_input_files: { code: 5009, category: DiagnosticCategory.Error, key: "Cannot find the common subdirectory path for the input files." }, Cannot_read_file_0_Colon_1: { code: 5012, category: DiagnosticCategory.Error, key: "Cannot read file '{0}': {1}" }, Unsupported_file_encoding: { code: 5013, category: DiagnosticCategory.Error, key: "Unsupported file encoding." }, diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 0480cd3000c..146b4df0905 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -1355,6 +1355,10 @@ "category": "Error", "code": 5001 }, + "A file cannot have a reference to itself.": { + "category": "Error", + "code": 5006 + }, "Cannot find the common subdirectory path for the input files.": { "category": "Error", "code": 5009 diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index af1851d6a75..e7d6b32831e 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -3828,11 +3828,18 @@ module ts { errorAtPos(start, length, Diagnostics.Invalid_reference_directive_syntax); } else { - referencedFiles.push({ - pos: range.pos, - end: range.end, - filename: matchResult[3] - }); + var basePath = getDirectoryPath(file.filename); + var referenceFilename = normalizePath(combinePaths(basePath, matchResult[3])); + if (file.filename === referenceFilename) { + errorAtPos(range.pos, range.end - range.pos, Diagnostics.A_file_cannot_have_a_reference_to_itself); + } + else { + referencedFiles.push({ + pos: range.pos, + end: range.end, + filename: matchResult[3] + }); + } } } } diff --git a/tests/baselines/reference/selfReferencingFile.errors.txt b/tests/baselines/reference/selfReferencingFile.errors.txt new file mode 100644 index 00000000000..0a72bdf5867 --- /dev/null +++ b/tests/baselines/reference/selfReferencingFile.errors.txt @@ -0,0 +1,11 @@ +tests/cases/compiler/selfReferencingFile.ts(1,1): error TS5006: A file cannot have a reference to itself. + + +==== tests/cases/compiler/selfReferencingFile.ts (1 errors) ==== + /// + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS5006: A file cannot have a reference to itself. + + class selfReferencingFile { + + } \ No newline at end of file diff --git a/tests/baselines/reference/selfReferencingFile2.errors.txt b/tests/baselines/reference/selfReferencingFile2.errors.txt new file mode 100644 index 00000000000..5bd2d75723a --- /dev/null +++ b/tests/baselines/reference/selfReferencingFile2.errors.txt @@ -0,0 +1,11 @@ +tests/cases/compiler/selfReferencingFile2.ts(1,1): error TS6053: File 'tests/cases/selfReferencingFile2.ts' not found. + + +==== tests/cases/compiler/selfReferencingFile2.ts (1 errors) ==== + /// + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS6053: File 'selfReferencingFile2.ts' not found. + + class selfReferencingFile2 { + + } \ No newline at end of file diff --git a/tests/baselines/reference/selfReferencingFile3.errors.txt b/tests/baselines/reference/selfReferencingFile3.errors.txt new file mode 100644 index 00000000000..84e3650de9e --- /dev/null +++ b/tests/baselines/reference/selfReferencingFile3.errors.txt @@ -0,0 +1,11 @@ +tests/cases/compiler/selfReferencingFile3.ts(1,1): error TS5006: A file cannot have a reference to itself. + + +==== tests/cases/compiler/selfReferencingFile3.ts (1 errors) ==== + /// + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS5006: A file cannot have a reference to itself. + + class selfReferencingFile3 { + + } \ No newline at end of file diff --git a/tests/cases/compiler/selfReferencingFile.ts b/tests/cases/compiler/selfReferencingFile.ts new file mode 100644 index 00000000000..cac46da2369 --- /dev/null +++ b/tests/cases/compiler/selfReferencingFile.ts @@ -0,0 +1,5 @@ +/// + +class selfReferencingFile { + +} \ No newline at end of file diff --git a/tests/cases/compiler/selfReferencingFile2.ts b/tests/cases/compiler/selfReferencingFile2.ts new file mode 100644 index 00000000000..c98e7a07735 --- /dev/null +++ b/tests/cases/compiler/selfReferencingFile2.ts @@ -0,0 +1,5 @@ +/// + +class selfReferencingFile2 { + +} \ No newline at end of file diff --git a/tests/cases/compiler/selfReferencingFile3.ts b/tests/cases/compiler/selfReferencingFile3.ts new file mode 100644 index 00000000000..4242d0b3633 --- /dev/null +++ b/tests/cases/compiler/selfReferencingFile3.ts @@ -0,0 +1,5 @@ +/// + +class selfReferencingFile3 { + +} \ No newline at end of file From 75e04f21e8870793b7d8fea6e9a23ebc2f69cffc Mon Sep 17 00:00:00 2001 From: Chris Bubernak Date: Thu, 25 Sep 2014 08:59:58 -0700 Subject: [PATCH 016/110] fixed some tabbing issues --- src/compiler/parser.ts | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index e7d6b32831e..1aa9076671a 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -3829,17 +3829,17 @@ module ts { } else { var basePath = getDirectoryPath(file.filename); - var referenceFilename = normalizePath(combinePaths(basePath, matchResult[3])); - if (file.filename === referenceFilename) { - errorAtPos(range.pos, range.end - range.pos, Diagnostics.A_file_cannot_have_a_reference_to_itself); - } - else { - referencedFiles.push({ - pos: range.pos, - end: range.end, - filename: matchResult[3] - }); - } + var referenceFilename = normalizePath(combinePaths(basePath, matchResult[3])); + if (file.filename === referenceFilename) { + errorAtPos(range.pos, range.end - range.pos, Diagnostics.A_file_cannot_have_a_reference_to_itself); + } + else { + referencedFiles.push({ + pos: range.pos, + end: range.end, + filename: matchResult[3] + }); + } } } } From ae17c357280d64f0a056a139da1232f8ddc1f1c0 Mon Sep 17 00:00:00 2001 From: ChrisBubernak Date: Thu, 25 Sep 2014 09:12:31 -0700 Subject: [PATCH 017/110] Added error checking for references that reference the same file along with 3 tests, --- .../diagnosticInformationMap.generated.ts | 1 + src/compiler/diagnosticMessages.json | 4 ++++ src/compiler/parser.ts | 17 ++++++++++++----- .../reference/selfReferencingFile.errors.txt | 11 +++++++++++ .../reference/selfReferencingFile2.errors.txt | 11 +++++++++++ .../reference/selfReferencingFile3.errors.txt | 11 +++++++++++ tests/cases/compiler/selfReferencingFile.ts | 5 +++++ tests/cases/compiler/selfReferencingFile2.ts | 5 +++++ tests/cases/compiler/selfReferencingFile3.ts | 5 +++++ 9 files changed, 65 insertions(+), 5 deletions(-) create mode 100644 tests/baselines/reference/selfReferencingFile.errors.txt create mode 100644 tests/baselines/reference/selfReferencingFile2.errors.txt create mode 100644 tests/baselines/reference/selfReferencingFile3.errors.txt create mode 100644 tests/cases/compiler/selfReferencingFile.ts create mode 100644 tests/cases/compiler/selfReferencingFile2.ts create mode 100644 tests/cases/compiler/selfReferencingFile3.ts diff --git a/src/compiler/diagnosticInformationMap.generated.ts b/src/compiler/diagnosticInformationMap.generated.ts index ba6f742c4c1..10fa0e27b97 100644 --- a/src/compiler/diagnosticInformationMap.generated.ts +++ b/src/compiler/diagnosticInformationMap.generated.ts @@ -340,6 +340,7 @@ module ts { Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2: { code: 4077, category: DiagnosticCategory.Error, key: "Parameter '{0}' of exported function has or is using name '{1}' from private module '{2}'." }, Parameter_0_of_exported_function_has_or_is_using_private_name_1: { code: 4078, category: DiagnosticCategory.Error, key: "Parameter '{0}' of exported function has or is using private name '{1}'." }, The_current_host_does_not_support_the_0_option: { code: 5001, category: DiagnosticCategory.Error, key: "The current host does not support the '{0}' option." }, + A_file_cannot_have_a_reference_to_itself: { code: 5006, category: DiagnosticCategory.Error, key: "A file cannot have a reference to itself." }, Cannot_find_the_common_subdirectory_path_for_the_input_files: { code: 5009, category: DiagnosticCategory.Error, key: "Cannot find the common subdirectory path for the input files." }, Cannot_read_file_0_Colon_1: { code: 5012, category: DiagnosticCategory.Error, key: "Cannot read file '{0}': {1}" }, Unsupported_file_encoding: { code: 5013, category: DiagnosticCategory.Error, key: "Unsupported file encoding." }, diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 0480cd3000c..146b4df0905 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -1355,6 +1355,10 @@ "category": "Error", "code": 5001 }, + "A file cannot have a reference to itself.": { + "category": "Error", + "code": 5006 + }, "Cannot find the common subdirectory path for the input files.": { "category": "Error", "code": 5009 diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index af1851d6a75..e7d6b32831e 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -3828,11 +3828,18 @@ module ts { errorAtPos(start, length, Diagnostics.Invalid_reference_directive_syntax); } else { - referencedFiles.push({ - pos: range.pos, - end: range.end, - filename: matchResult[3] - }); + var basePath = getDirectoryPath(file.filename); + var referenceFilename = normalizePath(combinePaths(basePath, matchResult[3])); + if (file.filename === referenceFilename) { + errorAtPos(range.pos, range.end - range.pos, Diagnostics.A_file_cannot_have_a_reference_to_itself); + } + else { + referencedFiles.push({ + pos: range.pos, + end: range.end, + filename: matchResult[3] + }); + } } } } diff --git a/tests/baselines/reference/selfReferencingFile.errors.txt b/tests/baselines/reference/selfReferencingFile.errors.txt new file mode 100644 index 00000000000..0a72bdf5867 --- /dev/null +++ b/tests/baselines/reference/selfReferencingFile.errors.txt @@ -0,0 +1,11 @@ +tests/cases/compiler/selfReferencingFile.ts(1,1): error TS5006: A file cannot have a reference to itself. + + +==== tests/cases/compiler/selfReferencingFile.ts (1 errors) ==== + /// + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS5006: A file cannot have a reference to itself. + + class selfReferencingFile { + + } \ No newline at end of file diff --git a/tests/baselines/reference/selfReferencingFile2.errors.txt b/tests/baselines/reference/selfReferencingFile2.errors.txt new file mode 100644 index 00000000000..5bd2d75723a --- /dev/null +++ b/tests/baselines/reference/selfReferencingFile2.errors.txt @@ -0,0 +1,11 @@ +tests/cases/compiler/selfReferencingFile2.ts(1,1): error TS6053: File 'tests/cases/selfReferencingFile2.ts' not found. + + +==== tests/cases/compiler/selfReferencingFile2.ts (1 errors) ==== + /// + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS6053: File 'selfReferencingFile2.ts' not found. + + class selfReferencingFile2 { + + } \ No newline at end of file diff --git a/tests/baselines/reference/selfReferencingFile3.errors.txt b/tests/baselines/reference/selfReferencingFile3.errors.txt new file mode 100644 index 00000000000..84e3650de9e --- /dev/null +++ b/tests/baselines/reference/selfReferencingFile3.errors.txt @@ -0,0 +1,11 @@ +tests/cases/compiler/selfReferencingFile3.ts(1,1): error TS5006: A file cannot have a reference to itself. + + +==== tests/cases/compiler/selfReferencingFile3.ts (1 errors) ==== + /// + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS5006: A file cannot have a reference to itself. + + class selfReferencingFile3 { + + } \ No newline at end of file diff --git a/tests/cases/compiler/selfReferencingFile.ts b/tests/cases/compiler/selfReferencingFile.ts new file mode 100644 index 00000000000..cac46da2369 --- /dev/null +++ b/tests/cases/compiler/selfReferencingFile.ts @@ -0,0 +1,5 @@ +/// + +class selfReferencingFile { + +} \ No newline at end of file diff --git a/tests/cases/compiler/selfReferencingFile2.ts b/tests/cases/compiler/selfReferencingFile2.ts new file mode 100644 index 00000000000..c98e7a07735 --- /dev/null +++ b/tests/cases/compiler/selfReferencingFile2.ts @@ -0,0 +1,5 @@ +/// + +class selfReferencingFile2 { + +} \ No newline at end of file diff --git a/tests/cases/compiler/selfReferencingFile3.ts b/tests/cases/compiler/selfReferencingFile3.ts new file mode 100644 index 00000000000..4242d0b3633 --- /dev/null +++ b/tests/cases/compiler/selfReferencingFile3.ts @@ -0,0 +1,5 @@ +/// + +class selfReferencingFile3 { + +} \ No newline at end of file From 71a54fbbb67ace3e68290fe5369a1e0763da487d Mon Sep 17 00:00:00 2001 From: Yui T Date: Thu, 25 Sep 2014 11:47:41 -0700 Subject: [PATCH 018/110] Remove default setting of noResolve flag --- src/compiler/emitter.ts | 4 ++-- src/services/shims.ts | 6 ------ 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 4052350cf8c..538728fa230 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -3183,9 +3183,9 @@ module ts { var referencedFile = resolveScriptReference(root, fileReference); // All the references that are not going to be part of same file - if ((referencedFile.flags & NodeFlags.DeclarationFile) || // This is a declare file reference + if (referencedFile && ((referencedFile.flags & NodeFlags.DeclarationFile) || // This is a declare file reference shouldEmitToOwnFile(referencedFile, compilerOptions) || // This is referenced file is emitting its own js file - !addedGlobalFileReference) { // Or the global out file corresponding to this reference was not added + !addedGlobalFileReference)) { // Or the global out file corresponding to this reference was not added writeReferencePath(referencedFile); if (!isExternalModuleOrDeclarationFile(referencedFile)) { diff --git a/src/services/shims.ts b/src/services/shims.ts index 0418a6da6cc..be2e3c49f50 100644 --- a/src/services/shims.ts +++ b/src/services/shims.ts @@ -328,12 +328,6 @@ module ts { } var options = compilationSettingsToCompilerOptions(JSON.parse(settingsJson)); - /// TODO: this should be pushed into VS. - /// We can not ask the LS instance to resolve, as this will lead to asking the host about files it does not know about, - /// something it is not designed to handle. for now make sure we never get a "noresolve == false". - /// This value should not matter, as the host runs resolution logic independently - options.noResolve = true; - return options; } From e11ee0f6cf7039e847237160738e5afff8759aa6 Mon Sep 17 00:00:00 2001 From: ChrisBubernak Date: Thu, 25 Sep 2014 13:02:37 -0700 Subject: [PATCH 019/110] Fixed a few of the code review suggestions --- .../diagnosticInformationMap.generated.ts | 2 +- src/compiler/diagnosticMessages.json | 9 +++--- src/compiler/parser.ts | 28 ++++++++++--------- .../reference/selfReferencingFile.errors.txt | 4 +-- .../reference/selfReferencingFile3.errors.txt | 4 +-- 5 files changed, 25 insertions(+), 22 deletions(-) diff --git a/src/compiler/diagnosticInformationMap.generated.ts b/src/compiler/diagnosticInformationMap.generated.ts index 10fa0e27b97..ebe8aa16f60 100644 --- a/src/compiler/diagnosticInformationMap.generated.ts +++ b/src/compiler/diagnosticInformationMap.generated.ts @@ -6,6 +6,7 @@ module ts { Identifier_expected: { code: 1003, category: DiagnosticCategory.Error, key: "Identifier expected." }, _0_expected: { code: 1005, category: DiagnosticCategory.Error, key: "'{0}' expected." }, Trailing_comma_not_allowed: { code: 1009, category: DiagnosticCategory.Error, key: "Trailing comma not allowed." }, + A_file_cannot_have_a_reference_to_itself: { code: 1006, category: DiagnosticCategory.Error, key: "A file cannot have a reference to itself." }, Asterisk_Slash_expected: { code: 1010, category: DiagnosticCategory.Error, key: "'*/' expected." }, Unexpected_token: { code: 1012, category: DiagnosticCategory.Error, key: "Unexpected token." }, Catch_clause_parameter_cannot_have_a_type_annotation: { code: 1013, category: DiagnosticCategory.Error, key: "Catch clause parameter cannot have a type annotation." }, @@ -340,7 +341,6 @@ module ts { Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2: { code: 4077, category: DiagnosticCategory.Error, key: "Parameter '{0}' of exported function has or is using name '{1}' from private module '{2}'." }, Parameter_0_of_exported_function_has_or_is_using_private_name_1: { code: 4078, category: DiagnosticCategory.Error, key: "Parameter '{0}' of exported function has or is using private name '{1}'." }, The_current_host_does_not_support_the_0_option: { code: 5001, category: DiagnosticCategory.Error, key: "The current host does not support the '{0}' option." }, - A_file_cannot_have_a_reference_to_itself: { code: 5006, category: DiagnosticCategory.Error, key: "A file cannot have a reference to itself." }, Cannot_find_the_common_subdirectory_path_for_the_input_files: { code: 5009, category: DiagnosticCategory.Error, key: "Cannot find the common subdirectory path for the input files." }, Cannot_read_file_0_Colon_1: { code: 5012, category: DiagnosticCategory.Error, key: "Cannot read file '{0}': {1}" }, Unsupported_file_encoding: { code: 5013, category: DiagnosticCategory.Error, key: "Unsupported file encoding." }, diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 146b4df0905..7a395b071e5 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -14,6 +14,10 @@ "Trailing comma not allowed.": { "category": "Error", "code": 1009 + }, + "A file cannot have a reference to itself.": { + "category": "Error", + "code": 1006 }, "'*/' expected.": { "category": "Error", @@ -1355,10 +1359,7 @@ "category": "Error", "code": 5001 }, - "A file cannot have a reference to itself.": { - "category": "Error", - "code": 5006 - }, + "Cannot find the common subdirectory path for the input files.": { "category": "Error", "code": 5009 diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index e47311895dd..d393d43b8f4 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -3822,24 +3822,26 @@ module ts { } else { var matchResult = fullTripleSlashReferencePathRegEx.exec(comment); + var start = range.pos; + var end = range.end; + var length = end - start; if (!matchResult) { - var start = range.pos; - var length = range.end - start; errorAtPos(start, length, Diagnostics.Invalid_reference_directive_syntax); } else { + var referenceFilename = matchResult[3]; var basePath = getDirectoryPath(file.filename); - var referenceFilename = normalizePath(combinePaths(basePath, matchResult[3])); - if (file.filename === referenceFilename) { - errorAtPos(range.pos, range.end - range.pos, Diagnostics.A_file_cannot_have_a_reference_to_itself); - } - else { - referencedFiles.push({ - pos: range.pos, - end: range.end, - filename: matchResult[3] - }); - } + var referenceFullPath = normalizePath(combinePaths(basePath, referenceFilename)); + if (file.filename === referenceFullPath) { + errorAtPos(start, length, Diagnostics.A_file_cannot_have_a_reference_to_itself); + } + else { + referencedFiles.push({ + pos: start, + end: end, + filename: referenceFilename + }); + } } } } diff --git a/tests/baselines/reference/selfReferencingFile.errors.txt b/tests/baselines/reference/selfReferencingFile.errors.txt index 0a72bdf5867..727be1ea0b2 100644 --- a/tests/baselines/reference/selfReferencingFile.errors.txt +++ b/tests/baselines/reference/selfReferencingFile.errors.txt @@ -1,10 +1,10 @@ -tests/cases/compiler/selfReferencingFile.ts(1,1): error TS5006: A file cannot have a reference to itself. +tests/cases/compiler/selfReferencingFile.ts(1,1): error TS1006: A file cannot have a reference to itself. ==== tests/cases/compiler/selfReferencingFile.ts (1 errors) ==== /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS5006: A file cannot have a reference to itself. +!!! error TS1006: A file cannot have a reference to itself. class selfReferencingFile { diff --git a/tests/baselines/reference/selfReferencingFile3.errors.txt b/tests/baselines/reference/selfReferencingFile3.errors.txt index 84e3650de9e..e6e8deb5d47 100644 --- a/tests/baselines/reference/selfReferencingFile3.errors.txt +++ b/tests/baselines/reference/selfReferencingFile3.errors.txt @@ -1,10 +1,10 @@ -tests/cases/compiler/selfReferencingFile3.ts(1,1): error TS5006: A file cannot have a reference to itself. +tests/cases/compiler/selfReferencingFile3.ts(1,1): error TS1006: A file cannot have a reference to itself. ==== tests/cases/compiler/selfReferencingFile3.ts (1 errors) ==== /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS5006: A file cannot have a reference to itself. +!!! error TS1006: A file cannot have a reference to itself. class selfReferencingFile3 { From a12c35b69b8fdee1a38a28462c16654358efe5f9 Mon Sep 17 00:00:00 2001 From: ChrisBubernak Date: Thu, 25 Sep 2014 13:07:14 -0700 Subject: [PATCH 020/110] fixing formatting again... --- src/compiler/parser.ts | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index d393d43b8f4..32db284c7bf 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -3822,26 +3822,27 @@ module ts { } else { var matchResult = fullTripleSlashReferencePathRegEx.exec(comment); - var start = range.pos; - var end = range.end; + var start = range.pos; + var end = range.end; var length = end - start; + if (!matchResult) { errorAtPos(start, length, Diagnostics.Invalid_reference_directive_syntax); } else { - var referenceFilename = matchResult[3]; + var referenceFilename = matchResult[3]; var basePath = getDirectoryPath(file.filename); var referenceFullPath = normalizePath(combinePaths(basePath, referenceFilename)); - if (file.filename === referenceFullPath) { - errorAtPos(start, length, Diagnostics.A_file_cannot_have_a_reference_to_itself); - } - else { - referencedFiles.push({ - pos: start, - end: end, - filename: referenceFilename - }); - } + if (file.filename === referenceFullPath) { + errorAtPos(start, length, Diagnostics.A_file_cannot_have_a_reference_to_itself); + } + else { + referencedFiles.push({ + pos: start, + end: end, + filename: referenceFilename + }); + } } } } From a98cca77234583adc13ae7e0b40ba4e5baea9d99 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Thu, 25 Sep 2014 13:10:04 -0700 Subject: [PATCH 021/110] Properly support string-literal property names and escape external module names. --- src/compiler/core.ts | 23 +++++++++ src/compiler/emitter.ts | 23 --------- .../getScriptLexicalStructureWalker.ts | 50 +++++++++++++------ ...ptLexicalStructureItemsExternalModules3.ts | 15 ++++++ .../scriptLexicalStructureModules.ts | 2 +- ...icalStructureMultilineStringIdentifiers.ts | 40 +++++++++++++++ 6 files changed, 113 insertions(+), 40 deletions(-) create mode 100644 tests/cases/fourslash/scriptLexicalStructureItemsExternalModules3.ts create mode 100644 tests/cases/fourslash/scriptLexicalStructureMultilineStringIdentifiers.ts diff --git a/src/compiler/core.ts b/src/compiler/core.ts index 2ca50ae4923..d95bc4f89ce 100644 --- a/src/compiler/core.ts +++ b/src/compiler/core.ts @@ -535,6 +535,29 @@ module ts { return path; } + var escapedCharsRegExp = /[\t\v\f\b\0\r\n\"\\\u2028\u2029\u0085]/g; + var escapedCharsMap: Map = { + "\t": "\\t", + "\v": "\\v", + "\f": "\\f", + "\b": "\\b", + "\0": "\\0", + "\r": "\\r", + "\n": "\\n", + "\"": "\\\"", + "\u2028": "\\u2028", // lineSeparator + "\u2029": "\\u2029", // paragraphSeparator + "\u0085": "\\u0085" // nextLine + }; + + /** NOTE: This *does not* support the full escape characters, it only supports the subset that can be used in file names + * or string literals. If the information encoded in the map changes, this needs to be revisited. */ + export function escapeString(s: string): string { + return escapedCharsRegExp.test(s) ? s.replace(escapedCharsRegExp, c => { + return escapedCharsMap[c] || c; + }) : s; + } + export interface ObjectAllocator { getNodeConstructor(kind: SyntaxKind): new () => Node; getSymbolConstructor(): new (flags: SymbolFlags, name: string) => Symbol; diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 74b0533e5b4..793660763a9 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -591,21 +591,6 @@ module ts { recordSourceMapSpan(comment.end); } - var escapedCharsRegExp = /[\t\v\f\b\0\r\n\"\u2028\u2029\u0085]/g; - var escapedCharsMap: Map = { - "\t": "\\t", - "\v": "\\v", - "\f": "\\f", - "\b": "\\b", - "\0": "\\0", - "\r": "\\r", - "\n": "\\n", - "\"": "\\\"", - "\u2028": "\\u2028", // lineSeparator - "\u2029": "\\u2029", // paragraphSeparator - "\u0085": "\\u0085" // nextLine - }; - function serializeSourceMapContents(version: number, file: string, sourceRoot: string, sources: string[], names: string[], mappings: string) { if (typeof JSON !== "undefined") { return JSON.stringify({ @@ -620,14 +605,6 @@ module ts { return "{\"version\":" + version + ",\"file\":\"" + escapeString(file) + "\",\"sourceRoot\":\"" + escapeString(sourceRoot) + "\",\"sources\":[" + serializeStringArray(sources) + "],\"names\":[" + serializeStringArray(names) + "],\"mappings\":\"" + escapeString(mappings) + "\"}"; - /** This does not support the full escape characters, it only supports the subset that can be used in file names - * or string literals. If the information encoded in the map changes, this needs to be revisited. */ - function escapeString(s: string): string { - return escapedCharsRegExp.test(s) ? s.replace(escapedCharsRegExp, c => { - return escapedCharsMap[c] || c; - }) : s; - } - function serializeStringArray(list: string[]): string { var output = ""; for (var i = 0, n = list.length; i < n; i++) { diff --git a/src/services/getScriptLexicalStructureWalker.ts b/src/services/getScriptLexicalStructureWalker.ts index 7013460598f..c6158bfead7 100644 --- a/src/services/getScriptLexicalStructureWalker.ts +++ b/src/services/getScriptLexicalStructureWalker.ts @@ -151,23 +151,23 @@ module ts { return basicChildItem(node, parameter.name.text, ts.ScriptElementKind.memberVariableElement); case SyntaxKind.Method: - var memberFunction = node; - return basicChildItem(node, memberFunction.name.text, ts.ScriptElementKind.memberFunctionElement); + var method = node; + return basicChildItem(node, getPropertyText(method.name), ts.ScriptElementKind.memberFunctionElement); case SyntaxKind.GetAccessor: var getAccessor = node; - return basicChildItem(node, getAccessor.name.text, ts.ScriptElementKind.memberGetAccessorElement); + return basicChildItem(node, getPropertyText(getAccessor.name), ts.ScriptElementKind.memberGetAccessorElement); case SyntaxKind.SetAccessor: var setAccessor = node; - return basicChildItem(node, setAccessor.name.text, ts.ScriptElementKind.memberSetAccessorElement); + return basicChildItem(node, getPropertyText(setAccessor.name), ts.ScriptElementKind.memberSetAccessorElement); case SyntaxKind.IndexSignature: return basicChildItem(node, "[]", ts.ScriptElementKind.indexSignatureElement); case SyntaxKind.EnumMember: - var enumElement = node; - return basicChildItem(node, enumElement.name.text, ts.ScriptElementKind.memberVariableElement); + var enumMember = node; + return basicChildItem(node, getPropertyText(enumMember.name), ts.ScriptElementKind.memberVariableElement); case SyntaxKind.CallSignature: return basicChildItem(node, "()", ts.ScriptElementKind.callSignatureElement); @@ -176,8 +176,8 @@ module ts { return basicChildItem(node, "new()", ts.ScriptElementKind.constructSignatureElement); case SyntaxKind.Property: - var propertySignature = node; - return basicChildItem(node, propertySignature.name.text, ts.ScriptElementKind.memberVariableElement); + var property = node; + return basicChildItem(node, getPropertyText(property.name), ts.ScriptElementKind.memberVariableElement); case SyntaxKind.FunctionDeclaration: var functionDeclaration = node; @@ -224,13 +224,13 @@ module ts { return undefined; - function getModuleNames(moduleDeclaration: ModuleDeclaration): string[]{ + function getModuleName(moduleDeclaration: ModuleDeclaration): string { // We want to maintain quotation marks. if (moduleDeclaration.name.kind === SyntaxKind.StringLiteral) { - return [getSourceTextOfNode(moduleDeclaration.name)]; + return getPropertyText(moduleDeclaration.name); } - // Otherwise, we need to aggregate each identifier of the qualified name. + // Otherwise, we need to aggregate each identifier to build up the qualified name. var result: string[] = []; result.push(moduleDeclaration.name.text); @@ -241,15 +241,15 @@ module ts { result.push(moduleDeclaration.name.text); } - return result; + return result.join("."); } function createModuleItem(node: ModuleDeclaration): NavigationBarItem { - var moduleNames = getModuleNames(node); + var moduleName = getModuleName(node); var childItems = getItemsWorker(getChildNodes((getInnermostModule(node).body).statements), createChildItem); - return new ts.NavigationBarItem(moduleNames.join("."), + return new ts.NavigationBarItem(moduleName, ts.ScriptElementKind.moduleElement, getNodeModifiers(node), [getNodeSpan(node)], @@ -281,7 +281,7 @@ module ts { hasGlobalNode = true; var rootName = isExternalModule(node) ? - "\"" + getBaseFilename(removeFileExtension(normalizePath(node.filename))) + "\"" : + "\"" + escapeString(getBaseFilename(removeFileExtension(normalizePath(node.filename)))) + "\"" : "" return new ts.NavigationBarItem(rootName, @@ -340,7 +340,6 @@ module ts { } function getInnermostModule(node: ModuleDeclaration): ModuleDeclaration { - while (node.body.kind === SyntaxKind.ModuleDeclaration) { node = node.body; } @@ -351,5 +350,24 @@ module ts { function getNodeSpan(node: Node) { return TypeScript.TextSpan.fromBounds(node.getStart(), node.getEnd()); } + + function getPropertyText(node: Node): string { + if (node.kind === SyntaxKind.Identifier) { + return (node).text; + } + + if (node.kind === SyntaxKind.StringLiteral) { + // normalize the quotes and remove all '\{newline}'s from the original text. + var text = getSourceTextOfNodeFromSourceText(sourceFile.text, node); + text = text.substring(1, text.length - 1).replace(/\\\r?\n/g, ""); + return "\"" + text + "\""; + } + + if (node.kind === SyntaxKind.NumericLiteral) { + return (node).text; + } + + Debug.fail("getPropertyText given a property that is neither an identifier nor a literal expression."); + } } } \ No newline at end of file diff --git a/tests/cases/fourslash/scriptLexicalStructureItemsExternalModules3.ts b/tests/cases/fourslash/scriptLexicalStructureItemsExternalModules3.ts new file mode 100644 index 00000000000..9ef49e38776 --- /dev/null +++ b/tests/cases/fourslash/scriptLexicalStructureItemsExternalModules3.ts @@ -0,0 +1,15 @@ +/// + +// @Filename: test/my fil"e.ts +////{| "itemName": "Bar", "kind": "class" |}export class Bar { +//// {| "itemName": "s", "kind": "property", "parentName": "Bar" |}public s: string; +////} +////{| "itemName": "\"my fil\\\"e\"", "kind": "module" |} +////{| "itemName": "x", "kind": "var", "parentName": "\"file\"" |} +////export var x: number; + +test.markers().forEach((marker) => { + verify.getScriptLexicalStructureListContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); +}); + +verify.getScriptLexicalStructureListCount(4); // external module node + variable in module + class + property diff --git a/tests/cases/fourslash/scriptLexicalStructureModules.ts b/tests/cases/fourslash/scriptLexicalStructureModules.ts index ee0f91cc73c..602cc170dee 100644 --- a/tests/cases/fourslash/scriptLexicalStructureModules.ts +++ b/tests/cases/fourslash/scriptLexicalStructureModules.ts @@ -3,7 +3,7 @@ ////declare module "X.Y.Z" { ////} //// -////{| "itemName": "'X2.Y2.Z2'", "kind": "module" |} +////{| "itemName": "\"X2.Y2.Z2\"", "kind": "module" |} ////declare module 'X2.Y2.Z2' { ////} //// diff --git a/tests/cases/fourslash/scriptLexicalStructureMultilineStringIdentifiers.ts b/tests/cases/fourslash/scriptLexicalStructureMultilineStringIdentifiers.ts new file mode 100644 index 00000000000..e0a44ba2685 --- /dev/null +++ b/tests/cases/fourslash/scriptLexicalStructureMultilineStringIdentifiers.ts @@ -0,0 +1,40 @@ + +////{| "itemName": "\"Multiline\\r\\nMadness\"", "kind": "module" |} +////declare module "Multiline\r\nMadness" { +////} +//// +////{| "itemName": "\"MultilineMadness\"", "kind": "module" |} +////declare module "Multiline\ +////Madness" { +////} +////declare module "MultilineMadness" {} +//// +////{| "itemName": "Foo", "kind": "interface" |} +////interface Foo { +//// {| "itemName": "\"a1\\\\\\r\\nb\"", "kind": "property", "parentName": "Foo" |} +//// "a1\\\r\nb"; +//// {| "itemName": "\"a2 b\"", "kind": "method", "parentName": "Foo" |} +//// "a2\ +//// \ +//// b"(): Foo; +////} +//// +////{| "itemName": "Bar", "kind": "class" |} +////class Bar implements Foo { +//// {| "itemName": "\"a1\\\\\\r\\nb\"", "kind": "property", "parentName": "Bar" |} +//// 'a1\\\r\nb': Foo; +//// +//// {| "itemName": "\"a2 b\"", "kind": "method", "parentName": "Bar" |} +//// 'a2\ +//// \ +//// b'(): Foo { +//// return this; +//// } +////} + + +test.markers().forEach((marker) => { + verify.getScriptLexicalStructureListContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); +}); + +verify.getScriptLexicalStructureListCount(8); // interface w/ 2 properties, class w/ 2 properties, 1 merged module, and 1 independent module From dc8a5f8b152dcad7b708d5834c1c7624c46575bd Mon Sep 17 00:00:00 2001 From: Yui T Date: Thu, 25 Sep 2014 13:58:01 -0700 Subject: [PATCH 022/110] Address code review --- src/compiler/emitter.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 538728fa230..a91637f2332 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -3150,7 +3150,7 @@ module ts { } } - function resolveScriptReference(sourceFile: SourceFile, reference: FileReference) { + function tryResolveScriptReference(sourceFile: SourceFile, reference: FileReference) { var referenceFileName = normalizePath(combinePaths(getDirectoryPath(sourceFile.filename), reference.filename)); return program.getSourceFile(referenceFileName); } @@ -3180,7 +3180,7 @@ module ts { if (!compilerOptions.noResolve) { var addedGlobalFileReference = false; forEach(root.referencedFiles, fileReference => { - var referencedFile = resolveScriptReference(root, fileReference); + var referencedFile = tryResolveScriptReference(root, fileReference); // All the references that are not going to be part of same file if (referencedFile && ((referencedFile.flags & NodeFlags.DeclarationFile) || // This is a declare file reference @@ -3205,11 +3205,11 @@ module ts { // Check what references need to be added if (!compilerOptions.noResolve) { forEach(sourceFile.referencedFiles, fileReference => { - var referencedFile = resolveScriptReference(sourceFile, fileReference); + var referencedFile = tryResolveScriptReference(sourceFile, fileReference); // If the reference file is a declaration file or an external module, emit that reference - if (isExternalModuleOrDeclarationFile(referencedFile) && - !contains(emittedReferencedFiles, referencedFile)) { // If the file reference was not already emitted + if (referencedFile && (isExternalModuleOrDeclarationFile(referencedFile) && + !contains(emittedReferencedFiles, referencedFile))) { // If the file reference was not already emitted writeReferencePath(referencedFile); emittedReferencedFiles.push(referencedFile); From c456ef496d714f720bb485954db2650f54c86e2f Mon Sep 17 00:00:00 2001 From: Vladimir Matveev Date: Thu, 25 Sep 2014 14:29:32 -0700 Subject: [PATCH 023/110] renamed getNodeAtPosition to getExactTokenAtPosition, added predicate parameter that will determine if token with end === position should be returned --- src/services/services.ts | 65 +++++++++++++---- src/services/utilities.ts | 37 ++++++---- .../cases/fourslash/getOccurrencesIfElse5.ts | 42 +++++++++++ .../getOccurrencesIfElseNegatives.ts | 29 -------- .../getOccurrencesLoopBreakContinue6.ts | 70 +++++++++++++++++++ ...nNegatives.ts => getOccurrencesReturn4.ts} | 16 +++-- .../getOccurrencesSwitchCaseDefault5.ts | 40 +++++++++++ ...etOccurrencesSwitchCaseDefaultNegatives.ts | 25 ------- ...hisNegatives.ts => getOccurrencesThis6.ts} | 14 ++-- .../getOccurrencesTryCatchFinally4.ts | 30 ++++++++ .../getOccurrencesTryCatchFinallyNegatives.ts | 23 ------ tests/cases/fourslash/goToDefinitionSimple.ts | 5 ++ 12 files changed, 286 insertions(+), 110 deletions(-) create mode 100644 tests/cases/fourslash/getOccurrencesIfElse5.ts delete mode 100644 tests/cases/fourslash/getOccurrencesIfElseNegatives.ts create mode 100644 tests/cases/fourslash/getOccurrencesLoopBreakContinue6.ts rename tests/cases/fourslash/{getOccurrencesReturnNegatives.ts => getOccurrencesReturn4.ts} (52%) create mode 100644 tests/cases/fourslash/getOccurrencesSwitchCaseDefault5.ts delete mode 100644 tests/cases/fourslash/getOccurrencesSwitchCaseDefaultNegatives.ts rename tests/cases/fourslash/{getOccurrencesThisNegatives.ts => getOccurrencesThis6.ts} (85%) create mode 100644 tests/cases/fourslash/getOccurrencesTryCatchFinally4.ts delete mode 100644 tests/cases/fourslash/getOccurrencesTryCatchFinallyNegatives.ts diff --git a/src/services/services.ts b/src/services/services.ts index f83202df864..6c5b3363e33 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -2088,7 +2088,7 @@ module ts { } // TODO: this is a hack for now, we need a proper walking mechanism to verify that we have the correct node - var mappedNode = getNodeAtPosition(sourceFile, TypeScript.end(node) - 1); + var mappedNode = getExactTokenAtPosition(sourceFile, TypeScript.end(node) - 1, /*includeItemAtEndPosition*/ undefined); if (isPunctuation(mappedNode.kind)) { mappedNode = mappedNode.parent; } @@ -2325,7 +2325,7 @@ module ts { fileName = TypeScript.switchToForwardSlashes(fileName); var sourceFile = getSourceFile(fileName); - var node = getNodeAtPosition(sourceFile, position); + var node = getExactTokenAtPosition(sourceFile, position, /*includeItemAtEndPosition*/ undefined); if (!node) { return undefined; } @@ -2434,7 +2434,7 @@ module ts { fileName = TypeScript.switchToForwardSlashes(fileName); var sourceFile = getSourceFile(fileName); - var node = getNodeAtPosition(sourceFile, position); + var node = getExactTokenAtPosition(sourceFile, position, /*includeItemAtEndPosition*/ undefined); if (!node) { return undefined; } @@ -2512,12 +2512,25 @@ module ts { return false; } + function isValidGotoDefinitionTarget(n: Node): boolean { + switch (n.kind) { + case SyntaxKind.Identifier: + case SyntaxKind.SuperKeyword: + case SyntaxKind.ThisKeyword: + case SyntaxKind.NumericLiteral: + case SyntaxKind.StringLiteral: + return true; + default: + return false; + } + } + synchronizeHostData(); filename = TypeScript.switchToForwardSlashes(filename); var sourceFile = getSourceFile(filename); - var node = getNodeAtPosition(sourceFile, position); + var node = getExactTokenAtPosition(sourceFile, position, isValidGotoDefinitionTarget); if (!node) { return undefined; } @@ -2581,7 +2594,7 @@ module ts { filename = TypeScript.switchToForwardSlashes(filename); var sourceFile = getSourceFile(filename); - var node = getNodeAtPosition(sourceFile, position); + var node = getExactTokenAtPosition(sourceFile, position, isValidFindOccurencesTarget); if (!node) { return undefined; } @@ -2647,6 +2660,32 @@ module ts { return undefined; + function isValidFindOccurencesTarget(n: Node): boolean { + switch (n.kind) { + case SyntaxKind.Identifier: + case SyntaxKind.SuperKeyword: + case SyntaxKind.ThisKeyword: + case SyntaxKind.IfKeyword: + case SyntaxKind.ElseKeyword: + case SyntaxKind.ReturnKeyword: + case SyntaxKind.TryKeyword: + case SyntaxKind.CatchKeyword: + case SyntaxKind.FinallyKeyword: + case SyntaxKind.SwitchKeyword: + case SyntaxKind.CaseKeyword: + case SyntaxKind.DefaultKeyword: + case SyntaxKind.BreakKeyword: + case SyntaxKind.ContinueKeyword: + case SyntaxKind.ForKeyword: + case SyntaxKind.WhileKeyword: + case SyntaxKind.DoKeyword: + case SyntaxKind.Constructor: + return true; + default: + return false; + } + } + function getIfElseOccurrences(ifStatement: IfStatement): ReferenceEntry[] { var keywords: Node[] = []; @@ -2903,7 +2942,7 @@ module ts { filename = TypeScript.switchToForwardSlashes(filename); var sourceFile = getSourceFile(filename); - var node = getNodeAtPosition(sourceFile, position); + var node = getExactTokenAtPosition(sourceFile, position, /*includeItemAtEndPosition*/ undefined); if (!node) { return undefined; } @@ -3086,7 +3125,7 @@ module ts { forEach(possiblePositions, position => { cancellationToken.throwIfCancellationRequested(); - var node = getNodeAtPosition(sourceFile, position); + var node = getExactTokenAtPosition(sourceFile, position, /*includeItemAtEndPosition*/ undefined); if (!node || node.getWidth() !== labelName.length) { return; } @@ -3142,7 +3181,7 @@ module ts { forEach(possiblePositions, position => { cancellationToken.throwIfCancellationRequested(); - var referenceLocation = getNodeAtPosition(sourceFile, position); + var referenceLocation = getExactTokenAtPosition(sourceFile, position, /*includeItemAtEndPosition*/ undefined); if (!isValidReferencePosition(referenceLocation, searchText)) { return; } @@ -3194,7 +3233,7 @@ module ts { forEach(possiblePositions, position => { cancellationToken.throwIfCancellationRequested(); - var node = getNodeAtPosition(sourceFile, position); + var node = getExactTokenAtPosition(sourceFile, position, n => n.kind === SyntaxKind.SuperKeyword); if (!node || node.kind !== SyntaxKind.SuperKeyword) { return; @@ -3260,7 +3299,7 @@ module ts { forEach(possiblePositions, position => { cancellationToken.throwIfCancellationRequested(); - var node = getNodeAtPosition(sourceFile, position); + var node = getExactTokenAtPosition(sourceFile, position, n => n.kind === SyntaxKind.ThisKeyword); if (!node || node.kind !== SyntaxKind.ThisKeyword) { return; } @@ -4022,7 +4061,7 @@ module ts { var sourceFile = getCurrentSourceFile(filename); var result: TypeScript.TextSpan[] = []; - var token = getTokenAtPosition(sourceFile, position); + var token = getTokenContainingPosition(sourceFile, position); if (token.getStart(sourceFile) === position) { var matchKind = getMatchingTokenKind(token); @@ -4178,7 +4217,7 @@ module ts { // OK, we have found a match in the file. This is only an acceptable match if // it is contained within a comment. - var token = getTokenAtPosition(sourceFile, matchPosition); + var token = getTokenContainingPosition(sourceFile, matchPosition); if (token.getStart() <= matchPosition && matchPosition < token.getEnd()) { // match was within the token itself. Not in the comment. Keep searching @@ -4306,7 +4345,7 @@ module ts { fileName = TypeScript.switchToForwardSlashes(fileName); var sourceFile = getSourceFile(fileName); - var node = getNodeAtPosition(sourceFile, position); + var node = getExactTokenAtPosition(sourceFile, position, n => n.kind === SyntaxKind.Identifier); // Can only rename an identifier. if (node && node.kind === SyntaxKind.Identifier) { diff --git a/src/services/utilities.ts b/src/services/utilities.ts index 2824ab5d2da..0e17699a1b1 100644 --- a/src/services/utilities.ts +++ b/src/services/utilities.ts @@ -49,7 +49,7 @@ module ts { /** Get a token that contains the position. This is guaranteed to return a token, the position can be in the * leading trivia or within the token text. */ - export function getTokenAtPosition(sourceFile: SourceFile, position: number) { + export function getTokenContainingPosition(sourceFile: SourceFile, position: number) { var current: Node = sourceFile; outer: while (true) { // find the child that has this @@ -64,16 +64,29 @@ module ts { } } - /** Get the token whose text contains the position, or the containing node. */ - export function getNodeAtPosition(sourceFile: SourceFile, position: number) { + /** Get the token whose text contains the position */ + export function getExactTokenAtPosition(sourceFile: SourceFile, position: number, includeItemAtEndPosition: (n: Node) => boolean) { var current: Node = sourceFile; outer: while (true) { - // find the child that has this - for (var i = 0, n = current.getChildCount(); i < n; i++) { + if (isToken(current)) { + // exit early + return current; + } + + // find the child that contains 'position' + for (var i = 0, n = current.getChildCount(sourceFile); i < n; i++) { var child = current.getChildAt(i); - if (child.getStart() <= position && position < child.getEnd()) { - current = child; - continue outer; + if (child.getStart(sourceFile) <= position) { + if (position < child.getEnd()) { + current = child; + continue outer; + } + else if (includeItemAtEndPosition && child.getEnd() === position) { + var previousToken = findPrecedingToken(position, sourceFile, child); + if (previousToken && includeItemAtEndPosition(previousToken)) { + return previousToken; + } + } } } return current; @@ -91,7 +104,7 @@ module ts { export function findTokenOnLeftOfPosition(file: SourceFile, position: number): Node { // Ideally, getTokenAtPosition should return a token. However, it is currently // broken, so we do a check to make sure the result was indeed a token. - var tokenAtPosition = getTokenAtPosition(file, position); + var tokenAtPosition = getTokenContainingPosition(file, position); if (isToken(tokenAtPosition) && position > tokenAtPosition.getStart(file) && position < tokenAtPosition.getEnd()) { return tokenAtPosition; } @@ -126,8 +139,8 @@ module ts { } } - export function findPrecedingToken(position: number, sourceFile: SourceFile): Node { - return find(sourceFile); + export function findPrecedingToken(position: number, sourceFile: SourceFile, startNode?: Node): Node { + return find(startNode || sourceFile); function findRightmostToken(n: Node): Node { if (isToken(n)) { @@ -163,7 +176,7 @@ module ts { } } - Debug.assert(n.kind === SyntaxKind.SourceFile); + Debug.assert(startNode || n.kind === SyntaxKind.SourceFile); // Here we know that none of child token nodes embrace the position, // the only known case is when position is at the end of the file. diff --git a/tests/cases/fourslash/getOccurrencesIfElse5.ts b/tests/cases/fourslash/getOccurrencesIfElse5.ts new file mode 100644 index 00000000000..b0519630b7b --- /dev/null +++ b/tests/cases/fourslash/getOccurrencesIfElse5.ts @@ -0,0 +1,42 @@ +/// + +////if/*1*/ (true) { +//// if/*2*/ (false) { +//// } +//// else/*3*/ { +//// } +//// if/*4*/ (true) { +//// } +//// else/*5*/ { +//// if/*6*/ (false) +//// if/*7*/ (true) +//// var x = undefined; +//// } +////} +////else/*8*/ if (null) { +////} +////else/*9*/ /* whar garbl */ if/*10*/ (undefined) { +////} +////else/*11*/ +////if/*12*/ (false) { +////} +////else/*13*/ { } + +function verifyOccurencesAtMarker(marker: string, count: number) { + goTo.marker(marker); + verify.occurrencesAtPositionCount(count); +} + +verifyOccurencesAtMarker("1", 7); +verifyOccurencesAtMarker("2", 2); +verifyOccurencesAtMarker("3", 2); +verifyOccurencesAtMarker("4", 2); +verifyOccurencesAtMarker("5", 2); +verifyOccurencesAtMarker("6", 1); +verifyOccurencesAtMarker("7", 1); +verifyOccurencesAtMarker("8", 7); +verifyOccurencesAtMarker("9", 7); +verifyOccurencesAtMarker("10", 7); +verifyOccurencesAtMarker("11", 7); +verifyOccurencesAtMarker("12", 7); +verifyOccurencesAtMarker("13", 7); diff --git a/tests/cases/fourslash/getOccurrencesIfElseNegatives.ts b/tests/cases/fourslash/getOccurrencesIfElseNegatives.ts deleted file mode 100644 index 601eba63c64..00000000000 --- a/tests/cases/fourslash/getOccurrencesIfElseNegatives.ts +++ /dev/null @@ -1,29 +0,0 @@ -/// - -////if/*1*/ (true) { -//// if/*2*/ (false) { -//// } -//// else/*3*/ { -//// } -//// if/*4*/ (true) { -//// } -//// else/*5*/ { -//// if/*6*/ (false) -//// if/*7*/ (true) -//// var x = undefined; -//// } -////} -////else/*8*/ if (null) { -////} -////else/*9*/ /* whar garbl */ if/*10*/ (undefined) { -////} -////else/*11*/ -////if/*12*/ (false) { -////} -////else/*13*/ { } - - -test.markers().forEach(m => { - goTo.position(m.position, m.fileName) - verify.occurrencesAtPositionCount(0); -}); diff --git a/tests/cases/fourslash/getOccurrencesLoopBreakContinue6.ts b/tests/cases/fourslash/getOccurrencesLoopBreakContinue6.ts new file mode 100644 index 00000000000..0127245dd50 --- /dev/null +++ b/tests/cases/fourslash/getOccurrencesLoopBreakContinue6.ts @@ -0,0 +1,70 @@ +/// + +////var arr = [1, 2, 3, 4]; +////label1: for (var n in arr) { +//// break; +//// continue; +//// break label1; +//// continue label1; +//// +//// label2: for (var i = 0; i < arr[n]; i++) { +//// break label1; +//// continue label1; +//// +//// break; +//// continue; +//// break label2; +//// continue label2; +//// +//// function foo() { +//// label3: while (true) { +//// break; +//// continue; +//// break label3; +//// continue label3; +//// +//// // these cross function boundaries +//// br/*1*/eak label1; +//// cont/*2*/inue label1; +//// bre/*3*/ak label2; +//// c/*4*/ontinue label2; +//// +//// label4: do { +//// break; +//// continue; +//// break label4; +//// continue label4; +//// +//// break label3; +//// continue label3; +//// +//// switch (10) { +//// case 1: +//// case 2: +//// break; +//// break label4; +//// default: +//// continue; +//// } +//// +//// // these cross function boundaries +//// br/*5*/eak label1; +//// co/*6*/ntinue label1; +//// br/*7*/eak label2; +//// con/*8*/tinue label2; +//// () => { b/*9*/reak; } +//// } while (true) +//// } +//// } +//// } +////} +//// +////label5: while (true) break label5; +//// +////label7: while (true) co/*10*/ntinue label5; + +test.markers().forEach(m => { + goTo.position(m.position); + + verify.occurrencesAtPositionCount(0); +}); diff --git a/tests/cases/fourslash/getOccurrencesReturnNegatives.ts b/tests/cases/fourslash/getOccurrencesReturn4.ts similarity index 52% rename from tests/cases/fourslash/getOccurrencesReturnNegatives.ts rename to tests/cases/fourslash/getOccurrencesReturn4.ts index 79cb3c659c6..4e25162f80f 100644 --- a/tests/cases/fourslash/getOccurrencesReturnNegatives.ts +++ b/tests/cases/fourslash/getOccurrencesReturn4.ts @@ -19,7 +19,15 @@ //// return/*7*/ true; ////} -test.markers().forEach(m => { - goTo.position(m.position, m.fileName) - verify.occurrencesAtPositionCount(0); -}); \ No newline at end of file +function verifyOccurencesAtMarker(marker: string, count: number) { + goTo.marker(marker); + verify.occurrencesAtPositionCount(count); +} + +verifyOccurencesAtMarker("1", 4); +verifyOccurencesAtMarker("2", 4); +verifyOccurencesAtMarker("3", 4); +verifyOccurencesAtMarker("4", 4); +verifyOccurencesAtMarker("5", 1); +verifyOccurencesAtMarker("6", 3); +verifyOccurencesAtMarker("7", 3); \ No newline at end of file diff --git a/tests/cases/fourslash/getOccurrencesSwitchCaseDefault5.ts b/tests/cases/fourslash/getOccurrencesSwitchCaseDefault5.ts new file mode 100644 index 00000000000..162c2e1a94f --- /dev/null +++ b/tests/cases/fourslash/getOccurrencesSwitchCaseDefault5.ts @@ -0,0 +1,40 @@ +/// + +////switch/*1*/ (10) { +//// case/*2*/ 1: +//// case/*3*/ 2: +//// case/*4*/ 4: +//// case/*5*/ 8: +//// foo: switch/*6*/ (20) { +//// case/*7*/ 1: +//// case/*8*/ 2: +//// break/*9*/; +//// default/*10*/: +//// break foo; +//// } +//// case/*11*/ 0xBEEF: +//// default/*12*/: +//// break/*13*/; +//// case 16/*14*/: +////} + +function verifyOccurencesAtMarker(marker: string, count: number) { + goTo.marker(marker); + verify.occurrencesAtPositionCount(count); +} + +verifyOccurencesAtMarker("1", 9); +verifyOccurencesAtMarker("2", 9); +verifyOccurencesAtMarker("3", 9); +verifyOccurencesAtMarker("4", 9); +verifyOccurencesAtMarker("5", 9); +verifyOccurencesAtMarker("6", 6); +verifyOccurencesAtMarker("7", 6); +verifyOccurencesAtMarker("8", 6); +verifyOccurencesAtMarker("9", 6); +verifyOccurencesAtMarker("10", 6); +verifyOccurencesAtMarker("11", 9); +verifyOccurencesAtMarker("12", 9); +verifyOccurencesAtMarker("13", 9); +verifyOccurencesAtMarker("14", 0); + diff --git a/tests/cases/fourslash/getOccurrencesSwitchCaseDefaultNegatives.ts b/tests/cases/fourslash/getOccurrencesSwitchCaseDefaultNegatives.ts deleted file mode 100644 index cfb70b0c11a..00000000000 --- a/tests/cases/fourslash/getOccurrencesSwitchCaseDefaultNegatives.ts +++ /dev/null @@ -1,25 +0,0 @@ -/// - -////switch/*1*/ (10) { -//// case/*2*/ 1: -//// case/*3*/ 2: -//// case/*4*/ 4: -//// case/*5*/ 8: -//// foo: switch/*6*/ (20) { -//// case/*7*/ 1: -//// case/*8*/ 2: -//// break/*9*/; -//// default/*10*/: -//// break foo; -//// } -//// case/*11*/ 0xBEEF: -//// default/*12*/: -//// break/*13*/; -//// case 16/*14*/: -////} - - -for (var i = 1; i <= test.markers().length; i++) { - goTo.marker("" + i); - verify.occurrencesAtPositionCount(0); -} diff --git a/tests/cases/fourslash/getOccurrencesThisNegatives.ts b/tests/cases/fourslash/getOccurrencesThis6.ts similarity index 85% rename from tests/cases/fourslash/getOccurrencesThisNegatives.ts rename to tests/cases/fourslash/getOccurrencesThis6.ts index 95c676e0add..6ff779c0b46 100644 --- a/tests/cases/fourslash/getOccurrencesThisNegatives.ts +++ b/tests/cases/fourslash/getOccurrencesThis6.ts @@ -142,8 +142,14 @@ ////} -test.markers().forEach(m => { - goTo.position(m.position, m.fileName) +function verifyOccurencesAtMarker(marker: string, count: number) { + goTo.marker(marker); + verify.occurrencesAtPositionCount(count); +} - verify.occurrencesAtPositionCount(0); -}); \ No newline at end of file +verifyOccurencesAtMarker("1", 2); +verifyOccurencesAtMarker("2", 6); +verifyOccurencesAtMarker("3", 1); +verifyOccurencesAtMarker("4", 1); +verifyOccurencesAtMarker("5", 1); +verifyOccurencesAtMarker("6", 0); \ No newline at end of file diff --git a/tests/cases/fourslash/getOccurrencesTryCatchFinally4.ts b/tests/cases/fourslash/getOccurrencesTryCatchFinally4.ts new file mode 100644 index 00000000000..dc6b0540312 --- /dev/null +++ b/tests/cases/fourslash/getOccurrencesTryCatchFinally4.ts @@ -0,0 +1,30 @@ +/// + +////try/*1*/ { +//// try/*2*/ { +//// } +//// catch/*3*/ (x) { +//// } +//// +//// try/*4*/ { +//// } +//// finally/*5*/ {/*8*/ +//// } +////} +////catch/*6*/ (e) { +////} +////finally/*7*/ { +////} +function verifyOccurencesAtMarker(marker: string, count: number) { + goTo.marker(marker); + verify.occurrencesAtPositionCount(count); +} + +verifyOccurencesAtMarker("1", 3); +verifyOccurencesAtMarker("2", 2); +verifyOccurencesAtMarker("3", 2); +verifyOccurencesAtMarker("4", 2); +verifyOccurencesAtMarker("5", 2); +verifyOccurencesAtMarker("6", 3); +verifyOccurencesAtMarker("7", 3); +verifyOccurencesAtMarker("8", 0); \ No newline at end of file diff --git a/tests/cases/fourslash/getOccurrencesTryCatchFinallyNegatives.ts b/tests/cases/fourslash/getOccurrencesTryCatchFinallyNegatives.ts deleted file mode 100644 index d5889ff84e9..00000000000 --- a/tests/cases/fourslash/getOccurrencesTryCatchFinallyNegatives.ts +++ /dev/null @@ -1,23 +0,0 @@ -/// - -////try/*1*/ { -//// try/*2*/ { -//// } -//// catch/*3*/ (x) { -//// } -//// -//// try/*4*/ { -//// } -//// finally/*5*/ {/*8*/ -//// } -////} -////catch/*6*/ (e) { -////} -////finally/*7*/ { -////} - - -for (var i = 1; i <= test.markers().length; i++) { - goTo.marker("" + i); - verify.occurrencesAtPositionCount(0); -} \ No newline at end of file diff --git a/tests/cases/fourslash/goToDefinitionSimple.ts b/tests/cases/fourslash/goToDefinitionSimple.ts index f931610aa2a..47c1909cf12 100644 --- a/tests/cases/fourslash/goToDefinitionSimple.ts +++ b/tests/cases/fourslash/goToDefinitionSimple.ts @@ -5,7 +5,12 @@ // @Filename: Consumption.ts //// var n = new /*1*/c(); +//// var n = new c/*3*/(); goTo.marker('1'); goTo.definition(); verify.caretAtMarker('2'); + +goTo.marker('3'); +goTo.definition(); +verify.caretAtMarker('2'); From c116faa1bbd0a961b99641136567aadd29668214 Mon Sep 17 00:00:00 2001 From: v2m Date: Thu, 25 Sep 2014 15:14:54 -0700 Subject: [PATCH 024/110] rename getExactTokenAtPosition to getTokenAtPosition --- src/services/services.ts | 22 +++++++++++----------- src/services/utilities.ts | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/services/services.ts b/src/services/services.ts index 6c5b3363e33..954a88d04ac 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -2088,7 +2088,7 @@ module ts { } // TODO: this is a hack for now, we need a proper walking mechanism to verify that we have the correct node - var mappedNode = getExactTokenAtPosition(sourceFile, TypeScript.end(node) - 1, /*includeItemAtEndPosition*/ undefined); + var mappedNode = getTokenAtPosition(sourceFile, TypeScript.end(node) - 1, /*includeItemAtEndPosition*/ undefined); if (isPunctuation(mappedNode.kind)) { mappedNode = mappedNode.parent; } @@ -2325,7 +2325,7 @@ module ts { fileName = TypeScript.switchToForwardSlashes(fileName); var sourceFile = getSourceFile(fileName); - var node = getExactTokenAtPosition(sourceFile, position, /*includeItemAtEndPosition*/ undefined); + var node = getTokenAtPosition(sourceFile, position, /*includeItemAtEndPosition*/ undefined); if (!node) { return undefined; } @@ -2434,7 +2434,7 @@ module ts { fileName = TypeScript.switchToForwardSlashes(fileName); var sourceFile = getSourceFile(fileName); - var node = getExactTokenAtPosition(sourceFile, position, /*includeItemAtEndPosition*/ undefined); + var node = getTokenAtPosition(sourceFile, position, /*includeItemAtEndPosition*/ undefined); if (!node) { return undefined; } @@ -2530,7 +2530,7 @@ module ts { filename = TypeScript.switchToForwardSlashes(filename); var sourceFile = getSourceFile(filename); - var node = getExactTokenAtPosition(sourceFile, position, isValidGotoDefinitionTarget); + var node = getTokenAtPosition(sourceFile, position, isValidGotoDefinitionTarget); if (!node) { return undefined; } @@ -2594,7 +2594,7 @@ module ts { filename = TypeScript.switchToForwardSlashes(filename); var sourceFile = getSourceFile(filename); - var node = getExactTokenAtPosition(sourceFile, position, isValidFindOccurencesTarget); + var node = getTokenAtPosition(sourceFile, position, isValidFindOccurencesTarget); if (!node) { return undefined; } @@ -2942,7 +2942,7 @@ module ts { filename = TypeScript.switchToForwardSlashes(filename); var sourceFile = getSourceFile(filename); - var node = getExactTokenAtPosition(sourceFile, position, /*includeItemAtEndPosition*/ undefined); + var node = getTokenAtPosition(sourceFile, position, /*includeItemAtEndPosition*/ undefined); if (!node) { return undefined; } @@ -3125,7 +3125,7 @@ module ts { forEach(possiblePositions, position => { cancellationToken.throwIfCancellationRequested(); - var node = getExactTokenAtPosition(sourceFile, position, /*includeItemAtEndPosition*/ undefined); + var node = getTokenAtPosition(sourceFile, position, /*includeItemAtEndPosition*/ undefined); if (!node || node.getWidth() !== labelName.length) { return; } @@ -3181,7 +3181,7 @@ module ts { forEach(possiblePositions, position => { cancellationToken.throwIfCancellationRequested(); - var referenceLocation = getExactTokenAtPosition(sourceFile, position, /*includeItemAtEndPosition*/ undefined); + var referenceLocation = getTokenAtPosition(sourceFile, position, /*includeItemAtEndPosition*/ undefined); if (!isValidReferencePosition(referenceLocation, searchText)) { return; } @@ -3233,7 +3233,7 @@ module ts { forEach(possiblePositions, position => { cancellationToken.throwIfCancellationRequested(); - var node = getExactTokenAtPosition(sourceFile, position, n => n.kind === SyntaxKind.SuperKeyword); + var node = getTokenAtPosition(sourceFile, position, n => n.kind === SyntaxKind.SuperKeyword); if (!node || node.kind !== SyntaxKind.SuperKeyword) { return; @@ -3299,7 +3299,7 @@ module ts { forEach(possiblePositions, position => { cancellationToken.throwIfCancellationRequested(); - var node = getExactTokenAtPosition(sourceFile, position, n => n.kind === SyntaxKind.ThisKeyword); + var node = getTokenAtPosition(sourceFile, position, n => n.kind === SyntaxKind.ThisKeyword); if (!node || node.kind !== SyntaxKind.ThisKeyword) { return; } @@ -4345,7 +4345,7 @@ module ts { fileName = TypeScript.switchToForwardSlashes(fileName); var sourceFile = getSourceFile(fileName); - var node = getExactTokenAtPosition(sourceFile, position, n => n.kind === SyntaxKind.Identifier); + var node = getTokenAtPosition(sourceFile, position, n => n.kind === SyntaxKind.Identifier); // Can only rename an identifier. if (node && node.kind === SyntaxKind.Identifier) { diff --git a/src/services/utilities.ts b/src/services/utilities.ts index 0e17699a1b1..b3310731bbf 100644 --- a/src/services/utilities.ts +++ b/src/services/utilities.ts @@ -65,7 +65,7 @@ module ts { } /** Get the token whose text contains the position */ - export function getExactTokenAtPosition(sourceFile: SourceFile, position: number, includeItemAtEndPosition: (n: Node) => boolean) { + export function getTokenAtPosition(sourceFile: SourceFile, position: number, includeItemAtEndPosition: (n: Node) => boolean) { var current: Node = sourceFile; outer: while (true) { if (isToken(current)) { From 93db897778e2d54aa82c33d720541cf25a459ed3 Mon Sep 17 00:00:00 2001 From: ChrisBubernak Date: Fri, 26 Sep 2014 07:47:44 -0700 Subject: [PATCH 025/110] Fixed some of the baselines, made file comparisons handle different casing, put diagnostic message in correct order --- src/compiler/diagnosticInformationMap.generated.ts | 2 +- src/compiler/diagnosticMessages.json | 8 ++++---- src/compiler/parser.ts | 2 +- .../amd/visibilityOfTypeUsedAcrossModules2.errors.txt | 8 ++++++-- .../node/visibilityOfTypeUsedAcrossModules2.errors.txt | 8 ++++++-- 5 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/compiler/diagnosticInformationMap.generated.ts b/src/compiler/diagnosticInformationMap.generated.ts index ebe8aa16f60..e0b8099ef3c 100644 --- a/src/compiler/diagnosticInformationMap.generated.ts +++ b/src/compiler/diagnosticInformationMap.generated.ts @@ -5,8 +5,8 @@ module ts { Unterminated_string_literal: { code: 1002, category: DiagnosticCategory.Error, key: "Unterminated string literal." }, Identifier_expected: { code: 1003, category: DiagnosticCategory.Error, key: "Identifier expected." }, _0_expected: { code: 1005, category: DiagnosticCategory.Error, key: "'{0}' expected." }, - Trailing_comma_not_allowed: { code: 1009, category: DiagnosticCategory.Error, key: "Trailing comma not allowed." }, A_file_cannot_have_a_reference_to_itself: { code: 1006, category: DiagnosticCategory.Error, key: "A file cannot have a reference to itself." }, + Trailing_comma_not_allowed: { code: 1009, category: DiagnosticCategory.Error, key: "Trailing comma not allowed." }, Asterisk_Slash_expected: { code: 1010, category: DiagnosticCategory.Error, key: "'*/' expected." }, Unexpected_token: { code: 1012, category: DiagnosticCategory.Error, key: "Unexpected token." }, Catch_clause_parameter_cannot_have_a_type_annotation: { code: 1013, category: DiagnosticCategory.Error, key: "Catch clause parameter cannot have a type annotation." }, diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 7a395b071e5..1b89d2242c7 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -10,15 +10,15 @@ "'{0}' expected.": { "category": "Error", "code": 1005 - }, - "Trailing comma not allowed.": { - "category": "Error", - "code": 1009 }, "A file cannot have a reference to itself.": { "category": "Error", "code": 1006 }, + "Trailing comma not allowed.": { + "category": "Error", + "code": 1009 + }, "'*/' expected.": { "category": "Error", "code": 1010 diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 32db284c7bf..15a55046db9 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -3833,7 +3833,7 @@ module ts { var referenceFilename = matchResult[3]; var basePath = getDirectoryPath(file.filename); var referenceFullPath = normalizePath(combinePaths(basePath, referenceFilename)); - if (file.filename === referenceFullPath) { + if (file.filename.toLocaleLowerCase() === referenceFullPath.toLocaleLowerCase()) { errorAtPos(start, length, Diagnostics.A_file_cannot_have_a_reference_to_itself); } else { diff --git a/tests/baselines/reference/project/visibilityOfTypeUsedAcrossModules2/amd/visibilityOfTypeUsedAcrossModules2.errors.txt b/tests/baselines/reference/project/visibilityOfTypeUsedAcrossModules2/amd/visibilityOfTypeUsedAcrossModules2.errors.txt index 9bdeb723415..4a086fae46f 100644 --- a/tests/baselines/reference/project/visibilityOfTypeUsedAcrossModules2/amd/visibilityOfTypeUsedAcrossModules2.errors.txt +++ b/tests/baselines/reference/project/visibilityOfTypeUsedAcrossModules2/amd/visibilityOfTypeUsedAcrossModules2.errors.txt @@ -1,12 +1,16 @@ +main.ts(1,1): error TS1006: A file cannot have a reference to itself. main.ts(2,1): error TS6053: File 'nonExistingFile1.ts' not found. main.ts(3,1): error TS6053: File 'nonExistingFile2.ts' not found. -==== main.ts (2 errors) ==== +==== main.ts (3 errors) ==== /// + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1006: A file cannot have a reference to itself. /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS6053: File 'nonExistingFile1.ts' not found. /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS6053: File 'nonExistingFile2.ts' not found. \ No newline at end of file +!!! error TS6053: File 'nonExistingFile2.ts' not found. + \ No newline at end of file diff --git a/tests/baselines/reference/project/visibilityOfTypeUsedAcrossModules2/node/visibilityOfTypeUsedAcrossModules2.errors.txt b/tests/baselines/reference/project/visibilityOfTypeUsedAcrossModules2/node/visibilityOfTypeUsedAcrossModules2.errors.txt index 9bdeb723415..4a086fae46f 100644 --- a/tests/baselines/reference/project/visibilityOfTypeUsedAcrossModules2/node/visibilityOfTypeUsedAcrossModules2.errors.txt +++ b/tests/baselines/reference/project/visibilityOfTypeUsedAcrossModules2/node/visibilityOfTypeUsedAcrossModules2.errors.txt @@ -1,12 +1,16 @@ +main.ts(1,1): error TS1006: A file cannot have a reference to itself. main.ts(2,1): error TS6053: File 'nonExistingFile1.ts' not found. main.ts(3,1): error TS6053: File 'nonExistingFile2.ts' not found. -==== main.ts (2 errors) ==== +==== main.ts (3 errors) ==== /// + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS1006: A file cannot have a reference to itself. /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS6053: File 'nonExistingFile1.ts' not found. /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS6053: File 'nonExistingFile2.ts' not found. \ No newline at end of file +!!! error TS6053: File 'nonExistingFile2.ts' not found. + \ No newline at end of file From 1b3da908de26d11b3caa844e8f5ba383871272e5 Mon Sep 17 00:00:00 2001 From: ChrisBubernak Date: Fri, 26 Sep 2014 09:33:06 -0700 Subject: [PATCH 026/110] fixing baseline --- .../amd/visibilityOfTypeUsedAcrossModules2.errors.txt | 3 +-- .../node/visibilityOfTypeUsedAcrossModules2.errors.txt | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/tests/baselines/reference/project/visibilityOfTypeUsedAcrossModules2/amd/visibilityOfTypeUsedAcrossModules2.errors.txt b/tests/baselines/reference/project/visibilityOfTypeUsedAcrossModules2/amd/visibilityOfTypeUsedAcrossModules2.errors.txt index 4a086fae46f..d5c992fff66 100644 --- a/tests/baselines/reference/project/visibilityOfTypeUsedAcrossModules2/amd/visibilityOfTypeUsedAcrossModules2.errors.txt +++ b/tests/baselines/reference/project/visibilityOfTypeUsedAcrossModules2/amd/visibilityOfTypeUsedAcrossModules2.errors.txt @@ -12,5 +12,4 @@ main.ts(3,1): error TS6053: File 'nonExistingFile2.ts' not found. !!! error TS6053: File 'nonExistingFile1.ts' not found. /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS6053: File 'nonExistingFile2.ts' not found. - \ No newline at end of file +!!! error TS6053: File 'nonExistingFile2.ts' not found. \ No newline at end of file diff --git a/tests/baselines/reference/project/visibilityOfTypeUsedAcrossModules2/node/visibilityOfTypeUsedAcrossModules2.errors.txt b/tests/baselines/reference/project/visibilityOfTypeUsedAcrossModules2/node/visibilityOfTypeUsedAcrossModules2.errors.txt index 4a086fae46f..d5c992fff66 100644 --- a/tests/baselines/reference/project/visibilityOfTypeUsedAcrossModules2/node/visibilityOfTypeUsedAcrossModules2.errors.txt +++ b/tests/baselines/reference/project/visibilityOfTypeUsedAcrossModules2/node/visibilityOfTypeUsedAcrossModules2.errors.txt @@ -12,5 +12,4 @@ main.ts(3,1): error TS6053: File 'nonExistingFile2.ts' not found. !!! error TS6053: File 'nonExistingFile1.ts' not found. /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS6053: File 'nonExistingFile2.ts' not found. - \ No newline at end of file +!!! error TS6053: File 'nonExistingFile2.ts' not found. \ No newline at end of file From 36b46291f264a65e44503546f14cb13d2d506d47 Mon Sep 17 00:00:00 2001 From: ChrisBubernak Date: Fri, 26 Sep 2014 09:54:32 -0700 Subject: [PATCH 027/110] still trying to get the indenting correct --- src/compiler/parser.ts | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 15a55046db9..426fbe61d92 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -3822,27 +3822,27 @@ module ts { } else { var matchResult = fullTripleSlashReferencePathRegEx.exec(comment); - var start = range.pos; - var end = range.end; + var start = range.pos; + var end = range.end; var length = end - start; - + if (!matchResult) { errorAtPos(start, length, Diagnostics.Invalid_reference_directive_syntax); } else { - var referenceFilename = matchResult[3]; + var referenceFilename = matchResult[3]; var basePath = getDirectoryPath(file.filename); var referenceFullPath = normalizePath(combinePaths(basePath, referenceFilename)); - if (file.filename.toLocaleLowerCase() === referenceFullPath.toLocaleLowerCase()) { - errorAtPos(start, length, Diagnostics.A_file_cannot_have_a_reference_to_itself); - } - else { - referencedFiles.push({ - pos: start, - end: end, - filename: referenceFilename - }); - } + if (file.filename.toLocaleLowerCase() === referenceFullPath.toLocaleLowerCase()) { + errorAtPos(start, length, Diagnostics.A_file_cannot_have_a_reference_to_itself); + } + else { + referencedFiles.push({ + pos: start, + end: end, + filename: referenceFilename + }); + } } } } From 80896730660aad2db00a7a4aa9df6cb9bd10ff95 Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Fri, 26 Sep 2014 14:37:17 -0700 Subject: [PATCH 028/110] Filter protected members from the completion list --- src/compiler/checker.ts | 22 +++++- src/compiler/types.ts | 2 + src/services/services.ts | 14 +--- .../completionListInstanceProtectedMembers.ts | 63 +++++++++++++++ ...completionListInstanceProtectedMembers2.ts | 76 +++++++++++++++++++ ...completionListInstanceProtectedMembers3.ts | 46 +++++++++++ ...completionListInstanceProtectedMembers4.ts | 34 +++++++++ .../completionListProtectedMembers.ts | 44 +++++++++++ .../completionListStaticProtectedMembers.ts | 59 ++++++++++++++ .../completionListStaticProtectedMembers2.ts | 70 +++++++++++++++++ .../completionListStaticProtectedMembers3.ts | 45 +++++++++++ .../completionListStaticProtectedMembers4.ts | 49 ++++++++++++ .../fourslash/completionListSuperMembers.ts | 2 +- 13 files changed, 512 insertions(+), 14 deletions(-) create mode 100644 tests/cases/fourslash/completionListInstanceProtectedMembers.ts create mode 100644 tests/cases/fourslash/completionListInstanceProtectedMembers2.ts create mode 100644 tests/cases/fourslash/completionListInstanceProtectedMembers3.ts create mode 100644 tests/cases/fourslash/completionListInstanceProtectedMembers4.ts create mode 100644 tests/cases/fourslash/completionListProtectedMembers.ts create mode 100644 tests/cases/fourslash/completionListStaticProtectedMembers.ts create mode 100644 tests/cases/fourslash/completionListStaticProtectedMembers2.ts create mode 100644 tests/cases/fourslash/completionListStaticProtectedMembers3.ts create mode 100644 tests/cases/fourslash/completionListStaticProtectedMembers4.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index cf35c1c02f5..99b387dd18c 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -92,7 +92,8 @@ module ts { getContextualType: getContextualType, getFullyQualifiedName: getFullyQualifiedName, getResolvedSignature: getResolvedSignature, - getEnumMemberValue: getEnumMemberValue + getEnumMemberValue: getEnumMemberValue, + isValidPropertyAccess: isValidPropertyAccess }; var undefinedSymbol = createSymbol(SymbolFlags.Property | SymbolFlags.Transient, "undefined"); @@ -4239,6 +4240,25 @@ module ts { return anyType; } + function isValidPropertyAccess(node: PropertyAccess, propertyName: string): boolean { + var type = checkExpression(node.left); + if (type !== unknownType && type !== anyType) { + var apparentType = getApparentType(getWidenedType(type)); + var prop = getPropertyOfApparentType(apparentType, propertyName); + if (prop && prop.parent && prop.parent.flags & SymbolFlags.Class) { + if (node.left.kind === SyntaxKind.SuperKeyword && getDeclarationKindFromSymbol(prop) !== SyntaxKind.Method) { + return false; + } + else { + var diagnosticsCount = diagnostics.length; + checkClassPropertyAccess(node, type, prop); + return diagnostics.length === diagnosticsCount + } + } + } + return true; + } + function checkIndexedAccess(node: IndexedAccess): Type { var objectType = checkExpression(node.object); var indexType = checkExpression(node.index); diff --git a/src/compiler/types.ts b/src/compiler/types.ts index dcc42bf3358..b564dba560b 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -655,6 +655,8 @@ module ts { // Returns the constant value of this enum member, or 'undefined' if the enum member has a // computed value. getEnumMemberValue(node: EnumMember): number; + + isValidPropertyAccess(node: PropertyAccess, propertyName: string): boolean; } export interface TextWriter { diff --git a/src/services/services.ts b/src/services/services.ts index 7d11d9ab32d..06a1dd49e27 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -2038,15 +2038,6 @@ module ts { return (SyntaxKind.FirstPunctuation <= kind && kind <= SyntaxKind.LastPunctuation); } - function isVisibleWithinClassDeclaration(symbol: Symbol, containingClass: Declaration): boolean { - var declaration = symbol.declarations && symbol.declarations[0]; - if (declaration && (declaration.flags & NodeFlags.Private)) { - var declarationClass = getAncestor(declaration, SyntaxKind.ClassDeclaration); - return containingClass === declarationClass; - } - return true; - } - function filterContextualMembersList(contextualMemberSymbols: Symbol[], existingMembers: Declaration[]): Symbol[] { if (!existingMembers || existingMembers.length === 0) { return contextualMemberSymbols; @@ -2150,7 +2141,6 @@ module ts { // Right of dot member completion list if (isRightOfDot) { var symbols: Symbol[] = []; - var containingClass = getAncestor(mappedNode, SyntaxKind.ClassDeclaration); isMemberCompletion = true; if (mappedNode.kind === SyntaxKind.Identifier || mappedNode.kind === SyntaxKind.QualifiedName || mappedNode.kind === SyntaxKind.PropertyAccess) { @@ -2158,7 +2148,7 @@ module ts { if (symbol && symbol.flags & SymbolFlags.HasExports) { // Extract module or enum members forEachValue(symbol.exports, symbol => { - if (isVisibleWithinClassDeclaration(symbol, containingClass)) { + if (typeInfoResolver.isValidPropertyAccess((mappedNode.parent), symbol.name)) { symbols.push(symbol); } }); @@ -2170,7 +2160,7 @@ module ts { if (apparentType) { // Filter private properties forEach(apparentType.getApparentProperties(), symbol => { - if (isVisibleWithinClassDeclaration(symbol, containingClass)) { + if (typeInfoResolver.isValidPropertyAccess((mappedNode.parent), symbol.name)) { symbols.push(symbol); } }); diff --git a/tests/cases/fourslash/completionListInstanceProtectedMembers.ts b/tests/cases/fourslash/completionListInstanceProtectedMembers.ts new file mode 100644 index 00000000000..de09f059680 --- /dev/null +++ b/tests/cases/fourslash/completionListInstanceProtectedMembers.ts @@ -0,0 +1,63 @@ +/// + +////class Base { +//// private privateMethod() { } +//// private privateProperty; +//// +//// protected protectedMethod() { } +//// protected protectedProperty; +//// +//// public publicMethod() { } +//// public publicProperty; +//// +//// protected protectedOverriddenMethod() { } +//// protected protectedOverriddenProperty; +//// +//// test() { +//// this./*1*/; +//// +//// var b: Base; +//// var c: C1; +//// +//// b./*2*/; +//// c./*3*/; +//// } +////} +//// +////class C1 extends Base { +//// protected protectedOverriddenMethod() { } +//// protected protectedOverriddenProperty; +////} + + +// Same class, everything is visible +goTo.marker("1"); +verify.memberListContains('privateMethod'); +verify.memberListContains('privateProperty'); +verify.memberListContains('protectedMethod'); +verify.memberListContains('protectedProperty'); +verify.memberListContains('publicMethod'); +verify.memberListContains('publicProperty'); +verify.memberListContains('protectedOverriddenMethod'); +verify.memberListContains('protectedOverriddenProperty'); + +goTo.marker("2"); +verify.memberListContains('privateMethod'); +verify.memberListContains('privateProperty'); +verify.memberListContains('protectedMethod'); +verify.memberListContains('protectedProperty'); +verify.memberListContains('publicMethod'); +verify.memberListContains('publicProperty'); +verify.memberListContains('protectedOverriddenMethod'); +verify.memberListContains('protectedOverriddenProperty'); + +// Can not access protected properties overridden in subclass +goTo.marker("3"); +verify.memberListContains('privateMethod'); +verify.memberListContains('privateProperty'); +verify.memberListContains('protectedMethod'); +verify.memberListContains('protectedProperty'); +verify.memberListContains('publicMethod'); +verify.memberListContains('publicProperty'); +verify.not.memberListContains('protectedOverriddenMethod'); +verify.not.memberListContains('protectedOverriddenProperty'); \ No newline at end of file diff --git a/tests/cases/fourslash/completionListInstanceProtectedMembers2.ts b/tests/cases/fourslash/completionListInstanceProtectedMembers2.ts new file mode 100644 index 00000000000..72b6f3a1f7b --- /dev/null +++ b/tests/cases/fourslash/completionListInstanceProtectedMembers2.ts @@ -0,0 +1,76 @@ +/// + +////class Base { +//// private privateMethod() { } +//// private privateProperty; +//// +//// protected protectedMethod() { } +//// protected protectedProperty; +//// +//// public publicMethod() { } +//// public publicProperty; +//// +//// protected protectedOverriddenMethod() { } +//// protected protectedOverriddenProperty; +////} +//// +////class C1 extends Base { +//// protected protectedOverriddenMethod() { } +//// protected protectedOverriddenProperty; +//// +//// test() { +//// this./*1*/; +//// super./*2*/; +//// +//// var b: Base; +//// var c: C1; +//// +//// b./*3*/; +//// c./*4*/; +//// } +////} + + +// Same class, everything is visible +goTo.marker("1"); +verify.not.memberListContains('privateMethod'); +verify.not.memberListContains('privateProperty'); +verify.memberListContains('protectedMethod'); +verify.memberListContains('protectedProperty'); +verify.memberListContains('publicMethod'); +verify.memberListContains('publicProperty'); +verify.memberListContains('protectedOverriddenMethod'); +verify.memberListContains('protectedOverriddenProperty'); + +// Can not access properties on super +goTo.marker("2"); +verify.not.memberListContains('privateMethod'); +verify.not.memberListContains('privateProperty'); +verify.memberListContains('protectedMethod'); +verify.not.memberListContains('protectedProperty'); +verify.memberListContains('publicMethod'); +verify.not.memberListContains('publicProperty'); +verify.memberListContains('protectedOverriddenMethod'); +verify.not.memberListContains('protectedOverriddenProperty'); + +// Can not access protected properties through base class +goTo.marker("3"); +verify.not.memberListContains('privateMethod'); +verify.not.memberListContains('privateProperty'); +verify.not.memberListContains('protectedMethod'); +verify.not.memberListContains('protectedProperty'); +verify.memberListContains('publicMethod'); +verify.memberListContains('publicProperty'); +verify.not.memberListContains('protectedOverriddenMethod'); +verify.not.memberListContains('protectedOverriddenProperty'); + +// Same class, everything is visible +goTo.marker("4"); +verify.not.memberListContains('privateMethod'); +verify.not.memberListContains('privateProperty'); +verify.memberListContains('protectedMethod'); +verify.memberListContains('protectedProperty'); +verify.memberListContains('publicMethod'); +verify.memberListContains('publicProperty'); +verify.memberListContains('protectedOverriddenMethod'); +verify.memberListContains('protectedOverriddenProperty'); diff --git a/tests/cases/fourslash/completionListInstanceProtectedMembers3.ts b/tests/cases/fourslash/completionListInstanceProtectedMembers3.ts new file mode 100644 index 00000000000..2b3bf2ac2d9 --- /dev/null +++ b/tests/cases/fourslash/completionListInstanceProtectedMembers3.ts @@ -0,0 +1,46 @@ +/// + +////class Base { +//// private privateMethod() { } +//// private privateProperty; +//// +//// protected protectedMethod() { } +//// protected protectedProperty; +//// +//// public publicMethod() { } +//// public publicProperty; +//// +//// protected protectedOverriddenMethod() { } +//// protected protectedOverriddenProperty; +////} +//// +////class C1 extends Base { +//// protected protectedOverriddenMethod() { } +//// protected protectedOverriddenProperty; +////} +//// +//// var b: Base; +//// var c: C1; +//// b./*1*/; +//// c./*2*/; + +// Only public properties are visible outside the class +goTo.marker("1"); +verify.not.memberListContains('privateMethod'); +verify.not.memberListContains('privateProperty'); +verify.not.memberListContains('protectedMethod'); +verify.not.memberListContains('protectedProperty'); +verify.memberListContains('publicMethod'); +verify.memberListContains('publicProperty'); +verify.not.memberListContains('protectedOverriddenMethod'); +verify.not.memberListContains('protectedOverriddenProperty'); + +goTo.marker("2"); +verify.not.memberListContains('privateMethod'); +verify.not.memberListContains('privateProperty'); +verify.not.memberListContains('protectedMethod'); +verify.not.memberListContains('protectedProperty'); +verify.memberListContains('publicMethod'); +verify.memberListContains('publicProperty'); +verify.not.memberListContains('protectedOverriddenMethod'); +verify.not.memberListContains('protectedOverriddenProperty'); diff --git a/tests/cases/fourslash/completionListInstanceProtectedMembers4.ts b/tests/cases/fourslash/completionListInstanceProtectedMembers4.ts new file mode 100644 index 00000000000..27f9bb5a1cf --- /dev/null +++ b/tests/cases/fourslash/completionListInstanceProtectedMembers4.ts @@ -0,0 +1,34 @@ +/// + +////class Base { +//// private privateMethod() { } +//// private privateProperty; +//// +//// protected protectedMethod() { } +//// protected protectedProperty; +//// +//// public publicMethod() { } +//// public publicProperty; +//// +//// protected protectedOverriddenMethod() { } +//// protected protectedOverriddenProperty; +////} +//// +////class C1 extends Base { +//// public protectedOverriddenMethod() { } +//// public protectedOverriddenProperty; +////} +//// +//// var c: C1; +//// c./*1*/ + + +goTo.marker("1"); +verify.not.memberListContains('privateMethod'); +verify.not.memberListContains('privateProperty'); +verify.not.memberListContains('protectedMethod'); +verify.not.memberListContains('protectedProperty'); +verify.memberListContains('publicMethod'); +verify.memberListContains('publicProperty'); +verify.memberListContains('protectedOverriddenMethod'); +verify.memberListContains('protectedOverriddenProperty'); diff --git a/tests/cases/fourslash/completionListProtectedMembers.ts b/tests/cases/fourslash/completionListProtectedMembers.ts new file mode 100644 index 00000000000..4715a9fb714 --- /dev/null +++ b/tests/cases/fourslash/completionListProtectedMembers.ts @@ -0,0 +1,44 @@ +/// + +////class Base { +//// protected y; +//// constructor(protected x) {} +//// method() { this./*1*/; } +////} +////class D1 extends Base { +//// protected z; +//// method1() { this./*2*/; } +////} +////class D2 extends Base { +//// method2() { this./*3*/; } +////} +////class D3 extends D1 { +//// method2() { this./*4*/; } +////} +////var b: Base; +////f./*5*/ + +goTo.marker("1"); +verify.memberListContains("y"); +verify.memberListContains("x"); +verify.not.memberListContains("z"); + +goTo.marker("2"); +verify.memberListContains("y"); +verify.memberListContains("x"); +verify.memberListContains("z"); + +goTo.marker("3"); +verify.memberListContains("y"); +verify.memberListContains("x"); +verify.not.memberListContains("z"); + +goTo.marker("4"); +verify.memberListContains("y"); +verify.memberListContains("x"); +verify.memberListContains("z"); + +goTo.marker("5"); +verify.not.memberListContains("x"); +verify.not.memberListContains("y"); +verify.not.memberListContains("z"); diff --git a/tests/cases/fourslash/completionListStaticProtectedMembers.ts b/tests/cases/fourslash/completionListStaticProtectedMembers.ts new file mode 100644 index 00000000000..af56f28ef06 --- /dev/null +++ b/tests/cases/fourslash/completionListStaticProtectedMembers.ts @@ -0,0 +1,59 @@ +/// + +////class Base { +//// private static privateMethod() { } +//// private static privateProperty; +//// +//// protected static protectedMethod() { } +//// protected static protectedProperty; +//// +//// public static publicMethod() { } +//// public static publicProperty; +//// +//// protected static protectedOverriddenMethod() { } +//// protected static protectedOverriddenProperty; +//// +//// static test() { +//// Base./*1*/; +//// this./*2*/; +//// C1./*3*/; +//// } +////} +//// +////class C1 extends Base { +//// protected static protectedOverriddenMethod() { } +//// protected static protectedOverriddenProperty; +////} + + +// Same class, everything is visible +goTo.marker("1"); +verify.memberListContains('privateMethod'); +verify.memberListContains('privateProperty'); +verify.memberListContains('protectedMethod'); +verify.memberListContains('protectedProperty'); +verify.memberListContains('publicMethod'); +verify.memberListContains('publicProperty'); +verify.memberListContains('protectedOverriddenMethod'); +verify.memberListContains('protectedOverriddenProperty'); + +goTo.marker("2"); +verify.memberListContains('privateMethod'); +verify.memberListContains('privateProperty'); +verify.memberListContains('protectedMethod'); +verify.memberListContains('protectedProperty'); +verify.memberListContains('publicMethod'); +verify.memberListContains('publicProperty'); +verify.memberListContains('protectedOverriddenMethod'); +verify.memberListContains('protectedOverriddenProperty'); + +// Can not access protected properties overridden in subclass +goTo.marker("3"); +verify.memberListContains('privateMethod'); +verify.memberListContains('privateProperty'); +verify.memberListContains('protectedMethod'); +verify.memberListContains('protectedProperty'); +verify.memberListContains('publicMethod'); +verify.memberListContains('publicProperty'); +verify.not.memberListContains('protectedOverriddenMethod'); +verify.not.memberListContains('protectedOverriddenProperty'); \ No newline at end of file diff --git a/tests/cases/fourslash/completionListStaticProtectedMembers2.ts b/tests/cases/fourslash/completionListStaticProtectedMembers2.ts new file mode 100644 index 00000000000..9964a91d21b --- /dev/null +++ b/tests/cases/fourslash/completionListStaticProtectedMembers2.ts @@ -0,0 +1,70 @@ +/// + +////class Base { +//// private static privateMethod() { } +//// private static privateProperty; +//// +//// protected static protectedMethod() { } +//// protected static protectedProperty; +//// +//// public static publicMethod() { } +//// public static publicProperty; +//// +//// protected static protectedOverriddenMethod() { } +//// protected static protectedOverriddenProperty; +////} +//// +////class C2 extends Base { +//// protected static protectedOverriddenMethod() { } +//// protected static protectedOverriddenProperty; +//// +//// static test() { +//// Base./*1*/; +//// C2./*2*/; +//// this./*3*/; +//// super./*4*/; +//// } +////} + + +// Same class, everything is visible +goTo.marker("1"); +verify.not.memberListContains('privateMethod'); +verify.not.memberListContains('privateProperty'); +verify.memberListContains('protectedMethod'); +verify.memberListContains('protectedProperty'); +verify.memberListContains('publicMethod'); +verify.memberListContains('publicProperty'); +verify.memberListContains('protectedOverriddenMethod'); +verify.memberListContains('protectedOverriddenProperty'); + +goTo.marker("2"); +verify.not.memberListContains('privateMethod'); +verify.not.memberListContains('privateProperty'); +verify.memberListContains('protectedMethod'); +verify.memberListContains('protectedProperty'); +verify.memberListContains('publicMethod'); +verify.memberListContains('publicProperty'); +verify.memberListContains('protectedOverriddenMethod'); +verify.memberListContains('protectedOverriddenProperty'); + +goTo.marker("3"); +verify.not.memberListContains('privateMethod'); +verify.not.memberListContains('privateProperty'); +verify.memberListContains('protectedMethod'); +verify.memberListContains('protectedProperty'); +verify.memberListContains('publicMethod'); +verify.memberListContains('publicProperty'); +verify.memberListContains('protectedOverriddenMethod'); +verify.memberListContains('protectedOverriddenProperty'); + +// only public and protected methods of the base class are accessible through super +goTo.marker("4"); +verify.not.memberListContains('privateMethod'); +verify.not.memberListContains('privateProperty'); +verify.memberListContains('protectedMethod'); +verify.not.memberListContains('protectedProperty'); +verify.memberListContains('publicMethod'); +verify.not.memberListContains('publicProperty'); +verify.memberListContains('protectedOverriddenMethod'); +verify.not.memberListContains('protectedOverriddenProperty'); \ No newline at end of file diff --git a/tests/cases/fourslash/completionListStaticProtectedMembers3.ts b/tests/cases/fourslash/completionListStaticProtectedMembers3.ts new file mode 100644 index 00000000000..f80186c93c0 --- /dev/null +++ b/tests/cases/fourslash/completionListStaticProtectedMembers3.ts @@ -0,0 +1,45 @@ +/// + +////class Base { +//// private static privateMethod() { } +//// private static privateProperty; +//// +//// protected static protectedMethod() { } +//// protected static protectedProperty; +//// +//// public static publicMethod() { } +//// public static publicProperty; +//// +//// protected static protectedOverriddenMethod() { } +//// protected static protectedOverriddenProperty; +////} +//// +////class C3 extends Base { +//// protected static protectedOverriddenMethod() { } +//// protected static protectedOverriddenProperty; +////} +//// +////Base./*1*/; +////C3./*2*/; + + +// Only public properties are visible outside the class +goTo.marker("1"); +verify.not.memberListContains('privateMethod'); +verify.not.memberListContains('privateProperty'); +verify.not.memberListContains('protectedMethod'); +verify.not.memberListContains('protectedProperty'); +verify.memberListContains('publicMethod'); +verify.memberListContains('publicProperty'); +verify.not.memberListContains('protectedOverriddenMethod'); +verify.not.memberListContains('protectedOverriddenProperty'); + +goTo.marker("2"); +verify.not.memberListContains('privateMethod'); +verify.not.memberListContains('privateProperty'); +verify.not.memberListContains('protectedMethod'); +verify.not.memberListContains('protectedProperty'); +verify.memberListContains('publicMethod'); +verify.memberListContains('publicProperty'); +verify.not.memberListContains('protectedOverriddenMethod'); +verify.not.memberListContains('protectedOverriddenProperty'); \ No newline at end of file diff --git a/tests/cases/fourslash/completionListStaticProtectedMembers4.ts b/tests/cases/fourslash/completionListStaticProtectedMembers4.ts new file mode 100644 index 00000000000..72cc081f2fc --- /dev/null +++ b/tests/cases/fourslash/completionListStaticProtectedMembers4.ts @@ -0,0 +1,49 @@ +/// + +////class Base { +//// private static privateMethod() { } +//// private static privateProperty; +//// +//// protected static protectedMethod() { } +//// protected static protectedProperty; +//// +//// public static publicMethod() { } +//// public static publicProperty; +//// +//// protected static protectedOverriddenMethod() { } +//// protected static protectedOverriddenProperty; +////} +//// +/////// Make the protected members public +////class C4 extends Base { +//// public static protectedOverriddenMethod() { } +//// public static protectedOverriddenProperty; +////} +////class Derived extends C4 { +//// test() { +//// Derived./*1*/ +//// } +////} +//// Derived./*2*/ + +// Sub class, everything but private is visible +goTo.marker("1"); +verify.not.memberListContains('privateMethod'); +verify.not.memberListContains('privateProperty'); +verify.memberListContains('protectedMethod'); +verify.memberListContains('protectedProperty'); +verify.memberListContains('publicMethod'); +verify.memberListContains('publicProperty'); +verify.memberListContains('protectedOverriddenMethod'); +verify.memberListContains('protectedOverriddenProperty'); + +// Can see protected methods elevated to public +goTo.marker("2"); +verify.not.memberListContains('privateMethod'); +verify.not.memberListContains('privateProperty'); +verify.not.memberListContains('protectedMethod'); +verify.not.memberListContains('protectedProperty'); +verify.memberListContains('publicMethod'); +verify.memberListContains('publicProperty'); +verify.memberListContains('protectedOverriddenMethod'); +verify.memberListContains('protectedOverriddenProperty'); diff --git a/tests/cases/fourslash/completionListSuperMembers.ts b/tests/cases/fourslash/completionListSuperMembers.ts index c203a8774fb..6c7ddd5c7b3 100644 --- a/tests/cases/fourslash/completionListSuperMembers.ts +++ b/tests/cases/fourslash/completionListSuperMembers.ts @@ -25,7 +25,7 @@ goTo.marker(); -verify.memberListContains("publicProperty"); +verify.not.memberListContains("publicProperty"); verify.memberListContains("publicInstanceMethod"); // No statics verify.not.memberListContains("publicStaticProperty"); From 4227e58b82a9666cb8afbe681ea39be88115534d Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Fri, 26 Sep 2014 14:37:42 -0700 Subject: [PATCH 029/110] Show marker names in fourslash test failures --- src/harness/fourslash.ts | 125 ++++++++++++++++++++------------------- 1 file changed, 65 insertions(+), 60 deletions(-) diff --git a/src/harness/fourslash.ts b/src/harness/fourslash.ts index 1e499fd79be..e3eff6d227d 100644 --- a/src/harness/fourslash.ts +++ b/src/harness/fourslash.ts @@ -412,6 +412,11 @@ module FourSlash { } } + private raiseError(message: string) { + message = "Marker: " + currentTestState.lastKnownMarker + "\n" + message; + throw new Error(message); + } + private getDiagnostics(fileName: string): ts.Diagnostic[] { var syntacticErrors = this.languageService.getSyntacticDiagnostics(fileName); var semanticErrors = this.languageService.getSemanticDiagnostics(fileName); @@ -500,7 +505,7 @@ module FourSlash { this.printErrorLog(false, errors); var errorMsg = "Actual number of errors (" + actual + ") does not match expected number (" + expected + ")"; Harness.IO.log(errorMsg); - throw new Error(errorMsg); + this.raiseError(errorMsg); } } @@ -514,7 +519,7 @@ module FourSlash { var evaluation = new Function(emit.outputFiles[0].text + ';\r\nreturn (' + expr + ');')(); if (evaluation !== value) { - throw new Error('Expected evaluation of expression "' + expr + '" to equal "' + value + '", but got "' + evaluation + '"'); + this.raiseError('Expected evaluation of expression "' + expr + '" to equal "' + value + '", but got "' + evaluation + '"'); } } @@ -531,7 +536,7 @@ module FourSlash { this.assertItemInCompletionList(members.entries, symbol, type, docComment, fullSymbolName, kind); } else { - throw new Error("Expected a member list, but none was provided"); + this.raiseError("Expected a member list, but none was provided"); } } @@ -554,11 +559,11 @@ module FourSlash { var match = members.entries.length === expectedCount; if ((!match && !negative) || (match && negative)) { - throw new Error("Member list count was " + members.entries.length + ". Expected " + expectedCount); + this.raiseError("Member list count was " + members.entries.length + ". Expected " + expectedCount); } } else if (expectedCount) { - throw new Error("Member list count was 0. Expected " + expectedCount); + this.raiseError("Member list count was 0. Expected " + expectedCount); } } @@ -568,7 +573,7 @@ module FourSlash { var members = this.getMemberListAtCaret(); if (members.entries.filter(e => e.name === symbol).length !== 0) { - throw new Error('Member list did contain ' + symbol); + this.raiseError('Member list did contain ' + symbol); } } @@ -579,7 +584,7 @@ module FourSlash { var itemsCount = completions.entries.length; if (itemsCount <= count) { - throw new Error('Expected completion list items count to be greater than ' + count + ', but is actually ' + itemsCount); + this.raiseError('Expected completion list items count to be greater than ' + count + ', but is actually ' + itemsCount); } } @@ -592,7 +597,7 @@ module FourSlash { var members = this.getMemberListAtCaret(); if ((!members || members.entries.length === 0) && negative) { - throw new Error("Member list is empty at Caret"); + this.raiseError("Member list is empty at Caret"); } else if ((members && members.entries.length !== 0) && !negative) { var errorMsg = "\n" + "Member List contains: [" + members.entries[0].name; @@ -602,7 +607,7 @@ module FourSlash { errorMsg += "]\n"; Harness.IO.log(errorMsg); - throw new Error("Member list is not empty at Caret"); + this.raiseError("Member list is not empty at Caret"); } } @@ -612,7 +617,7 @@ module FourSlash { var completions = this.getCompletionListAtCaret(); if ((!completions || completions.entries.length === 0) && negative) { - throw new Error("Completion list is empty at Caret"); + this.raiseError("Completion list is empty at Caret"); } else if ((completions && completions.entries.length !== 0) && !negative) { var errorMsg = "\n" + "Completion List contains: [" + completions.entries[0].name; @@ -622,7 +627,7 @@ module FourSlash { errorMsg += "]\n"; Harness.IO.log(errorMsg); - throw new Error("Completion list is not empty at Caret"); + this.raiseError("Completion list is not empty at Caret"); } } @@ -638,7 +643,7 @@ module FourSlash { var completions = this.getCompletionListAtCaret(); if (completions && completions.entries && completions.entries.filter(e => e.name === symbol).length !== 0) { - throw new Error('Completion list did contain ' + symbol); + this.raiseError('Completion list did contain ' + symbol); } } @@ -668,21 +673,21 @@ module FourSlash { var references = this.getReferencesAtCaret(); if (!references || references.length === 0) { - throw new Error('verifyReferencesAtPositionListContains failed - found 0 references, expected at least one.'); + this.raiseError('verifyReferencesAtPositionListContains failed - found 0 references, expected at least one.'); } for (var i = 0; i < references.length; i++) { var reference = references[i]; if (reference && reference.fileName === fileName && reference.textSpan.start() === start && reference.textSpan.end() === end) { if (typeof isWriteAccess !== "undefined" && reference.isWriteAccess !== isWriteAccess) { - throw new Error('verifyReferencesAtPositionListContains failed - item isWriteAccess value doe not match, actual: ' + reference.isWriteAccess + ', expected: ' + isWriteAccess + '.'); + this.raiseError('verifyReferencesAtPositionListContains failed - item isWriteAccess value doe not match, actual: ' + reference.isWriteAccess + ', expected: ' + isWriteAccess + '.'); } return; } } var missingItem = { fileName: fileName, start: start, end: end, isWriteAccess: isWriteAccess }; - throw new Error('verifyReferencesAtPositionListContains failed - could not find the item: ' + JSON.stringify(missingItem) + ' in the returned list: (' + JSON.stringify(references) + ')'); + this.raiseError('verifyReferencesAtPositionListContains failed - could not find the item: ' + JSON.stringify(missingItem) + ' in the returned list: (' + JSON.stringify(references) + ')'); } public verifyReferencesCountIs(count: number, localFilesOnly: boolean = true) { @@ -706,7 +711,7 @@ module FourSlash { if (referencesCount !== count) { var condition = localFilesOnly ? "excluding libs" : "including libs"; - throw new Error("Expected references count (" + condition + ") to be " + count + ", but is actually " + referencesCount); + this.raiseError("Expected references count (" + condition + ") to be " + count + ", but is actually " + referencesCount); } } @@ -729,7 +734,7 @@ module FourSlash { if (implementorsCount !== count) { var condition = localFilesOnly ? "excluding libs" : "including libs"; - throw new Error("Expected implementors count (" + condition + ") to be " + count + ", but is actually " + implementors.length); + this.raiseError("Expected implementors count (" + condition + ") to be " + count + ", but is actually " + implementors.length); } } @@ -806,12 +811,12 @@ module FourSlash { var actualQuickInfo = this.languageService.getTypeAtPosition(this.activeFile.fileName, this.currentCaretPosition); if (negative) { if (actualQuickInfo) { - throw new Error('verifyQuickInfoExists failed. Expected quick info NOT to exist'); + this.raiseError('verifyQuickInfoExists failed. Expected quick info NOT to exist'); } } else { if (!actualQuickInfo) { - throw new Error('verifyQuickInfoExists failed. Expected quick info to exist'); + this.raiseError('verifyQuickInfoExists failed. Expected quick info to exist'); } } } @@ -892,25 +897,25 @@ module FourSlash { var actual = this.languageService.getSignatureHelpItems(this.activeFile.fileName, this.currentCaretPosition); if (shouldBePresent) { if (!actual) { - throw new Error("Expected signature help to be present, but it wasn't"); + this.raiseError("Expected signature help to be present, but it wasn't"); } } else { if (actual) { - throw new Error("Expected no signature help, but got '" + JSON.stringify(actual) + "'"); + this.raiseError("Expected no signature help, but got '" + JSON.stringify(actual) + "'"); } } } private validate(name: string, expected: string, actual: string) { if (expected && expected !== actual) { - throw new Error("Expected " + name + " '" + expected + "'. Got '" + actual + "' instead."); + this.raiseError("Expected " + name + " '" + expected + "'. Got '" + actual + "' instead."); } } public verifyRenameInfoSucceeded(displayName?: string, fullDisplayName?: string, kind?: string, kindModifiers?: string) { var renameInfo = this.languageService.getRenameInfo(this.activeFile.fileName, this.currentCaretPosition); if (!renameInfo.canRename) { - throw new Error("Rename did not succeed"); + this.raiseError("Rename did not succeed"); } this.validate("displayName", displayName, renameInfo.displayName); @@ -919,13 +924,13 @@ module FourSlash { this.validate("kindModifiers", kindModifiers, renameInfo.kindModifiers); if (this.getRanges().length !== 1) { - throw new Error("Expected a single range to be selected in the test file."); + this.raiseError("Expected a single range to be selected in the test file."); } var expectedRange = this.getRanges()[0]; if (renameInfo.triggerSpan.start() !== expectedRange.start || renameInfo.triggerSpan.end() !== expectedRange.end) { - throw new Error("Expected triggerSpan [" + expectedRange.start + "," + expectedRange.end + "). Got [" + + this.raiseError("Expected triggerSpan [" + expectedRange.start + "," + expectedRange.end + "). Got [" + renameInfo.triggerSpan.start() + "," + renameInfo.triggerSpan.end() + ") instead."); } } @@ -933,7 +938,7 @@ module FourSlash { public verifyRenameInfoFailed(message?: string) { var renameInfo = this.languageService.getRenameInfo(this.activeFile.fileName, this.currentCaretPosition); if (renameInfo.canRename) { - throw new Error("Rename was expected to fail"); + this.raiseError("Rename was expected to fail"); } this.validate("error", message, renameInfo.localizedErrorMessage); @@ -1010,7 +1015,7 @@ module FourSlash { // If there is not emiThisFile flag specified in the test file, throw an error if (emitFiles.length === 0) { - throw new Error("No emitThisFile is specified in the test file"); + this.raiseError("No emitThisFile is specified in the test file"); } Harness.Baseline.runBaseline( @@ -1310,7 +1315,7 @@ module FourSlash { //var fullSyntaxErrs = JSON.stringify(refSyntaxTree.diagnostics()); //if (incrSyntaxErrs !== fullSyntaxErrs) { - // throw new Error('Mismatched incremental/full syntactic errors for file ' + this.activeFile.fileName + '.\n=== Incremental errors ===\n' + incrSyntaxErrs + '\n=== Full Errors ===\n' + fullSyntaxErrs); + // this.raiseError('Mismatched incremental/full syntactic errors for file ' + this.activeFile.fileName + '.\n=== Incremental errors ===\n' + incrSyntaxErrs + '\n=== Full Errors ===\n' + fullSyntaxErrs); //} // if (this.editValidation !== IncrementalEditValidation.SyntacticOnly) { @@ -1327,7 +1332,7 @@ module FourSlash { // var incrSemanticErrs = JSON.stringify(this.languageService.getSemanticDiagnostics(this.testData.files[i].fileName)); // if (incrSemanticErrs !== refSemanticErrs) { - // throw new Error('Mismatched incremental/full semantic errors for file ' + this.testData.files[i].fileName + '\n=== Incremental errors ===\n' + incrSemanticErrs + '\n=== Full Errors ===\n' + refSemanticErrs); + // this.raiseError('Mismatched incremental/full semantic errors for file ' + this.testData.files[i].fileName + '\n=== Incremental errors ===\n' + incrSemanticErrs + '\n=== Full Errors ===\n' + refSemanticErrs); // } // } // } @@ -1366,7 +1371,7 @@ module FourSlash { var newContent = snapshot.getText(0, snapshot.getLength()); if (newContent.replace(/\s/g, '') !== oldContent.replace(/\s/g, '')) { - throw new Error('Formatting operation destroyed non-whitespace content'); + this.raiseError('Formatting operation destroyed non-whitespace content'); } } return runningOffset; @@ -1423,11 +1428,11 @@ module FourSlash { var definitions = this.languageService.getDefinitionAtPosition(this.activeFile.fileName, this.currentCaretPosition); if (!definitions || !definitions.length) { - throw new Error('goToDefinition failed - expected to at least one definition location but got 0'); + this.raiseError('goToDefinition failed - expected to at least one definition location but got 0'); } if (definitionIndex >= definitions.length) { - throw new Error('goToDefinition failed - definitionIndex value (' + definitionIndex + ') exceeds definition list size (' + definitions.length + ')'); + this.raiseError('goToDefinition failed - definitionIndex value (' + definitionIndex + ') exceeds definition list size (' + definitions.length + ')'); } var definition = definitions[definitionIndex]; @@ -1443,10 +1448,10 @@ module FourSlash { var foundDefinitions = definitions && definitions.length; if (foundDefinitions && negative) { - throw new Error('goToDefinition - expected to 0 definition locations but got ' + definitions.length); + this.raiseError('goToDefinition - expected to 0 definition locations but got ' + definitions.length); } else if (!foundDefinitions && !negative) { - throw new Error('goToDefinition - expected to at least one definition location but got 0'); + this.raiseError('goToDefinition - expected to at least one definition location but got 0'); } } @@ -1481,7 +1486,7 @@ module FourSlash { var actual = this.getIndentation(this.activeFile.fileName, this.currentCaretPosition); if (actual != numberOfSpaces) { - throw new Error('verifyIndentationAtCurrentPosition failed - expected: ' + numberOfSpaces + ', actual: ' + actual); + this.raiseError('verifyIndentationAtCurrentPosition failed - expected: ' + numberOfSpaces + ', actual: ' + actual); } } @@ -1490,7 +1495,7 @@ module FourSlash { var actual = this.getIndentation(fileName, position); if (actual !== numberOfSpaces) { - throw new Error('verifyIndentationAtPosition failed - expected: ' + numberOfSpaces + ', actual: ' + actual); + this.raiseError('verifyIndentationAtPosition failed - expected: ' + numberOfSpaces + ', actual: ' + actual); } } @@ -1533,14 +1538,14 @@ module FourSlash { var span = this.languageService.getNameOrDottedNameSpan(this.activeFile.fileName, this.currentCaretPosition, this.currentCaretPosition); if (span === null) { - throw new Error('verifyCurrentNameOrDottedNameSpanText\n' + + this.raiseError('verifyCurrentNameOrDottedNameSpanText\n' + '\tExpected: "' + text + '"\n' + '\t Actual: null'); } var actual = this.languageServiceShimHost.getScriptSnapshot(this.activeFile.fileName).getText(span.start(), span.end()); if (actual !== text) { - throw new Error('verifyCurrentNameOrDottedNameSpanText\n' + + this.raiseError('verifyCurrentNameOrDottedNameSpanText\n' + '\tExpected: "' + text + '"\n' + '\t Actual: "' + actual + '"'); } @@ -1578,7 +1583,7 @@ module FourSlash { private verifyClassifications(expected: { classificationType: string; text: string }[], actual: ts.ClassifiedSpan[]) { if (actual.length !== expected.length) { - throw new Error('verifySyntacticClassification failed - expected total classifications to be ' + expected.length + ', but was ' + actual.length); + this.raiseError('verifySyntacticClassification failed - expected total classifications to be ' + expected.length + ', but was ' + actual.length); } for (var i = 0; i < expected.length; i++) { @@ -1587,7 +1592,7 @@ module FourSlash { var expectedType: string = (ts.ClassificationTypeNames)[expectedClassification.classificationType]; if (expectedType !== actualClassification.classificationType) { - throw new Error('verifySyntacticClassification failed - expected classifications type to be ' + + this.raiseError('verifySyntacticClassification failed - expected classifications type to be ' + expectedType + ', but was ' + actualClassification.classificationType); } @@ -1595,7 +1600,7 @@ module FourSlash { var actualSpan = actualClassification.textSpan; var actualText = this.activeFile.content.substr(actualSpan.start(), actualSpan.length()); if (expectedClassification.text !== actualText) { - throw new Error('verifySyntacticClassification failed - expected classificatied text to be ' + + this.raiseError('verifySyntacticClassification failed - expected classificatied text to be ' + expectedClassification.text + ', but was ' + actualText); } @@ -1622,14 +1627,14 @@ module FourSlash { var actual = this.languageService.getOutliningSpans(this.activeFile.fileName); if (actual.length !== spans.length) { - throw new Error('verifyOutliningSpans failed - expected total spans to be ' + spans.length + ', but was ' + actual.length); + this.raiseError('verifyOutliningSpans failed - expected total spans to be ' + spans.length + ', but was ' + actual.length); } for (var i = 0; i < spans.length; i++) { var expectedSpan = spans[i]; var actualSpan = actual[i]; if (expectedSpan.start !== actualSpan.textSpan.start() || expectedSpan.end !== actualSpan.textSpan.end()) { - throw new Error('verifyOutliningSpans failed - span ' + (i + 1) + ' expected: (' + expectedSpan.start + ',' + expectedSpan.end + '), actual: (' + actualSpan.textSpan.start() + ',' + actualSpan.textSpan.end() + ')'); + this.raiseError('verifyOutliningSpans failed - span ' + (i + 1) + ' expected: (' + expectedSpan.start + ',' + expectedSpan.end + '), actual: (' + actualSpan.textSpan.start() + ',' + actualSpan.textSpan.end() + ')'); } } } @@ -1639,7 +1644,7 @@ module FourSlash { descriptors.map(d => { return { text: d, priority: 0 }; })); if (actual.length !== spans.length) { - throw new Error('verifyTodoComments failed - expected total spans to be ' + spans.length + ', but was ' + actual.length); + this.raiseError('verifyTodoComments failed - expected total spans to be ' + spans.length + ', but was ' + actual.length); } for (var i = 0; i < spans.length; i++) { @@ -1648,7 +1653,7 @@ module FourSlash { var actualCommentSpan = new TypeScript.TextSpan(actualComment.position, actualComment.message.length); if (expectedSpan.start !== actualCommentSpan.start() || expectedSpan.end !== actualCommentSpan.end()) { - throw new Error('verifyOutliningSpans failed - span ' + (i + 1) + ' expected: (' + expectedSpan.start + ',' + expectedSpan.end + '), actual: (' + actualCommentSpan.start() + ',' + actualCommentSpan.end() + ')'); + this.raiseError('verifyOutliningSpans failed - span ' + (i + 1) + ' expected: (' + expectedSpan.start + ',' + expectedSpan.end + '), actual: (' + actualCommentSpan.start() + ',' + actualCommentSpan.end() + ')'); } } } @@ -1659,7 +1664,7 @@ module FourSlash { var actual = this.languageService.getBraceMatchingAtPosition(this.activeFile.fileName, bracePosition); if (actual.length !== 2) { - throw new Error('verifyMatchingBracePosition failed - expected result to contain 2 spans, but it had ' + actual.length); + this.raiseError('verifyMatchingBracePosition failed - expected result to contain 2 spans, but it had ' + actual.length); } var actualMatchPosition = -1; @@ -1668,11 +1673,11 @@ module FourSlash { } else if (bracePosition === actual[1].start()) { actualMatchPosition = actual[0].start(); } else { - throw new Error('verifyMatchingBracePosition failed - could not find the brace position: ' + bracePosition + ' in the returned list: (' + actual[0].start() + ',' + actual[0].end() + ') and (' + actual[1].start() + ',' + actual[1].end() + ')'); + this.raiseError('verifyMatchingBracePosition failed - could not find the brace position: ' + bracePosition + ' in the returned list: (' + actual[0].start() + ',' + actual[0].end() + ') and (' + actual[1].start() + ',' + actual[1].end() + ')'); } if (actualMatchPosition !== expectedMatchPosition) { - throw new Error('verifyMatchingBracePosition failed - expected: ' + actualMatchPosition + ', actual: ' + expectedMatchPosition); + this.raiseError('verifyMatchingBracePosition failed - expected: ' + actualMatchPosition + ', actual: ' + expectedMatchPosition); } } @@ -1682,7 +1687,7 @@ module FourSlash { var actual = this.languageService.getBraceMatchingAtPosition(this.activeFile.fileName, bracePosition); if (actual.length !== 0) { - throw new Error('verifyNoMatchingBracePosition failed - expected: 0 spans, actual: ' + actual.length); + this.raiseError('verifyNoMatchingBracePosition failed - expected: 0 spans, actual: ' + actual.length); } } @@ -1769,7 +1774,7 @@ module FourSlash { } if (expected != actual) { - throw new Error('verifyNavigationItemsCount failed - found: ' + actual + ' navigation items, expected: ' + expected + '.'); + this.raiseError('verifyNavigationItemsCount failed - found: ' + actual + ' navigation items, expected: ' + expected + '.'); } } @@ -1789,7 +1794,7 @@ module FourSlash { var items = this.languageService.getNavigateToItems(searchValue); if (!items || items.length === 0) { - throw new Error('verifyNavigationItemsListContains failed - found 0 navigation items, expected at least one.'); + this.raiseError('verifyNavigationItemsListContains failed - found 0 navigation items, expected at least one.'); } for (var i = 0; i < items.length; i++) { @@ -1805,7 +1810,7 @@ module FourSlash { // if there was an explicit match kind specified, then it should be validated. if (matchKind !== undefined) { var missingItem = { name: name, kind: kind, searchValue: searchValue, matchKind: matchKind, fileName: fileName, parentName: parentName }; - throw new Error('verifyNavigationItemsListContains failed - could not find the item: ' + JSON.stringify(missingItem) + ' in the returned list: (' + JSON.stringify(items) + ')'); + this.raiseError('verifyNavigationItemsListContains failed - could not find the item: ' + JSON.stringify(missingItem) + ' in the returned list: (' + JSON.stringify(items) + ')'); } } @@ -1816,7 +1821,7 @@ module FourSlash { var actual = this.getNavigationBarItemsCount(items); if (expected != actual) { - throw new Error('verifyGetScriptLexicalStructureListCount failed - found: ' + actual + ' navigation items, expected: ' + expected + '.'); + this.raiseError('verifyGetScriptLexicalStructureListCount failed - found: ' + actual + ' navigation items, expected: ' + expected + '.'); } } @@ -1841,7 +1846,7 @@ module FourSlash { var items = this.languageService.getNavigationBarItems(this.activeFile.fileName); if (!items || items.length === 0) { - throw new Error('verifyGetScriptLexicalStructureListContains failed - found 0 navigation items, expected at least one.'); + this.raiseError('verifyGetScriptLexicalStructureListContains failed - found 0 navigation items, expected at least one.'); } if (this.navigationBarItemsContains(items, name, kind)) { @@ -1849,7 +1854,7 @@ module FourSlash { } var missingItem = { name: name, kind: kind }; - throw new Error('verifyGetScriptLexicalStructureListContains failed - could not find the item: ' + JSON.stringify(missingItem) + ' in the returned list: (' + JSON.stringify(items) + ')'); + this.raiseError('verifyGetScriptLexicalStructureListContains failed - could not find the item: ' + JSON.stringify(missingItem) + ' in the returned list: (' + JSON.stringify(items) + ')'); } private navigationBarItemsContains(items: ts.NavigationBarItem[], name: string, kind: string) { @@ -1903,21 +1908,21 @@ module FourSlash { var occurances = this.getOccurancesAtCurrentPosition(); if (!occurances || occurances.length === 0) { - throw new Error('verifyOccurancesAtPositionListContains failed - found 0 references, expected at least one.'); + this.raiseError('verifyOccurancesAtPositionListContains failed - found 0 references, expected at least one.'); } for (var i = 0; i < occurances.length; i++) { var occurance = occurances[i]; if (occurance && occurance.fileName === fileName && occurance.textSpan.start() === start && occurance.textSpan.end() === end) { if (typeof isWriteAccess !== "undefined" && occurance.isWriteAccess !== isWriteAccess) { - throw new Error('verifyOccurancesAtPositionListContains failed - item isWriteAccess value doe not match, actual: ' + occurance.isWriteAccess + ', expected: ' + isWriteAccess + '.'); + this.raiseError('verifyOccurancesAtPositionListContains failed - item isWriteAccess value doe not match, actual: ' + occurance.isWriteAccess + ', expected: ' + isWriteAccess + '.'); } return; } } var missingItem = { fileName: fileName, start: start, end: end, isWriteAccess: isWriteAccess }; - throw new Error('verifyOccurancesAtPositionListContains failed - could not find the item: ' + JSON.stringify(missingItem) + ' in the returned list: (' + JSON.stringify(occurances) + ')'); + this.raiseError('verifyOccurancesAtPositionListContains failed - could not find the item: ' + JSON.stringify(missingItem) + ' in the returned list: (' + JSON.stringify(occurances) + ')'); } public verifyOccurrencesAtPositionListCount(expectedCount: number) { @@ -1926,7 +1931,7 @@ module FourSlash { var occurances = this.getOccurancesAtCurrentPosition(); var actualCount = occurances ? occurances.length : 0; if (expectedCount !== actualCount) { - throw new Error('verifyOccurrencesAtPositionListCount failed - actual: ' + actualCount + ', expected:' + expectedCount); + this.raiseError('verifyOccurrencesAtPositionListCount failed - actual: ' + actualCount + ', expected:' + expectedCount); } } @@ -2011,7 +2016,7 @@ module FourSlash { var itemsString = items.map((item) => JSON.stringify({ name: item.name, kind: item.kind })).join(",\n"); - throw new Error("Marker: " + currentTestState.lastKnownMarker + "\n" + 'Expected "' + JSON.stringify({ name: name, type: type, docComment: docComment, fullSymbolName: fullSymbolName, kind: kind }) + '" to be in list [' + itemsString + ']'); + this.raiseError('Expected "' + JSON.stringify({ name: name, type: type, docComment: docComment, fullSymbolName: fullSymbolName, kind: kind }) + '" to be in list [' + itemsString + ']'); } private findFile(indexOrName: any) { From 16d969c9cac62486dae9abdfcf84b3013eae5d10 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Sun, 28 Sep 2014 20:36:08 -0400 Subject: [PATCH 030/110] Support getOccurrencesAtPosition for 'throw' keywords. Also revised behavior for 'return' keywords in that when the position resides on a 'return' statement, 'throw' keywords in the same function scope that are not within a try-block are also highlighted. --- src/services/services.ts | 92 ++++++++++++++++++- tests/cases/fourslash/getOccurrencesThrow.ts | 58 ++++++++++++ tests/cases/fourslash/getOccurrencesThrow2.ts | 58 ++++++++++++ tests/cases/fourslash/getOccurrencesThrow3.ts | 58 ++++++++++++ tests/cases/fourslash/getOccurrencesThrow4.ts | 58 ++++++++++++ tests/cases/fourslash/getOccurrencesThrow5.ts | 58 ++++++++++++ tests/cases/fourslash/getOccurrencesThrow6.ts | 28 ++++++ 7 files changed, 409 insertions(+), 1 deletion(-) create mode 100644 tests/cases/fourslash/getOccurrencesThrow.ts create mode 100644 tests/cases/fourslash/getOccurrencesThrow2.ts create mode 100644 tests/cases/fourslash/getOccurrencesThrow3.ts create mode 100644 tests/cases/fourslash/getOccurrencesThrow4.ts create mode 100644 tests/cases/fourslash/getOccurrencesThrow5.ts create mode 100644 tests/cases/fourslash/getOccurrencesThrow6.ts diff --git a/src/services/services.ts b/src/services/services.ts index 04e63f6dbe1..d35d64ab5f7 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -2378,6 +2378,11 @@ module ts { return getReturnOccurrences(node.parent); } break; + case SyntaxKind.ThrowKeyword: + if (hasKind(node.parent, SyntaxKind.ThrowStatement)) { + return getThrowOccurrences(node.parent); + } + break; case SyntaxKind.TryKeyword: case SyntaxKind.CatchKeyword: case SyntaxKind.FinallyKeyword: @@ -2491,12 +2496,97 @@ module ts { } var keywords: Node[] = [] - forEachReturnStatement((func).body, returnStatement => { + forEachReturnStatement(func.body, returnStatement => { pushKeywordIf(keywords, returnStatement.getFirstToken(), SyntaxKind.ReturnKeyword); }); + // Include 'throw' statements that do not occur within a try block. + forEach(aggregateOwnedThrowStatements(func.body), throwStatement => { + pushKeywordIf(keywords, throwStatement.getFirstToken(), SyntaxKind.ThrowKeyword); + }); + return map(keywords, getReferenceEntryFromNode); } + + function getThrowOccurrences(throwStatement: ThrowStatement) { + var owner = getContextualThrowStatementOwner(throwStatement); + + if (!owner) { + return undefined; + } + + var keywords: Node[] = []; + + forEach(aggregateOwnedThrowStatements(owner), throwStatement => { + pushKeywordIf(keywords, throwStatement.getFirstToken(), SyntaxKind.ThrowKeyword); + }); + + // 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) { + forEachReturnStatement(owner, returnStatement => { + pushKeywordIf(keywords, returnStatement.getFirstToken(), SyntaxKind.ReturnKeyword); + }); + } + + return map(keywords, getReferenceEntryFromNode); + } + + /** + * Aggregates all throw-statements within this node *without* crossing + * into function boundaries and try-blocks. + */ + function aggregateOwnedThrowStatements(node: Node): ThrowStatement[] { + var statementAccumulator: ThrowStatement[] = [] + aggregate(node); + return statementAccumulator; + + function aggregate(node: Node): void { + if (node.kind === SyntaxKind.ThrowStatement) { + statementAccumulator.push(node); + } + else if (node.kind === SyntaxKind.TryStatement) { + var tryStatement = node; + + if (tryStatement.catchBlock) { + aggregate(tryStatement.catchBlock); + } + if (tryStatement.finallyBlock) { + aggregate(tryStatement.finallyBlock); + } + } + // Do not cross function boundaries. + else if (!isAnyFunction(node)) { + forEachChild(node, aggregate); + } + }; + } + + /** + * For lack of a better name, this function takes a throw statement and returns the first + * encountered ancestor that is a try-block, function-block, or source file. + */ + function getContextualThrowStatementOwner(throwStatement: ThrowStatement): Node { + var child: Node = throwStatement; + + while (child.parent) { + var parent = child.parent; + + if (parent.kind === SyntaxKind.FunctionBlock || parent.kind === SyntaxKind.SourceFile) { + return parent; + } + + // A throw-statement is only owned by a try-statement if it occurs in the try block. + // Otherwise, it is owned by the next closest function-block or try-block. + if (parent.kind === SyntaxKind.TryStatement && child === (parent).tryBlock) { + return child; + } + + child = parent; + } + + return undefined; + } function getTryCatchFinallyOccurrences(tryStatement: TryStatement): ReferenceEntry[] { var keywords: Node[] = []; diff --git a/tests/cases/fourslash/getOccurrencesThrow.ts b/tests/cases/fourslash/getOccurrencesThrow.ts new file mode 100644 index 00000000000..c25551db92e --- /dev/null +++ b/tests/cases/fourslash/getOccurrencesThrow.ts @@ -0,0 +1,58 @@ +/// + +////function f(a: number) { +//// try { +//// throw "Hello"; +//// +//// try { +//// throw 10; +//// } +//// catch (x) { +//// [|return|] 100; +//// } +//// finally { +//// throw 10; +//// } +//// } +//// catch (x) { +//// [|throw|] "Something"; +//// } +//// finally { +//// [|throw|] "Also something"; +//// } +//// if (a > 0) { +//// [|return|] (function () { +//// return; +//// return; +//// return; +//// +//// if (false) { +//// return true; +//// } +//// throw "Hello!"; +//// })() || true; +//// } +//// +//// [|th/**/row|] 10; +//// +//// var unusued = [1, 2, 3, 4].map(x => { throw 4 }) +//// +//// [|return|]; +//// [|return|] true; +//// [|throw|] false; +////} + +test.ranges().forEach(r => { + goTo.position(r.start); + + test.ranges().forEach(range => { + verify.occurrencesAtPositionContains(range, false); + }); + + verify.occurrencesAtPositionCount(test.ranges().length); +}); + +goTo.marker(); +test.ranges().forEach(range => { + verify.occurrencesAtPositionContains(range, false); +}); diff --git a/tests/cases/fourslash/getOccurrencesThrow2.ts b/tests/cases/fourslash/getOccurrencesThrow2.ts new file mode 100644 index 00000000000..99e18020396 --- /dev/null +++ b/tests/cases/fourslash/getOccurrencesThrow2.ts @@ -0,0 +1,58 @@ +/// + +////function f(a: number) { +//// try { +//// throw "Hello"; +//// +//// try { +//// [|t/**/hrow|] 10; +//// } +//// catch (x) { +//// return 100; +//// } +//// finally { +//// throw 10; +//// } +//// } +//// catch (x) { +//// throw "Something"; +//// } +//// finally { +//// throw "Also something"; +//// } +//// if (a > 0) { +//// return (function () { +//// return; +//// return; +//// return; +//// +//// if (false) { +//// return true; +//// } +//// throw "Hello!"; +//// })() || true; +//// } +//// +//// throw 10; +//// +//// var unusued = [1, 2, 3, 4].map(x => { throw 4 }) +//// +//// return; +//// return true; +//// throw false; +////} + +test.ranges().forEach(r => { + goTo.position(r.start); + + test.ranges().forEach(range => { + verify.occurrencesAtPositionContains(range, false); + }); + + verify.occurrencesAtPositionCount(test.ranges().length); +}); + +goTo.marker(); +test.ranges().forEach(range => { + verify.occurrencesAtPositionContains(range, false); +}); diff --git a/tests/cases/fourslash/getOccurrencesThrow3.ts b/tests/cases/fourslash/getOccurrencesThrow3.ts new file mode 100644 index 00000000000..313d04b8e38 --- /dev/null +++ b/tests/cases/fourslash/getOccurrencesThrow3.ts @@ -0,0 +1,58 @@ +/// + +////function f(a: number) { +//// try { +//// [|throw|] "Hello"; +//// +//// try { +//// throw 10; +//// } +//// catch (x) { +//// return 100; +//// } +//// finally { +//// [|thr/**/ow|] 10; +//// } +//// } +//// catch (x) { +//// throw "Something"; +//// } +//// finally { +//// throw "Also something"; +//// } +//// if (a > 0) { +//// return (function () { +//// return; +//// return; +//// return; +//// +//// if (false) { +//// return true; +//// } +//// throw "Hello!"; +//// })() || true; +//// } +//// +//// throw 10; +//// +//// var unusued = [1, 2, 3, 4].map(x => { throw 4 }) +//// +//// return; +//// return true; +//// throw false; +////} + +test.ranges().forEach(r => { + goTo.position(r.start); + + test.ranges().forEach(range => { + verify.occurrencesAtPositionContains(range, false); + }); + + verify.occurrencesAtPositionCount(test.ranges().length); +}); + +goTo.marker(); +test.ranges().forEach(range => { + verify.occurrencesAtPositionContains(range, false); +}); diff --git a/tests/cases/fourslash/getOccurrencesThrow4.ts b/tests/cases/fourslash/getOccurrencesThrow4.ts new file mode 100644 index 00000000000..adf321526af --- /dev/null +++ b/tests/cases/fourslash/getOccurrencesThrow4.ts @@ -0,0 +1,58 @@ +/// + +////function f(a: number) { +//// try { +//// throw "Hello"; +//// +//// try { +//// throw 10; +//// } +//// catch (x) { +//// return 100; +//// } +//// finally { +//// throw 10; +//// } +//// } +//// catch (x) { +//// throw "Something"; +//// } +//// finally { +//// throw "Also something"; +//// } +//// if (a > 0) { +//// return (function () { +//// [|return|]; +//// [|return|]; +//// [|return|]; +//// +//// if (false) { +//// [|return|] true; +//// } +//// [|th/**/row|] "Hello!"; +//// })() || true; +//// } +//// +//// throw 10; +//// +//// var unusued = [1, 2, 3, 4].map(x => { throw 4 }) +//// +//// return; +//// return true; +//// throw false; +////} + +test.ranges().forEach(r => { + goTo.position(r.start); + + test.ranges().forEach(range => { + verify.occurrencesAtPositionContains(range, false); + }); + + verify.occurrencesAtPositionCount(test.ranges().length); +}); + +goTo.marker(); +test.ranges().forEach(range => { + verify.occurrencesAtPositionContains(range, false); +}); diff --git a/tests/cases/fourslash/getOccurrencesThrow5.ts b/tests/cases/fourslash/getOccurrencesThrow5.ts new file mode 100644 index 00000000000..3e5ba4bca13 --- /dev/null +++ b/tests/cases/fourslash/getOccurrencesThrow5.ts @@ -0,0 +1,58 @@ +/// + +////function f(a: number) { +//// try { +//// throw "Hello"; +//// +//// try { +//// throw 10; +//// } +//// catch (x) { +//// return 100; +//// } +//// finally { +//// throw 10; +//// } +//// } +//// catch (x) { +//// throw "Something"; +//// } +//// finally { +//// throw "Also something"; +//// } +//// if (a > 0) { +//// return (function () { +//// return; +//// return; +//// return; +//// +//// if (false) { +//// return true; +//// } +//// throw "Hello!"; +//// })() || true; +//// } +//// +//// throw 10; +//// +//// var unusued = [1, 2, 3, 4].map(x => { [|thr/**/ow|] 4 }) +//// +//// return; +//// return true; +//// throw false; +////} + +test.ranges().forEach(r => { + goTo.position(r.start); + + test.ranges().forEach(range => { + verify.occurrencesAtPositionContains(range, false); + }); + + verify.occurrencesAtPositionCount(test.ranges().length); +}); + +goTo.marker(); +test.ranges().forEach(range => { + verify.occurrencesAtPositionContains(range, false); +}); diff --git a/tests/cases/fourslash/getOccurrencesThrow6.ts b/tests/cases/fourslash/getOccurrencesThrow6.ts new file mode 100644 index 00000000000..2769c9933db --- /dev/null +++ b/tests/cases/fourslash/getOccurrencesThrow6.ts @@ -0,0 +1,28 @@ +/// + +////[|throw|] 100; +//// +////try { +//// throw 0; +//// var x = () => { throw 0; }; +////} +////catch (y) { +//// var x = () => { throw 0; }; +//// [|throw|] 200; +////} +////finally { +//// [|throw|] 300; +////} + + + +test.ranges().forEach(r => { + goTo.position(r.start); + + test.ranges().forEach(range => { + verify.occurrencesAtPositionContains(range, false); + }); + + verify.occurrencesAtPositionCount(test.ranges().length); +}); + From ba61c63a1af650c6013e99984bf0b30fbe6ecb10 Mon Sep 17 00:00:00 2001 From: ChrisBubernak Date: Mon, 29 Sep 2014 10:20:31 -0700 Subject: [PATCH 031/110] Moved logic to another location where host was in scope so we could call getCanonicalFileName --- src/compiler/parser.ts | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 426fbe61d92..7b43aaec665 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -3825,24 +3825,16 @@ module ts { var start = range.pos; var end = range.end; var length = end - start; - + if (!matchResult) { errorAtPos(start, length, Diagnostics.Invalid_reference_directive_syntax); } else { - var referenceFilename = matchResult[3]; - var basePath = getDirectoryPath(file.filename); - var referenceFullPath = normalizePath(combinePaths(basePath, referenceFilename)); - if (file.filename.toLocaleLowerCase() === referenceFullPath.toLocaleLowerCase()) { - errorAtPos(start, length, Diagnostics.A_file_cannot_have_a_reference_to_itself); - } - else { - referencedFiles.push({ - pos: start, - end: end, - filename: referenceFilename - }); - } + referencedFiles.push({ + pos: start, + end: end, + filename: matchResult[3] + }); } } } @@ -3957,6 +3949,9 @@ module ts { else if (!findSourceFile(filename, isDefaultLib, refFile, refPos, refEnd)) { diagnostic = Diagnostics.File_0_not_found; } + else if (refFile && host.getCanonicalFileName(filename) === host.getCanonicalFileName(refFile.filename)) { + diagnostic = Diagnostics.A_file_cannot_have_a_reference_to_itself; + } } else { if (!(findSourceFile(filename + ".ts", isDefaultLib, refFile, refPos, refEnd) || findSourceFile(filename + ".d.ts", isDefaultLib, refFile, refPos, refEnd))) { @@ -4015,7 +4010,7 @@ module ts { function processReferencedFiles(file: SourceFile, basePath: string) { forEach(file.referencedFiles, ref => { - processSourceFile(normalizePath(combinePaths(basePath, ref.filename)), /* isDefaultLib */ false, file, ref.pos, ref.end); + processSourceFile(normalizePath(combinePaths(basePath, ref.filename)), /* isDefaultLib */ false, file, ref.pos, ref.end); }); } From 3751b25dd202e165ec0d10b0539de341d6da1cb0 Mon Sep 17 00:00:00 2001 From: ChrisBubernak Date: Mon, 29 Sep 2014 10:23:01 -0700 Subject: [PATCH 032/110] Fixed indentation --- src/compiler/parser.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 7b43aaec665..378d880bc37 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -4010,7 +4010,7 @@ module ts { function processReferencedFiles(file: SourceFile, basePath: string) { forEach(file.referencedFiles, ref => { - processSourceFile(normalizePath(combinePaths(basePath, ref.filename)), /* isDefaultLib */ false, file, ref.pos, ref.end); + processSourceFile(normalizePath(combinePaths(basePath, ref.filename)), /* isDefaultLib */ false, file, ref.pos, ref.end); }); } From 2503e50a5d76edb29df9e49b9811556335cb1311 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Mon, 29 Sep 2014 12:41:47 -0700 Subject: [PATCH 033/110] Changed "ownership" relation of try blocks on throw statements. A try-block now only owns a throw statement if its try statement has a catch-clause. --- src/services/services.ts | 25 ++++++++++----- tests/cases/fourslash/getOccurrencesThrow7.ts | 31 +++++++++++++++++++ tests/cases/fourslash/getOccurrencesThrow8.ts | 31 +++++++++++++++++++ 3 files changed, 80 insertions(+), 7 deletions(-) create mode 100644 tests/cases/fourslash/getOccurrencesThrow7.ts create mode 100644 tests/cases/fourslash/getOccurrencesThrow8.ts diff --git a/src/services/services.ts b/src/services/services.ts index 6a6e379869c..dc6b6353ef3 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -2803,7 +2803,7 @@ module ts { /** * Aggregates all throw-statements within this node *without* crossing - * into function boundaries and try-blocks. + * into function boundaries and try-blocks with catch-clauses. */ function aggregateOwnedThrowStatements(node: Node): ThrowStatement[] { var statementAccumulator: ThrowStatement[] = [] @@ -2816,10 +2816,16 @@ module ts { } else if (node.kind === SyntaxKind.TryStatement) { var tryStatement = node; - + + // If a try statement has a catch clause, then any thrown exceptions in the try block + // will be propagated to the next owner. if (tryStatement.catchBlock) { aggregate(tryStatement.catchBlock); } + else { + aggregate(tryStatement.tryBlock); + } + if (tryStatement.finallyBlock) { aggregate(tryStatement.finallyBlock); } @@ -2833,7 +2839,8 @@ module ts { /** * For lack of a better name, this function takes a throw statement and returns the first - * encountered ancestor that is a try-block, function-block, or source file. + * encountered ancestor that is a try-block (whose try statement has a catch clause), + * function-block, or source file. */ function getContextualThrowStatementOwner(throwStatement: ThrowStatement): Node { var child: Node = throwStatement; @@ -2845,10 +2852,14 @@ module ts { return parent; } - // A throw-statement is only owned by a try-statement if it occurs in the try block. - // Otherwise, it is owned by the next closest function-block or try-block. - if (parent.kind === SyntaxKind.TryStatement && child === (parent).tryBlock) { - return child; + // A throw-statement is only owned by a try-statement if the try-statement has + // a catch clause, and if the throw-statement occurs within the try block. + if (parent.kind === SyntaxKind.TryStatement) { + var tryStatement = parent; + + if (tryStatement.tryBlock === child && tryStatement.catchBlock) { + return child; + } } child = parent; diff --git a/tests/cases/fourslash/getOccurrencesThrow7.ts b/tests/cases/fourslash/getOccurrencesThrow7.ts new file mode 100644 index 00000000000..46e899a891b --- /dev/null +++ b/tests/cases/fourslash/getOccurrencesThrow7.ts @@ -0,0 +1,31 @@ +/// + +////try { +//// [|throw|] 10; +//// +//// try { +//// throw 10; +//// } +//// catch (x) { +//// [|throw|] 10; +//// } +//// finally { +//// [|throw|] 10; +//// } +////} +////finally { +//// [|throw|] 10; +////} +//// +////[|throw|] 10; + +test.ranges().forEach(r => { + goTo.position(r.start); + + test.ranges().forEach(range => { + verify.occurrencesAtPositionContains(range, false); + }); + + verify.occurrencesAtPositionCount(test.ranges().length); +}); + diff --git a/tests/cases/fourslash/getOccurrencesThrow8.ts b/tests/cases/fourslash/getOccurrencesThrow8.ts new file mode 100644 index 00000000000..679e13c8d5a --- /dev/null +++ b/tests/cases/fourslash/getOccurrencesThrow8.ts @@ -0,0 +1,31 @@ +/// + +////try { +//// throw 10; +//// +//// try { +//// [|throw|] 10; +//// } +//// catch (x) { +//// throw 10; +//// } +//// finally { +//// throw 10; +//// } +////} +////finally { +//// throw 10; +////} +//// +////throw 10; + +test.ranges().forEach(r => { + goTo.position(r.start); + + test.ranges().forEach(range => { + verify.occurrencesAtPositionContains(range, false); + }); + + verify.occurrencesAtPositionCount(test.ranges().length); +}); + From 1d1e868bb04ba5b7ca8f0d45510ce6eecc94014f Mon Sep 17 00:00:00 2001 From: Vladimir Matveev Date: Mon, 29 Sep 2014 14:28:09 -0700 Subject: [PATCH 034/110] rename getTokenAtPosition to getTouchingToken, add a few helpers for common tasks --- src/services/services.ts | 61 +++++++-------------------------------- src/services/utilities.ts | 33 ++++++++++++++++++++- 2 files changed, 43 insertions(+), 51 deletions(-) diff --git a/src/services/services.ts b/src/services/services.ts index 954a88d04ac..21492e4d159 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -2088,7 +2088,7 @@ module ts { } // TODO: this is a hack for now, we need a proper walking mechanism to verify that we have the correct node - var mappedNode = getTokenAtPosition(sourceFile, TypeScript.end(node) - 1, /*includeItemAtEndPosition*/ undefined); + var mappedNode = getTokenAtPosition(sourceFile, TypeScript.end(node) - 1); if (isPunctuation(mappedNode.kind)) { mappedNode = mappedNode.parent; } @@ -2325,7 +2325,7 @@ module ts { fileName = TypeScript.switchToForwardSlashes(fileName); var sourceFile = getSourceFile(fileName); - var node = getTokenAtPosition(sourceFile, position, /*includeItemAtEndPosition*/ undefined); + var node = getTouchingPropertyName(sourceFile, position); if (!node) { return undefined; } @@ -2434,7 +2434,7 @@ module ts { fileName = TypeScript.switchToForwardSlashes(fileName); var sourceFile = getSourceFile(fileName); - var node = getTokenAtPosition(sourceFile, position, /*includeItemAtEndPosition*/ undefined); + var node = getTouchingWord(sourceFile, position); if (!node) { return undefined; } @@ -2512,25 +2512,12 @@ module ts { return false; } - function isValidGotoDefinitionTarget(n: Node): boolean { - switch (n.kind) { - case SyntaxKind.Identifier: - case SyntaxKind.SuperKeyword: - case SyntaxKind.ThisKeyword: - case SyntaxKind.NumericLiteral: - case SyntaxKind.StringLiteral: - return true; - default: - return false; - } - } - synchronizeHostData(); filename = TypeScript.switchToForwardSlashes(filename); var sourceFile = getSourceFile(filename); - var node = getTokenAtPosition(sourceFile, position, isValidGotoDefinitionTarget); + var node = getTouchingPropertyName(sourceFile, position); if (!node) { return undefined; } @@ -2594,7 +2581,7 @@ module ts { filename = TypeScript.switchToForwardSlashes(filename); var sourceFile = getSourceFile(filename); - var node = getTokenAtPosition(sourceFile, position, isValidFindOccurencesTarget); + var node = getTouchingWord(sourceFile, position); if (!node) { return undefined; } @@ -2660,32 +2647,6 @@ module ts { return undefined; - function isValidFindOccurencesTarget(n: Node): boolean { - switch (n.kind) { - case SyntaxKind.Identifier: - case SyntaxKind.SuperKeyword: - case SyntaxKind.ThisKeyword: - case SyntaxKind.IfKeyword: - case SyntaxKind.ElseKeyword: - case SyntaxKind.ReturnKeyword: - case SyntaxKind.TryKeyword: - case SyntaxKind.CatchKeyword: - case SyntaxKind.FinallyKeyword: - case SyntaxKind.SwitchKeyword: - case SyntaxKind.CaseKeyword: - case SyntaxKind.DefaultKeyword: - case SyntaxKind.BreakKeyword: - case SyntaxKind.ContinueKeyword: - case SyntaxKind.ForKeyword: - case SyntaxKind.WhileKeyword: - case SyntaxKind.DoKeyword: - case SyntaxKind.Constructor: - return true; - default: - return false; - } - } - function getIfElseOccurrences(ifStatement: IfStatement): ReferenceEntry[] { var keywords: Node[] = []; @@ -2942,7 +2903,7 @@ module ts { filename = TypeScript.switchToForwardSlashes(filename); var sourceFile = getSourceFile(filename); - var node = getTokenAtPosition(sourceFile, position, /*includeItemAtEndPosition*/ undefined); + var node = getTouchingPropertyName(sourceFile, position); if (!node) { return undefined; } @@ -3125,7 +3086,7 @@ module ts { forEach(possiblePositions, position => { cancellationToken.throwIfCancellationRequested(); - var node = getTokenAtPosition(sourceFile, position, /*includeItemAtEndPosition*/ undefined); + var node = getTouchingWord(sourceFile, position); if (!node || node.getWidth() !== labelName.length) { return; } @@ -3181,7 +3142,7 @@ module ts { forEach(possiblePositions, position => { cancellationToken.throwIfCancellationRequested(); - var referenceLocation = getTokenAtPosition(sourceFile, position, /*includeItemAtEndPosition*/ undefined); + var referenceLocation = getTouchingPropertyName(sourceFile, position); if (!isValidReferencePosition(referenceLocation, searchText)) { return; } @@ -3233,7 +3194,7 @@ module ts { forEach(possiblePositions, position => { cancellationToken.throwIfCancellationRequested(); - var node = getTokenAtPosition(sourceFile, position, n => n.kind === SyntaxKind.SuperKeyword); + var node = getTouchingWord(sourceFile, position); if (!node || node.kind !== SyntaxKind.SuperKeyword) { return; @@ -3299,7 +3260,7 @@ module ts { forEach(possiblePositions, position => { cancellationToken.throwIfCancellationRequested(); - var node = getTokenAtPosition(sourceFile, position, n => n.kind === SyntaxKind.ThisKeyword); + var node = getTouchingWord(sourceFile, position); if (!node || node.kind !== SyntaxKind.ThisKeyword) { return; } @@ -4345,7 +4306,7 @@ module ts { fileName = TypeScript.switchToForwardSlashes(fileName); var sourceFile = getSourceFile(fileName); - var node = getTokenAtPosition(sourceFile, position, n => n.kind === SyntaxKind.Identifier); + var node = getTouchingWord(sourceFile, position); // Can only rename an identifier. if (node && node.kind === SyntaxKind.Identifier) { diff --git a/src/services/utilities.ts b/src/services/utilities.ts index b3310731bbf..610110f46ee 100644 --- a/src/services/utilities.ts +++ b/src/services/utilities.ts @@ -64,8 +64,27 @@ module ts { } } + /** Gets the token whose text has range [start, end) and position >= start and position < end */ + export function getTokenAtPosition(sourceFile: SourceFile, position: number): Node { + return getTouchingToken(sourceFile, position, /*includeItemAtEndPosition*/ undefined); + } + + /* Gets the token whose text has range [start, end) and + * position >= start and (position < end or (position === end && token is keyword or identifier)) + */ + export function getTouchingWord(sourceFile: SourceFile, position: number): Node { + return getTouchingToken(sourceFile, position, isWord); + } + + /* Gets the token whose text has range [start, end) and position >= start + * and (position < end or (position === end && token is keyword or identifier or numeric\string litera)) + */ + export function getTouchingPropertyName(sourceFile: SourceFile, position: number): Node { + return getTouchingToken(sourceFile, position, isPropertyName); + } + /** Get the token whose text contains the position */ - export function getTokenAtPosition(sourceFile: SourceFile, position: number, includeItemAtEndPosition: (n: Node) => boolean) { + export function getTouchingToken(sourceFile: SourceFile, position: number, includeItemAtEndPosition: (n: Node) => boolean): Node { var current: Node = sourceFile; outer: while (true) { if (isToken(current)) { @@ -214,4 +233,16 @@ module ts { function isToken(n: Node): boolean { return n.kind >= SyntaxKind.FirstToken && n.kind <= SyntaxKind.LastToken; } + + function isKeyword(n: Node): boolean { + return n.kind >= SyntaxKind.FirstKeyword && n.kind <= SyntaxKind.LastKeyword; + } + + function isWord(n: Node): boolean { + return n.kind === SyntaxKind.Identifier || isKeyword(n); + } + + function isPropertyName(n: Node): boolean { + return n.kind === SyntaxKind.StringLiteral || n.kind === SyntaxKind.NumericLiteral || isWord(n); + } } \ No newline at end of file From c61be112d94bfac19484fc0b279d0a582cae9d0d Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Mon, 29 Sep 2014 14:38:03 -0700 Subject: [PATCH 035/110] getOccurrences for 'get' and 'set' keywords. 'get'/'set' keywords are highlighted for analogous accessors. --- src/services/services.ts | 24 +++++++++++++ .../fourslash/getOccurrencesSetAndGet.ts | 34 +++++++++++++++++++ .../fourslash/getOccurrencesSetAndGet2.ts | 34 +++++++++++++++++++ .../fourslash/getOccurrencesSetAndGet3.ts | 34 +++++++++++++++++++ 4 files changed, 126 insertions(+) create mode 100644 tests/cases/fourslash/getOccurrencesSetAndGet.ts create mode 100644 tests/cases/fourslash/getOccurrencesSetAndGet2.ts create mode 100644 tests/cases/fourslash/getOccurrencesSetAndGet3.ts diff --git a/src/services/services.ts b/src/services/services.ts index 04e63f6dbe1..b8a757cfb65 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -2418,6 +2418,11 @@ module ts { return getConstructorOccurrences(node.parent); } break; + case SyntaxKind.GetKeyword: + case SyntaxKind.SetKeyword: + if (hasKind(node.parent, SyntaxKind.GetAccessor) || hasKind(node.parent, SyntaxKind.SetAccessor)) { + return getGetAndSetOccurrences(node.parent); + } } return undefined; @@ -2648,6 +2653,25 @@ module ts { return map(keywords, getReferenceEntryFromNode); } + function getGetAndSetOccurrences(accessorDeclaration: AccessorDeclaration): ReferenceEntry[] { + var keywords: Node[] = []; + + tryPushAccessorKeyword(accessorDeclaration.symbol, SyntaxKind.GetAccessor); + tryPushAccessorKeyword(accessorDeclaration.symbol, SyntaxKind.SetAccessor); + + return map(keywords, getReferenceEntryFromNode); + + function tryPushAccessorKeyword(accessorSymbol: Symbol, accessorKind: SyntaxKind): void { + var accessor = getDeclarationOfKind(accessorSymbol, accessorKind); + + if (!accessor) { + return; + } + + forEach(accessor.getChildren(), child => pushKeywordIf(keywords, child, SyntaxKind.GetKeyword, SyntaxKind.SetKeyword)); + } + } + // returns true if 'node' is defined and has a matching 'kind'. function hasKind(node: Node, kind: SyntaxKind) { return node !== undefined && node.kind === kind; diff --git a/tests/cases/fourslash/getOccurrencesSetAndGet.ts b/tests/cases/fourslash/getOccurrencesSetAndGet.ts new file mode 100644 index 00000000000..b1ab6f44c6b --- /dev/null +++ b/tests/cases/fourslash/getOccurrencesSetAndGet.ts @@ -0,0 +1,34 @@ +/// + +////class Foo { +//// [|set|] bar(b: any) { +//// } +//// +//// public [|get|] bar(): any { +//// return undefined; +//// } +//// +//// public set set(s: any) { +//// } +//// +//// public get set(): any { +//// return undefined; +//// } +//// +//// public set get(g: any) { +//// } +//// +//// public get get(): any { +//// return undefined; +//// } +////} + +test.ranges().forEach(r => { + goTo.position(r.start); + + test.ranges().forEach(range => { + verify.occurrencesAtPositionContains(range, false); + }); + + verify.occurrencesAtPositionCount(test.ranges().length); +}); diff --git a/tests/cases/fourslash/getOccurrencesSetAndGet2.ts b/tests/cases/fourslash/getOccurrencesSetAndGet2.ts new file mode 100644 index 00000000000..1345394b8ee --- /dev/null +++ b/tests/cases/fourslash/getOccurrencesSetAndGet2.ts @@ -0,0 +1,34 @@ +/// + +////class Foo { +//// set bar(b: any) { +//// } +//// +//// public get bar(): any { +//// return undefined; +//// } +//// +//// public [|set|] set(s: any) { +//// } +//// +//// public [|get|] set(): any { +//// return undefined; +//// } +//// +//// public set get(g: any) { +//// } +//// +//// public get get(): any { +//// return undefined; +//// } +////} + +test.ranges().forEach(r => { + goTo.position(r.start); + + test.ranges().forEach(range => { + verify.occurrencesAtPositionContains(range, false); + }); + + verify.occurrencesAtPositionCount(test.ranges().length); +}); diff --git a/tests/cases/fourslash/getOccurrencesSetAndGet3.ts b/tests/cases/fourslash/getOccurrencesSetAndGet3.ts new file mode 100644 index 00000000000..4105a407571 --- /dev/null +++ b/tests/cases/fourslash/getOccurrencesSetAndGet3.ts @@ -0,0 +1,34 @@ +/// + +////class Foo { +//// set bar(b: any) { +//// } +//// +//// public get bar(): any { +//// return undefined; +//// } +//// +//// public set set(s: any) { +//// } +//// +//// public get set(): any { +//// return undefined; +//// } +//// +//// public [|set|] get(g: any) { +//// } +//// +//// public [|get|] get(): any { +//// return undefined; +//// } +////} + +test.ranges().forEach(r => { + goTo.position(r.start); + + test.ranges().forEach(range => { + verify.occurrencesAtPositionContains(range, false); + }); + + verify.occurrencesAtPositionCount(test.ranges().length); +}); From a595502a55541787d4bc7d6017e72af6cdb12532 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Mon, 29 Sep 2014 17:21:25 -0700 Subject: [PATCH 036/110] Respond to CR feedback. --- src/services/services.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/services/services.ts b/src/services/services.ts index b8a757cfb65..11992009a04 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -2664,11 +2664,9 @@ module ts { function tryPushAccessorKeyword(accessorSymbol: Symbol, accessorKind: SyntaxKind): void { var accessor = getDeclarationOfKind(accessorSymbol, accessorKind); - if (!accessor) { - return; + if (accessor) { + forEach(accessor.getChildren(), child => pushKeywordIf(keywords, child, SyntaxKind.GetKeyword, SyntaxKind.SetKeyword)); } - - forEach(accessor.getChildren(), child => pushKeywordIf(keywords, child, SyntaxKind.GetKeyword, SyntaxKind.SetKeyword)); } } From a87685b0d2a73d97bcc516e1a1cb112d0b3268fc Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Mon, 29 Sep 2014 17:58:58 -0700 Subject: [PATCH 037/110] Simply use source text from now on. --- .../getScriptLexicalStructureWalker.ts | 37 ++++++------------- 1 file changed, 11 insertions(+), 26 deletions(-) diff --git a/src/services/getScriptLexicalStructureWalker.ts b/src/services/getScriptLexicalStructureWalker.ts index c6158bfead7..bafc7c5dd16 100644 --- a/src/services/getScriptLexicalStructureWalker.ts +++ b/src/services/getScriptLexicalStructureWalker.ts @@ -148,26 +148,26 @@ module ts { if ((node.flags & NodeFlags.Modifier) === 0) { return undefined; } - return basicChildItem(node, parameter.name.text, ts.ScriptElementKind.memberVariableElement); + return basicChildItem(node, getSourceText(parameter.name), ts.ScriptElementKind.memberVariableElement); case SyntaxKind.Method: var method = node; - return basicChildItem(node, getPropertyText(method.name), ts.ScriptElementKind.memberFunctionElement); + return basicChildItem(node, getSourceText(method.name), ts.ScriptElementKind.memberFunctionElement); case SyntaxKind.GetAccessor: var getAccessor = node; - return basicChildItem(node, getPropertyText(getAccessor.name), ts.ScriptElementKind.memberGetAccessorElement); + return basicChildItem(node, getSourceText(getAccessor.name), ts.ScriptElementKind.memberGetAccessorElement); case SyntaxKind.SetAccessor: var setAccessor = node; - return basicChildItem(node, getPropertyText(setAccessor.name), ts.ScriptElementKind.memberSetAccessorElement); + return basicChildItem(node, getSourceText(setAccessor.name), ts.ScriptElementKind.memberSetAccessorElement); case SyntaxKind.IndexSignature: return basicChildItem(node, "[]", ts.ScriptElementKind.indexSignatureElement); case SyntaxKind.EnumMember: var enumMember = node; - return basicChildItem(node, getPropertyText(enumMember.name), ts.ScriptElementKind.memberVariableElement); + return basicChildItem(node, getSourceText(enumMember.name), ts.ScriptElementKind.memberVariableElement); case SyntaxKind.CallSignature: return basicChildItem(node, "()", ts.ScriptElementKind.callSignatureElement); @@ -177,18 +177,18 @@ module ts { case SyntaxKind.Property: var property = node; - return basicChildItem(node, getPropertyText(property.name), ts.ScriptElementKind.memberVariableElement); + return basicChildItem(node, getSourceText(property.name), ts.ScriptElementKind.memberVariableElement); case SyntaxKind.FunctionDeclaration: var functionDeclaration = node; if (!isTopLevelFunctionDeclaration(functionDeclaration)) { - return basicChildItem(node, functionDeclaration.name.text, ts.ScriptElementKind.functionElement); + return basicChildItem(node, getSourceText(functionDeclaration.name), ts.ScriptElementKind.functionElement); } break; case SyntaxKind.VariableDeclaration: var variableDeclaration = node; - return basicChildItem(node, variableDeclaration.name.text, ts.ScriptElementKind.variableElement); + return basicChildItem(node, getSourceText(variableDeclaration.name), ts.ScriptElementKind.variableElement); case SyntaxKind.Constructor: return basicChildItem(node, "constructor", ts.ScriptElementKind.constructorImplementationElement); @@ -227,7 +227,7 @@ module ts { function getModuleName(moduleDeclaration: ModuleDeclaration): string { // We want to maintain quotation marks. if (moduleDeclaration.name.kind === SyntaxKind.StringLiteral) { - return getPropertyText(moduleDeclaration.name); + return getSourceText(moduleDeclaration.name); } // Otherwise, we need to aggregate each identifier to build up the qualified name. @@ -351,23 +351,8 @@ module ts { return TypeScript.TextSpan.fromBounds(node.getStart(), node.getEnd()); } - function getPropertyText(node: Node): string { - if (node.kind === SyntaxKind.Identifier) { - return (node).text; - } - - if (node.kind === SyntaxKind.StringLiteral) { - // normalize the quotes and remove all '\{newline}'s from the original text. - var text = getSourceTextOfNodeFromSourceText(sourceFile.text, node); - text = text.substring(1, text.length - 1).replace(/\\\r?\n/g, ""); - return "\"" + text + "\""; - } - - if (node.kind === SyntaxKind.NumericLiteral) { - return (node).text; - } - - Debug.fail("getPropertyText given a property that is neither an identifier nor a literal expression."); + function getSourceText(node: Node): string { + return getSourceTextOfNodeFromSourceText(sourceFile.text, node); } } } \ No newline at end of file From d988012ea37c4917e2aa285cd3ef621ecd1f9c44 Mon Sep 17 00:00:00 2001 From: Vladimir Matveev Date: Mon, 29 Sep 2014 21:48:59 -0700 Subject: [PATCH 038/110] addressed CR feedback --- src/services/services.ts | 6 +++--- src/services/utilities.ts | 34 ++++++---------------------------- 2 files changed, 9 insertions(+), 31 deletions(-) diff --git a/src/services/services.ts b/src/services/services.ts index 21492e4d159..853d92bc69a 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -2088,7 +2088,7 @@ module ts { } // TODO: this is a hack for now, we need a proper walking mechanism to verify that we have the correct node - var mappedNode = getTokenAtPosition(sourceFile, TypeScript.end(node) - 1); + var mappedNode = getTouchingToken(sourceFile, TypeScript.end(node) - 1, /*allowPositionInLeadingTrivia*/ false); if (isPunctuation(mappedNode.kind)) { mappedNode = mappedNode.parent; } @@ -4022,7 +4022,7 @@ module ts { var sourceFile = getCurrentSourceFile(filename); var result: TypeScript.TextSpan[] = []; - var token = getTokenContainingPosition(sourceFile, position); + var token = getTouchingToken(sourceFile, position, /*allowPositionInLeadingTrivia*/ true); if (token.getStart(sourceFile) === position) { var matchKind = getMatchingTokenKind(token); @@ -4178,7 +4178,7 @@ module ts { // OK, we have found a match in the file. This is only an acceptable match if // it is contained within a comment. - var token = getTokenContainingPosition(sourceFile, matchPosition); + var token = getTouchingToken(sourceFile, matchPosition, /*allowPositionInLeadingTrivia*/ true); if (token.getStart() <= matchPosition && matchPosition < token.getEnd()) { // match was within the token itself. Not in the comment. Keep searching diff --git a/src/services/utilities.ts b/src/services/utilities.ts index 610110f46ee..40680a76338 100644 --- a/src/services/utilities.ts +++ b/src/services/utilities.ts @@ -46,45 +46,22 @@ module ts { return -1; } - /** Get a token that contains the position. This is guaranteed to return a token, the position can be in the - * leading trivia or within the token text. - */ - export function getTokenContainingPosition(sourceFile: SourceFile, position: number) { - var current: Node = sourceFile; - outer: while (true) { - // find the child that has this - for (var i = 0, n = current.getChildCount(); i < n; i++) { - var child = current.getChildAt(i); - if (child.getFullStart() <= position && position < child.getEnd()) { - current = child; - continue outer; - } - } - return current; - } - } - - /** Gets the token whose text has range [start, end) and position >= start and position < end */ - export function getTokenAtPosition(sourceFile: SourceFile, position: number): Node { - return getTouchingToken(sourceFile, position, /*includeItemAtEndPosition*/ undefined); - } - /* Gets the token whose text has range [start, end) and * position >= start and (position < end or (position === end && token is keyword or identifier)) */ export function getTouchingWord(sourceFile: SourceFile, position: number): Node { - return getTouchingToken(sourceFile, position, isWord); + return getTouchingToken(sourceFile, position, /*allowPositionInLeadingTrivia*/ false, isWord); } /* Gets the token whose text has range [start, end) and position >= start * and (position < end or (position === end && token is keyword or identifier or numeric\string litera)) */ export function getTouchingPropertyName(sourceFile: SourceFile, position: number): Node { - return getTouchingToken(sourceFile, position, isPropertyName); + return getTouchingToken(sourceFile, position, /*allowPositionInLeadingTrivia*/ false, isPropertyName); } /** Get the token whose text contains the position */ - export function getTouchingToken(sourceFile: SourceFile, position: number, includeItemAtEndPosition: (n: Node) => boolean): Node { + export function getTouchingToken(sourceFile: SourceFile, position: number, allowPositionInLeadingTrivia: boolean, includeItemAtEndPosition?: (n: Node) => boolean): Node { var current: Node = sourceFile; outer: while (true) { if (isToken(current)) { @@ -95,7 +72,8 @@ module ts { // find the child that contains 'position' for (var i = 0, n = current.getChildCount(sourceFile); i < n; i++) { var child = current.getChildAt(i); - if (child.getStart(sourceFile) <= position) { + var start = allowPositionInLeadingTrivia ? child.getFullStart() : child.getStart(sourceFile); + if (start <= position) { if (position < child.getEnd()) { current = child; continue outer; @@ -123,7 +101,7 @@ module ts { export function findTokenOnLeftOfPosition(file: SourceFile, position: number): Node { // Ideally, getTokenAtPosition should return a token. However, it is currently // broken, so we do a check to make sure the result was indeed a token. - var tokenAtPosition = getTokenContainingPosition(file, position); + var tokenAtPosition = getTouchingToken(file, position, /*allowPositionInLeadingTrivia*/ true); if (isToken(tokenAtPosition) && position > tokenAtPosition.getStart(file) && position < tokenAtPosition.getEnd()) { return tokenAtPosition; } From f5e9c036a32b0a84d31c654f0904a3aea24a7f02 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Mon, 29 Sep 2014 22:05:58 -0700 Subject: [PATCH 039/110] Propery walk all declarations to find doc comments for a symbol. --- src/services/services.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/services/services.ts b/src/services/services.ts index 3e222450aa7..f677f215641 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -256,7 +256,7 @@ module ts { var declarations = this.getDeclarations(); if (declarations) { for (var i = 0, n = declarations.length; i < n; i++) { - this.processDocumentationCommentDeclaration(lines, declarations[0]); + this.processDocumentationCommentDeclaration(lines, declarations[i]); } } @@ -274,7 +274,7 @@ module ts { for (var i = 0, n = commentRanges.length; i < n; i++) { this.processDocumentationCommentRange( - lines, sourceFile, commentRanges[0]); + lines, sourceFile, commentRanges[i]); } } } From c298f09276f426fa94208632dcd519e542f83ebd Mon Sep 17 00:00:00 2001 From: Vladimir Matveev Date: Mon, 29 Sep 2014 22:49:05 -0700 Subject: [PATCH 040/110] do not consider positions that fall to leading trivia in brace matching --- src/services/services.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/services.ts b/src/services/services.ts index 853d92bc69a..8ff5fba5540 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -4022,7 +4022,7 @@ module ts { var sourceFile = getCurrentSourceFile(filename); var result: TypeScript.TextSpan[] = []; - var token = getTouchingToken(sourceFile, position, /*allowPositionInLeadingTrivia*/ true); + var token = getTouchingToken(sourceFile, position, /*allowPositionInLeadingTrivia*/ false); if (token.getStart(sourceFile) === position) { var matchKind = getMatchingTokenKind(token); From 379f6ce75857524a652b2e3e2fb5d73d29909526 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Tue, 30 Sep 2014 11:58:56 -0700 Subject: [PATCH 041/110] Minor cleanup, added getScriptLexicalStructureWalker.ts Jakefile. --- Jakefile | 1 + .../scriptLexicalStructureItemsContainsNoAnonymousFunctions.ts | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Jakefile b/Jakefile index 0bdb573914f..553372f43ec 100644 --- a/Jakefile +++ b/Jakefile @@ -54,6 +54,7 @@ var servicesSources = [ }).concat([ "services.ts", "shims.ts", + "getScriptLexicalStructureWalker.ts" ].map(function (f) { return path.join(servicesDirectory, f); })); diff --git a/tests/cases/fourslash/scriptLexicalStructureItemsContainsNoAnonymousFunctions.ts b/tests/cases/fourslash/scriptLexicalStructureItemsContainsNoAnonymousFunctions.ts index 2c8ef5825db..531575d6d10 100644 --- a/tests/cases/fourslash/scriptLexicalStructureItemsContainsNoAnonymousFunctions.ts +++ b/tests/cases/fourslash/scriptLexicalStructureItemsContainsNoAnonymousFunctions.ts @@ -28,7 +28,7 @@ ////} ////function bar() { ////} -debugger; + goTo.marker("file1"); verify.getScriptLexicalStructureListCount(0); From fc469538da2c58063e4aaa0e98edfcc48865b14a Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Tue, 30 Sep 2014 13:49:45 -0700 Subject: [PATCH 042/110] Minor naming/comment changes. --- src/services/services.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/services/services.ts b/src/services/services.ts index dc6b6353ef3..264d0bc816e 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -2778,7 +2778,7 @@ module ts { } function getThrowOccurrences(throwStatement: ThrowStatement) { - var owner = getContextualThrowStatementOwner(throwStatement); + var owner = getThrowStatementOwner(throwStatement); if (!owner) { return undefined; @@ -2817,12 +2817,12 @@ module ts { else if (node.kind === SyntaxKind.TryStatement) { var tryStatement = node; - // If a try statement has a catch clause, then any thrown exceptions in the try block - // will be propagated to the next owner. if (tryStatement.catchBlock) { aggregate(tryStatement.catchBlock); } else { + // Exceptions thrown within a try block lacking a catch clause + // are "owned" in the current context. aggregate(tryStatement.tryBlock); } @@ -2838,11 +2838,11 @@ module ts { } /** - * For lack of a better name, this function takes a throw statement and returns the first - * encountered ancestor that is a try-block (whose try statement has a catch clause), + * For lack of a better name, this function takes a throw statement and returns the + * nearest ancestor that is a try-block (whose try statement has a catch clause), * function-block, or source file. */ - function getContextualThrowStatementOwner(throwStatement: ThrowStatement): Node { + function getThrowStatementOwner(throwStatement: ThrowStatement): Node { var child: Node = throwStatement; while (child.parent) { From 11ca3dab014aa31ab9bc0a0729fa5fb6c0d26f23 Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Tue, 30 Sep 2014 13:50:09 -0700 Subject: [PATCH 043/110] Add aliases in completion list --- src/services/services.ts | 2 +- tests/cases/fourslash/completionListOnAliases.ts | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 tests/cases/fourslash/completionListOnAliases.ts diff --git a/src/services/services.ts b/src/services/services.ts index 4da51d7188b..0706736e4a3 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -2195,7 +2195,7 @@ module ts { else { isMemberCompletion = false; /// TODO filter meaning based on the current context - var symbolMeanings = SymbolFlags.Type | SymbolFlags.Value | SymbolFlags.Namespace; + var symbolMeanings = SymbolFlags.Type | SymbolFlags.Value | SymbolFlags.Namespace | SymbolFlags.Import; var symbols = typeInfoResolver.getSymbolsInScope(mappedNode, symbolMeanings); getCompletionEntriesFromSymbols(symbols, activeCompletionSession); diff --git a/tests/cases/fourslash/completionListOnAliases.ts b/tests/cases/fourslash/completionListOnAliases.ts new file mode 100644 index 00000000000..8dec65860c7 --- /dev/null +++ b/tests/cases/fourslash/completionListOnAliases.ts @@ -0,0 +1,15 @@ +/// + +////module M { +//// export var value; +//// +//// import x = M; +//// /*1*/ +//// x./*2*/ +////} + +goTo.marker("1"); +verify.memberListContains("x"); + +goTo.marker("2"); +verify.memberListContains("value"); From 284c767e08652b1d767953f22545b24373eb9e95 Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Tue, 30 Sep 2014 14:17:32 -0700 Subject: [PATCH 044/110] set the kind on alias completions --- src/services/services.ts | 3 +++ tests/cases/fourslash/completionListOnAliases.ts | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/services/services.ts b/src/services/services.ts index 0706736e4a3..b9c3eabc341 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -1025,6 +1025,8 @@ module ts { static primitiveType = "primitive type"; static label = "label"; + + static alias = "alias" } export class ScriptElementKindModifier { @@ -2293,6 +2295,7 @@ module ts { if (flags & SymbolFlags.Constructor) return ScriptElementKind.constructorImplementationElement; if (flags & SymbolFlags.TypeParameter) return ScriptElementKind.typeParameterElement; if (flags & SymbolFlags.EnumMember) return ScriptElementKind.variableElement; + if (flags & SymbolFlags.Import) return ScriptElementKind.alias; return ScriptElementKind.unknown; } diff --git a/tests/cases/fourslash/completionListOnAliases.ts b/tests/cases/fourslash/completionListOnAliases.ts index 8dec65860c7..785a65a76bd 100644 --- a/tests/cases/fourslash/completionListOnAliases.ts +++ b/tests/cases/fourslash/completionListOnAliases.ts @@ -9,7 +9,7 @@ ////} goTo.marker("1"); -verify.memberListContains("x"); +verify.memberListContains("x", undefined, undefined, undefined ,/*kind: */ "alias"); goTo.marker("2"); verify.memberListContains("value"); From f09971f10b8ce23af146c83836a65d11ea9a4b8a Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Tue, 30 Sep 2014 14:35:07 -0700 Subject: [PATCH 045/110] Tweak classification so it does not classify things as keywords that could not actually be keywords according to the grammar. --- src/services/services.ts | 71 ++++++++++++++----- .../cases/unittests/services/colorization.ts | 14 ++++ 2 files changed, 68 insertions(+), 17 deletions(-) diff --git a/src/services/services.ts b/src/services/services.ts index 3da71ea902a..119cbc8aeb2 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -4577,26 +4577,58 @@ module ts { /// If we consider every slash token to be a regex, we could be missing cases like "1/2/3", where /// we have a series of divide operator. this list allows us to be more accurate by ruling out /// locations where a regexp cannot exist. - var noRegexTable: boolean[]; - if (!noRegexTable) { - noRegexTable = []; - noRegexTable[SyntaxKind.Identifier] = true; - noRegexTable[SyntaxKind.StringLiteral] = true; - noRegexTable[SyntaxKind.NumericLiteral] = true; - noRegexTable[SyntaxKind.RegularExpressionLiteral] = true; - noRegexTable[SyntaxKind.ThisKeyword] = true; - noRegexTable[SyntaxKind.PlusPlusToken] = true; - noRegexTable[SyntaxKind.MinusMinusToken] = true; - noRegexTable[SyntaxKind.CloseParenToken] = true; - noRegexTable[SyntaxKind.CloseBracketToken] = true; - noRegexTable[SyntaxKind.CloseBraceToken] = true; - noRegexTable[SyntaxKind.TrueKeyword] = true; - noRegexTable[SyntaxKind.FalseKeyword] = true; + var noRegexTable: boolean[] = []; + noRegexTable[SyntaxKind.Identifier] = true; + noRegexTable[SyntaxKind.StringLiteral] = true; + noRegexTable[SyntaxKind.NumericLiteral] = true; + noRegexTable[SyntaxKind.RegularExpressionLiteral] = true; + noRegexTable[SyntaxKind.ThisKeyword] = true; + noRegexTable[SyntaxKind.PlusPlusToken] = true; + noRegexTable[SyntaxKind.MinusMinusToken] = true; + noRegexTable[SyntaxKind.CloseParenToken] = true; + noRegexTable[SyntaxKind.CloseBracketToken] = true; + noRegexTable[SyntaxKind.CloseBraceToken] = true; + noRegexTable[SyntaxKind.TrueKeyword] = true; + noRegexTable[SyntaxKind.FalseKeyword] = true; + + function isAccessibilityModifier(kind: SyntaxKind) { + switch (kind) { + case SyntaxKind.PublicKeyword: + case SyntaxKind.PrivateKeyword: + case SyntaxKind.ProtectedKeyword: + return true; + } + + return false; + } + + /** Returns true if 'keyword2' can legally follow 'keyword1' in any language construct. */ + function canFollow(keyword1: SyntaxKind, keyword2: SyntaxKind) { + if (isAccessibilityModifier(keyword1)) { + if (keyword2 === SyntaxKind.GetKeyword || + keyword2 === SyntaxKind.SetKeyword || + keyword2 === SyntaxKind.ConstructorKeyword || + keyword2 === SyntaxKind.StaticKeyword) { + + // Allow things like "public get", "public constructor" and "public static". + // These are all legal. + return true; + } + + // Any other keyword following "public" is actually an identifier an not a real + // keyword. + return false; + } + + // Assume any other keyword combination is legal. This can be refined in the future + // if there are more cases we want the classifier to be better at. + return true; } function getClassificationsForLine(text: string, lexState: EndOfLineState): ClassificationResult { var offset = 0; var lastTokenOrCommentEnd = 0; + var token = SyntaxKind.Unknown; var lastNonTriviaToken = SyntaxKind.Unknown; // If we're in a string literal, then prepend: "\ @@ -4626,8 +4658,6 @@ module ts { entries: [] }; - - var token = SyntaxKind.Unknown; do { token = scanner.scan(); @@ -4640,6 +4670,13 @@ module ts { else if (lastNonTriviaToken === SyntaxKind.DotToken && isKeyword(token)) { token = SyntaxKind.Identifier; } + else if (isKeyword(lastNonTriviaToken) && isKeyword(token) && !canFollow(lastNonTriviaToken, token)) { + // We have two keywords in a row. Only treat the second as a keyword if + // it's a sequence that could legally occur in the language. Otherwise + // treat it as an identifier. This way, if someone writes "private var" + // we recognize that 'var' is actually an identifier here. + token = SyntaxKind.Identifier; + } lastNonTriviaToken = token; } diff --git a/tests/cases/unittests/services/colorization.ts b/tests/cases/unittests/services/colorization.ts index d89cf702693..18b157f26b0 100644 --- a/tests/cases/unittests/services/colorization.ts +++ b/tests/cases/unittests/services/colorization.ts @@ -217,5 +217,19 @@ describe('Colorization', function () { keyword("var"), finalEndOfLineState(ts.EndOfLineState.Start)); }); + + it("classifies multiple keywords properly", function () { + test("public static", + ts.EndOfLineState.Start, + keyword("public"), + keyword("static"), + finalEndOfLineState(ts.EndOfLineState.Start)); + + test("public var", + ts.EndOfLineState.Start, + keyword("public"), + identifier("var"), + finalEndOfLineState(ts.EndOfLineState.Start)); + }); }); }); \ No newline at end of file From 55621aae49fcfe0305d82438ac805e9868c6056f Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Tue, 30 Sep 2014 14:56:46 -0700 Subject: [PATCH 046/110] Get exported symbols off aliases in getCompletions --- src/compiler/checker.ts | 3 +- src/compiler/types.ts | 1 + src/services/services.ts | 6 ++ .../fourslash/completionListOnAliases2.ts | 74 +++++++++++++++++++ .../fourslash/completionListOnAliases3.ts | 13 ++++ 5 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 tests/cases/fourslash/completionListOnAliases2.ts create mode 100644 tests/cases/fourslash/completionListOnAliases3.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 99b387dd18c..266a8e3eea1 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -93,7 +93,8 @@ module ts { getFullyQualifiedName: getFullyQualifiedName, getResolvedSignature: getResolvedSignature, getEnumMemberValue: getEnumMemberValue, - isValidPropertyAccess: isValidPropertyAccess + isValidPropertyAccess: isValidPropertyAccess, + getAliasedSymbol: resolveImport }; var undefinedSymbol = createSymbol(SymbolFlags.Property | SymbolFlags.Transient, "undefined"); diff --git a/src/compiler/types.ts b/src/compiler/types.ts index b564dba560b..da2cb9099c2 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -657,6 +657,7 @@ module ts { getEnumMemberValue(node: EnumMember): number; isValidPropertyAccess(node: PropertyAccess, propertyName: string): boolean; + getAliasedSymbol(symbol: Symbol): Symbol; } export interface TextWriter { diff --git a/src/services/services.ts b/src/services/services.ts index b9c3eabc341..a9abf8689a0 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -2147,6 +2147,12 @@ module ts { if (mappedNode.kind === SyntaxKind.Identifier || mappedNode.kind === SyntaxKind.QualifiedName || mappedNode.kind === SyntaxKind.PropertyAccess) { var symbol = typeInfoResolver.getSymbolInfo(mappedNode); + + // This is an alias, follow what it aliases + while (symbol && symbol.flags & SymbolFlags.Import) { + symbol = typeInfoResolver.getAliasedSymbol(symbol); + } + if (symbol && symbol.flags & SymbolFlags.HasExports) { // Extract module or enum members forEachValue(symbol.exports, symbol => { diff --git a/tests/cases/fourslash/completionListOnAliases2.ts b/tests/cases/fourslash/completionListOnAliases2.ts new file mode 100644 index 00000000000..6a74f3a525b --- /dev/null +++ b/tests/cases/fourslash/completionListOnAliases2.ts @@ -0,0 +1,74 @@ +/// + +////module M { +//// export interface I { } +//// export class C { +//// static property; +//// } +//// export enum E { +//// value = 0 +//// } +//// export module N { +//// export var v; +//// } +//// export var V = 0; +//// export function F() { } +//// export import A = M; +////} +//// +////import m = M; +////import c = M.C; +////import e = M.E; +////import n = M.N; +////import v = M.V; +////import f = M.F; +////import a = M.A; +//// +////m./*1*/; +////c./*2*/; +////e./*3*/; +////n./*4*/; +////v./*5*/; +////f./*6*/; +////a./*7*/; + + +// Module m +goTo.marker("1"); +verify.memberListContains("I"); +verify.memberListContains("C"); +verify.memberListContains("E"); +verify.memberListContains("N"); +verify.memberListContains("V"); +verify.memberListContains("F"); +verify.memberListContains("A"); + +// Class C +goTo.marker("2"); +verify.memberListContains("property"); + +// Enum E +goTo.marker("3"); +verify.memberListContains("value"); + +// Module N +goTo.marker("4"); +verify.memberListContains("v"); + +// var V +goTo.marker("5"); +verify.memberListContains("toFixed"); + +// function F +goTo.marker("6"); +verify.memberListContains("call"); + +// alias a +goTo.marker("7"); +verify.memberListContains("I"); +verify.memberListContains("C"); +verify.memberListContains("E"); +verify.memberListContains("N"); +verify.memberListContains("V"); +verify.memberListContains("F"); +verify.memberListContains("A"); diff --git a/tests/cases/fourslash/completionListOnAliases3.ts b/tests/cases/fourslash/completionListOnAliases3.ts new file mode 100644 index 00000000000..8c5194af968 --- /dev/null +++ b/tests/cases/fourslash/completionListOnAliases3.ts @@ -0,0 +1,13 @@ +/// + +////declare module 'foobar' { +//// interface Q { x: number; } +////} +////declare module 'thing' { +//// import x = require('foobar'); +//// var m: x./*1*/; +////} + +// Q does not show up in member list of x +goTo.marker("1"); +verify.memberListContains("Q"); From 6968d8325d630d67ba22e34dd3bd9ed2910608b9 Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Tue, 30 Sep 2014 16:33:55 -0700 Subject: [PATCH 047/110] Do not use a while loop, as an aliased symbol is always one level deap --- src/services/services.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/services.ts b/src/services/services.ts index a9abf8689a0..6841837fb39 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -2149,7 +2149,7 @@ module ts { var symbol = typeInfoResolver.getSymbolInfo(mappedNode); // This is an alias, follow what it aliases - while (symbol && symbol.flags & SymbolFlags.Import) { + if (symbol && symbol.flags & SymbolFlags.Import) { symbol = typeInfoResolver.getAliasedSymbol(symbol); } From ab3326f7b7b0631e2cb82f11d7b59035fc4d5d49 Mon Sep 17 00:00:00 2001 From: Jason Freeman Date: Fri, 26 Sep 2014 13:51:13 -0700 Subject: [PATCH 048/110] Fix arity checking for partial overload resolution --- src/compiler/checker.ts | 43 +++++++++++-------- ...trailingSeparatorInFunctionCall.errors.txt | 10 ++++- .../fourslash/signatureHelpOnOverloads.ts | 6 +-- .../signatureHelpOnOverloadsDifferentArity.ts | 20 +++++++++ 4 files changed, 56 insertions(+), 23 deletions(-) create mode 100644 tests/cases/fourslash/signatureHelpOnOverloadsDifferentArity.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 99b387dd18c..fa8b516924b 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -4331,25 +4331,32 @@ module ts { } function signatureHasCorrectArity(node: CallExpression, signature: Signature): boolean { - var args = node.arguments || emptyArray; - var isCorrect = args.length >= signature.minArgumentCount && - (signature.hasRestParameter || args.length <= signature.parameters.length) && - (!node.typeArguments || signature.typeParameters && node.typeArguments.length === signature.typeParameters.length); - - // For error recovery, since we have parsed OmittedExpressions for any extra commas - // in the argument list, if we see any OmittedExpressions, just return true. - // The reason this is ok is because omitted expressions here are syntactically - // illegal, and will cause a parse error. - // Note: It may be worth keeping the upper bound check on arity, but removing - // the lower bound check if there are omitted expressions. - if (!isCorrect) { - // Technically this type assertion is not safe because args could be initialized to emptyArray - // above. - if ((>args).hasTrailingComma || forEach(args, arg => arg.kind === SyntaxKind.OmittedExpression)) { - return true; - } + if (!node.arguments) { + // This only happens when we have something of the form: + // new C + // + return signature.minArgumentCount === 0; } - return isCorrect; + + // For IDE scenarios, since we may have an incomplete call, we make two modifications + // to arity checking. + // 1. A trailing comma is tantamount to adding another argument + // 2. If the call is incomplete (no closing paren) allow fewer arguments than expected + var args = node.arguments; + var numberOfArgs = args.hasTrailingComma ? args.length + 1 : args.length; + var hasTooManyArguments = !signature.hasRestParameter && numberOfArgs > signature.parameters.length; + var hasRightNumberOfTypeArguments = !node.typeArguments || + (signature.typeParameters && node.typeArguments.length === signature.typeParameters.length); + + if (hasTooManyArguments || !hasRightNumberOfTypeArguments) { + return false; + } + + // If we are missing the close paren, the call is incomplete, and we should skip + // the lower bound check. + var callIsIncomplete = args.end === node.end; + var hasEnoughArguments = numberOfArgs >= signature.minArgumentCount; + return callIsIncomplete || hasEnoughArguments; } // If type has a single call signature and no other members, return that signature. Otherwise, return undefined. diff --git a/tests/baselines/reference/trailingSeparatorInFunctionCall.errors.txt b/tests/baselines/reference/trailingSeparatorInFunctionCall.errors.txt index 3edeb834baa..986f2dedf6e 100644 --- a/tests/baselines/reference/trailingSeparatorInFunctionCall.errors.txt +++ b/tests/baselines/reference/trailingSeparatorInFunctionCall.errors.txt @@ -1,18 +1,24 @@ tests/cases/compiler/trailingSeparatorInFunctionCall.ts(4,7): error TS1009: Trailing comma not allowed. tests/cases/compiler/trailingSeparatorInFunctionCall.ts(9,8): error TS1009: Trailing comma not allowed. +tests/cases/compiler/trailingSeparatorInFunctionCall.ts(4,1): error TS2346: Supplied parameters do not match any signature of call target. +tests/cases/compiler/trailingSeparatorInFunctionCall.ts(9,1): error TS2346: Supplied parameters do not match any signature of call target. -==== tests/cases/compiler/trailingSeparatorInFunctionCall.ts (2 errors) ==== +==== tests/cases/compiler/trailingSeparatorInFunctionCall.ts (4 errors) ==== function f(x, y) { } f(1, 2, ); ~ !!! error TS1009: Trailing comma not allowed. + ~~~~~~~~~ +!!! error TS2346: Supplied parameters do not match any signature of call target. function f2(x: T, y: T) { } f2(1, 2, ); ~ -!!! error TS1009: Trailing comma not allowed. \ No newline at end of file +!!! error TS1009: Trailing comma not allowed. + ~~~~~~~~~~ +!!! error TS2346: Supplied parameters do not match any signature of call target. \ No newline at end of file diff --git a/tests/cases/fourslash/signatureHelpOnOverloads.ts b/tests/cases/fourslash/signatureHelpOnOverloads.ts index 83d7b75a4cf..9712c9dc301 100644 --- a/tests/cases/fourslash/signatureHelpOnOverloads.ts +++ b/tests/cases/fourslash/signatureHelpOnOverloads.ts @@ -13,6 +13,6 @@ verify.currentParameterSpanIs("x: string"); edit.insert("'',"); verify.signatureHelpCountIs(2); -// verify.currentSignatureHelpIs("fn(x: string, y: number): any"); -// verify.currentParameterHelpArgumentNameIs("y"); -// verify.currentParameterSpanIs("y: number"); +verify.currentSignatureHelpIs("fn(x: string, y: number): any"); +verify.currentParameterHelpArgumentNameIs("y"); +verify.currentParameterSpanIs("y: number"); diff --git a/tests/cases/fourslash/signatureHelpOnOverloadsDifferentArity.ts b/tests/cases/fourslash/signatureHelpOnOverloadsDifferentArity.ts new file mode 100644 index 00000000000..fe18f655ed4 --- /dev/null +++ b/tests/cases/fourslash/signatureHelpOnOverloadsDifferentArity.ts @@ -0,0 +1,20 @@ +/// + +////declare function f(s: string); +////declare function f(n: number); +////declare function f(s: string, b: boolean); +////declare function f(n: number, b: boolean); +//// +////f(1/**/ + +goTo.marker(); +verify.signatureHelpCountIs(4); +verify.currentSignatureHelpIs("f(n: number): any"); +verify.currentParameterHelpArgumentNameIs("n"); +verify.currentParameterSpanIs("n: number"); + +edit.insert(", "); +verify.signatureHelpCountIs(4); +verify.currentSignatureHelpIs("f(n: number, b: boolean): any"); +verify.currentParameterHelpArgumentNameIs("b"); +verify.currentParameterSpanIs("b: boolean"); \ No newline at end of file From a79a1d22489584f1175dd14ef3a019798e0d5df4 Mon Sep 17 00:00:00 2001 From: Jason Freeman Date: Tue, 30 Sep 2014 11:06:03 -0700 Subject: [PATCH 049/110] Record trailing comma even for incorrectly terminated lists --- src/compiler/parser.ts | 29 +++++++++++-------- ...signatureHelpOnOverloadsDifferentArity2.ts | 20 +++++++++++++ 2 files changed, 37 insertions(+), 12 deletions(-) create mode 100644 tests/cases/fourslash/signatureHelpOnOverloadsDifferentArity2.ts diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index b06326f6925..f67873c2c40 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -1226,18 +1226,6 @@ module ts { error(Diagnostics._0_expected, ","); } else if (isListTerminator(kind)) { - // Check if the last token was a comma. - if (commaStart >= 0) { - if (!allowTrailingComma) { - if (file.syntacticErrors.length === errorCountBeforeParsingList) { - // Report a grammar error so we don't affect lookahead - grammarErrorAtPos(commaStart, scanner.getStartPos() - commaStart, Diagnostics.Trailing_comma_not_allowed); - } - } - // Always preserve a trailing comma by marking it on the NodeArray - result.hasTrailingComma = true; - } - break; } else { @@ -1248,6 +1236,23 @@ module ts { nextToken(); } } + + // Recording the trailing comma is deliberately done after the previous + // loop, and not just if we see a list terminator. This is because the list + // may have ended incorrectly, but it is still important to know if there + // was a trailing comma. + // Check if the last token was a comma. + if (commaStart >= 0) { + if (!allowTrailingComma) { + if (file.syntacticErrors.length === errorCountBeforeParsingList) { + // Report a grammar error so we don't affect lookahead + grammarErrorAtPos(commaStart, scanner.getStartPos() - commaStart, Diagnostics.Trailing_comma_not_allowed); + } + } + // Always preserve a trailing comma by marking it on the NodeArray + result.hasTrailingComma = true; + } + result.end = getNodeEnd(); parsingContext = saveParsingContext; return result; diff --git a/tests/cases/fourslash/signatureHelpOnOverloadsDifferentArity2.ts b/tests/cases/fourslash/signatureHelpOnOverloadsDifferentArity2.ts new file mode 100644 index 00000000000..1f87f3b9a0c --- /dev/null +++ b/tests/cases/fourslash/signatureHelpOnOverloadsDifferentArity2.ts @@ -0,0 +1,20 @@ +/// + +////declare function f(s: string); +////declare function f(n: number); +////declare function f(s: string, b: boolean); +////declare function f(n: number, b: boolean); +//// +////f(1/**/ var + +goTo.marker(); +verify.signatureHelpCountIs(4); +verify.currentSignatureHelpIs("f(n: number): any"); +verify.currentParameterHelpArgumentNameIs("n"); +verify.currentParameterSpanIs("n: number"); + +edit.insert(", "); +verify.signatureHelpCountIs(4); +verify.currentSignatureHelpIs("f(n: number, b: boolean): any"); +verify.currentParameterHelpArgumentNameIs("b"); +verify.currentParameterSpanIs("b: boolean"); \ No newline at end of file From 03821df591d75bbaf893cc2e509db783d8ad6ee4 Mon Sep 17 00:00:00 2001 From: Jason Freeman Date: Tue, 30 Sep 2014 13:46:07 -0700 Subject: [PATCH 050/110] Remove getCurrentArgumentState --- src/services/signatureHelp.ts | 94 ++++++++++++----------------------- 1 file changed, 32 insertions(+), 62 deletions(-) diff --git a/src/services/signatureHelp.ts b/src/services/signatureHelp.ts index 796472c030e..3af419b3f90 100644 --- a/src/services/signatureHelp.ts +++ b/src/services/signatureHelp.ts @@ -172,15 +172,15 @@ module ts.SignatureHelp { return undefined; } - var argumentList = getContainingArgumentList(startingToken); + var argumentInfo = getContainingArgumentInfo(startingToken); cancellationToken.throwIfCancellationRequested(); // Semantic filtering of signature help - if (!argumentList) { + if (!argumentInfo) { return undefined; } - var call = argumentList.parent; + var call = argumentInfo.list.parent; var candidates = []; var resolvedSignature = typeInfoResolver.getResolvedSignature(call, candidates); cancellationToken.throwIfCancellationRequested(); @@ -189,13 +189,13 @@ module ts.SignatureHelp { return undefined; } - return createSignatureHelpItems(candidates, resolvedSignature, argumentList); + return createSignatureHelpItems(candidates, resolvedSignature, argumentInfo); /** * If node is an argument, returns its index in the argument list. * If not, returns -1. */ - function getImmediatelyContainingArgumentList(node: Node): Node { + function getImmediatelyContainingArgumentInfo(node: Node): ListItemInfo { if (node.parent.kind !== SyntaxKind.CallExpression && node.parent.kind !== SyntaxKind.NewExpression) { return undefined; } @@ -216,10 +216,14 @@ module ts.SignatureHelp { var parent = node.parent; // Find out if 'node' is an argument, a type argument, or neither if (node.kind === SyntaxKind.LessThanToken || node.kind === SyntaxKind.OpenParenToken) { - // Find the list that starts right *after* the < or ( token + // Find the list that starts right *after* the < or ( token. + // If the user has just opened a list, consider this item 0. var list = getChildListThatStartsWithOpenerToken(parent, node, sourceFile); Debug.assert(list); - return list; + return { + list: list, + listItemIndex: 0 + }; } if (node.kind === SyntaxKind.GreaterThanToken @@ -228,18 +232,18 @@ module ts.SignatureHelp { return undefined; } - return findContainingList(node); + return findListItemInfo(node); } - function getContainingArgumentList(node: Node): Node { + function getContainingArgumentInfo(node: Node): ListItemInfo { for (var n = node; n.kind !== SyntaxKind.SourceFile; n = n.parent) { if (n.kind === SyntaxKind.FunctionBlock) { return undefined; } - var argumentList = getImmediatelyContainingArgumentList(n); - if (argumentList) { - return argumentList; + var argumentInfo = getImmediatelyContainingArgumentInfo(n); + if (argumentInfo) { + return argumentInfo; } @@ -248,7 +252,8 @@ module ts.SignatureHelp { return undefined; } - function createSignatureHelpItems(candidates: Signature[], bestSignature: Signature, argumentListOrTypeArgumentList: Node): SignatureHelpItems { + function createSignatureHelpItems(candidates: Signature[], bestSignature: Signature, argumentInfoOrTypeArgumentInfo: ListItemInfo): SignatureHelpItems { + var argumentListOrTypeArgumentList = argumentInfoOrTypeArgumentInfo.list; var items: SignatureHelpItem[] = map(candidates, candidateSignature => { var parameters = candidateSignature.parameters; var parameterHelpItems: SignatureHelpParameter[] = parameters.length === 0 ? emptyArray : map(parameters, p => { @@ -338,63 +343,28 @@ module ts.SignatureHelp { var applicableSpanEnd = skipTrivia(sourceFile.text, argumentListOrTypeArgumentList.end, /*stopAfterLineBreak*/ false); var applicableSpan = new TypeScript.TextSpan(applicableSpanStart, applicableSpanEnd - applicableSpanStart); - var state = getSignatureHelpCurrentArgumentState(sourceFile, position, applicableSpanStart); + // The listItemIndex we got back includes commas. Our goal is to return the index of the proper + // item (not including commas). Here are some examples: + // 1. foo(a, b, c $) -> the listItemIndex is 4, we want to return 2 + // 2. foo(a, b, $ c) -> listItemIndex is 3, we want to return 2 + // 3. foo($a) -> listItemIndex is 0, we want to return 0 + // + // In general, we want to subtract the number of commas before the current index. + // But if we are on a comma, we also want to pretend we are on the argument *following* + // the comma. That amounts to taking the ceiling of half the index. + var argumentIndex = (argumentInfoOrTypeArgumentInfo.listItemIndex + 1) >> 1; + var numberOfCommas = countWhere(argumentListOrTypeArgumentList.getChildren(), arg => arg.kind === SyntaxKind.CommaToken); + var argumentCount = numberOfCommas + 1; return { items: items, applicableSpan: applicableSpan, selectedItemIndex: selectedItemIndex, - argumentIndex: state.argumentIndex, - argumentCount: state.argumentCount + argumentIndex: argumentIndex, + argumentCount: argumentCount }; } } - function getSignatureHelpCurrentArgumentState(sourceFile: SourceFile, position: number, applicableSpanStart: number): { argumentIndex: number; argumentCount: number } { - var tokenPrecedingSpanStart = findPrecedingToken(applicableSpanStart, sourceFile); - if (!tokenPrecedingSpanStart) { - return undefined; - } - - if (tokenPrecedingSpanStart.kind !== SyntaxKind.OpenParenToken && tokenPrecedingSpanStart.kind !== SyntaxKind.LessThanToken) { - // The span start must have moved backward in the file (for example if the open paren was backspaced) - return undefined; - } - - var tokenPrecedingCurrentPosition = findPrecedingToken(position, sourceFile); - var call = tokenPrecedingSpanStart.parent; - Debug.assert(call.kind === SyntaxKind.CallExpression || call.kind === SyntaxKind.NewExpression, "wrong call kind " + SyntaxKind[call.kind]); - if (tokenPrecedingCurrentPosition.kind === SyntaxKind.CloseParenToken || tokenPrecedingCurrentPosition.kind === SyntaxKind.GreaterThanToken) { - if (tokenPrecedingCurrentPosition.parent === call) { - // This call expression is complete. Stop signature help. - return undefined; - } - } - - var argumentListOrTypeArgumentList = getChildListThatStartsWithOpenerToken(call, tokenPrecedingSpanStart, sourceFile); - // Debug.assert(argumentListOrTypeArgumentList.getChildCount() === 0 || argumentListOrTypeArgumentList.getChildCount() % 2 === 1, "Even number of children"); - - // The call might be finished, but incorrectly. Check if we are still within the bounds of the call - if (position > skipTrivia(sourceFile.text, argumentListOrTypeArgumentList.end, /*stopAfterLineBreak*/ false)) { - return undefined; - } - - var numberOfCommas = countWhere(argumentListOrTypeArgumentList.getChildren(), arg => arg.kind === SyntaxKind.CommaToken); - var argumentCount = numberOfCommas + 1; - if (argumentCount <= 1) { - return { argumentIndex: 0, argumentCount: argumentCount }; - } - - var indexOfNodeContainingPosition = findListItemIndexContainingPosition(argumentListOrTypeArgumentList, position); - - // indexOfNodeContainingPosition checks that position is between pos and end of each child, so it is - // possible that we are to the right of all children. Assume that we are still within - // the applicable span and that we are typing the last argument - // Alternatively, we could be in range of one of the arguments, in which case we need to divide - // by 2 to exclude commas. Use bit shifting in order to take the floor of the division. - var argumentIndex = indexOfNodeContainingPosition < 0 ? argumentCount - 1 : indexOfNodeContainingPosition >> 1; - return { argumentIndex: argumentIndex, argumentCount: argumentCount }; - } - function getChildListThatStartsWithOpenerToken(parent: Node, openerToken: Node, sourceFile: SourceFile): Node { var children = parent.getChildren(sourceFile); var indexOfOpenerToken = children.indexOf(openerToken); From a89710471d9b55dd4abc6cb8e5a40101e6b065b9 Mon Sep 17 00:00:00 2001 From: Jason Freeman Date: Tue, 30 Sep 2014 15:26:39 -0700 Subject: [PATCH 051/110] Add test for empty arguments and arity filtering --- src/harness/fourslash.ts | 5 ---- ...signatureHelpOnOverloadsDifferentArity3.ts | 26 +++++++++++++++++++ 2 files changed, 26 insertions(+), 5 deletions(-) create mode 100644 tests/cases/fourslash/signatureHelpOnOverloadsDifferentArity3.ts diff --git a/src/harness/fourslash.ts b/src/harness/fourslash.ts index c264c59348f..64d87f45d1b 100644 --- a/src/harness/fourslash.ts +++ b/src/harness/fourslash.ts @@ -944,11 +944,6 @@ module FourSlash { this.validate("error", message, renameInfo.localizedErrorMessage); } - //private getFormalParameter() { - // var help = this.languageService.getSignatureHelpItems(this.activeFile.fileName, this.currentCaretPosition); - // return help.formal; - //} - private getActiveSignatureHelpItem() { var help = this.languageService.getSignatureHelpItems(this.activeFile.fileName, this.currentCaretPosition); diff --git a/tests/cases/fourslash/signatureHelpOnOverloadsDifferentArity3.ts b/tests/cases/fourslash/signatureHelpOnOverloadsDifferentArity3.ts new file mode 100644 index 00000000000..4d2db0922ee --- /dev/null +++ b/tests/cases/fourslash/signatureHelpOnOverloadsDifferentArity3.ts @@ -0,0 +1,26 @@ +/// + +////declare function f(); +////declare function f(s: string); +////declare function f(s: string, b: boolean); +////declare function f(n: number, b: boolean); +//// +////f(/**/ + +goTo.marker(); +verify.signatureHelpCountIs(4); +verify.currentSignatureHelpIs("f(): any"); +verify.currentSignatureParamterCountIs(0); + +edit.insert(", "); +verify.signatureHelpCountIs(4); +verify.currentSignatureHelpIs("f(s: string, b: boolean): any"); +verify.currentSignatureParamterCountIs(2); +verify.currentParameterHelpArgumentNameIs("b"); +verify.currentParameterSpanIs("b: boolean"); + +// What should the intended behavior be if there are too many arguments? +edit.insert(", "); +verify.signatureHelpCountIs(4); +verify.currentSignatureHelpIs("f(): any"); +verify.currentSignatureParamterCountIs(0); \ No newline at end of file From 23843ffa92519a970c1ef460035e07a9ba8177ab Mon Sep 17 00:00:00 2001 From: Jason Freeman Date: Tue, 30 Sep 2014 16:36:20 -0700 Subject: [PATCH 052/110] Parse OmittedExpression for missing arguments followed by commas --- src/compiler/parser.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index f67873c2c40..fcc8c62ba16 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -1073,7 +1073,7 @@ module ts { case ParsingContext.TypeParameters: return isIdentifier(); case ParsingContext.ArgumentExpressions: - return isExpression(); + return token === SyntaxKind.CommaToken || isExpression(); case ParsingContext.ArrayLiteralMembers: return token === SyntaxKind.CommaToken || isExpression(); case ParsingContext.Parameters: From b2bca72bb65cbfcc360020753875c1b8a34c9ae4 Mon Sep 17 00:00:00 2001 From: Jason Freeman Date: Tue, 30 Sep 2014 17:13:27 -0700 Subject: [PATCH 053/110] Fix argumentCount and selectedItemIndex --- src/harness/fourslash.ts | 19 ++++---- src/services/signatureHelp.ts | 46 ++++++++++++++++--- tests/cases/fourslash/fourslash.ts | 4 ++ ...signatureHelpOnOverloadsDifferentArity3.ts | 6 +-- 4 files changed, 55 insertions(+), 20 deletions(-) diff --git a/src/harness/fourslash.ts b/src/harness/fourslash.ts index 64d87f45d1b..d33b5c0715d 100644 --- a/src/harness/fourslash.ts +++ b/src/harness/fourslash.ts @@ -891,6 +891,13 @@ module FourSlash { assert.equal(actual, expected); } + public verifySignatureHelpArgumentCount(expected: number) { + this.taoInvalidReason = 'verifySignatureHelpArgumentCount NYI'; + var signatureHelpItems = this.languageService.getSignatureHelpItems(this.activeFile.fileName, this.currentCaretPosition); + var actual = signatureHelpItems.argumentCount; + assert.equal(actual, expected); + } + public verifySignatureHelpPresent(shouldBePresent = true) { this.taoInvalidReason = 'verifySignatureHelpPresent NYI'; @@ -946,22 +953,14 @@ module FourSlash { private getActiveSignatureHelpItem() { var help = this.languageService.getSignatureHelpItems(this.activeFile.fileName, this.currentCaretPosition); - - // If the signature hasn't been narrowed down yet (e.g. no parameters have yet been entered), - // 'activeFormal' will be -1 (even if there is only 1 signature). Signature help will show the - // first signature in the signature group, so go with that - var index = help.selectedItemIndex < 0 ? 0 : help.selectedItemIndex; - + var index = help.selectedItemIndex; return help.items[index]; } private getActiveParameter(): ts.SignatureHelpParameter { var help = this.languageService.getSignatureHelpItems(this.activeFile.fileName, this.currentCaretPosition); - var item = help.items[help.selectedItemIndex]; - - // Same logic as in getActiveSignatureHelp - this value might be -1 until a parameter value actually gets typed - var currentParam = help.argumentIndex < 0 ? 0 : help.argumentIndex; + var currentParam = help.argumentIndex; return item.parameters[currentParam]; } diff --git a/src/services/signatureHelp.ts b/src/services/signatureHelp.ts index 3af419b3f90..080e4704b83 100644 --- a/src/services/signatureHelp.ts +++ b/src/services/signatureHelp.ts @@ -252,6 +252,33 @@ module ts.SignatureHelp { return undefined; } + /** + * The selectedItemIndex could be negative for several reasons. + * 1. There are too many arguments for all of the overloads + * 2. None of the overloads were type compatible + * The solution here is to try to pick the best overload by picking + * either the first one that has an appropriate number of parameters, + * or the one with the most parameters. + */ + function selectBestInvalidOverloadIndex(candidates: Signature[], argumentCount: number): number { + var maxParamsSignatureIndex = -1; + var maxParams = -1; + for (var i = 0; i < candidates.length; i++) { + var candidate = candidates[i]; + + if (candidate.hasRestParameter || candidate.parameters.length >= argumentCount) { + return i; + } + + if (candidate.parameters.length > maxParams) { + maxParams = candidate.parameters.length; + maxParamsSignatureIndex = i; + } + } + + return maxParamsSignatureIndex; + } + function createSignatureHelpItems(candidates: Signature[], bestSignature: Signature, argumentInfoOrTypeArgumentInfo: ListItemInfo): SignatureHelpItems { var argumentListOrTypeArgumentList = argumentInfoOrTypeArgumentInfo.list; var items: SignatureHelpItem[] = map(candidates, candidateSignature => { @@ -326,11 +353,6 @@ module ts.SignatureHelp { }; }); - var selectedItemIndex = candidates.indexOf(bestSignature); - if (selectedItemIndex < 0) { - selectedItemIndex = 0; - } - // We use full start and skip trivia on the end because we want to include trivia on // both sides. For example, // @@ -353,8 +375,18 @@ module ts.SignatureHelp { // But if we are on a comma, we also want to pretend we are on the argument *following* // the comma. That amounts to taking the ceiling of half the index. var argumentIndex = (argumentInfoOrTypeArgumentInfo.listItemIndex + 1) >> 1; - var numberOfCommas = countWhere(argumentListOrTypeArgumentList.getChildren(), arg => arg.kind === SyntaxKind.CommaToken); - var argumentCount = numberOfCommas + 1; + + // argumentCount is the number of commas plus one, unless the list is completely empty, + // in which case there are 0. + var argumentCount = argumentListOrTypeArgumentList.getChildCount() === 0 + ? 0 + : 1 + countWhere(argumentListOrTypeArgumentList.getChildren(), arg => arg.kind === SyntaxKind.CommaToken); + + var selectedItemIndex = candidates.indexOf(bestSignature); + if (selectedItemIndex < 0) { + selectedItemIndex = selectBestInvalidOverloadIndex(candidates, argumentCount); + } + return { items: items, applicableSpan: applicableSpan, diff --git a/tests/cases/fourslash/fourslash.ts b/tests/cases/fourslash/fourslash.ts index 35b6894b1ce..c204a98c4a4 100644 --- a/tests/cases/fourslash/fourslash.ts +++ b/tests/cases/fourslash/fourslash.ts @@ -294,6 +294,10 @@ module FourSlashInterface { FourSlash.currentTestState.verifySignatureHelpCount(expected); } + public signatureHelpArgumentCountIs(expected: number) { + FourSlash.currentTestState.verifySignatureHelpArgumentCount(expected); + } + public currentSignatureParamterCountIs(expected: number) { FourSlash.currentTestState.verifyCurrentSignatureHelpParameterCount(expected); } diff --git a/tests/cases/fourslash/signatureHelpOnOverloadsDifferentArity3.ts b/tests/cases/fourslash/signatureHelpOnOverloadsDifferentArity3.ts index 4d2db0922ee..c217a12ef58 100644 --- a/tests/cases/fourslash/signatureHelpOnOverloadsDifferentArity3.ts +++ b/tests/cases/fourslash/signatureHelpOnOverloadsDifferentArity3.ts @@ -11,6 +11,7 @@ goTo.marker(); verify.signatureHelpCountIs(4); verify.currentSignatureHelpIs("f(): any"); verify.currentSignatureParamterCountIs(0); +verify.signatureHelpArgumentCountIs(0); edit.insert(", "); verify.signatureHelpCountIs(4); @@ -19,8 +20,7 @@ verify.currentSignatureParamterCountIs(2); verify.currentParameterHelpArgumentNameIs("b"); verify.currentParameterSpanIs("b: boolean"); -// What should the intended behavior be if there are too many arguments? edit.insert(", "); verify.signatureHelpCountIs(4); -verify.currentSignatureHelpIs("f(): any"); -verify.currentSignatureParamterCountIs(0); \ No newline at end of file +verify.currentSignatureHelpIs("f(s: string, b: boolean): any"); +verify.currentSignatureParamterCountIs(2); \ No newline at end of file From a72341120799e415b525bc964418965ba21de891 Mon Sep 17 00:00:00 2001 From: Yui T Date: Tue, 30 Sep 2014 13:50:10 -0700 Subject: [PATCH 054/110] Fix reporting duplication errors to report at all declarations --- src/compiler/binder.ts | 9 +++++++-- src/compiler/checker.ts | 18 ++++++++++++++++-- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/src/compiler/binder.ts b/src/compiler/binder.ts index 3959335542c..86fdf7bb8f7 100644 --- a/src/compiler/binder.ts +++ b/src/compiler/binder.ts @@ -84,8 +84,13 @@ module ts { if (node.name) { node.name.parent = node; } - file.semanticErrors.push(createDiagnosticForNode(node.name ? node.name : node, - Diagnostics.Duplicate_identifier_0, getDisplayName(node))); + // Report errors every position with duplicate declarations + // Report errors on previous encountered declarations + forEach(symbol.declarations, (declaration) => { + file.semanticErrors.push(createDiagnosticForNode(declaration.name, Diagnostics.Duplicate_identifier_0, getDisplayName(declaration))); + }); + file.semanticErrors.push(createDiagnosticForNode(node, Diagnostics.Duplicate_identifier_0, getDisplayName(node))); + symbol = createSymbol(0, name); } } diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index cf35c1c02f5..0ef10ed8189 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -5668,6 +5668,8 @@ module ts { // when checking exported function declarations across modules check only duplicate implementations // names and consistency of modifiers are verified when we check local symbol var isExportSymbolInsideModule = symbol.parent && symbol.parent.flags & SymbolFlags.Module; + var duplicateFunctionDeclaration = false; + var multipleConstructorImplemenation = false; for (var i = 0; i < declarations.length; i++) { var node = declarations[i]; var inAmbientContext = isInAmbientContext(node); @@ -5690,10 +5692,10 @@ module ts { if (node.body && bodyDeclaration) { if (isConstructor) { - error(node, Diagnostics.Multiple_constructor_implementations_are_not_allowed); + multipleConstructorImplemenation = true; } else { - error(node, Diagnostics.Duplicate_function_implementation); + duplicateFunctionDeclaration = true; } } else if (!isExportSymbolInsideModule && previousDeclaration && previousDeclaration.parent === node.parent && previousDeclaration.end !== node.pos) { @@ -5717,6 +5719,18 @@ module ts { } } + if (multipleConstructorImplemenation) { + forEach(declarations, declaration => { + error(declaration, Diagnostics.Multiple_constructor_implementations_are_not_allowed); + }); + } + + if (duplicateFunctionDeclaration) { + forEach( declarations, declaration => { + error(declaration, Diagnostics.Duplicate_function_implementation); + }); + } + if (!isExportSymbolInsideModule && lastSeenNonAmbientDeclaration && !lastSeenNonAmbientDeclaration.body) { reportImplementationExpectedError(lastSeenNonAmbientDeclaration); } From c2d86711e878519fc4789c4966d11e612f28d6e2 Mon Sep 17 00:00:00 2001 From: Yui T Date: Tue, 30 Sep 2014 17:15:18 -0700 Subject: [PATCH 055/110] Update baselines --- src/compiler/binder.ts | 2 +- ...lassStaticFunctionOfTheSameName.errors.txt | 13 +- ...lassStaticFunctionOfTheSameName.errors.txt | 13 +- ...dExportedFunctionThatShareAName.errors.txt | 16 +- ...bleAndExportedVarThatShareAName.errors.txt | 8 +- ...ithExportedClassesOfTheSameName.errors.txt | 8 +- ...ambientClassOverloadForFunction.errors.txt | 9 +- .../baselines/reference/anyDeclare.errors.txt | 9 +- .../reference/augmentedTypesClass.errors.txt | 8 +- .../reference/augmentedTypesClass2.errors.txt | 10 +- .../reference/augmentedTypesClass2.js | 2 +- .../augmentedTypesClass2a.errors.txt | 11 +- .../reference/augmentedTypesClass2a.js | 4 +- .../reference/augmentedTypesClass4.errors.txt | 7 +- .../reference/augmentedTypesClass4.js | 4 +- .../reference/augmentedTypesEnum.errors.txt | 33 +- .../baselines/reference/augmentedTypesEnum.js | 24 +- .../reference/augmentedTypesEnum2.errors.txt | 14 +- .../reference/augmentedTypesEnum2.js | 8 +- .../augmentedTypesFunction.errors.txt | 32 +- .../reference/augmentedTypesFunction.js | 24 +- .../augmentedTypesInterface.errors.txt | 12 +- .../reference/augmentedTypesInterface.js | 4 +- .../augmentedTypesModules.errors.txt | 21 +- .../reference/augmentedTypesModules.js | 18 +- .../reference/augmentedTypesVar.errors.txt | 40 +- .../baselines/reference/augmentedTypesVar.js | 30 +- .../reference/callOnInstance.errors.txt | 9 +- tests/baselines/reference/callOnInstance.js | 4 +- .../reference/callOverloads1.errors.txt | 11 +- tests/baselines/reference/callOverloads1.js | 2 +- .../reference/callOverloads2.errors.txt | 12 +- .../reference/callOverloads3.errors.txt | 8 +- .../reference/callOverloads4.errors.txt | 8 +- .../reference/callOverloads5.errors.txt | 8 +- ...gnaturesWithDuplicateParameters.errors.txt | 94 ++++- ...turesWithParameterInitializers2.errors.txt | 7 +- tests/baselines/reference/class1.errors.txt | 5 +- .../reference/classAndInterface1.errors.txt | 5 +- .../classAndInterfaceWithSameName.errors.txt | 8 +- .../classAndVariableWithSameName.errors.txt | 8 +- .../reference/classCannotExtendVar.errors.txt | 5 +- .../classOverloadForFunction.errors.txt | 9 +- .../classOverloadForFunction2.errors.txt | 5 +- ...ssWithTwoConstructorDefinitions.errors.txt | 8 +- .../reference/clinterfaces.errors.txt | 14 +- .../cloduleWithDuplicateMember1.errors.txt | 16 +- .../cloduleWithDuplicateMember2.errors.txt | 9 +- .../conflictingTypeAnnotatedVar.errors.txt | 13 +- ...ssibilityModifiersOnParameters2.errors.txt | 25 +- .../constructorOverloads1.errors.txt | 13 +- .../constructorOverloads4.errors.txt | 13 +- .../constructorOverloads5.errors.txt | 8 +- .../constructorOverloads7.errors.txt | 16 +- .../constructorOverloads8.errors.txt | 5 +- ...constructorParameterProperties2.errors.txt | 23 +- .../reference/contextualTyping.errors.txt | 16 +- .../baselines/reference/declInput.errors.txt | 5 +- ...faceIncompatibleWithBaseIndexer.errors.txt | 7 +- .../duplicateClassElements.errors.txt | 74 +++- ...duplicateIdentifierInCatchBlock.errors.txt | 19 +- ...ifiersAcrossContainerBoundaries.errors.txt | 11 +- .../duplicateInterfaceMembers1.errors.txt | 7 +- .../duplicateObjectLiteralProperty.errors.txt | 31 +- ...duplicatePropertiesInStrictMode.errors.txt | 7 +- .../duplicatePropertyNames.errors.txt | 50 ++- .../duplicateStringNamedProperty1.errors.txt | 7 +- .../reference/enumGenericTypeClash.errors.txt | 5 +- .../enumIdenticalIdentifierValues.errors.txt | 5 +- .../reference/es6ClassTest9.errors.txt | 9 +- .../exportSameNameFuncVar.errors.txt | 14 +- .../baselines/reference/extension.errors.txt | 5 +- .../fieldAndGetterWithSameName.errors.txt | 9 +- .../baselines/reference/funClodule.errors.txt | 24 +- ...functionAndPropertyNameConflict.errors.txt | 13 +- .../reference/functionCall15.errors.txt | 9 +- .../functionNameConflicts.errors.txt | 25 +- .../functionWithSameNameAsField.errors.txt | 12 +- .../genericClassesRedeclaration.errors.txt | 8 +- ...ReturnTypeAndFunctionClassMerge.errors.txt | 11 +- .../gettersAndSettersErrors.errors.txt | 12 +- tests/baselines/reference/giant.errors.txt | 380 +++++++++++++----- ...AndVariableDeclarationConflict3.errors.txt | 9 +- .../interfaceDeclaration1.errors.txt | 12 +- .../interfaceDeclaration2.errors.txt | 5 +- .../invalidInstantiatedModule.errors.txt | 5 +- .../reference/invalidNestedModules.errors.txt | 5 +- .../lastPropertyInLiteralWins.errors.txt | 12 +- .../reference/memberOverride.errors.txt | 7 +- ...cesWithConflictingPropertyNames.errors.txt | 17 +- ...esWithConflictingPropertyNames2.errors.txt | 23 +- ...matchedClassConstructorVariable.errors.txt | 5 +- ..._augmentExistingAmbientVariable.errors.txt | 5 +- .../module_augmentExistingVariable.errors.txt | 5 +- .../reference/nameCollisions.errors.txt | 34 +- .../reference/numericClassMembers1.errors.txt | 12 +- .../numericNamedPropertyDuplicates.errors.txt | 29 +- ...cStringNamedPropertyEquivalence.errors.txt | 22 +- .../reference/objectLiteralErrors.errors.txt | 218 +++++++--- ...ypeWithDuplicateNumericProperty.errors.txt | 38 +- .../optionalParamArgsTest.errors.txt | 5 +- .../optionalPropertiesSyntax.errors.txt | 7 +- .../overloadsWithinClasses.errors.txt | 5 +- ...parameterPropertyInConstructor2.errors.txt | 9 +- .../reference/parser0_004152.errors.txt | 8 +- ...serErrorRecovery_ModuleElement2.errors.txt | 6 +- ...FunctionDeclarationAmbiguities1.errors.txt | 14 +- ...propertyAndAccessorWithSameName.errors.txt | 35 +- ...propertyAndFunctionWithSameName.errors.txt | 14 +- .../propertyNamedPrototype.errors.txt | 4 +- .../reference/propertySignatures.errors.txt | 7 +- .../reference/reassignStaticProp.errors.txt | 9 +- .../sourceMapValidationEnums.errors.txt | 5 +- .../staticClassMemberError.errors.txt | 5 +- .../staticPrototypeProperty.errors.txt | 8 +- ...ypesInImplementationSignatures2.errors.txt | 7 +- .../stringNamedPropertyDuplicates.errors.txt | 29 +- .../reference/targetTypeCastTest.errors.txt | 14 +- .../reference/targetTypeTest1.errors.txt | 26 +- .../twoAccessorsWithSameName.errors.txt | 27 +- .../twoAccessorsWithSameName2.errors.txt | 16 +- .../varAndFunctionShareName.errors.txt | 9 +- tests/cases/compiler/augmentedTypesClass2.ts | 2 +- tests/cases/compiler/augmentedTypesClass2a.ts | 2 +- tests/cases/compiler/augmentedTypesClass4.ts | 2 +- tests/cases/compiler/augmentedTypesEnum.ts | 12 +- tests/cases/compiler/augmentedTypesEnum2.ts | 6 +- .../cases/compiler/augmentedTypesFunction.ts | 12 +- .../cases/compiler/augmentedTypesInterface.ts | 4 +- tests/cases/compiler/augmentedTypesModules.ts | 10 +- tests/cases/compiler/augmentedTypesVar.ts | 16 +- tests/cases/compiler/callOnInstance.ts | 4 +- tests/cases/compiler/callOverloads1.ts | 2 +- tests/cases/compiler/callOverloads2.ts | 8 +- tests/cases/compiler/callOverloads3.ts | 6 +- tests/cases/compiler/callOverloads4.ts | 6 +- tests/cases/compiler/callOverloads5.ts | 6 +- tests/cases/compiler/class1.ts | 4 +- tests/cases/compiler/classAndInterface1.ts | 2 +- .../classAndVariableWithSameName.ts | 4 +- .../classWithTwoConstructorDefinitions.ts | 4 +- ...allSignaturesWithParameterInitializers2.ts | 4 +- 142 files changed, 1714 insertions(+), 664 deletions(-) diff --git a/src/compiler/binder.ts b/src/compiler/binder.ts index 86fdf7bb8f7..44ebd50c066 100644 --- a/src/compiler/binder.ts +++ b/src/compiler/binder.ts @@ -84,7 +84,7 @@ module ts { if (node.name) { node.name.parent = node; } - // Report errors every position with duplicate declarations + // Report errors every position with duplicate declaration // Report errors on previous encountered declarations forEach(symbol.declarations, (declaration) => { file.semanticErrors.push(createDiagnosticForNode(declaration.name, Diagnostics.Duplicate_identifier_0, getDisplayName(declaration))); diff --git a/tests/baselines/reference/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndGenericClassStaticFunctionOfTheSameName.errors.txt b/tests/baselines/reference/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndGenericClassStaticFunctionOfTheSameName.errors.txt index 2ab89730405..ed1c8eaec85 100644 --- a/tests/baselines/reference/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndGenericClassStaticFunctionOfTheSameName.errors.txt +++ b/tests/baselines/reference/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndGenericClassStaticFunctionOfTheSameName.errors.txt @@ -1,21 +1,26 @@ -tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndGenericClassStaticFunctionOfTheSameName.ts(10,21): error TS2300: Duplicate identifier 'fn'. +tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndGenericClassStaticFunctionOfTheSameName.ts(5,12): error TS2300: Duplicate identifier 'fn'. +tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndGenericClassStaticFunctionOfTheSameName.ts(10,5): error TS2300: Duplicate identifier 'fn'. -==== tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndGenericClassStaticFunctionOfTheSameName.ts (1 errors) ==== +==== tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndGenericClassStaticFunctionOfTheSameName.ts (2 errors) ==== class clodule { id: string; value: T; static fn(id: U) { } + ~~ +!!! error TS2300: Duplicate identifier 'fn'. } module clodule { // error: duplicate identifier expected export function fn(x: T, y: T): T { - ~~ -!!! error TS2300: Duplicate identifier 'fn'. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return x; + ~~~~~~~~~~~~~~~~~ } + ~~~~~ +!!! error TS2300: Duplicate identifier 'fn'. } \ No newline at end of file diff --git a/tests/baselines/reference/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndNonGenericClassStaticFunctionOfTheSameName.errors.txt b/tests/baselines/reference/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndNonGenericClassStaticFunctionOfTheSameName.errors.txt index 5db506d1052..bf1c4f36d1b 100644 --- a/tests/baselines/reference/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndNonGenericClassStaticFunctionOfTheSameName.errors.txt +++ b/tests/baselines/reference/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndNonGenericClassStaticFunctionOfTheSameName.errors.txt @@ -1,21 +1,26 @@ -tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndNonGenericClassStaticFunctionOfTheSameName.ts(10,21): error TS2300: Duplicate identifier 'fn'. +tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndNonGenericClassStaticFunctionOfTheSameName.ts(5,12): error TS2300: Duplicate identifier 'fn'. +tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndNonGenericClassStaticFunctionOfTheSameName.ts(10,5): error TS2300: Duplicate identifier 'fn'. -==== tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndNonGenericClassStaticFunctionOfTheSameName.ts (1 errors) ==== +==== tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndNonGenericClassStaticFunctionOfTheSameName.ts (2 errors) ==== class clodule { id: string; value: T; static fn(id: string) { } + ~~ +!!! error TS2300: Duplicate identifier 'fn'. } module clodule { // error: duplicate identifier expected export function fn(x: T, y: T): T { - ~~ -!!! error TS2300: Duplicate identifier 'fn'. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return x; + ~~~~~~~~~~~~~~~~~ } + ~~~~~ +!!! error TS2300: Duplicate identifier 'fn'. } \ No newline at end of file diff --git a/tests/baselines/reference/ClassAndModuleThatMergeWithStaticFunctionAndExportedFunctionThatShareAName.errors.txt b/tests/baselines/reference/ClassAndModuleThatMergeWithStaticFunctionAndExportedFunctionThatShareAName.errors.txt index 9b62647f40b..b3c2a87e176 100644 --- a/tests/baselines/reference/ClassAndModuleThatMergeWithStaticFunctionAndExportedFunctionThatShareAName.errors.txt +++ b/tests/baselines/reference/ClassAndModuleThatMergeWithStaticFunctionAndExportedFunctionThatShareAName.errors.txt @@ -1,17 +1,21 @@ -tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMergeWithStaticFunctionAndExportedFunctionThatShareAName.ts(8,21): error TS2300: Duplicate identifier 'Origin'. -tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMergeWithStaticFunctionAndExportedFunctionThatShareAName.ts(20,25): error TS2300: Duplicate identifier 'Origin'. +tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMergeWithStaticFunctionAndExportedFunctionThatShareAName.ts(4,12): error TS2300: Duplicate identifier 'Origin'. +tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMergeWithStaticFunctionAndExportedFunctionThatShareAName.ts(8,5): error TS2300: Duplicate identifier 'Origin'. +tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMergeWithStaticFunctionAndExportedFunctionThatShareAName.ts(16,16): error TS2300: Duplicate identifier 'Origin'. +tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMergeWithStaticFunctionAndExportedFunctionThatShareAName.ts(20,9): error TS2300: Duplicate identifier 'Origin'. -==== tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMergeWithStaticFunctionAndExportedFunctionThatShareAName.ts (2 errors) ==== +==== tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMergeWithStaticFunctionAndExportedFunctionThatShareAName.ts (4 errors) ==== class Point { constructor(public x: number, public y: number) { } static Origin(): Point { return { x: 0, y: 0 }; } // unexpected error here bug 840246 + ~~~~~~ +!!! error TS2300: Duplicate identifier 'Origin'. } module Point { export function Origin() { return null; } //expected duplicate identifier error - ~~~~~~ + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'Origin'. } @@ -21,11 +25,13 @@ tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMer constructor(public x: number, public y: number) { } static Origin(): Point { return { x: 0, y: 0 }; } // unexpected error here bug 840246 + ~~~~~~ +!!! error TS2300: Duplicate identifier 'Origin'. } export module Point { export function Origin() { return ""; }//expected duplicate identifier error - ~~~~~~ + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'Origin'. } } \ No newline at end of file diff --git a/tests/baselines/reference/ClassAndModuleThatMergeWithStaticVariableAndExportedVarThatShareAName.errors.txt b/tests/baselines/reference/ClassAndModuleThatMergeWithStaticVariableAndExportedVarThatShareAName.errors.txt index b160146f6f7..88ad9f358be 100644 --- a/tests/baselines/reference/ClassAndModuleThatMergeWithStaticVariableAndExportedVarThatShareAName.errors.txt +++ b/tests/baselines/reference/ClassAndModuleThatMergeWithStaticVariableAndExportedVarThatShareAName.errors.txt @@ -1,12 +1,16 @@ +tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMergeWithStaticVariableAndExportedVarThatShareAName.ts(4,12): error TS2300: Duplicate identifier 'Origin'. tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMergeWithStaticVariableAndExportedVarThatShareAName.ts(8,16): error TS2300: Duplicate identifier 'Origin'. +tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMergeWithStaticVariableAndExportedVarThatShareAName.ts(16,16): error TS2300: Duplicate identifier 'Origin'. tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMergeWithStaticVariableAndExportedVarThatShareAName.ts(20,20): error TS2300: Duplicate identifier 'Origin'. -==== tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMergeWithStaticVariableAndExportedVarThatShareAName.ts (2 errors) ==== +==== tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMergeWithStaticVariableAndExportedVarThatShareAName.ts (4 errors) ==== class Point { constructor(public x: number, public y: number) { } static Origin: Point = { x: 0, y: 0 }; + ~~~~~~ +!!! error TS2300: Duplicate identifier 'Origin'. } module Point { @@ -21,6 +25,8 @@ tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMer constructor(public x: number, public y: number) { } static Origin: Point = { x: 0, y: 0 }; + ~~~~~~ +!!! error TS2300: Duplicate identifier 'Origin'. } export module Point { diff --git a/tests/baselines/reference/TwoInternalModulesThatMergeEachWithExportedClassesOfTheSameName.errors.txt b/tests/baselines/reference/TwoInternalModulesThatMergeEachWithExportedClassesOfTheSameName.errors.txt index fd9c4bc0ffe..39e5278041d 100644 --- a/tests/baselines/reference/TwoInternalModulesThatMergeEachWithExportedClassesOfTheSameName.errors.txt +++ b/tests/baselines/reference/TwoInternalModulesThatMergeEachWithExportedClassesOfTheSameName.errors.txt @@ -1,10 +1,14 @@ +tests/cases/conformance/internalModules/DeclarationMerging/TwoInternalModulesThatMergeEachWithExportedClassesOfTheSameName.ts(2,18): error TS2300: Duplicate identifier 'Point'. tests/cases/conformance/internalModules/DeclarationMerging/TwoInternalModulesThatMergeEachWithExportedClassesOfTheSameName.ts(10,18): error TS2300: Duplicate identifier 'Point'. +tests/cases/conformance/internalModules/DeclarationMerging/TwoInternalModulesThatMergeEachWithExportedClassesOfTheSameName.ts(17,18): error TS2300: Duplicate identifier 'Line'. tests/cases/conformance/internalModules/DeclarationMerging/TwoInternalModulesThatMergeEachWithExportedClassesOfTheSameName.ts(26,26): error TS2300: Duplicate identifier 'Line'. -==== tests/cases/conformance/internalModules/DeclarationMerging/TwoInternalModulesThatMergeEachWithExportedClassesOfTheSameName.ts (2 errors) ==== +==== tests/cases/conformance/internalModules/DeclarationMerging/TwoInternalModulesThatMergeEachWithExportedClassesOfTheSameName.ts (4 errors) ==== module A { export class Point { + ~~~~~ +!!! error TS2300: Duplicate identifier 'Point'. x: number; y: number; } @@ -22,6 +26,8 @@ tests/cases/conformance/internalModules/DeclarationMerging/TwoInternalModulesTha module X.Y.Z { export class Line { + ~~~~ +!!! error TS2300: Duplicate identifier 'Line'. length: number; } } diff --git a/tests/baselines/reference/ambientClassOverloadForFunction.errors.txt b/tests/baselines/reference/ambientClassOverloadForFunction.errors.txt index e7ace55872a..a63f795ec88 100644 --- a/tests/baselines/reference/ambientClassOverloadForFunction.errors.txt +++ b/tests/baselines/reference/ambientClassOverloadForFunction.errors.txt @@ -1,9 +1,12 @@ -tests/cases/compiler/ambientClassOverloadForFunction.ts(2,10): error TS2300: Duplicate identifier 'foo'. +tests/cases/compiler/ambientClassOverloadForFunction.ts(1,15): error TS2300: Duplicate identifier 'foo'. +tests/cases/compiler/ambientClassOverloadForFunction.ts(2,1): error TS2300: Duplicate identifier 'foo'. -==== tests/cases/compiler/ambientClassOverloadForFunction.ts (1 errors) ==== +==== tests/cases/compiler/ambientClassOverloadForFunction.ts (2 errors) ==== declare class foo{}; + ~~~ +!!! error TS2300: Duplicate identifier 'foo'. function foo() { return null; } - ~~~ + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'foo'. \ No newline at end of file diff --git a/tests/baselines/reference/anyDeclare.errors.txt b/tests/baselines/reference/anyDeclare.errors.txt index c9728323818..ec21bd1e859 100644 --- a/tests/baselines/reference/anyDeclare.errors.txt +++ b/tests/baselines/reference/anyDeclare.errors.txt @@ -1,12 +1,15 @@ -tests/cases/compiler/anyDeclare.ts(4,14): error TS2300: Duplicate identifier 'myFn'. +tests/cases/compiler/anyDeclare.ts(3,9): error TS2300: Duplicate identifier 'myFn'. +tests/cases/compiler/anyDeclare.ts(4,5): error TS2300: Duplicate identifier 'myFn'. -==== tests/cases/compiler/anyDeclare.ts (1 errors) ==== +==== tests/cases/compiler/anyDeclare.ts (2 errors) ==== declare var x: any; module myMod { var myFn; + ~~~~ +!!! error TS2300: Duplicate identifier 'myFn'. function myFn() { } - ~~~~ + ~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'myFn'. } \ No newline at end of file diff --git a/tests/baselines/reference/augmentedTypesClass.errors.txt b/tests/baselines/reference/augmentedTypesClass.errors.txt index 16faa14b4c2..2ff6889e22f 100644 --- a/tests/baselines/reference/augmentedTypesClass.errors.txt +++ b/tests/baselines/reference/augmentedTypesClass.errors.txt @@ -1,16 +1,22 @@ +tests/cases/compiler/augmentedTypesClass.ts(2,7): error TS2300: Duplicate identifier 'c1'. tests/cases/compiler/augmentedTypesClass.ts(3,5): error TS2300: Duplicate identifier 'c1'. +tests/cases/compiler/augmentedTypesClass.ts(6,7): error TS2300: Duplicate identifier 'c4'. tests/cases/compiler/augmentedTypesClass.ts(7,6): error TS2300: Duplicate identifier 'c4'. -==== tests/cases/compiler/augmentedTypesClass.ts (2 errors) ==== +==== tests/cases/compiler/augmentedTypesClass.ts (4 errors) ==== //// class then var class c1 { public foo() { } } + ~~ +!!! error TS2300: Duplicate identifier 'c1'. var c1 = 1; // error ~~ !!! error TS2300: Duplicate identifier 'c1'. //// class then enum class c4 { public foo() { } } + ~~ +!!! error TS2300: Duplicate identifier 'c4'. enum c4 { One } // error ~~ !!! error TS2300: Duplicate identifier 'c4'. \ No newline at end of file diff --git a/tests/baselines/reference/augmentedTypesClass2.errors.txt b/tests/baselines/reference/augmentedTypesClass2.errors.txt index 32104b65ac5..5881e49dae9 100644 --- a/tests/baselines/reference/augmentedTypesClass2.errors.txt +++ b/tests/baselines/reference/augmentedTypesClass2.errors.txt @@ -1,12 +1,16 @@ +tests/cases/compiler/augmentedTypesClass2.ts(4,7): error TS2300: Duplicate identifier 'c11'. tests/cases/compiler/augmentedTypesClass2.ts(10,11): error TS2300: Duplicate identifier 'c11'. +tests/cases/compiler/augmentedTypesClass2.ts(16,7): error TS2300: Duplicate identifier 'c33'. tests/cases/compiler/augmentedTypesClass2.ts(21,6): error TS2300: Duplicate identifier 'c33'. -==== tests/cases/compiler/augmentedTypesClass2.ts (2 errors) ==== +==== tests/cases/compiler/augmentedTypesClass2.ts (4 errors) ==== // Checking class with other things in type space not value space // class then interface - class c11 { + class c11 { // error + ~~~ +!!! error TS2300: Duplicate identifier 'c11'. foo() { return 1; } @@ -21,6 +25,8 @@ tests/cases/compiler/augmentedTypesClass2.ts(21,6): error TS2300: Duplicate iden // class then class - covered // class then enum class c33 { + ~~~ +!!! error TS2300: Duplicate identifier 'c33'. foo() { return 1; } diff --git a/tests/baselines/reference/augmentedTypesClass2.js b/tests/baselines/reference/augmentedTypesClass2.js index b4df1672b69..f75c08a5920 100644 --- a/tests/baselines/reference/augmentedTypesClass2.js +++ b/tests/baselines/reference/augmentedTypesClass2.js @@ -2,7 +2,7 @@ // Checking class with other things in type space not value space // class then interface -class c11 { +class c11 { // error foo() { return 1; } diff --git a/tests/baselines/reference/augmentedTypesClass2a.errors.txt b/tests/baselines/reference/augmentedTypesClass2a.errors.txt index 74dece080a6..ed6c556a826 100644 --- a/tests/baselines/reference/augmentedTypesClass2a.errors.txt +++ b/tests/baselines/reference/augmentedTypesClass2a.errors.txt @@ -1,12 +1,15 @@ -tests/cases/compiler/augmentedTypesClass2a.ts(3,10): error TS2300: Duplicate identifier 'c2'. +tests/cases/compiler/augmentedTypesClass2a.ts(2,7): error TS2300: Duplicate identifier 'c2'. +tests/cases/compiler/augmentedTypesClass2a.ts(3,1): error TS2300: Duplicate identifier 'c2'. tests/cases/compiler/augmentedTypesClass2a.ts(4,5): error TS2300: Duplicate identifier 'c2'. -==== tests/cases/compiler/augmentedTypesClass2a.ts (2 errors) ==== +==== tests/cases/compiler/augmentedTypesClass2a.ts (3 errors) ==== //// class then function - class c2 { public foo() { } } + class c2 { public foo() { } } // error + ~~ +!!! error TS2300: Duplicate identifier 'c2'. function c2() { } // error - ~~ + ~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'c2'. var c2 = () => { } ~~ diff --git a/tests/baselines/reference/augmentedTypesClass2a.js b/tests/baselines/reference/augmentedTypesClass2a.js index cca45c2c0b3..fe31f0964c2 100644 --- a/tests/baselines/reference/augmentedTypesClass2a.js +++ b/tests/baselines/reference/augmentedTypesClass2a.js @@ -1,6 +1,6 @@ //// [augmentedTypesClass2a.ts] //// class then function -class c2 { public foo() { } } +class c2 { public foo() { } } // error function c2() { } // error var c2 = () => { } @@ -12,7 +12,7 @@ var c2 = (function () { c2.prototype.foo = function () { }; return c2; -})(); +})(); // error function c2() { } // error var c2 = function () { diff --git a/tests/baselines/reference/augmentedTypesClass4.errors.txt b/tests/baselines/reference/augmentedTypesClass4.errors.txt index 2df0a95ccd2..6df027ca511 100644 --- a/tests/baselines/reference/augmentedTypesClass4.errors.txt +++ b/tests/baselines/reference/augmentedTypesClass4.errors.txt @@ -1,9 +1,12 @@ +tests/cases/compiler/augmentedTypesClass4.ts(2,7): error TS2300: Duplicate identifier 'c3'. tests/cases/compiler/augmentedTypesClass4.ts(3,7): error TS2300: Duplicate identifier 'c3'. -==== tests/cases/compiler/augmentedTypesClass4.ts (1 errors) ==== +==== tests/cases/compiler/augmentedTypesClass4.ts (2 errors) ==== //// class then class - class c3 { public foo() { } } + class c3 { public foo() { } } // error + ~~ +!!! error TS2300: Duplicate identifier 'c3'. class c3 { public bar() { } } // error ~~ !!! error TS2300: Duplicate identifier 'c3'. diff --git a/tests/baselines/reference/augmentedTypesClass4.js b/tests/baselines/reference/augmentedTypesClass4.js index c4e104e714b..71fc61d6659 100644 --- a/tests/baselines/reference/augmentedTypesClass4.js +++ b/tests/baselines/reference/augmentedTypesClass4.js @@ -1,6 +1,6 @@ //// [augmentedTypesClass4.ts] //// class then class -class c3 { public foo() { } } +class c3 { public foo() { } } // error class c3 { public bar() { } } // error @@ -12,7 +12,7 @@ var c3 = (function () { c3.prototype.foo = function () { }; return c3; -})(); +})(); // error var c3 = (function () { function c3() { } diff --git a/tests/baselines/reference/augmentedTypesEnum.errors.txt b/tests/baselines/reference/augmentedTypesEnum.errors.txt index 374ca14093b..6e04f9bfcf1 100644 --- a/tests/baselines/reference/augmentedTypesEnum.errors.txt +++ b/tests/baselines/reference/augmentedTypesEnum.errors.txt @@ -1,43 +1,58 @@ +tests/cases/compiler/augmentedTypesEnum.ts(2,6): error TS2300: Duplicate identifier 'e1111'. tests/cases/compiler/augmentedTypesEnum.ts(3,5): error TS2300: Duplicate identifier 'e1111'. -tests/cases/compiler/augmentedTypesEnum.ts(7,10): error TS2300: Duplicate identifier 'e2'. +tests/cases/compiler/augmentedTypesEnum.ts(6,6): error TS2300: Duplicate identifier 'e2'. +tests/cases/compiler/augmentedTypesEnum.ts(7,1): error TS2300: Duplicate identifier 'e2'. +tests/cases/compiler/augmentedTypesEnum.ts(9,6): error TS2300: Duplicate identifier 'e3'. tests/cases/compiler/augmentedTypesEnum.ts(10,5): error TS2300: Duplicate identifier 'e3'. +tests/cases/compiler/augmentedTypesEnum.ts(13,6): error TS2300: Duplicate identifier 'e4'. tests/cases/compiler/augmentedTypesEnum.ts(14,7): error TS2300: Duplicate identifier 'e4'. tests/cases/compiler/augmentedTypesEnum.ts(18,11): error TS2432: In an enum with multiple declarations, only one declaration can omit an initializer for its first enum element. +tests/cases/compiler/augmentedTypesEnum.ts(20,12): error TS2300: Duplicate identifier 'One'. tests/cases/compiler/augmentedTypesEnum.ts(21,12): error TS2300: Duplicate identifier 'One'. tests/cases/compiler/augmentedTypesEnum.ts(21,12): error TS2432: In an enum with multiple declarations, only one declaration can omit an initializer for its first enum element. -==== tests/cases/compiler/augmentedTypesEnum.ts (7 errors) ==== +==== tests/cases/compiler/augmentedTypesEnum.ts (12 errors) ==== // enum then var - enum e1111 { One } + enum e1111 { One } // error + ~~~~~ +!!! error TS2300: Duplicate identifier 'e1111'. var e1111 = 1; // error ~~~~~ !!! error TS2300: Duplicate identifier 'e1111'. // enum then function - enum e2 { One } + enum e2 { One } // error + ~~ +!!! error TS2300: Duplicate identifier 'e2'. function e2() { } // error - ~~ + ~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'e2'. - enum e3 { One } + enum e3 { One } // error + ~~ +!!! error TS2300: Duplicate identifier 'e3'. var e3 = () => { } // error ~~ !!! error TS2300: Duplicate identifier 'e3'. // enum then class - enum e4 { One } + enum e4 { One } // error + ~~ +!!! error TS2300: Duplicate identifier 'e4'. class e4 { public foo() { } } // error ~~ !!! error TS2300: Duplicate identifier 'e4'. // enum then enum enum e5 { One } - enum e5 { Two } + enum e5 { Two } // error ~~~ !!! error TS2432: In an enum with multiple declarations, only one declaration can omit an initializer for its first enum element. - enum e5a { One } + enum e5a { One } // error + ~~~ +!!! error TS2300: Duplicate identifier 'One'. enum e5a { One } // error ~~~ !!! error TS2300: Duplicate identifier 'One'. diff --git a/tests/baselines/reference/augmentedTypesEnum.js b/tests/baselines/reference/augmentedTypesEnum.js index 8422b99798b..f7a83018cfd 100644 --- a/tests/baselines/reference/augmentedTypesEnum.js +++ b/tests/baselines/reference/augmentedTypesEnum.js @@ -1,24 +1,24 @@ //// [augmentedTypesEnum.ts] // enum then var -enum e1111 { One } +enum e1111 { One } // error var e1111 = 1; // error // enum then function -enum e2 { One } +enum e2 { One } // error function e2() { } // error -enum e3 { One } +enum e3 { One } // error var e3 = () => { } // error // enum then class -enum e4 { One } +enum e4 { One } // error class e4 { public foo() { } } // error // enum then enum enum e5 { One } -enum e5 { Two } +enum e5 { Two } // error -enum e5a { One } +enum e5a { One } // error enum e5a { One } // error // enum then internal module @@ -40,26 +40,26 @@ module e6b { export var y = 2; } // should be error var e1111; (function (e1111) { e1111[e1111["One"] = 0] = "One"; -})(e1111 || (e1111 = {})); +})(e1111 || (e1111 = {})); // error var e1111 = 1; // error // enum then function var e2; (function (e2) { e2[e2["One"] = 0] = "One"; -})(e2 || (e2 = {})); +})(e2 || (e2 = {})); // error function e2() { } // error var e3; (function (e3) { e3[e3["One"] = 0] = "One"; -})(e3 || (e3 = {})); +})(e3 || (e3 = {})); // error var e3 = function () { }; // error // enum then class var e4; (function (e4) { e4[e4["One"] = 0] = "One"; -})(e4 || (e4 = {})); +})(e4 || (e4 = {})); // error var e4 = (function () { function e4() { } @@ -75,11 +75,11 @@ var e5; var e5; (function (e5) { e5[e5["Two"] = 0] = "Two"; -})(e5 || (e5 = {})); +})(e5 || (e5 = {})); // error var e5a; (function (e5a) { e5a[e5a["One"] = 0] = "One"; -})(e5a || (e5a = {})); +})(e5a || (e5a = {})); // error var e5a; (function (e5a) { e5a[e5a["One"] = 0] = "One"; diff --git a/tests/baselines/reference/augmentedTypesEnum2.errors.txt b/tests/baselines/reference/augmentedTypesEnum2.errors.txt index 86e155f8772..8c6c7382f85 100644 --- a/tests/baselines/reference/augmentedTypesEnum2.errors.txt +++ b/tests/baselines/reference/augmentedTypesEnum2.errors.txt @@ -1,12 +1,16 @@ +tests/cases/compiler/augmentedTypesEnum2.ts(2,6): error TS2300: Duplicate identifier 'e1'. tests/cases/compiler/augmentedTypesEnum2.ts(4,11): error TS2300: Duplicate identifier 'e1'. +tests/cases/compiler/augmentedTypesEnum2.ts(11,6): error TS2300: Duplicate identifier 'e2'. tests/cases/compiler/augmentedTypesEnum2.ts(12,7): error TS2300: Duplicate identifier 'e2'. -==== tests/cases/compiler/augmentedTypesEnum2.ts (2 errors) ==== +==== tests/cases/compiler/augmentedTypesEnum2.ts (4 errors) ==== // enum then interface - enum e1 { One } + enum e1 { One } // error + ~~ +!!! error TS2300: Duplicate identifier 'e1'. - interface e1 { + interface e1 { // error ~~ !!! error TS2300: Duplicate identifier 'e1'. foo(): void; @@ -15,7 +19,9 @@ tests/cases/compiler/augmentedTypesEnum2.ts(12,7): error TS2300: Duplicate ident // interface then enum works // enum then class - enum e2 { One }; + enum e2 { One }; // error + ~~ +!!! error TS2300: Duplicate identifier 'e2'. class e2 { // error ~~ !!! error TS2300: Duplicate identifier 'e2'. diff --git a/tests/baselines/reference/augmentedTypesEnum2.js b/tests/baselines/reference/augmentedTypesEnum2.js index 13656b33411..8ab98a7cb7b 100644 --- a/tests/baselines/reference/augmentedTypesEnum2.js +++ b/tests/baselines/reference/augmentedTypesEnum2.js @@ -1,15 +1,15 @@ //// [augmentedTypesEnum2.ts] // enum then interface -enum e1 { One } +enum e1 { One } // error -interface e1 { +interface e1 { // error foo(): void; } // interface then enum works // enum then class -enum e2 { One }; +enum e2 { One }; // error class e2 { // error foo() { return 1; @@ -24,7 +24,7 @@ class e2 { // error var e1; (function (e1) { e1[e1["One"] = 0] = "One"; -})(e1 || (e1 = {})); +})(e1 || (e1 = {})); // error // interface then enum works // enum then class var e2; diff --git a/tests/baselines/reference/augmentedTypesFunction.errors.txt b/tests/baselines/reference/augmentedTypesFunction.errors.txt index ba324349c65..60d6dd3b30d 100644 --- a/tests/baselines/reference/augmentedTypesFunction.errors.txt +++ b/tests/baselines/reference/augmentedTypesFunction.errors.txt @@ -1,42 +1,60 @@ +tests/cases/compiler/augmentedTypesFunction.ts(2,10): error TS2300: Duplicate identifier 'y1'. tests/cases/compiler/augmentedTypesFunction.ts(3,5): error TS2300: Duplicate identifier 'y1'. +tests/cases/compiler/augmentedTypesFunction.ts(6,1): error TS2393: Duplicate function implementation. tests/cases/compiler/augmentedTypesFunction.ts(7,1): error TS2393: Duplicate function implementation. +tests/cases/compiler/augmentedTypesFunction.ts(9,10): error TS2300: Duplicate identifier 'y2a'. tests/cases/compiler/augmentedTypesFunction.ts(10,5): error TS2300: Duplicate identifier 'y2a'. +tests/cases/compiler/augmentedTypesFunction.ts(13,10): error TS2300: Duplicate identifier 'y3'. tests/cases/compiler/augmentedTypesFunction.ts(14,7): error TS2300: Duplicate identifier 'y3'. +tests/cases/compiler/augmentedTypesFunction.ts(16,10): error TS2300: Duplicate identifier 'y3a'. tests/cases/compiler/augmentedTypesFunction.ts(17,7): error TS2300: Duplicate identifier 'y3a'. +tests/cases/compiler/augmentedTypesFunction.ts(20,10): error TS2300: Duplicate identifier 'y4'. tests/cases/compiler/augmentedTypesFunction.ts(21,6): error TS2300: Duplicate identifier 'y4'. -==== tests/cases/compiler/augmentedTypesFunction.ts (6 errors) ==== +==== tests/cases/compiler/augmentedTypesFunction.ts (12 errors) ==== // function then var - function y1() { } + function y1() { } // error + ~~ +!!! error TS2300: Duplicate identifier 'y1'. var y1 = 1; // error ~~ !!! error TS2300: Duplicate identifier 'y1'. // function then function - function y2() { } + function y2() { } // error + ~~~~~~~~~~~~~~~~~ +!!! error TS2393: Duplicate function implementation. function y2() { } // error ~~~~~~~~~~~~~~~~~ !!! error TS2393: Duplicate function implementation. - function y2a() { } + function y2a() { } // error + ~~~ +!!! error TS2300: Duplicate identifier 'y2a'. var y2a = () => { } // error ~~~ !!! error TS2300: Duplicate identifier 'y2a'. // function then class - function y3() { } + function y3() { } // error + ~~ +!!! error TS2300: Duplicate identifier 'y3'. class y3 { } // error ~~ !!! error TS2300: Duplicate identifier 'y3'. - function y3a() { } + function y3a() { } // error + ~~~ +!!! error TS2300: Duplicate identifier 'y3a'. class y3a { public foo() { } } // error ~~~ !!! error TS2300: Duplicate identifier 'y3a'. // function then enum - function y4() { } + function y4() { } // error + ~~ +!!! error TS2300: Duplicate identifier 'y4'. enum y4 { One } // error ~~ !!! error TS2300: Duplicate identifier 'y4'. diff --git a/tests/baselines/reference/augmentedTypesFunction.js b/tests/baselines/reference/augmentedTypesFunction.js index 097482c7c5b..078854e227c 100644 --- a/tests/baselines/reference/augmentedTypesFunction.js +++ b/tests/baselines/reference/augmentedTypesFunction.js @@ -1,24 +1,24 @@ //// [augmentedTypesFunction.ts] // function then var -function y1() { } +function y1() { } // error var y1 = 1; // error // function then function -function y2() { } +function y2() { } // error function y2() { } // error -function y2a() { } +function y2a() { } // error var y2a = () => { } // error // function then class -function y3() { } +function y3() { } // error class y3 { } // error -function y3a() { } +function y3a() { } // error class y3a { public foo() { } } // error // function then enum -function y4() { } +function y4() { } // error enum y4 { One } // error // function then internal module @@ -41,27 +41,27 @@ module y5c { export interface I { foo(): void } } // should be an error //// [augmentedTypesFunction.js] // function then var function y1() { -} +} // error var y1 = 1; // error // function then function function y2() { -} +} // error function y2() { } // error function y2a() { -} +} // error var y2a = function () { }; // error // function then class function y3() { -} +} // error var y3 = (function () { function y3() { } return y3; })(); // error function y3a() { -} +} // error var y3a = (function () { function y3a() { } @@ -71,7 +71,7 @@ var y3a = (function () { })(); // error // function then enum function y4() { -} +} // error var y4; (function (y4) { y4[y4["One"] = 0] = "One"; diff --git a/tests/baselines/reference/augmentedTypesInterface.errors.txt b/tests/baselines/reference/augmentedTypesInterface.errors.txt index 77a7fa64eed..a9fc28dd5ae 100644 --- a/tests/baselines/reference/augmentedTypesInterface.errors.txt +++ b/tests/baselines/reference/augmentedTypesInterface.errors.txt @@ -1,8 +1,10 @@ +tests/cases/compiler/augmentedTypesInterface.ts(12,11): error TS2300: Duplicate identifier 'i2'. tests/cases/compiler/augmentedTypesInterface.ts(16,7): error TS2300: Duplicate identifier 'i2'. +tests/cases/compiler/augmentedTypesInterface.ts(23,11): error TS2300: Duplicate identifier 'i3'. tests/cases/compiler/augmentedTypesInterface.ts(26,6): error TS2300: Duplicate identifier 'i3'. -==== tests/cases/compiler/augmentedTypesInterface.ts (2 errors) ==== +==== tests/cases/compiler/augmentedTypesInterface.ts (4 errors) ==== // interface then interface interface i { @@ -14,7 +16,9 @@ tests/cases/compiler/augmentedTypesInterface.ts(26,6): error TS2300: Duplicate i } // interface then class - interface i2 { + interface i2 { // error + ~~ +!!! error TS2300: Duplicate identifier 'i2'. foo(): void; } @@ -27,7 +31,9 @@ tests/cases/compiler/augmentedTypesInterface.ts(26,6): error TS2300: Duplicate i } // interface then enum - interface i3 { + interface i3 { // error + ~~ +!!! error TS2300: Duplicate identifier 'i3'. foo(): void; } enum i3 { One }; // error diff --git a/tests/baselines/reference/augmentedTypesInterface.js b/tests/baselines/reference/augmentedTypesInterface.js index 5c68ba9a744..709b16d615c 100644 --- a/tests/baselines/reference/augmentedTypesInterface.js +++ b/tests/baselines/reference/augmentedTypesInterface.js @@ -10,7 +10,7 @@ interface i { } // interface then class -interface i2 { +interface i2 { // error foo(): void; } @@ -21,7 +21,7 @@ class i2 { // error } // interface then enum -interface i3 { +interface i3 { // error foo(): void; } enum i3 { One }; // error diff --git a/tests/baselines/reference/augmentedTypesModules.errors.txt b/tests/baselines/reference/augmentedTypesModules.errors.txt index 75b1973525d..980837a18ef 100644 --- a/tests/baselines/reference/augmentedTypesModules.errors.txt +++ b/tests/baselines/reference/augmentedTypesModules.errors.txt @@ -1,23 +1,30 @@ +tests/cases/compiler/augmentedTypesModules.ts(5,8): error TS2300: Duplicate identifier 'm1a'. tests/cases/compiler/augmentedTypesModules.ts(6,5): error TS2300: Duplicate identifier 'm1a'. +tests/cases/compiler/augmentedTypesModules.ts(8,8): error TS2300: Duplicate identifier 'm1b'. tests/cases/compiler/augmentedTypesModules.ts(9,5): error TS2300: Duplicate identifier 'm1b'. +tests/cases/compiler/augmentedTypesModules.ts(16,8): error TS2300: Duplicate identifier 'm1d'. tests/cases/compiler/augmentedTypesModules.ts(19,5): error TS2300: Duplicate identifier 'm1d'. tests/cases/compiler/augmentedTypesModules.ts(25,8): error TS2434: A module declaration cannot be located prior to a class or function with which it is merged tests/cases/compiler/augmentedTypesModules.ts(28,8): error TS2434: A module declaration cannot be located prior to a class or function with which it is merged tests/cases/compiler/augmentedTypesModules.ts(51,8): error TS2434: A module declaration cannot be located prior to a class or function with which it is merged -==== tests/cases/compiler/augmentedTypesModules.ts (6 errors) ==== +==== tests/cases/compiler/augmentedTypesModules.ts (9 errors) ==== // module then var module m1 { } var m1 = 1; // Should be allowed - module m1a { var y = 2; } - var m1a = 1; + module m1a { var y = 2; } // error + ~~~ +!!! error TS2300: Duplicate identifier 'm1a'. + var m1a = 1; // error ~~~ !!! error TS2300: Duplicate identifier 'm1a'. - module m1b { export var y = 2; } - var m1b = 1; + module m1b { export var y = 2; } // error + ~~~ +!!! error TS2300: Duplicate identifier 'm1b'. + var m1b = 1; // error ~~~ !!! error TS2300: Duplicate identifier 'm1b'. @@ -26,7 +33,9 @@ tests/cases/compiler/augmentedTypesModules.ts(51,8): error TS2434: A module decl } var m1c = 1; // Should be allowed - module m1d { + module m1d { // error + ~~~ +!!! error TS2300: Duplicate identifier 'm1d'. export class I { foo() { } } } var m1d = 1; // error diff --git a/tests/baselines/reference/augmentedTypesModules.js b/tests/baselines/reference/augmentedTypesModules.js index 5085b1cbda3..0c7967b2227 100644 --- a/tests/baselines/reference/augmentedTypesModules.js +++ b/tests/baselines/reference/augmentedTypesModules.js @@ -3,18 +3,18 @@ module m1 { } var m1 = 1; // Should be allowed -module m1a { var y = 2; } -var m1a = 1; +module m1a { var y = 2; } // error +var m1a = 1; // error -module m1b { export var y = 2; } -var m1b = 1; +module m1b { export var y = 2; } // error +var m1b = 1; // error module m1c { export interface I { foo(): void; } } var m1c = 1; // Should be allowed -module m1d { +module m1d { // error export class I { foo() { } } } var m1d = 1; // error @@ -102,13 +102,13 @@ var m1 = 1; // Should be allowed var m1a; (function (m1a) { var y = 2; -})(m1a || (m1a = {})); -var m1a = 1; +})(m1a || (m1a = {})); // error +var m1a = 1; // error var m1b; (function (m1b) { m1b.y = 2; -})(m1b || (m1b = {})); -var m1b = 1; +})(m1b || (m1b = {})); // error +var m1b = 1; // error var m1c = 1; // Should be allowed var m1d; (function (m1d) { diff --git a/tests/baselines/reference/augmentedTypesVar.errors.txt b/tests/baselines/reference/augmentedTypesVar.errors.txt index 9f3980e39bc..ee4319baffb 100644 --- a/tests/baselines/reference/augmentedTypesVar.errors.txt +++ b/tests/baselines/reference/augmentedTypesVar.errors.txt @@ -1,41 +1,55 @@ -tests/cases/compiler/augmentedTypesVar.ts(7,10): error TS2300: Duplicate identifier 'x2'. +tests/cases/compiler/augmentedTypesVar.ts(6,5): error TS2300: Duplicate identifier 'x2'. +tests/cases/compiler/augmentedTypesVar.ts(7,1): error TS2300: Duplicate identifier 'x2'. tests/cases/compiler/augmentedTypesVar.ts(10,5): error TS2403: Subsequent variable declarations must have the same type. Variable 'x3' must be of type 'number', but here has type '() => void'. +tests/cases/compiler/augmentedTypesVar.ts(13,5): error TS2300: Duplicate identifier 'x4'. tests/cases/compiler/augmentedTypesVar.ts(14,7): error TS2300: Duplicate identifier 'x4'. +tests/cases/compiler/augmentedTypesVar.ts(16,5): error TS2300: Duplicate identifier 'x4a'. tests/cases/compiler/augmentedTypesVar.ts(17,7): error TS2300: Duplicate identifier 'x4a'. +tests/cases/compiler/augmentedTypesVar.ts(20,5): error TS2300: Duplicate identifier 'x5'. tests/cases/compiler/augmentedTypesVar.ts(21,6): error TS2300: Duplicate identifier 'x5'. +tests/cases/compiler/augmentedTypesVar.ts(27,5): error TS2300: Duplicate identifier 'x6a'. tests/cases/compiler/augmentedTypesVar.ts(28,8): error TS2300: Duplicate identifier 'x6a'. +tests/cases/compiler/augmentedTypesVar.ts(30,5): error TS2300: Duplicate identifier 'x6b'. tests/cases/compiler/augmentedTypesVar.ts(31,8): error TS2300: Duplicate identifier 'x6b'. -==== tests/cases/compiler/augmentedTypesVar.ts (7 errors) ==== +==== tests/cases/compiler/augmentedTypesVar.ts (13 errors) ==== // var then var var x1 = 1; var x1 = 2; // var then function - var x2 = 1; - function x2() { } // should be an error - ~~ + var x2 = 1; // error + ~~ +!!! error TS2300: Duplicate identifier 'x2'. + function x2() { } // error + ~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'x2'. - var x3 = 1; - var x3 = () => { } // should be an error + var x3 = 1; + var x3 = () => { } // error ~~ !!! error TS2403: Subsequent variable declarations must have the same type. Variable 'x3' must be of type 'number', but here has type '() => void'. // var then class - var x4 = 1; + var x4 = 1; // error + ~~ +!!! error TS2300: Duplicate identifier 'x4'. class x4 { } // error ~~ !!! error TS2300: Duplicate identifier 'x4'. - var x4a = 1; + var x4a = 1; // error + ~~~ +!!! error TS2300: Duplicate identifier 'x4a'. class x4a { public foo() { } } // error ~~~ !!! error TS2300: Duplicate identifier 'x4a'. // var then enum var x5 = 1; + ~~ +!!! error TS2300: Duplicate identifier 'x5'. enum x5 { One } // error ~~ !!! error TS2300: Duplicate identifier 'x5'. @@ -44,12 +58,16 @@ tests/cases/compiler/augmentedTypesVar.ts(31,8): error TS2300: Duplicate identif var x6 = 1; module x6 { } // ok since non-instantiated - var x6a = 1; + var x6a = 1; // error + ~~~ +!!! error TS2300: Duplicate identifier 'x6a'. module x6a { var y = 2; } // error since instantiated ~~~ !!! error TS2300: Duplicate identifier 'x6a'. - var x6b = 1; + var x6b = 1; // error + ~~~ +!!! error TS2300: Duplicate identifier 'x6b'. module x6b { export var y = 2; } // error ~~~ !!! error TS2300: Duplicate identifier 'x6b'. diff --git a/tests/baselines/reference/augmentedTypesVar.js b/tests/baselines/reference/augmentedTypesVar.js index ca50b8ab9a9..4735d647056 100644 --- a/tests/baselines/reference/augmentedTypesVar.js +++ b/tests/baselines/reference/augmentedTypesVar.js @@ -4,17 +4,17 @@ var x1 = 1; var x1 = 2; // var then function -var x2 = 1; -function x2() { } // should be an error +var x2 = 1; // error +function x2() { } // error -var x3 = 1; -var x3 = () => { } // should be an error +var x3 = 1; +var x3 = () => { } // error // var then class -var x4 = 1; +var x4 = 1; // error class x4 { } // error -var x4a = 1; +var x4a = 1; // error class x4a { public foo() { } } // error // var then enum @@ -25,10 +25,10 @@ enum x5 { One } // error var x6 = 1; module x6 { } // ok since non-instantiated -var x6a = 1; +var x6a = 1; // error module x6a { var y = 2; } // error since instantiated -var x6b = 1; +var x6b = 1; // error module x6b { export var y = 2; } // error // var then import, messes with other error reporting @@ -41,20 +41,20 @@ module x6b { export var y = 2; } // error var x1 = 1; var x1 = 2; // var then function -var x2 = 1; +var x2 = 1; // error function x2() { -} // should be an error +} // error var x3 = 1; var x3 = function () { -}; // should be an error +}; // error // var then class -var x4 = 1; +var x4 = 1; // error var x4 = (function () { function x4() { } return x4; })(); // error -var x4a = 1; +var x4a = 1; // error var x4a = (function () { function x4a() { } @@ -70,12 +70,12 @@ var x5; })(x5 || (x5 = {})); // error // var then module var x6 = 1; -var x6a = 1; +var x6a = 1; // error var x6a; (function (x6a) { var y = 2; })(x6a || (x6a = {})); // error since instantiated -var x6b = 1; +var x6b = 1; // error var x6b; (function (x6b) { x6b.y = 2; diff --git a/tests/baselines/reference/callOnInstance.errors.txt b/tests/baselines/reference/callOnInstance.errors.txt index c1861d05377..156bdfd512a 100644 --- a/tests/baselines/reference/callOnInstance.errors.txt +++ b/tests/baselines/reference/callOnInstance.errors.txt @@ -1,13 +1,16 @@ +tests/cases/compiler/callOnInstance.ts(1,18): error TS2300: Duplicate identifier 'D'. tests/cases/compiler/callOnInstance.ts(3,15): error TS2300: Duplicate identifier 'D'. tests/cases/compiler/callOnInstance.ts(7,19): error TS2346: Supplied parameters do not match any signature of call target. tests/cases/compiler/callOnInstance.ts(7,19): error TS2350: Only a void function can be called with the 'new' keyword. tests/cases/compiler/callOnInstance.ts(10,1): error TS2349: Cannot invoke an expression whose type lacks a call signature. -==== tests/cases/compiler/callOnInstance.ts (4 errors) ==== - declare function D(): string; +==== tests/cases/compiler/callOnInstance.ts (5 errors) ==== + declare function D(): string; // error + ~ +!!! error TS2300: Duplicate identifier 'D'. - declare class D { constructor (value: number); } // Duplicate identifier + declare class D { constructor (value: number); } // error ~ !!! error TS2300: Duplicate identifier 'D'. diff --git a/tests/baselines/reference/callOnInstance.js b/tests/baselines/reference/callOnInstance.js index 477bdca26a7..3b07d0affc8 100644 --- a/tests/baselines/reference/callOnInstance.js +++ b/tests/baselines/reference/callOnInstance.js @@ -1,7 +1,7 @@ //// [callOnInstance.ts] -declare function D(): string; +declare function D(): string; // error -declare class D { constructor (value: number); } // Duplicate identifier +declare class D { constructor (value: number); } // error var s1: string = D(); // OK diff --git a/tests/baselines/reference/callOverloads1.errors.txt b/tests/baselines/reference/callOverloads1.errors.txt index 759c00aa7e4..1f778a42cdf 100644 --- a/tests/baselines/reference/callOverloads1.errors.txt +++ b/tests/baselines/reference/callOverloads1.errors.txt @@ -1,10 +1,13 @@ -tests/cases/compiler/callOverloads1.ts(9,10): error TS2300: Duplicate identifier 'Foo'. +tests/cases/compiler/callOverloads1.ts(1,7): error TS2300: Duplicate identifier 'Foo'. +tests/cases/compiler/callOverloads1.ts(9,1): error TS2300: Duplicate identifier 'Foo'. tests/cases/compiler/callOverloads1.ts(9,10): error TS2391: Function implementation is missing or not immediately following the declaration. tests/cases/compiler/callOverloads1.ts(17,1): error TS2348: Value of type 'typeof Foo' is not callable. Did you mean to include 'new'? -==== tests/cases/compiler/callOverloads1.ts (3 errors) ==== - class Foo { +==== tests/cases/compiler/callOverloads1.ts (4 errors) ==== + class Foo { // error + ~~~ +!!! error TS2300: Duplicate identifier 'Foo'. bar1() { /*WScript.Echo("bar1");*/ } constructor(x: any) { @@ -13,7 +16,7 @@ tests/cases/compiler/callOverloads1.ts(17,1): error TS2348: Value of type 'typeo } function Foo(); // error - ~~~ + ~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'Foo'. ~~~ !!! error TS2391: Function implementation is missing or not immediately following the declaration. diff --git a/tests/baselines/reference/callOverloads1.js b/tests/baselines/reference/callOverloads1.js index dc76fcba98a..86cb951f853 100644 --- a/tests/baselines/reference/callOverloads1.js +++ b/tests/baselines/reference/callOverloads1.js @@ -1,5 +1,5 @@ //// [callOverloads1.ts] -class Foo { +class Foo { // error bar1() { /*WScript.Echo("bar1");*/ } constructor(x: any) { diff --git a/tests/baselines/reference/callOverloads2.errors.txt b/tests/baselines/reference/callOverloads2.errors.txt index 693b67872eb..3759ae719c9 100644 --- a/tests/baselines/reference/callOverloads2.errors.txt +++ b/tests/baselines/reference/callOverloads2.errors.txt @@ -1,14 +1,18 @@ -tests/cases/compiler/callOverloads2.ts(11,10): error TS2300: Duplicate identifier 'Foo'. +tests/cases/compiler/callOverloads2.ts(3,7): error TS2300: Duplicate identifier 'Foo'. +tests/cases/compiler/callOverloads2.ts(11,1): error TS2300: Duplicate identifier 'Foo'. +tests/cases/compiler/callOverloads2.ts(13,1): error TS2393: Duplicate function implementation. tests/cases/compiler/callOverloads2.ts(13,10): error TS2389: Function implementation name must be 'Foo'. tests/cases/compiler/callOverloads2.ts(14,1): error TS2393: Duplicate function implementation. tests/cases/compiler/callOverloads2.ts(16,10): error TS2391: Function implementation is missing or not immediately following the declaration. tests/cases/compiler/callOverloads2.ts(24,1): error TS2348: Value of type 'typeof Foo' is not callable. Did you mean to include 'new'? -==== tests/cases/compiler/callOverloads2.ts (5 errors) ==== +==== tests/cases/compiler/callOverloads2.ts (7 errors) ==== class Foo { + ~~~ +!!! error TS2300: Duplicate identifier 'Foo'. bar1() { /*WScript.Echo("bar1");*/ } constructor(x: any) { @@ -17,10 +21,12 @@ tests/cases/compiler/callOverloads2.ts(24,1): error TS2348: Value of type 'typeo } function Foo(); - ~~~ + ~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'Foo'. function F1(s:string) {return s;} + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2393: Duplicate function implementation. ~~ !!! error TS2389: Function implementation name must be 'Foo'. function F1(a:any) { return a;} // error - duplicate identifier diff --git a/tests/baselines/reference/callOverloads3.errors.txt b/tests/baselines/reference/callOverloads3.errors.txt index 986f0478369..86124251752 100644 --- a/tests/baselines/reference/callOverloads3.errors.txt +++ b/tests/baselines/reference/callOverloads3.errors.txt @@ -1,17 +1,23 @@ +tests/cases/compiler/callOverloads3.ts(2,10): error TS2300: Duplicate identifier 'Foo'. tests/cases/compiler/callOverloads3.ts(2,16): error TS2304: Cannot find name 'Foo'. +tests/cases/compiler/callOverloads3.ts(3,10): error TS2300: Duplicate identifier 'Foo'. tests/cases/compiler/callOverloads3.ts(3,10): error TS2391: Function implementation is missing or not immediately following the declaration. tests/cases/compiler/callOverloads3.ts(3,24): error TS2304: Cannot find name 'Foo'. tests/cases/compiler/callOverloads3.ts(4,7): error TS2300: Duplicate identifier 'Foo'. tests/cases/compiler/callOverloads3.ts(12,10): error TS2350: Only a void function can be called with the 'new' keyword. -==== tests/cases/compiler/callOverloads3.ts (5 errors) ==== +==== tests/cases/compiler/callOverloads3.ts (7 errors) ==== function Foo():Foo; + ~~~ +!!! error TS2300: Duplicate identifier 'Foo'. ~~~ !!! error TS2304: Cannot find name 'Foo'. function Foo(s:string):Foo; ~~~ +!!! error TS2300: Duplicate identifier 'Foo'. + ~~~ !!! error TS2391: Function implementation is missing or not immediately following the declaration. ~~~ !!! error TS2304: Cannot find name 'Foo'. diff --git a/tests/baselines/reference/callOverloads4.errors.txt b/tests/baselines/reference/callOverloads4.errors.txt index cec3a1834ba..24d304b45c6 100644 --- a/tests/baselines/reference/callOverloads4.errors.txt +++ b/tests/baselines/reference/callOverloads4.errors.txt @@ -1,17 +1,23 @@ +tests/cases/compiler/callOverloads4.ts(2,10): error TS2300: Duplicate identifier 'Foo'. tests/cases/compiler/callOverloads4.ts(2,16): error TS2304: Cannot find name 'Foo'. +tests/cases/compiler/callOverloads4.ts(3,10): error TS2300: Duplicate identifier 'Foo'. tests/cases/compiler/callOverloads4.ts(3,10): error TS2391: Function implementation is missing or not immediately following the declaration. tests/cases/compiler/callOverloads4.ts(3,24): error TS2304: Cannot find name 'Foo'. tests/cases/compiler/callOverloads4.ts(4,7): error TS2300: Duplicate identifier 'Foo'. tests/cases/compiler/callOverloads4.ts(12,10): error TS2350: Only a void function can be called with the 'new' keyword. -==== tests/cases/compiler/callOverloads4.ts (5 errors) ==== +==== tests/cases/compiler/callOverloads4.ts (7 errors) ==== function Foo():Foo; + ~~~ +!!! error TS2300: Duplicate identifier 'Foo'. ~~~ !!! error TS2304: Cannot find name 'Foo'. function Foo(s:string):Foo; ~~~ +!!! error TS2300: Duplicate identifier 'Foo'. + ~~~ !!! error TS2391: Function implementation is missing or not immediately following the declaration. ~~~ !!! error TS2304: Cannot find name 'Foo'. diff --git a/tests/baselines/reference/callOverloads5.errors.txt b/tests/baselines/reference/callOverloads5.errors.txt index 240e10b9f55..a2a8711d211 100644 --- a/tests/baselines/reference/callOverloads5.errors.txt +++ b/tests/baselines/reference/callOverloads5.errors.txt @@ -1,16 +1,22 @@ +tests/cases/compiler/callOverloads5.ts(1,10): error TS2300: Duplicate identifier 'Foo'. tests/cases/compiler/callOverloads5.ts(1,16): error TS2304: Cannot find name 'Foo'. +tests/cases/compiler/callOverloads5.ts(2,10): error TS2300: Duplicate identifier 'Foo'. tests/cases/compiler/callOverloads5.ts(2,10): error TS2391: Function implementation is missing or not immediately following the declaration. tests/cases/compiler/callOverloads5.ts(2,24): error TS2304: Cannot find name 'Foo'. tests/cases/compiler/callOverloads5.ts(3,7): error TS2300: Duplicate identifier 'Foo'. tests/cases/compiler/callOverloads5.ts(13,10): error TS2350: Only a void function can be called with the 'new' keyword. -==== tests/cases/compiler/callOverloads5.ts (5 errors) ==== +==== tests/cases/compiler/callOverloads5.ts (7 errors) ==== function Foo():Foo; + ~~~ +!!! error TS2300: Duplicate identifier 'Foo'. ~~~ !!! error TS2304: Cannot find name 'Foo'. function Foo(s:string):Foo; ~~~ +!!! error TS2300: Duplicate identifier 'Foo'. + ~~~ !!! error TS2391: Function implementation is missing or not immediately following the declaration. ~~~ !!! error TS2304: Cannot find name 'Foo'. diff --git a/tests/baselines/reference/callSignaturesWithDuplicateParameters.errors.txt b/tests/baselines/reference/callSignaturesWithDuplicateParameters.errors.txt index ff1fd1e66cf..c87eb32515e 100644 --- a/tests/baselines/reference/callSignaturesWithDuplicateParameters.errors.txt +++ b/tests/baselines/reference/callSignaturesWithDuplicateParameters.errors.txt @@ -1,107 +1,173 @@ +tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithDuplicateParameters.ts(3,14): error TS2300: Duplicate identifier 'x'. tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithDuplicateParameters.ts(3,17): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithDuplicateParameters.ts(4,22): error TS2300: Duplicate identifier 'x'. tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithDuplicateParameters.ts(4,25): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithDuplicateParameters.ts(5,20): error TS2300: Duplicate identifier 'x'. tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithDuplicateParameters.ts(5,23): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithDuplicateParameters.ts(6,11): error TS2300: Duplicate identifier 'x'. tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithDuplicateParameters.ts(6,14): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithDuplicateParameters.ts(7,14): error TS2300: Duplicate identifier 'x'. tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithDuplicateParameters.ts(7,20): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithDuplicateParameters.ts(9,15): error TS2300: Duplicate identifier 'x'. tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithDuplicateParameters.ts(9,26): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithDuplicateParameters.ts(10,23): error TS2300: Duplicate identifier 'x'. tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithDuplicateParameters.ts(10,34): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithDuplicateParameters.ts(11,20): error TS2300: Duplicate identifier 'x'. tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithDuplicateParameters.ts(11,31): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithDuplicateParameters.ts(12,11): error TS2300: Duplicate identifier 'x'. tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithDuplicateParameters.ts(12,22): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithDuplicateParameters.ts(16,9): error TS2300: Duplicate identifier 'x'. tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithDuplicateParameters.ts(16,12): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithDuplicateParameters.ts(17,10): error TS2300: Duplicate identifier 'x'. tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithDuplicateParameters.ts(17,21): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithDuplicateParameters.ts(18,13): error TS2300: Duplicate identifier 'x'. tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithDuplicateParameters.ts(18,19): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithDuplicateParameters.ts(22,6): error TS2300: Duplicate identifier 'x'. tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithDuplicateParameters.ts(22,9): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithDuplicateParameters.ts(23,6): error TS2300: Duplicate identifier 'x'. tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithDuplicateParameters.ts(23,17): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithDuplicateParameters.ts(24,9): error TS2300: Duplicate identifier 'x'. tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithDuplicateParameters.ts(24,12): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithDuplicateParameters.ts(25,9): error TS2300: Duplicate identifier 'x'. tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithDuplicateParameters.ts(25,20): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithDuplicateParameters.ts(26,13): error TS2300: Duplicate identifier 'x'. tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithDuplicateParameters.ts(26,19): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithDuplicateParameters.ts(30,9): error TS2300: Duplicate identifier 'x'. tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithDuplicateParameters.ts(30,12): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithDuplicateParameters.ts(31,10): error TS2300: Duplicate identifier 'x'. tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithDuplicateParameters.ts(31,21): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithDuplicateParameters.ts(35,9): error TS2300: Duplicate identifier 'x'. tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithDuplicateParameters.ts(35,12): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithDuplicateParameters.ts(36,21): error TS2300: Duplicate identifier 'x'. tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithDuplicateParameters.ts(36,32): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithDuplicateParameters.ts(37,12): error TS2300: Duplicate identifier 'x'. tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithDuplicateParameters.ts(37,18): error TS2300: Duplicate identifier 'x'. -==== tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithDuplicateParameters.ts (22 errors) ==== +==== tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithDuplicateParameters.ts (44 errors) ==== // Duplicate parameter names are always an error function foo(x, x) { } + ~ +!!! error TS2300: Duplicate identifier 'x'. ~ !!! error TS2300: Duplicate identifier 'x'. var f = function foo(x, x) { } + ~ +!!! error TS2300: Duplicate identifier 'x'. ~ !!! error TS2300: Duplicate identifier 'x'. var f2 = function (x, x) { } + ~ +!!! error TS2300: Duplicate identifier 'x'. ~ !!! error TS2300: Duplicate identifier 'x'. var f3 = (x, x) => { } + ~ +!!! error TS2300: Duplicate identifier 'x'. ~ !!! error TS2300: Duplicate identifier 'x'. var f4 = (x: T, x: T) => { } - ~ + ~ +!!! error TS2300: Duplicate identifier 'x'. + ~~~~ !!! error TS2300: Duplicate identifier 'x'. function foo2(x: string, x: number) { } - ~ + ~ +!!! error TS2300: Duplicate identifier 'x'. + ~~~~~~~~~ !!! error TS2300: Duplicate identifier 'x'. var f5 = function foo(x: string, x: number) { } - ~ + ~ +!!! error TS2300: Duplicate identifier 'x'. + ~~~~~~~~~ !!! error TS2300: Duplicate identifier 'x'. var f6 = function (x: string, x: number) { } - ~ + ~ +!!! error TS2300: Duplicate identifier 'x'. + ~~~~~~~~~ !!! error TS2300: Duplicate identifier 'x'. var f7 = (x: string, x: number) => { } - ~ + ~ +!!! error TS2300: Duplicate identifier 'x'. + ~~~~~~~~~ !!! error TS2300: Duplicate identifier 'x'. var f8 = (x: T, y: T) => { } class C { foo(x, x) { } + ~ +!!! error TS2300: Duplicate identifier 'x'. ~ !!! error TS2300: Duplicate identifier 'x'. foo2(x: number, x: string) { } - ~ + ~ +!!! error TS2300: Duplicate identifier 'x'. + ~~~~~~~~~ !!! error TS2300: Duplicate identifier 'x'. foo3(x: T, x: T) { } - ~ + ~ +!!! error TS2300: Duplicate identifier 'x'. + ~~~~ !!! error TS2300: Duplicate identifier 'x'. } interface I { (x, x); + ~ +!!! error TS2300: Duplicate identifier 'x'. ~ !!! error TS2300: Duplicate identifier 'x'. (x: string, x: number); - ~ + ~ +!!! error TS2300: Duplicate identifier 'x'. + ~~~~~~~~~ !!! error TS2300: Duplicate identifier 'x'. foo(x, x); + ~ +!!! error TS2300: Duplicate identifier 'x'. ~ !!! error TS2300: Duplicate identifier 'x'. foo(x: number, x: string); - ~ + ~ +!!! error TS2300: Duplicate identifier 'x'. + ~~~~~~~~~ !!! error TS2300: Duplicate identifier 'x'. foo3(x: T, x: T); - ~ + ~ +!!! error TS2300: Duplicate identifier 'x'. + ~~~~ !!! error TS2300: Duplicate identifier 'x'. } var a: { foo(x, x); + ~ +!!! error TS2300: Duplicate identifier 'x'. ~ !!! error TS2300: Duplicate identifier 'x'. foo2(x: number, x: string); - ~ + ~ +!!! error TS2300: Duplicate identifier 'x'. + ~~~~~~~~~ !!! error TS2300: Duplicate identifier 'x'. }; var b = { foo(x, x) { }, + ~ +!!! error TS2300: Duplicate identifier 'x'. ~ !!! error TS2300: Duplicate identifier 'x'. a: function foo(x: number, x: string) { }, - ~ + ~ +!!! error TS2300: Duplicate identifier 'x'. + ~~~~~~~~~ !!! error TS2300: Duplicate identifier 'x'. b: (x: T, x: T) => { } - ~ + ~ +!!! error TS2300: Duplicate identifier 'x'. + ~~~~ !!! error TS2300: Duplicate identifier 'x'. } \ No newline at end of file diff --git a/tests/baselines/reference/callSignaturesWithParameterInitializers2.errors.txt b/tests/baselines/reference/callSignaturesWithParameterInitializers2.errors.txt index fcc1eee9169..76bf9aec947 100644 --- a/tests/baselines/reference/callSignaturesWithParameterInitializers2.errors.txt +++ b/tests/baselines/reference/callSignaturesWithParameterInitializers2.errors.txt @@ -1,10 +1,11 @@ tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithParameterInitializers2.ts(20,15): error TS1005: '{' expected. tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithParameterInitializers2.ts(4,14): error TS2371: A parameter initializer is only allowed in a function or constructor implementation. tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithParameterInitializers2.ts(11,9): error TS2371: A parameter initializer is only allowed in a function or constructor implementation. +tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithParameterInitializers2.ts(20,5): error TS2300: Duplicate identifier 'foo'. tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithParameterInitializers2.ts(21,5): error TS2300: Duplicate identifier 'foo'. -==== tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithParameterInitializers2.ts (4 errors) ==== +==== tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithParameterInitializers2.ts (5 errors) ==== // Optional parameters allow initializers only in implementation signatures // All the below declarations are errors @@ -31,8 +32,10 @@ tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWit foo(x = 1), ~ !!! error TS1005: '{' expected. - foo(x = 1) { }, ~~~ +!!! error TS2300: Duplicate identifier 'foo'. + foo(x = 1) { }, + ~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'foo'. } diff --git a/tests/baselines/reference/class1.errors.txt b/tests/baselines/reference/class1.errors.txt index 91d29d981c2..13602645c45 100644 --- a/tests/baselines/reference/class1.errors.txt +++ b/tests/baselines/reference/class1.errors.txt @@ -1,8 +1,11 @@ +tests/cases/compiler/class1.ts(1,11): error TS2300: Duplicate identifier 'foo'. tests/cases/compiler/class1.ts(2,7): error TS2300: Duplicate identifier 'foo'. -==== tests/cases/compiler/class1.ts (1 errors) ==== +==== tests/cases/compiler/class1.ts (2 errors) ==== interface foo{ } + ~~~ +!!! error TS2300: Duplicate identifier 'foo'. class foo{ } ~~~ !!! error TS2300: Duplicate identifier 'foo'. \ No newline at end of file diff --git a/tests/baselines/reference/classAndInterface1.errors.txt b/tests/baselines/reference/classAndInterface1.errors.txt index d497fb4c44e..a7a1b028d82 100644 --- a/tests/baselines/reference/classAndInterface1.errors.txt +++ b/tests/baselines/reference/classAndInterface1.errors.txt @@ -1,8 +1,11 @@ +tests/cases/compiler/classAndInterface1.ts(1,7): error TS2300: Duplicate identifier 'cli'. tests/cases/compiler/classAndInterface1.ts(2,11): error TS2300: Duplicate identifier 'cli'. -==== tests/cases/compiler/classAndInterface1.ts (1 errors) ==== +==== tests/cases/compiler/classAndInterface1.ts (2 errors) ==== class cli { } + ~~~ +!!! error TS2300: Duplicate identifier 'cli'. interface cli { } // error ~~~ !!! error TS2300: Duplicate identifier 'cli'. \ No newline at end of file diff --git a/tests/baselines/reference/classAndInterfaceWithSameName.errors.txt b/tests/baselines/reference/classAndInterfaceWithSameName.errors.txt index a92f31ef469..aa3e687cf4d 100644 --- a/tests/baselines/reference/classAndInterfaceWithSameName.errors.txt +++ b/tests/baselines/reference/classAndInterfaceWithSameName.errors.txt @@ -1,15 +1,21 @@ +tests/cases/conformance/classes/classDeclarations/classAndInterfaceWithSameName.ts(1,7): error TS2300: Duplicate identifier 'C'. tests/cases/conformance/classes/classDeclarations/classAndInterfaceWithSameName.ts(2,11): error TS2300: Duplicate identifier 'C'. +tests/cases/conformance/classes/classDeclarations/classAndInterfaceWithSameName.ts(5,11): error TS2300: Duplicate identifier 'D'. tests/cases/conformance/classes/classDeclarations/classAndInterfaceWithSameName.ts(9,15): error TS2300: Duplicate identifier 'D'. -==== tests/cases/conformance/classes/classDeclarations/classAndInterfaceWithSameName.ts (2 errors) ==== +==== tests/cases/conformance/classes/classDeclarations/classAndInterfaceWithSameName.ts (4 errors) ==== class C { foo: string; } + ~ +!!! error TS2300: Duplicate identifier 'C'. interface C { foo: string; } // error ~ !!! error TS2300: Duplicate identifier 'C'. module M { class D { + ~ +!!! error TS2300: Duplicate identifier 'D'. bar: string; } diff --git a/tests/baselines/reference/classAndVariableWithSameName.errors.txt b/tests/baselines/reference/classAndVariableWithSameName.errors.txt index fb8b7e2dcde..909ea253926 100644 --- a/tests/baselines/reference/classAndVariableWithSameName.errors.txt +++ b/tests/baselines/reference/classAndVariableWithSameName.errors.txt @@ -1,15 +1,21 @@ +tests/cases/conformance/classes/classDeclarations/classAndVariableWithSameName.ts(1,7): error TS2300: Duplicate identifier 'C'. tests/cases/conformance/classes/classDeclarations/classAndVariableWithSameName.ts(2,5): error TS2300: Duplicate identifier 'C'. +tests/cases/conformance/classes/classDeclarations/classAndVariableWithSameName.ts(5,11): error TS2300: Duplicate identifier 'D'. tests/cases/conformance/classes/classDeclarations/classAndVariableWithSameName.ts(9,9): error TS2300: Duplicate identifier 'D'. -==== tests/cases/conformance/classes/classDeclarations/classAndVariableWithSameName.ts (2 errors) ==== +==== tests/cases/conformance/classes/classDeclarations/classAndVariableWithSameName.ts (4 errors) ==== class C { foo: string; } + ~ +!!! error TS2300: Duplicate identifier 'C'. var C = ''; // error ~ !!! error TS2300: Duplicate identifier 'C'. module M { class D { + ~ +!!! error TS2300: Duplicate identifier 'D'. bar: string; } diff --git a/tests/baselines/reference/classCannotExtendVar.errors.txt b/tests/baselines/reference/classCannotExtendVar.errors.txt index deed94615ce..5af07801bb4 100644 --- a/tests/baselines/reference/classCannotExtendVar.errors.txt +++ b/tests/baselines/reference/classCannotExtendVar.errors.txt @@ -1,8 +1,11 @@ +tests/cases/compiler/classCannotExtendVar.ts(1,5): error TS2300: Duplicate identifier 'Markup'. tests/cases/compiler/classCannotExtendVar.ts(3,7): error TS2300: Duplicate identifier 'Markup'. -==== tests/cases/compiler/classCannotExtendVar.ts (1 errors) ==== +==== tests/cases/compiler/classCannotExtendVar.ts (2 errors) ==== var Markup; + ~~~~~~ +!!! error TS2300: Duplicate identifier 'Markup'. class Markup { ~~~~~~ diff --git a/tests/baselines/reference/classOverloadForFunction.errors.txt b/tests/baselines/reference/classOverloadForFunction.errors.txt index 41f960dba66..c52da033a2c 100644 --- a/tests/baselines/reference/classOverloadForFunction.errors.txt +++ b/tests/baselines/reference/classOverloadForFunction.errors.txt @@ -1,9 +1,12 @@ -tests/cases/compiler/classOverloadForFunction.ts(2,10): error TS2300: Duplicate identifier 'foo'. +tests/cases/compiler/classOverloadForFunction.ts(1,7): error TS2300: Duplicate identifier 'foo'. +tests/cases/compiler/classOverloadForFunction.ts(2,1): error TS2300: Duplicate identifier 'foo'. -==== tests/cases/compiler/classOverloadForFunction.ts (1 errors) ==== +==== tests/cases/compiler/classOverloadForFunction.ts (2 errors) ==== class foo { }; + ~~~ +!!! error TS2300: Duplicate identifier 'foo'. function foo() {} - ~~~ + ~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'foo'. \ No newline at end of file diff --git a/tests/baselines/reference/classOverloadForFunction2.errors.txt b/tests/baselines/reference/classOverloadForFunction2.errors.txt index df635f10129..4dd459c48ec 100644 --- a/tests/baselines/reference/classOverloadForFunction2.errors.txt +++ b/tests/baselines/reference/classOverloadForFunction2.errors.txt @@ -1,10 +1,13 @@ +tests/cases/compiler/classOverloadForFunction2.ts(1,10): error TS2300: Duplicate identifier 'bar'. tests/cases/compiler/classOverloadForFunction2.ts(1,10): error TS2391: Function implementation is missing or not immediately following the declaration. tests/cases/compiler/classOverloadForFunction2.ts(2,7): error TS2300: Duplicate identifier 'bar'. -==== tests/cases/compiler/classOverloadForFunction2.ts (2 errors) ==== +==== tests/cases/compiler/classOverloadForFunction2.ts (3 errors) ==== function bar(): string; ~~~ +!!! error TS2300: Duplicate identifier 'bar'. + ~~~ !!! error TS2391: Function implementation is missing or not immediately following the declaration. class bar {} ~~~ diff --git a/tests/baselines/reference/classWithTwoConstructorDefinitions.errors.txt b/tests/baselines/reference/classWithTwoConstructorDefinitions.errors.txt index 6df51d85be3..fa093b91c2d 100644 --- a/tests/baselines/reference/classWithTwoConstructorDefinitions.errors.txt +++ b/tests/baselines/reference/classWithTwoConstructorDefinitions.errors.txt @@ -1,10 +1,14 @@ +tests/cases/conformance/classes/constructorDeclarations/classWithTwoConstructorDefinitions.ts(2,5): error TS2392: Multiple constructor implementations are not allowed. tests/cases/conformance/classes/constructorDeclarations/classWithTwoConstructorDefinitions.ts(3,5): error TS2392: Multiple constructor implementations are not allowed. +tests/cases/conformance/classes/constructorDeclarations/classWithTwoConstructorDefinitions.ts(7,5): error TS2392: Multiple constructor implementations are not allowed. tests/cases/conformance/classes/constructorDeclarations/classWithTwoConstructorDefinitions.ts(8,5): error TS2392: Multiple constructor implementations are not allowed. -==== tests/cases/conformance/classes/constructorDeclarations/classWithTwoConstructorDefinitions.ts (2 errors) ==== +==== tests/cases/conformance/classes/constructorDeclarations/classWithTwoConstructorDefinitions.ts (4 errors) ==== class C { constructor() { } + ~~~~~~~~~~~~~~~~~ +!!! error TS2392: Multiple constructor implementations are not allowed. constructor(x) { } // error ~~~~~~~~~~~~~~~~~~ !!! error TS2392: Multiple constructor implementations are not allowed. @@ -12,6 +16,8 @@ tests/cases/conformance/classes/constructorDeclarations/classWithTwoConstructorD class D { constructor(x: T) { } + ~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2392: Multiple constructor implementations are not allowed. constructor(x: T, y: T) { } // error ~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2392: Multiple constructor implementations are not allowed. diff --git a/tests/baselines/reference/clinterfaces.errors.txt b/tests/baselines/reference/clinterfaces.errors.txt index 62e8fc08725..d5eab2c7994 100644 --- a/tests/baselines/reference/clinterfaces.errors.txt +++ b/tests/baselines/reference/clinterfaces.errors.txt @@ -1,22 +1,32 @@ +tests/cases/compiler/clinterfaces.ts(2,11): error TS2300: Duplicate identifier 'C'. tests/cases/compiler/clinterfaces.ts(3,15): error TS2300: Duplicate identifier 'C'. +tests/cases/compiler/clinterfaces.ts(4,15): error TS2300: Duplicate identifier 'D'. tests/cases/compiler/clinterfaces.ts(5,11): error TS2300: Duplicate identifier 'D'. +tests/cases/compiler/clinterfaces.ts(8,11): error TS2300: Duplicate identifier 'Foo'. tests/cases/compiler/clinterfaces.ts(12,7): error TS2300: Duplicate identifier 'Foo'. +tests/cases/compiler/clinterfaces.ts(16,7): error TS2300: Duplicate identifier 'Bar'. tests/cases/compiler/clinterfaces.ts(20,11): error TS2300: Duplicate identifier 'Bar'. -==== tests/cases/compiler/clinterfaces.ts (4 errors) ==== +==== tests/cases/compiler/clinterfaces.ts (8 errors) ==== module M { class C { } + ~ +!!! error TS2300: Duplicate identifier 'C'. interface C { } ~ !!! error TS2300: Duplicate identifier 'C'. interface D { } + ~ +!!! error TS2300: Duplicate identifier 'D'. class D { } ~ !!! error TS2300: Duplicate identifier 'D'. } interface Foo { + ~~~ +!!! error TS2300: Duplicate identifier 'Foo'. a: string; } @@ -27,6 +37,8 @@ tests/cases/compiler/clinterfaces.ts(20,11): error TS2300: Duplicate identifier } class Bar{ + ~~~ +!!! error TS2300: Duplicate identifier 'Bar'. b: number; } diff --git a/tests/baselines/reference/cloduleWithDuplicateMember1.errors.txt b/tests/baselines/reference/cloduleWithDuplicateMember1.errors.txt index 7893afce829..901affa2554 100644 --- a/tests/baselines/reference/cloduleWithDuplicateMember1.errors.txt +++ b/tests/baselines/reference/cloduleWithDuplicateMember1.errors.txt @@ -1,11 +1,13 @@ tests/cases/compiler/cloduleWithDuplicateMember1.ts(2,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/compiler/cloduleWithDuplicateMember1.ts(3,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/cloduleWithDuplicateMember1.ts(3,16): error TS2300: Duplicate identifier 'x'. +tests/cases/compiler/cloduleWithDuplicateMember1.ts(6,12): error TS2300: Duplicate identifier 'foo'. tests/cases/compiler/cloduleWithDuplicateMember1.ts(10,16): error TS2300: Duplicate identifier 'x'. -tests/cases/compiler/cloduleWithDuplicateMember1.ts(13,21): error TS2300: Duplicate identifier 'foo'. -tests/cases/compiler/cloduleWithDuplicateMember1.ts(14,21): error TS2300: Duplicate identifier 'x'. +tests/cases/compiler/cloduleWithDuplicateMember1.ts(13,5): error TS2300: Duplicate identifier 'foo'. +tests/cases/compiler/cloduleWithDuplicateMember1.ts(14,5): error TS2300: Duplicate identifier 'x'. -==== tests/cases/compiler/cloduleWithDuplicateMember1.ts (5 errors) ==== +==== tests/cases/compiler/cloduleWithDuplicateMember1.ts (7 errors) ==== class C { get x() { return 1; } ~ @@ -13,9 +15,13 @@ tests/cases/compiler/cloduleWithDuplicateMember1.ts(14,21): error TS2300: Duplic static get x() { ~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~ +!!! error TS2300: Duplicate identifier 'x'. return ''; } static foo() { } + ~~~ +!!! error TS2300: Duplicate identifier 'foo'. } module C { @@ -25,9 +31,9 @@ tests/cases/compiler/cloduleWithDuplicateMember1.ts(14,21): error TS2300: Duplic } module C { export function foo() { } - ~~~ + ~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'foo'. export function x() { } - ~ + ~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'x'. } \ No newline at end of file diff --git a/tests/baselines/reference/cloduleWithDuplicateMember2.errors.txt b/tests/baselines/reference/cloduleWithDuplicateMember2.errors.txt index 1118f23a98d..d8702a546d0 100644 --- a/tests/baselines/reference/cloduleWithDuplicateMember2.errors.txt +++ b/tests/baselines/reference/cloduleWithDuplicateMember2.errors.txt @@ -1,9 +1,10 @@ tests/cases/compiler/cloduleWithDuplicateMember2.ts(2,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/compiler/cloduleWithDuplicateMember2.ts(3,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -tests/cases/compiler/cloduleWithDuplicateMember2.ts(10,21): error TS2300: Duplicate identifier 'x'. +tests/cases/compiler/cloduleWithDuplicateMember2.ts(7,16): error TS2300: Duplicate identifier 'x'. +tests/cases/compiler/cloduleWithDuplicateMember2.ts(10,5): error TS2300: Duplicate identifier 'x'. -==== tests/cases/compiler/cloduleWithDuplicateMember2.ts (3 errors) ==== +==== tests/cases/compiler/cloduleWithDuplicateMember2.ts (4 errors) ==== class C { set x(y) { } ~ @@ -15,9 +16,11 @@ tests/cases/compiler/cloduleWithDuplicateMember2.ts(10,21): error TS2300: Duplic module C { export var x = 1; + ~ +!!! error TS2300: Duplicate identifier 'x'. } module C { export function x() { } - ~ + ~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'x'. } \ No newline at end of file diff --git a/tests/baselines/reference/conflictingTypeAnnotatedVar.errors.txt b/tests/baselines/reference/conflictingTypeAnnotatedVar.errors.txt index f1e7d2abeed..080167cd760 100644 --- a/tests/baselines/reference/conflictingTypeAnnotatedVar.errors.txt +++ b/tests/baselines/reference/conflictingTypeAnnotatedVar.errors.txt @@ -1,18 +1,21 @@ -tests/cases/compiler/conflictingTypeAnnotatedVar.ts(2,10): error TS2300: Duplicate identifier 'foo'. +tests/cases/compiler/conflictingTypeAnnotatedVar.ts(1,5): error TS2300: Duplicate identifier 'foo'. +tests/cases/compiler/conflictingTypeAnnotatedVar.ts(2,1): error TS2300: Duplicate identifier 'foo'. tests/cases/compiler/conflictingTypeAnnotatedVar.ts(2,17): 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/compiler/conflictingTypeAnnotatedVar.ts(3,10): error TS2300: Duplicate identifier 'foo'. +tests/cases/compiler/conflictingTypeAnnotatedVar.ts(3,1): error TS2300: Duplicate identifier 'foo'. tests/cases/compiler/conflictingTypeAnnotatedVar.ts(3,17): 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/compiler/conflictingTypeAnnotatedVar.ts (4 errors) ==== +==== tests/cases/compiler/conflictingTypeAnnotatedVar.ts (5 errors) ==== var foo: string; + ~~~ +!!! error TS2300: Duplicate identifier 'foo'. function foo(): number { } - ~~~ + ~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'foo'. ~~~~~~ !!! error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value or consist of a single 'throw' statement. function foo(): number { } - ~~~ + ~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'foo'. ~~~~~~ !!! 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/constructSignatureWithAccessibilityModifiersOnParameters2.errors.txt b/tests/baselines/reference/constructSignatureWithAccessibilityModifiersOnParameters2.errors.txt index d17f52e90c1..e3d17237f1d 100644 --- a/tests/baselines/reference/constructSignatureWithAccessibilityModifiersOnParameters2.errors.txt +++ b/tests/baselines/reference/constructSignatureWithAccessibilityModifiersOnParameters2.errors.txt @@ -1,9 +1,12 @@ tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatureWithAccessibilityModifiersOnParameters2.ts(4,17): error TS2369: A parameter property is only allowed in a constructor implementation. +tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatureWithAccessibilityModifiersOnParameters2.ts(4,24): error TS2300: Duplicate identifier 'x'. tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatureWithAccessibilityModifiersOnParameters2.ts(4,27): error TS2369: A parameter property is only allowed in a constructor implementation. -tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatureWithAccessibilityModifiersOnParameters2.ts(5,24): error TS2300: Duplicate identifier 'x'. -tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatureWithAccessibilityModifiersOnParameters2.ts(5,35): error TS2300: Duplicate identifier 'y'. +tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatureWithAccessibilityModifiersOnParameters2.ts(4,35): error TS2300: Duplicate identifier 'y'. +tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatureWithAccessibilityModifiersOnParameters2.ts(5,17): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatureWithAccessibilityModifiersOnParameters2.ts(5,27): error TS2300: Duplicate identifier 'y'. tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatureWithAccessibilityModifiersOnParameters2.ts(9,17): error TS2369: A parameter property is only allowed in a constructor implementation. -tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatureWithAccessibilityModifiersOnParameters2.ts(10,24): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatureWithAccessibilityModifiersOnParameters2.ts(9,25): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatureWithAccessibilityModifiersOnParameters2.ts(10,17): error TS2300: Duplicate identifier 'x'. tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatureWithAccessibilityModifiersOnParameters2.ts(14,17): error TS2369: A parameter property is only allowed in a constructor implementation. tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatureWithAccessibilityModifiersOnParameters2.ts(19,10): error TS2369: A parameter property is only allowed in a constructor implementation. tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatureWithAccessibilityModifiersOnParameters2.ts(20,10): error TS2369: A parameter property is only allowed in a constructor implementation. @@ -15,19 +18,23 @@ tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatur tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatureWithAccessibilityModifiersOnParameters2.ts(35,10): error TS2369: A parameter property is only allowed in a constructor implementation. -==== tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatureWithAccessibilityModifiersOnParameters2.ts (15 errors) ==== +==== tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatureWithAccessibilityModifiersOnParameters2.ts (18 errors) ==== // Parameter properties are not valid in overloads of constructors class C { constructor(public x, private y); ~~~~~~~~ !!! error TS2369: A parameter property is only allowed in a constructor implementation. - ~~~~~~~~~ -!!! error TS2369: A parameter property is only allowed in a constructor implementation. - constructor(public x, private y) { } ~ !!! error TS2300: Duplicate identifier 'x'. + ~~~~~~~~~ +!!! error TS2369: A parameter property is only allowed in a constructor implementation. ~ +!!! error TS2300: Duplicate identifier 'y'. + constructor(public x, private y) { } + ~~~~~~~~ +!!! error TS2300: Duplicate identifier 'x'. + ~~~~~~~~~ !!! error TS2300: Duplicate identifier 'y'. } @@ -35,8 +42,10 @@ tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatur constructor(private x); ~~~~~~~~~ !!! error TS2369: A parameter property is only allowed in a constructor implementation. + ~ +!!! error TS2300: Duplicate identifier 'x'. constructor(public x) { } - ~ + ~~~~~~~~ !!! error TS2300: Duplicate identifier 'x'. } diff --git a/tests/baselines/reference/constructorOverloads1.errors.txt b/tests/baselines/reference/constructorOverloads1.errors.txt index 4b57d5c7839..d72aac5bcd0 100644 --- a/tests/baselines/reference/constructorOverloads1.errors.txt +++ b/tests/baselines/reference/constructorOverloads1.errors.txt @@ -1,15 +1,26 @@ +tests/cases/compiler/constructorOverloads1.ts(2,5): error TS2392: Multiple constructor implementations are not allowed. +tests/cases/compiler/constructorOverloads1.ts(3,5): error TS2392: Multiple constructor implementations are not allowed. +tests/cases/compiler/constructorOverloads1.ts(4,5): error TS2392: Multiple constructor implementations are not allowed. tests/cases/compiler/constructorOverloads1.ts(7,5): error TS2392: Multiple constructor implementations are not allowed. tests/cases/compiler/constructorOverloads1.ts(16,18): error TS2345: Argument of type 'Foo' is not assignable to parameter of type 'number'. tests/cases/compiler/constructorOverloads1.ts(17,18): error TS2345: Argument of type 'unknown[]' is not assignable to parameter of type 'number'. -==== tests/cases/compiler/constructorOverloads1.ts (3 errors) ==== +==== tests/cases/compiler/constructorOverloads1.ts (6 errors) ==== class Foo { constructor(s: string); + ~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2392: Multiple constructor implementations are not allowed. constructor(n: number); + ~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2392: Multiple constructor implementations are not allowed. constructor(x: any) { + ~~~~~~~~~~~~~~~~~~~~~ + } + ~~~~~ +!!! error TS2392: Multiple constructor implementations are not allowed. constructor(x: any) { ~~~~~~~~~~~~~~~~~~~~~ diff --git a/tests/baselines/reference/constructorOverloads4.errors.txt b/tests/baselines/reference/constructorOverloads4.errors.txt index 4b272b3f264..31c82ed5237 100644 --- a/tests/baselines/reference/constructorOverloads4.errors.txt +++ b/tests/baselines/reference/constructorOverloads4.errors.txt @@ -1,19 +1,22 @@ -tests/cases/compiler/constructorOverloads4.ts(5,21): error TS2300: Duplicate identifier 'Function'. -tests/cases/compiler/constructorOverloads4.ts(6,21): error TS2300: Duplicate identifier 'Function'. +tests/cases/compiler/constructorOverloads4.ts(2,18): error TS2300: Duplicate identifier 'Function'. +tests/cases/compiler/constructorOverloads4.ts(5,5): error TS2300: Duplicate identifier 'Function'. +tests/cases/compiler/constructorOverloads4.ts(6,5): error TS2300: Duplicate identifier 'Function'. tests/cases/compiler/constructorOverloads4.ts(10,1): error TS2349: Cannot invoke an expression whose type lacks a call signature. tests/cases/compiler/constructorOverloads4.ts(11,1): error TS2348: Value of type 'typeof Function' is not callable. Did you mean to include 'new'? -==== tests/cases/compiler/constructorOverloads4.ts (4 errors) ==== +==== tests/cases/compiler/constructorOverloads4.ts (5 errors) ==== declare module M { export class Function { + ~~~~~~~~ +!!! error TS2300: Duplicate identifier 'Function'. constructor(...args: string[]); } export function Function(...args: any[]): any; - ~~~~~~~~ + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'Function'. export function Function(...args: string[]): Function; - ~~~~~~~~ + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'Function'. } diff --git a/tests/baselines/reference/constructorOverloads5.errors.txt b/tests/baselines/reference/constructorOverloads5.errors.txt index dd7ec956eac..0a695fc001c 100644 --- a/tests/baselines/reference/constructorOverloads5.errors.txt +++ b/tests/baselines/reference/constructorOverloads5.errors.txt @@ -1,12 +1,18 @@ +tests/cases/compiler/constructorOverloads5.ts(4,21): error TS2300: Duplicate identifier 'RegExp'. +tests/cases/compiler/constructorOverloads5.ts(5,21): error TS2300: Duplicate identifier 'RegExp'. tests/cases/compiler/constructorOverloads5.ts(6,18): error TS2300: Duplicate identifier 'RegExp'. -==== tests/cases/compiler/constructorOverloads5.ts (1 errors) ==== +==== tests/cases/compiler/constructorOverloads5.ts (3 errors) ==== interface IArguments {} declare module M { export function RegExp(pattern: string): RegExp; + ~~~~~~ +!!! error TS2300: Duplicate identifier 'RegExp'. export function RegExp(pattern: string, flags: string): RegExp; + ~~~~~~ +!!! error TS2300: Duplicate identifier 'RegExp'. export class RegExp { ~~~~~~ !!! error TS2300: Duplicate identifier 'RegExp'. diff --git a/tests/baselines/reference/constructorOverloads7.errors.txt b/tests/baselines/reference/constructorOverloads7.errors.txt index 4caa358e7bd..b7ad6d427b8 100644 --- a/tests/baselines/reference/constructorOverloads7.errors.txt +++ b/tests/baselines/reference/constructorOverloads7.errors.txt @@ -1,9 +1,12 @@ -tests/cases/compiler/constructorOverloads7.ts(15,10): error TS2300: Duplicate identifier 'Point'. +tests/cases/compiler/constructorOverloads7.ts(1,15): error TS2300: Duplicate identifier 'Point'. +tests/cases/compiler/constructorOverloads7.ts(15,1): error TS2300: Duplicate identifier 'Point'. tests/cases/compiler/constructorOverloads7.ts(22,18): error TS2384: Overload signatures must all be ambient or non-ambient. -==== tests/cases/compiler/constructorOverloads7.ts (2 errors) ==== +==== tests/cases/compiler/constructorOverloads7.ts (3 errors) ==== declare class Point + ~~~~~ +!!! error TS2300: Duplicate identifier 'Point'. { x: number; y: number; @@ -18,13 +21,18 @@ tests/cases/compiler/constructorOverloads7.ts(22,18): error TS2384: Overload sig // Because Point is a constructor function, this is inferred // to be Point and return type is inferred to be void function Point(x, y) { - ~~~~~ -!!! error TS2300: Duplicate identifier 'Point'. + ~~~~~~~~~~~~~~~~~~~~~~ this.x = x; + ~~~~~~~~~~~~~~~ this.y = y; + ~~~~~~~~~~~~~~~ + return this; + ~~~~~~~~~~~~~~~~ } + ~ +!!! error TS2300: Duplicate identifier 'Point'. declare function EF1(a:number, b:number):number; ~~~ diff --git a/tests/baselines/reference/constructorOverloads8.errors.txt b/tests/baselines/reference/constructorOverloads8.errors.txt index 3aa7e509898..ca79964ad3f 100644 --- a/tests/baselines/reference/constructorOverloads8.errors.txt +++ b/tests/baselines/reference/constructorOverloads8.errors.txt @@ -1,9 +1,12 @@ +tests/cases/compiler/constructorOverloads8.ts(2,5): error TS2392: Multiple constructor implementations are not allowed. tests/cases/compiler/constructorOverloads8.ts(3,5): error TS2392: Multiple constructor implementations are not allowed. -==== tests/cases/compiler/constructorOverloads8.ts (1 errors) ==== +==== tests/cases/compiler/constructorOverloads8.ts (2 errors) ==== class C { constructor(x) { } + ~~~~~~~~~~~~~~~~~~ +!!! error TS2392: Multiple constructor implementations are not allowed. constructor(y, x) { } // illegal, 2 constructor implementations ~~~~~~~~~~~~~~~~~~~~~ !!! error TS2392: Multiple constructor implementations are not allowed. diff --git a/tests/baselines/reference/constructorParameterProperties2.errors.txt b/tests/baselines/reference/constructorParameterProperties2.errors.txt index df759fbe709..8a51ad82682 100644 --- a/tests/baselines/reference/constructorParameterProperties2.errors.txt +++ b/tests/baselines/reference/constructorParameterProperties2.errors.txt @@ -1,9 +1,12 @@ -tests/cases/conformance/classes/constructorDeclarations/constructorParameters/constructorParameterProperties2.ts(11,24): error TS2300: Duplicate identifier 'y'. -tests/cases/conformance/classes/constructorDeclarations/constructorParameters/constructorParameterProperties2.ts(19,25): error TS2300: Duplicate identifier 'y'. -tests/cases/conformance/classes/constructorDeclarations/constructorParameters/constructorParameterProperties2.ts(27,27): error TS2300: Duplicate identifier 'y'. +tests/cases/conformance/classes/constructorDeclarations/constructorParameters/constructorParameterProperties2.ts(10,5): error TS2300: Duplicate identifier 'y'. +tests/cases/conformance/classes/constructorDeclarations/constructorParameters/constructorParameterProperties2.ts(11,17): error TS2300: Duplicate identifier 'y'. +tests/cases/conformance/classes/constructorDeclarations/constructorParameters/constructorParameterProperties2.ts(18,5): error TS2300: Duplicate identifier 'y'. +tests/cases/conformance/classes/constructorDeclarations/constructorParameters/constructorParameterProperties2.ts(19,17): error TS2300: Duplicate identifier 'y'. +tests/cases/conformance/classes/constructorDeclarations/constructorParameters/constructorParameterProperties2.ts(26,5): error TS2300: Duplicate identifier 'y'. +tests/cases/conformance/classes/constructorDeclarations/constructorParameters/constructorParameterProperties2.ts(27,17): error TS2300: Duplicate identifier 'y'. -==== tests/cases/conformance/classes/constructorDeclarations/constructorParameters/constructorParameterProperties2.ts (3 errors) ==== +==== tests/cases/conformance/classes/constructorDeclarations/constructorParameters/constructorParameterProperties2.ts (6 errors) ==== class C { y: number; constructor(y: number) { } // ok @@ -14,8 +17,10 @@ tests/cases/conformance/classes/constructorDeclarations/constructorParameters/co class D { y: number; + ~ +!!! error TS2300: Duplicate identifier 'y'. constructor(public y: number) { } // error - ~ + ~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'y'. } @@ -24,8 +29,10 @@ tests/cases/conformance/classes/constructorDeclarations/constructorParameters/co class E { y: number; + ~ +!!! error TS2300: Duplicate identifier 'y'. constructor(private y: number) { } // error - ~ + ~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'y'. } @@ -34,8 +41,10 @@ tests/cases/conformance/classes/constructorDeclarations/constructorParameters/co class F { y: number; + ~ +!!! error TS2300: Duplicate identifier 'y'. constructor(protected y: number) { } // error - ~ + ~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'y'. } diff --git a/tests/baselines/reference/contextualTyping.errors.txt b/tests/baselines/reference/contextualTyping.errors.txt index cea075477ee..630da5a903d 100644 --- a/tests/baselines/reference/contextualTyping.errors.txt +++ b/tests/baselines/reference/contextualTyping.errors.txt @@ -1,9 +1,10 @@ tests/cases/compiler/contextualTyping.ts(189,18): error TS2384: Overload signatures must all be ambient or non-ambient. -tests/cases/compiler/contextualTyping.ts(207,10): error TS2300: Duplicate identifier 'Point'. +tests/cases/compiler/contextualTyping.ts(197,15): error TS2300: Duplicate identifier 'Point'. +tests/cases/compiler/contextualTyping.ts(207,1): error TS2300: Duplicate identifier 'Point'. tests/cases/compiler/contextualTyping.ts(230,5): error TS2322: Type '{}' is not assignable to type 'B':\n Property 'x' is missing in type '{}'. -==== tests/cases/compiler/contextualTyping.ts (3 errors) ==== +==== tests/cases/compiler/contextualTyping.ts (4 errors) ==== // DEFAULT INTERFACES interface IFoo { n: number; @@ -203,6 +204,8 @@ tests/cases/compiler/contextualTyping.ts(230,5): error TS2322: Type '{}' is not // contextually typing from ambient class declarations declare class Point + ~~~~~ +!!! error TS2300: Duplicate identifier 'Point'. { constructor(x: number, y: number); x: number; @@ -213,13 +216,18 @@ tests/cases/compiler/contextualTyping.ts(230,5): error TS2322: Type '{}' is not } function Point(x, y) { - ~~~~~ -!!! error TS2300: Duplicate identifier 'Point'. + ~~~~~~~~~~~~~~~~~~~~~~ this.x = x; + ~~~~~~~~~~~~~~~ this.y = y; + ~~~~~~~~~~~~~~~ + return this; + ~~~~~~~~~~~~~~~~ } + ~ +!!! error TS2300: Duplicate identifier 'Point'. Point.origin = new Point(0, 0); diff --git a/tests/baselines/reference/declInput.errors.txt b/tests/baselines/reference/declInput.errors.txt index 2fbaf6db6bc..8ec341ce15b 100644 --- a/tests/baselines/reference/declInput.errors.txt +++ b/tests/baselines/reference/declInput.errors.txt @@ -1,8 +1,11 @@ +tests/cases/compiler/declInput.ts(1,11): error TS2300: Duplicate identifier 'bar'. tests/cases/compiler/declInput.ts(5,7): error TS2300: Duplicate identifier 'bar'. -==== tests/cases/compiler/declInput.ts (1 errors) ==== +==== tests/cases/compiler/declInput.ts (2 errors) ==== interface bar { + ~~~ +!!! error TS2300: Duplicate identifier 'bar'. } diff --git a/tests/baselines/reference/derivedInterfaceIncompatibleWithBaseIndexer.errors.txt b/tests/baselines/reference/derivedInterfaceIncompatibleWithBaseIndexer.errors.txt index a2e81b0eb95..dcbde21e670 100644 --- a/tests/baselines/reference/derivedInterfaceIncompatibleWithBaseIndexer.errors.txt +++ b/tests/baselines/reference/derivedInterfaceIncompatibleWithBaseIndexer.errors.txt @@ -4,11 +4,12 @@ tests/cases/conformance/interfaces/interfaceDeclarations/derivedInterfaceIncompa tests/cases/conformance/interfaces/interfaceDeclarations/derivedInterfaceIncompatibleWithBaseIndexer.ts(11,5): error TS2412: Property ''1'' of type '{ y: number; }' is not assignable to numeric index type '{ x: number; y: number; }'. tests/cases/conformance/interfaces/interfaceDeclarations/derivedInterfaceIncompatibleWithBaseIndexer.ts(15,5): error TS2411: Property 'foo' of type '{ y: number; }' is not assignable to string index type '{ x: number; }'. tests/cases/conformance/interfaces/interfaceDeclarations/derivedInterfaceIncompatibleWithBaseIndexer.ts(19,5): error TS2411: Property 'foo' of type '() => { x: number; }' is not assignable to string index type '{ x: number; }'. +tests/cases/conformance/interfaces/interfaceDeclarations/derivedInterfaceIncompatibleWithBaseIndexer.ts(24,5): error TS2300: Duplicate identifier '1'. tests/cases/conformance/interfaces/interfaceDeclarations/derivedInterfaceIncompatibleWithBaseIndexer.ts(24,5): error TS2412: Property '1' of type '{ x: number; }' is not assignable to numeric index type '{ x: number; y: number; }'. tests/cases/conformance/interfaces/interfaceDeclarations/derivedInterfaceIncompatibleWithBaseIndexer.ts(28,5): error TS2300: Duplicate identifier ''1''. -==== tests/cases/conformance/interfaces/interfaceDeclarations/derivedInterfaceIncompatibleWithBaseIndexer.ts (8 errors) ==== +==== tests/cases/conformance/interfaces/interfaceDeclarations/derivedInterfaceIncompatibleWithBaseIndexer.ts (9 errors) ==== interface Base { [x: number]: { x: number; y: number; }; [x: string]: { x: number; } @@ -45,12 +46,14 @@ tests/cases/conformance/interfaces/interfaceDeclarations/derivedInterfaceIncompa // satisifies string indexer but not numeric indexer interface Derived5 extends Base { 1: { x: number } // error + ~ +!!! error TS2300: Duplicate identifier '1'. ~~~~~~~~~~~~~~~~ !!! error TS2412: Property '1' of type '{ x: number; }' is not assignable to numeric index type '{ x: number; y: number; }'. } interface Derived5 extends Base { '1': { x: number } // error - ~~~ + ~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier ''1''. } \ No newline at end of file diff --git a/tests/baselines/reference/duplicateClassElements.errors.txt b/tests/baselines/reference/duplicateClassElements.errors.txt index 9ff44679e44..ee9fb937004 100644 --- a/tests/baselines/reference/duplicateClassElements.errors.txt +++ b/tests/baselines/reference/duplicateClassElements.errors.txt @@ -8,43 +8,61 @@ tests/cases/compiler/duplicateClassElements.ts(29,9): error TS1056: Accessors ar tests/cases/compiler/duplicateClassElements.ts(32,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/compiler/duplicateClassElements.ts(36,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/compiler/duplicateClassElements.ts(39,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -tests/cases/compiler/duplicateClassElements.ts(3,12): error TS2300: Duplicate identifier 'a'. +tests/cases/compiler/duplicateClassElements.ts(2,12): error TS2300: Duplicate identifier 'a'. +tests/cases/compiler/duplicateClassElements.ts(3,5): error TS2300: Duplicate identifier 'a'. +tests/cases/compiler/duplicateClassElements.ts(4,5): error TS2393: Duplicate function implementation. tests/cases/compiler/duplicateClassElements.ts(6,5): error TS2393: Duplicate function implementation. -tests/cases/compiler/duplicateClassElements.ts(9,9): error TS2300: Duplicate identifier 'x'. -tests/cases/compiler/duplicateClassElements.ts(12,9): error TS2300: Duplicate identifier 'x'. -tests/cases/compiler/duplicateClassElements.ts(23,9): error TS2300: Duplicate identifier 'z'. -tests/cases/compiler/duplicateClassElements.ts(26,9): error TS2300: Duplicate identifier 'z'. -tests/cases/compiler/duplicateClassElements.ts(34,12): error TS2300: Duplicate identifier 'x2'. -tests/cases/compiler/duplicateClassElements.ts(41,12): error TS2300: Duplicate identifier 'z2'. +tests/cases/compiler/duplicateClassElements.ts(8,12): error TS2300: Duplicate identifier 'x'. +tests/cases/compiler/duplicateClassElements.ts(9,5): error TS2300: Duplicate identifier 'x'. +tests/cases/compiler/duplicateClassElements.ts(12,5): error TS2300: Duplicate identifier 'x'. +tests/cases/compiler/duplicateClassElements.ts(21,12): error TS2300: Duplicate identifier 'z'. +tests/cases/compiler/duplicateClassElements.ts(23,5): error TS2300: Duplicate identifier 'z'. +tests/cases/compiler/duplicateClassElements.ts(26,5): error TS2300: Duplicate identifier 'z'. +tests/cases/compiler/duplicateClassElements.ts(29,9): error TS2300: Duplicate identifier 'x2'. +tests/cases/compiler/duplicateClassElements.ts(32,9): error TS2300: Duplicate identifier 'x2'. +tests/cases/compiler/duplicateClassElements.ts(34,5): error TS2300: Duplicate identifier 'x2'. +tests/cases/compiler/duplicateClassElements.ts(36,9): error TS2300: Duplicate identifier 'z2'. +tests/cases/compiler/duplicateClassElements.ts(39,9): error TS2300: Duplicate identifier 'z2'. +tests/cases/compiler/duplicateClassElements.ts(41,5): error TS2300: Duplicate identifier 'z2'. -==== tests/cases/compiler/duplicateClassElements.ts (18 errors) ==== +==== tests/cases/compiler/duplicateClassElements.ts (26 errors) ==== class a { - public a; public a; ~ +!!! error TS2300: Duplicate identifier 'a'. + public a; + ~~~~~~~~~ !!! error TS2300: Duplicate identifier 'a'. public b() { + ~~~~~~~~~~~~ } + ~~~~~ +!!! error TS2393: Duplicate function implementation. public b() { ~~~~~~~~~~~~ } ~~~~~ !!! error TS2393: Duplicate function implementation. public x; + ~ +!!! error TS2300: Duplicate identifier 'x'. get x() { ~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~ -!!! error TS2300: Duplicate identifier 'x'. + ~~~~~~~~~ return 10; + ~~~~~~~~~~~~~~~~~~ } + ~~~~~ +!!! error TS2300: Duplicate identifier 'x'. set x(_x: number) { ~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~ -!!! error TS2300: Duplicate identifier 'x'. + ~~~~~~~~~~~~~~~~~~~ } + ~~~~~ +!!! error TS2300: Duplicate identifier 'x'. get y() { ~ @@ -57,46 +75,60 @@ tests/cases/compiler/duplicateClassElements.ts(41,12): error TS2300: Duplicate i } public z() { + ~ +!!! error TS2300: Duplicate identifier 'z'. } get z() { ~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~ -!!! error TS2300: Duplicate identifier 'z'. + ~~~~~~~~~ return "Hello"; + ~~~~~~~~~~~~~~~~~~~~~~~ } + ~~~~~ +!!! error TS2300: Duplicate identifier 'z'. set z(_y: string) { ~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~ -!!! error TS2300: Duplicate identifier 'z'. + ~~~~~~~~~~~~~~~~~~~ } + ~~~~~ +!!! error TS2300: Duplicate identifier 'z'. get x2() { ~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~ +!!! error TS2300: Duplicate identifier 'x2'. return 10; } set x2(_x: number) { ~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~ +!!! error TS2300: Duplicate identifier 'x2'. } public x2; - ~~ + ~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'x2'. get z2() { ~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~ +!!! error TS2300: Duplicate identifier 'z2'. return "Hello"; } set z2(_y: string) { ~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - } - public z2() { - ~~ + ~~ !!! error TS2300: Duplicate identifier 'z2'. } + public z2() { + ~~~~~~~~~~~~~ + } + ~~~~~ +!!! error TS2300: Duplicate identifier 'z2'. } \ No newline at end of file diff --git a/tests/baselines/reference/duplicateIdentifierInCatchBlock.errors.txt b/tests/baselines/reference/duplicateIdentifierInCatchBlock.errors.txt index 08eb464c8ad..7c43bc81289 100644 --- a/tests/baselines/reference/duplicateIdentifierInCatchBlock.errors.txt +++ b/tests/baselines/reference/duplicateIdentifierInCatchBlock.errors.txt @@ -1,18 +1,25 @@ -tests/cases/compiler/duplicateIdentifierInCatchBlock.ts(3,14): error TS2300: Duplicate identifier 'v'. +tests/cases/compiler/duplicateIdentifierInCatchBlock.ts(1,5): error TS2300: Duplicate identifier 'v'. +tests/cases/compiler/duplicateIdentifierInCatchBlock.ts(3,5): error TS2300: Duplicate identifier 'v'. +tests/cases/compiler/duplicateIdentifierInCatchBlock.ts(6,10): error TS2300: Duplicate identifier 'w'. tests/cases/compiler/duplicateIdentifierInCatchBlock.ts(8,9): error TS2300: Duplicate identifier 'w'. -tests/cases/compiler/duplicateIdentifierInCatchBlock.ts(13,14): error TS2300: Duplicate identifier 'x'. +tests/cases/compiler/duplicateIdentifierInCatchBlock.ts(12,9): error TS2300: Duplicate identifier 'x'. +tests/cases/compiler/duplicateIdentifierInCatchBlock.ts(13,5): error TS2300: Duplicate identifier 'x'. tests/cases/compiler/duplicateIdentifierInCatchBlock.ts(16,9): error TS2403: Subsequent variable declarations must have the same type. Variable 'p' must be of type 'string', but here has type 'number'. -==== tests/cases/compiler/duplicateIdentifierInCatchBlock.ts (4 errors) ==== +==== tests/cases/compiler/duplicateIdentifierInCatchBlock.ts (7 errors) ==== var v; + ~ +!!! error TS2300: Duplicate identifier 'v'. try { } catch (e) { function v() { } - ~ + ~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'v'. } function w() { } + ~ +!!! error TS2300: Duplicate identifier 'w'. try { } catch (e) { var w; ~ @@ -21,8 +28,10 @@ tests/cases/compiler/duplicateIdentifierInCatchBlock.ts(16,9): error TS2403: Sub try { } catch (e) { var x; + ~ +!!! error TS2300: Duplicate identifier 'x'. function x() { } // error - ~ + ~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'x'. function e() { } // error var p: string; diff --git a/tests/baselines/reference/duplicateIdentifiersAcrossContainerBoundaries.errors.txt b/tests/baselines/reference/duplicateIdentifiersAcrossContainerBoundaries.errors.txt index 783504277e0..6c80d13b2f4 100644 --- a/tests/baselines/reference/duplicateIdentifiersAcrossContainerBoundaries.errors.txt +++ b/tests/baselines/reference/duplicateIdentifiersAcrossContainerBoundaries.errors.txt @@ -1,11 +1,16 @@ +tests/cases/compiler/duplicateIdentifiersAcrossContainerBoundaries.ts(2,22): error TS2300: Duplicate identifier 'I'. tests/cases/compiler/duplicateIdentifiersAcrossContainerBoundaries.ts(5,18): error TS2300: Duplicate identifier 'I'. +tests/cases/compiler/duplicateIdentifiersAcrossContainerBoundaries.ts(9,21): error TS2300: Duplicate identifier 'f'. tests/cases/compiler/duplicateIdentifiersAcrossContainerBoundaries.ts(12,18): error TS2300: Duplicate identifier 'f'. +tests/cases/compiler/duplicateIdentifiersAcrossContainerBoundaries.ts(37,12): error TS2300: Duplicate identifier 'x'. tests/cases/compiler/duplicateIdentifiersAcrossContainerBoundaries.ts(41,16): error TS2300: Duplicate identifier 'x'. -==== tests/cases/compiler/duplicateIdentifiersAcrossContainerBoundaries.ts (3 errors) ==== +==== tests/cases/compiler/duplicateIdentifiersAcrossContainerBoundaries.ts (6 errors) ==== module M { export interface I { } + ~ +!!! error TS2300: Duplicate identifier 'I'. } module M { export class I { } // error @@ -15,6 +20,8 @@ tests/cases/compiler/duplicateIdentifiersAcrossContainerBoundaries.ts(41,16): er module M { export function f() { } + ~ +!!! error TS2300: Duplicate identifier 'f'. } module M { export class f { } // error @@ -45,6 +52,8 @@ tests/cases/compiler/duplicateIdentifiersAcrossContainerBoundaries.ts(41,16): er class Foo { static x: number; + ~ +!!! error TS2300: Duplicate identifier 'x'. } module Foo { diff --git a/tests/baselines/reference/duplicateInterfaceMembers1.errors.txt b/tests/baselines/reference/duplicateInterfaceMembers1.errors.txt index 952b9b3bc42..5920064dd99 100644 --- a/tests/baselines/reference/duplicateInterfaceMembers1.errors.txt +++ b/tests/baselines/reference/duplicateInterfaceMembers1.errors.txt @@ -1,11 +1,14 @@ +tests/cases/compiler/duplicateInterfaceMembers1.ts(2,4): error TS2300: Duplicate identifier 'x'. tests/cases/compiler/duplicateInterfaceMembers1.ts(3,4): error TS2300: Duplicate identifier 'x'. -==== tests/cases/compiler/duplicateInterfaceMembers1.ts (1 errors) ==== +==== tests/cases/compiler/duplicateInterfaceMembers1.ts (2 errors) ==== interface Bar { - x: number; x: number; ~ +!!! error TS2300: Duplicate identifier 'x'. + x: number; + ~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'x'. } \ No newline at end of file diff --git a/tests/baselines/reference/duplicateObjectLiteralProperty.errors.txt b/tests/baselines/reference/duplicateObjectLiteralProperty.errors.txt index 370a7070505..6ea3a636ab8 100644 --- a/tests/baselines/reference/duplicateObjectLiteralProperty.errors.txt +++ b/tests/baselines/reference/duplicateObjectLiteralProperty.errors.txt @@ -2,31 +2,42 @@ tests/cases/compiler/duplicateObjectLiteralProperty.ts(14,9): error TS1056: Acce tests/cases/compiler/duplicateObjectLiteralProperty.ts(15,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/compiler/duplicateObjectLiteralProperty.ts(16,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/compiler/duplicateObjectLiteralProperty.ts(16,9): error TS1118: An object literal cannot have multiple get/set accessors with the same name. +tests/cases/compiler/duplicateObjectLiteralProperty.ts(2,5): error TS2300: Duplicate identifier 'a'. tests/cases/compiler/duplicateObjectLiteralProperty.ts(4,5): error TS2300: Duplicate identifier 'a'. tests/cases/compiler/duplicateObjectLiteralProperty.ts(5,5): error TS2300: Duplicate identifier '\u0061'. tests/cases/compiler/duplicateObjectLiteralProperty.ts(6,5): error TS2300: Duplicate identifier 'a'. +tests/cases/compiler/duplicateObjectLiteralProperty.ts(7,9): error TS2300: Duplicate identifier 'c'. tests/cases/compiler/duplicateObjectLiteralProperty.ts(8,9): error TS2300: Duplicate identifier '"c"'. -tests/cases/compiler/duplicateObjectLiteralProperty.ts(16,9): error TS2300: Duplicate identifier 'a'. +tests/cases/compiler/duplicateObjectLiteralProperty.ts(14,9): error TS2300: Duplicate identifier 'a'. +tests/cases/compiler/duplicateObjectLiteralProperty.ts(15,9): error TS2300: Duplicate identifier 'a'. +tests/cases/compiler/duplicateObjectLiteralProperty.ts(16,5): error TS2300: Duplicate identifier 'a'. -==== tests/cases/compiler/duplicateObjectLiteralProperty.ts (9 errors) ==== +==== tests/cases/compiler/duplicateObjectLiteralProperty.ts (13 errors) ==== var x = { a: 1, + ~ +!!! error TS2300: Duplicate identifier 'a'. b: true, // OK a: 56, // Duplicate - ~ + ~~~~~ !!! error TS2300: Duplicate identifier 'a'. \u0061: "ss", // Duplicate - ~~~~~~ + ~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier '\u0061'. a: { - ~ -!!! error TS2300: Duplicate identifier 'a'. + ~~~~ c: 1, + ~~~~~~~~~~~~~ + ~ +!!! error TS2300: Duplicate identifier 'c'. "c": 56, // Duplicate - ~~~ + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~ !!! error TS2300: Duplicate identifier '"c"'. } + ~~~~~ +!!! error TS2300: Duplicate identifier 'a'. }; @@ -34,15 +45,19 @@ tests/cases/compiler/duplicateObjectLiteralProperty.ts(16,9): error TS2300: Dupl get a() { return 0; }, ~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~ +!!! error TS2300: Duplicate identifier 'a'. set a(v: number) { }, ~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~ +!!! error TS2300: Duplicate identifier 'a'. get a() { return 0; } ~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. ~ !!! error TS1118: An object literal cannot have multiple get/set accessors with the same name. - ~ + ~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'a'. }; \ No newline at end of file diff --git a/tests/baselines/reference/duplicatePropertiesInStrictMode.errors.txt b/tests/baselines/reference/duplicatePropertiesInStrictMode.errors.txt index 17a55a7876b..50b29eff93a 100644 --- a/tests/baselines/reference/duplicatePropertiesInStrictMode.errors.txt +++ b/tests/baselines/reference/duplicatePropertiesInStrictMode.errors.txt @@ -1,14 +1,17 @@ tests/cases/compiler/duplicatePropertiesInStrictMode.ts(4,3): error TS1117: An object literal cannot have multiple properties with the same name in strict mode. +tests/cases/compiler/duplicatePropertiesInStrictMode.ts(3,3): error TS2300: Duplicate identifier 'x'. tests/cases/compiler/duplicatePropertiesInStrictMode.ts(4,3): error TS2300: Duplicate identifier 'x'. -==== tests/cases/compiler/duplicatePropertiesInStrictMode.ts (2 errors) ==== +==== tests/cases/compiler/duplicatePropertiesInStrictMode.ts (3 errors) ==== "use strict"; var x = { x: 1, + ~ +!!! error TS2300: Duplicate identifier 'x'. x: 2 ~ !!! error TS1117: An object literal cannot have multiple properties with the same name in strict mode. - ~ + ~~~~ !!! error TS2300: Duplicate identifier 'x'. } \ No newline at end of file diff --git a/tests/baselines/reference/duplicatePropertyNames.errors.txt b/tests/baselines/reference/duplicatePropertyNames.errors.txt index ac21db7830a..6ed93382aef 100644 --- a/tests/baselines/reference/duplicatePropertyNames.errors.txt +++ b/tests/baselines/reference/duplicatePropertyNames.errors.txt @@ -1,22 +1,34 @@ +tests/cases/conformance/types/members/duplicatePropertyNames.ts(4,5): error TS2300: Duplicate identifier 'foo'. tests/cases/conformance/types/members/duplicatePropertyNames.ts(5,5): error TS2300: Duplicate identifier 'foo'. +tests/cases/conformance/types/members/duplicatePropertyNames.ts(14,5): error TS2300: Duplicate identifier 'foo'. tests/cases/conformance/types/members/duplicatePropertyNames.ts(15,5): error TS2300: Duplicate identifier 'foo'. +tests/cases/conformance/types/members/duplicatePropertyNames.ts(19,5): error TS2300: Duplicate identifier 'foo'. tests/cases/conformance/types/members/duplicatePropertyNames.ts(20,5): error TS2300: Duplicate identifier 'foo'. +tests/cases/conformance/types/members/duplicatePropertyNames.ts(22,5): error TS2393: Duplicate function implementation. tests/cases/conformance/types/members/duplicatePropertyNames.ts(23,5): error TS2393: Duplicate function implementation. +tests/cases/conformance/types/members/duplicatePropertyNames.ts(25,5): error TS2300: Duplicate identifier 'baz'. tests/cases/conformance/types/members/duplicatePropertyNames.ts(26,5): error TS2300: Duplicate identifier 'baz'. +tests/cases/conformance/types/members/duplicatePropertyNames.ts(30,5): error TS2300: Duplicate identifier 'foo'. tests/cases/conformance/types/members/duplicatePropertyNames.ts(31,5): error TS2300: Duplicate identifier 'foo'. +tests/cases/conformance/types/members/duplicatePropertyNames.ts(35,5): error TS2300: Duplicate identifier 'foo'. tests/cases/conformance/types/members/duplicatePropertyNames.ts(36,5): error TS2300: Duplicate identifier 'foo'. +tests/cases/conformance/types/members/duplicatePropertyNames.ts(38,5): error TS2300: Duplicate identifier 'bar'. tests/cases/conformance/types/members/duplicatePropertyNames.ts(39,5): error TS2300: Duplicate identifier 'bar'. +tests/cases/conformance/types/members/duplicatePropertyNames.ts(43,5): error TS2300: Duplicate identifier 'foo'. tests/cases/conformance/types/members/duplicatePropertyNames.ts(44,5): error TS2300: Duplicate identifier 'foo'. +tests/cases/conformance/types/members/duplicatePropertyNames.ts(45,5): error TS2300: Duplicate identifier 'bar'. tests/cases/conformance/types/members/duplicatePropertyNames.ts(46,5): error TS2300: Duplicate identifier 'bar'. -==== tests/cases/conformance/types/members/duplicatePropertyNames.ts (10 errors) ==== +==== tests/cases/conformance/types/members/duplicatePropertyNames.ts (20 errors) ==== // duplicate property names are an error in all types interface Number { - foo: string; foo: string; ~~~ +!!! error TS2300: Duplicate identifier 'foo'. + foo: string; + ~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'foo'. } @@ -26,56 +38,74 @@ tests/cases/conformance/types/members/duplicatePropertyNames.ts(46,5): error TS2 } interface Array { - foo: T; foo: T; ~~~ +!!! error TS2300: Duplicate identifier 'foo'. + foo: T; + ~~~~~~~ !!! error TS2300: Duplicate identifier 'foo'. } class C { - foo: string; foo: string; ~~~ !!! error TS2300: Duplicate identifier 'foo'. + foo: string; + ~~~~~~~~~~~~ +!!! error TS2300: Duplicate identifier 'foo'. bar(x) { } + ~~~~~~~~~~ +!!! error TS2393: Duplicate function implementation. bar(x) { } ~~~~~~~~~~ !!! error TS2393: Duplicate function implementation. - baz = () => { } baz = () => { } ~~~ +!!! error TS2300: Duplicate identifier 'baz'. + baz = () => { } + ~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'baz'. } interface I { - foo: string; foo: string; ~~~ +!!! error TS2300: Duplicate identifier 'foo'. + foo: string; + ~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'foo'. } var a: { - foo: string; foo: string; ~~~ !!! error TS2300: Duplicate identifier 'foo'. + foo: string; + ~~~~~~~~~~~~ +!!! error TS2300: Duplicate identifier 'foo'. - bar: () => {}; bar: () => {}; ~~~ +!!! error TS2300: Duplicate identifier 'bar'. + bar: () => {}; + ~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'bar'. } var b = { - foo: '', foo: '', ~~~ +!!! error TS2300: Duplicate identifier 'foo'. + foo: '', + ~~~~~~~ !!! error TS2300: Duplicate identifier 'foo'. bar: () => { }, - bar: () => { } ~~~ +!!! error TS2300: Duplicate identifier 'bar'. + bar: () => { } + ~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'bar'. } \ No newline at end of file diff --git a/tests/baselines/reference/duplicateStringNamedProperty1.errors.txt b/tests/baselines/reference/duplicateStringNamedProperty1.errors.txt index 9353eb34151..38652e37f10 100644 --- a/tests/baselines/reference/duplicateStringNamedProperty1.errors.txt +++ b/tests/baselines/reference/duplicateStringNamedProperty1.errors.txt @@ -1,10 +1,13 @@ +tests/cases/compiler/duplicateStringNamedProperty1.ts(2,5): error TS2300: Duplicate identifier '"artist"'. tests/cases/compiler/duplicateStringNamedProperty1.ts(3,5): error TS2300: Duplicate identifier 'artist'. -==== tests/cases/compiler/duplicateStringNamedProperty1.ts (1 errors) ==== +==== tests/cases/compiler/duplicateStringNamedProperty1.ts (2 errors) ==== export interface Album { "artist": string; + ~~~~~~~~ +!!! error TS2300: Duplicate identifier '"artist"'. artist: string; - ~~~~~~ + ~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'artist'. } \ No newline at end of file diff --git a/tests/baselines/reference/enumGenericTypeClash.errors.txt b/tests/baselines/reference/enumGenericTypeClash.errors.txt index adf345870de..23007175e4c 100644 --- a/tests/baselines/reference/enumGenericTypeClash.errors.txt +++ b/tests/baselines/reference/enumGenericTypeClash.errors.txt @@ -1,8 +1,11 @@ +tests/cases/compiler/enumGenericTypeClash.ts(1,7): error TS2300: Duplicate identifier 'X'. tests/cases/compiler/enumGenericTypeClash.ts(2,6): error TS2300: Duplicate identifier 'X'. -==== tests/cases/compiler/enumGenericTypeClash.ts (1 errors) ==== +==== tests/cases/compiler/enumGenericTypeClash.ts (2 errors) ==== class X { } + ~ +!!! error TS2300: Duplicate identifier 'X'. enum X { MyVal } ~ !!! error TS2300: Duplicate identifier 'X'. diff --git a/tests/baselines/reference/enumIdenticalIdentifierValues.errors.txt b/tests/baselines/reference/enumIdenticalIdentifierValues.errors.txt index 26b5da7d0cf..551b5d9d929 100644 --- a/tests/baselines/reference/enumIdenticalIdentifierValues.errors.txt +++ b/tests/baselines/reference/enumIdenticalIdentifierValues.errors.txt @@ -1,9 +1,12 @@ +tests/cases/compiler/enumIdenticalIdentifierValues.ts(2,5): error TS2300: Duplicate identifier '1'. tests/cases/compiler/enumIdenticalIdentifierValues.ts(3,5): error TS2300: Duplicate identifier '1.0'. -==== tests/cases/compiler/enumIdenticalIdentifierValues.ts (1 errors) ==== +==== tests/cases/compiler/enumIdenticalIdentifierValues.ts (2 errors) ==== enum Enum { 1, + ~ +!!! error TS2300: Duplicate identifier '1'. 1.0 ~~~ !!! error TS2300: Duplicate identifier '1.0'. diff --git a/tests/baselines/reference/es6ClassTest9.errors.txt b/tests/baselines/reference/es6ClassTest9.errors.txt index 3cd59059f89..d8af974a176 100644 --- a/tests/baselines/reference/es6ClassTest9.errors.txt +++ b/tests/baselines/reference/es6ClassTest9.errors.txt @@ -1,15 +1,18 @@ tests/cases/compiler/es6ClassTest9.ts(1,18): error TS1005: '{' expected. tests/cases/compiler/es6ClassTest9.ts(1,19): error TS1109: Expression expected. -tests/cases/compiler/es6ClassTest9.ts(2,10): error TS2300: Duplicate identifier 'foo'. +tests/cases/compiler/es6ClassTest9.ts(1,15): error TS2300: Duplicate identifier 'foo'. +tests/cases/compiler/es6ClassTest9.ts(2,1): error TS2300: Duplicate identifier 'foo'. -==== tests/cases/compiler/es6ClassTest9.ts (3 errors) ==== +==== tests/cases/compiler/es6ClassTest9.ts (4 errors) ==== declare class foo(); ~ !!! error TS1005: '{' expected. ~ !!! error TS1109: Expression expected. + ~~~ +!!! error TS2300: Duplicate identifier 'foo'. function foo() {} - ~~~ + ~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'foo'. \ No newline at end of file diff --git a/tests/baselines/reference/exportSameNameFuncVar.errors.txt b/tests/baselines/reference/exportSameNameFuncVar.errors.txt index 0103d0e8968..4d6d835b13b 100644 --- a/tests/baselines/reference/exportSameNameFuncVar.errors.txt +++ b/tests/baselines/reference/exportSameNameFuncVar.errors.txt @@ -1,9 +1,13 @@ -tests/cases/compiler/exportSameNameFuncVar.ts(2,17): error TS2300: Duplicate identifier 'a'. +tests/cases/compiler/exportSameNameFuncVar.ts(1,12): error TS2300: Duplicate identifier 'a'. +tests/cases/compiler/exportSameNameFuncVar.ts(2,1): error TS2300: Duplicate identifier 'a'. -==== tests/cases/compiler/exportSameNameFuncVar.ts (1 errors) ==== +==== tests/cases/compiler/exportSameNameFuncVar.ts (2 errors) ==== export var a = 10; - export function a() { - ~ + ~ !!! error TS2300: Duplicate identifier 'a'. - } \ No newline at end of file + export function a() { + ~~~~~~~~~~~~~~~~~~~~~ + } + ~ +!!! error TS2300: Duplicate identifier 'a'. \ No newline at end of file diff --git a/tests/baselines/reference/extension.errors.txt b/tests/baselines/reference/extension.errors.txt index 9756d2920d1..e55f15f4381 100644 --- a/tests/baselines/reference/extension.errors.txt +++ b/tests/baselines/reference/extension.errors.txt @@ -1,11 +1,12 @@ tests/cases/compiler/extension.ts(16,5): error TS1128: Declaration or statement expected. tests/cases/compiler/extension.ts(16,22): error TS1005: ';' expected. +tests/cases/compiler/extension.ts(10,18): error TS2300: Duplicate identifier 'C'. tests/cases/compiler/extension.ts(16,12): error TS2304: Cannot find name 'extension'. tests/cases/compiler/extension.ts(16,28): error TS2300: Duplicate identifier 'C'. tests/cases/compiler/extension.ts(22,3): error TS2339: Property 'pe' does not exist on type 'C'. -==== tests/cases/compiler/extension.ts (5 errors) ==== +==== tests/cases/compiler/extension.ts (6 errors) ==== interface I { x; } @@ -16,6 +17,8 @@ tests/cases/compiler/extension.ts(22,3): error TS2339: Property 'pe' does not ex declare module M { export class C { + ~ +!!! error TS2300: Duplicate identifier 'C'. public p:number; } } diff --git a/tests/baselines/reference/fieldAndGetterWithSameName.errors.txt b/tests/baselines/reference/fieldAndGetterWithSameName.errors.txt index ef205adfd42..34b6ea08e09 100644 --- a/tests/baselines/reference/fieldAndGetterWithSameName.errors.txt +++ b/tests/baselines/reference/fieldAndGetterWithSameName.errors.txt @@ -1,13 +1,16 @@ tests/cases/compiler/fieldAndGetterWithSameName.ts(3,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -tests/cases/compiler/fieldAndGetterWithSameName.ts(3,7): error TS2300: Duplicate identifier 'x'. +tests/cases/compiler/fieldAndGetterWithSameName.ts(2,5): error TS2300: Duplicate identifier 'x'. +tests/cases/compiler/fieldAndGetterWithSameName.ts(3,3): error TS2300: Duplicate identifier 'x'. -==== tests/cases/compiler/fieldAndGetterWithSameName.ts (2 errors) ==== +==== tests/cases/compiler/fieldAndGetterWithSameName.ts (3 errors) ==== export class C { x: number; + ~ +!!! error TS2300: Duplicate identifier 'x'. get x(): number { return 1; } ~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~ + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'x'. } \ No newline at end of file diff --git a/tests/baselines/reference/funClodule.errors.txt b/tests/baselines/reference/funClodule.errors.txt index 20598f276f3..9a4f6c27224 100644 --- a/tests/baselines/reference/funClodule.errors.txt +++ b/tests/baselines/reference/funClodule.errors.txt @@ -1,11 +1,21 @@ +tests/cases/compiler/funClodule.ts(1,18): error TS2300: Duplicate identifier 'foo'. +tests/cases/compiler/funClodule.ts(2,16): error TS2300: Duplicate identifier 'foo'. tests/cases/compiler/funClodule.ts(5,15): error TS2300: Duplicate identifier 'foo'. -tests/cases/compiler/funClodule.ts(12,18): error TS2300: Duplicate identifier 'foo2'. +tests/cases/compiler/funClodule.ts(8,15): error TS2300: Duplicate identifier 'foo2'. +tests/cases/compiler/funClodule.ts(9,16): error TS2300: Duplicate identifier 'foo2'. +tests/cases/compiler/funClodule.ts(12,1): error TS2300: Duplicate identifier 'foo2'. +tests/cases/compiler/funClodule.ts(15,10): error TS2300: Duplicate identifier 'foo3'. +tests/cases/compiler/funClodule.ts(16,8): error TS2300: Duplicate identifier 'foo3'. tests/cases/compiler/funClodule.ts(19,7): error TS2300: Duplicate identifier 'foo3'. -==== tests/cases/compiler/funClodule.ts (3 errors) ==== +==== tests/cases/compiler/funClodule.ts (9 errors) ==== declare function foo(); + ~~~ +!!! error TS2300: Duplicate identifier 'foo'. declare module foo { + ~~~ +!!! error TS2300: Duplicate identifier 'foo'. export function x(): any; } declare class foo { } // Should error @@ -14,16 +24,24 @@ tests/cases/compiler/funClodule.ts(19,7): error TS2300: Duplicate identifier 'fo declare class foo2 { } + ~~~~ +!!! error TS2300: Duplicate identifier 'foo2'. declare module foo2 { + ~~~~ +!!! error TS2300: Duplicate identifier 'foo2'. export function x(): any; } declare function foo2(); // Should error - ~~~~ + ~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'foo2'. function foo3() { } + ~~~~ +!!! error TS2300: Duplicate identifier 'foo3'. module foo3 { + ~~~~ +!!! error TS2300: Duplicate identifier 'foo3'. export function x(): any { } } class foo3 { } // Should error diff --git a/tests/baselines/reference/functionAndPropertyNameConflict.errors.txt b/tests/baselines/reference/functionAndPropertyNameConflict.errors.txt index 8b1efe089c1..1e246184fb1 100644 --- a/tests/baselines/reference/functionAndPropertyNameConflict.errors.txt +++ b/tests/baselines/reference/functionAndPropertyNameConflict.errors.txt @@ -1,15 +1,20 @@ tests/cases/compiler/functionAndPropertyNameConflict.ts(3,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -tests/cases/compiler/functionAndPropertyNameConflict.ts(3,16): error TS2300: Duplicate identifier 'aaaaa'. +tests/cases/compiler/functionAndPropertyNameConflict.ts(2,12): error TS2300: Duplicate identifier 'aaaaa'. +tests/cases/compiler/functionAndPropertyNameConflict.ts(3,5): error TS2300: Duplicate identifier 'aaaaa'. -==== tests/cases/compiler/functionAndPropertyNameConflict.ts (2 errors) ==== +==== tests/cases/compiler/functionAndPropertyNameConflict.ts (3 errors) ==== class C65 { public aaaaa() { } + ~~~~~ +!!! error TS2300: Duplicate identifier 'aaaaa'. public get aaaaa() { ~~~~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~~~ -!!! error TS2300: Duplicate identifier 'aaaaa'. + ~~~~~~~~~~~~~~~~~~~~ return 1; + ~~~~~~~~~~~~~~~~~ } + ~~~~~ +!!! error TS2300: Duplicate identifier 'aaaaa'. } \ No newline at end of file diff --git a/tests/baselines/reference/functionCall15.errors.txt b/tests/baselines/reference/functionCall15.errors.txt index 09c246d34dc..3d170c34fa0 100644 --- a/tests/baselines/reference/functionCall15.errors.txt +++ b/tests/baselines/reference/functionCall15.errors.txt @@ -1,7 +1,10 @@ -tests/cases/compiler/functionCall15.ts(1,39): error TS2300: Duplicate identifier 'b'. +tests/cases/compiler/functionCall15.ts(1,25): error TS2300: Duplicate identifier 'b'. +tests/cases/compiler/functionCall15.ts(1,36): error TS2300: Duplicate identifier 'b'. -==== tests/cases/compiler/functionCall15.ts (1 errors) ==== +==== tests/cases/compiler/functionCall15.ts (2 errors) ==== function foo(a?:string, b?:number, ...b:number[]){} - ~ + ~ +!!! error TS2300: Duplicate identifier 'b'. + ~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'b'. \ No newline at end of file diff --git a/tests/baselines/reference/functionNameConflicts.errors.txt b/tests/baselines/reference/functionNameConflicts.errors.txt index 08a2c5c462d..cf37103eed5 100644 --- a/tests/baselines/reference/functionNameConflicts.errors.txt +++ b/tests/baselines/reference/functionNameConflicts.errors.txt @@ -1,39 +1,54 @@ +tests/cases/conformance/functions/functionNameConflicts.ts(5,14): error TS2300: Duplicate identifier 'fn1'. tests/cases/conformance/functions/functionNameConflicts.ts(6,9): error TS2300: Duplicate identifier 'fn1'. -tests/cases/conformance/functions/functionNameConflicts.ts(9,14): error TS2300: Duplicate identifier 'fn2'. +tests/cases/conformance/functions/functionNameConflicts.ts(8,9): error TS2300: Duplicate identifier 'fn2'. +tests/cases/conformance/functions/functionNameConflicts.ts(9,5): error TS2300: Duplicate identifier 'fn2'. +tests/cases/conformance/functions/functionNameConflicts.ts(12,10): error TS2300: Duplicate identifier 'fn3'. tests/cases/conformance/functions/functionNameConflicts.ts(13,5): error TS2300: Duplicate identifier 'fn3'. -tests/cases/conformance/functions/functionNameConflicts.ts(17,14): error TS2300: Duplicate identifier 'fn4'. +tests/cases/conformance/functions/functionNameConflicts.ts(16,9): error TS2300: Duplicate identifier 'fn4'. +tests/cases/conformance/functions/functionNameConflicts.ts(17,5): error TS2300: Duplicate identifier 'fn4'. +tests/cases/conformance/functions/functionNameConflicts.ts(19,14): error TS2300: Duplicate identifier 'fn5'. tests/cases/conformance/functions/functionNameConflicts.ts(20,9): error TS2300: Duplicate identifier 'fn5'. tests/cases/conformance/functions/functionNameConflicts.ts(24,10): error TS2389: Function implementation name must be 'over'. -==== tests/cases/conformance/functions/functionNameConflicts.ts (6 errors) ==== +==== tests/cases/conformance/functions/functionNameConflicts.ts (11 errors) ==== //Function and variable of the same name in same declaration space //Function overload with different name from implementation signature module M { function fn1() { } + ~~~ +!!! error TS2300: Duplicate identifier 'fn1'. var fn1; ~~~ !!! error TS2300: Duplicate identifier 'fn1'. var fn2; + ~~~ +!!! error TS2300: Duplicate identifier 'fn2'. function fn2() { } - ~~~ + ~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'fn2'. } function fn3() { } + ~~~ +!!! error TS2300: Duplicate identifier 'fn3'. var fn3; ~~~ !!! error TS2300: Duplicate identifier 'fn3'. function func() { var fn4; + ~~~ +!!! error TS2300: Duplicate identifier 'fn4'. function fn4() { } - ~~~ + ~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'fn4'. function fn5() { } + ~~~ +!!! error TS2300: Duplicate identifier 'fn5'. var fn5; ~~~ !!! error TS2300: Duplicate identifier 'fn5'. diff --git a/tests/baselines/reference/functionWithSameNameAsField.errors.txt b/tests/baselines/reference/functionWithSameNameAsField.errors.txt index e1ba390cf94..4dd114c8872 100644 --- a/tests/baselines/reference/functionWithSameNameAsField.errors.txt +++ b/tests/baselines/reference/functionWithSameNameAsField.errors.txt @@ -1,14 +1,20 @@ -tests/cases/compiler/functionWithSameNameAsField.ts(3,12): error TS2300: Duplicate identifier 'total'. +tests/cases/compiler/functionWithSameNameAsField.ts(2,12): error TS2300: Duplicate identifier 'total'. +tests/cases/compiler/functionWithSameNameAsField.ts(3,5): error TS2300: Duplicate identifier 'total'. -==== tests/cases/compiler/functionWithSameNameAsField.ts (1 errors) ==== +==== tests/cases/compiler/functionWithSameNameAsField.ts (2 errors) ==== class TestProgressBar { public total: number; - public total(total: number) { ~~~~~ !!! error TS2300: Duplicate identifier 'total'. + public total(total: number) { + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ this.total = total; + ~~~~~~~~~~~~~~~~~~~~~~~~~~~ return this; + ~~~~~~~~~~~~~~~~~~~~ } + ~~~~~ +!!! error TS2300: Duplicate identifier 'total'. } \ No newline at end of file diff --git a/tests/baselines/reference/genericClassesRedeclaration.errors.txt b/tests/baselines/reference/genericClassesRedeclaration.errors.txt index 8cf048c3061..abdea2b052b 100644 --- a/tests/baselines/reference/genericClassesRedeclaration.errors.txt +++ b/tests/baselines/reference/genericClassesRedeclaration.errors.txt @@ -1,9 +1,11 @@ +tests/cases/compiler/genericClassesRedeclaration.ts(16,11): error TS2300: Duplicate identifier 'StringHashTable'. +tests/cases/compiler/genericClassesRedeclaration.ts(29,11): error TS2300: Duplicate identifier 'IdentiferNameHashTable'. tests/cases/compiler/genericClassesRedeclaration.ts(42,9): error TS2374: Duplicate string index signature. tests/cases/compiler/genericClassesRedeclaration.ts(55,11): error TS2300: Duplicate identifier 'StringHashTable'. tests/cases/compiler/genericClassesRedeclaration.ts(68,11): error TS2300: Duplicate identifier 'IdentiferNameHashTable'. -==== tests/cases/compiler/genericClassesRedeclaration.ts (3 errors) ==== +==== tests/cases/compiler/genericClassesRedeclaration.ts (5 errors) ==== declare module TypeScript { interface IIndexable { [s: string]: T; @@ -20,6 +22,8 @@ tests/cases/compiler/genericClassesRedeclaration.ts(68,11): error TS2300: Duplic lookup(key: string): T; } class StringHashTable implements IHashTable { + ~~~~~~~~~~~~~~~ +!!! error TS2300: Duplicate identifier 'StringHashTable'. private itemCount; private table; public getAllKeys(): string[]; @@ -33,6 +37,8 @@ tests/cases/compiler/genericClassesRedeclaration.ts(68,11): error TS2300: Duplic public remove(key: string): void; } class IdentiferNameHashTable extends StringHashTable { + ~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2300: Duplicate identifier 'IdentiferNameHashTable'. public getAllKeys(): string[]; public add(key: string, data: T): boolean; public addOrUpdate(key: string, data: T): boolean; diff --git a/tests/baselines/reference/getAccessorWithImpliedReturnTypeAndFunctionClassMerge.errors.txt b/tests/baselines/reference/getAccessorWithImpliedReturnTypeAndFunctionClassMerge.errors.txt index ea6068225d9..a7e8155c220 100644 --- a/tests/baselines/reference/getAccessorWithImpliedReturnTypeAndFunctionClassMerge.errors.txt +++ b/tests/baselines/reference/getAccessorWithImpliedReturnTypeAndFunctionClassMerge.errors.txt @@ -1,18 +1,27 @@ tests/cases/compiler/getAccessorWithImpliedReturnTypeAndFunctionClassMerge.ts(21,20): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/getAccessorWithImpliedReturnTypeAndFunctionClassMerge.ts(1,18): error TS2300: Duplicate identifier '_'. tests/cases/compiler/getAccessorWithImpliedReturnTypeAndFunctionClassMerge.ts(1,41): error TS2304: Cannot find name '_'. +tests/cases/compiler/getAccessorWithImpliedReturnTypeAndFunctionClassMerge.ts(2,18): error TS2300: Duplicate identifier '_'. tests/cases/compiler/getAccessorWithImpliedReturnTypeAndFunctionClassMerge.ts(2,34): error TS2304: Cannot find name '_'. +tests/cases/compiler/getAccessorWithImpliedReturnTypeAndFunctionClassMerge.ts(4,16): error TS2300: Duplicate identifier '_'. tests/cases/compiler/getAccessorWithImpliedReturnTypeAndFunctionClassMerge.ts(15,15): error TS2300: Duplicate identifier '_'. -==== tests/cases/compiler/getAccessorWithImpliedReturnTypeAndFunctionClassMerge.ts (4 errors) ==== +==== tests/cases/compiler/getAccessorWithImpliedReturnTypeAndFunctionClassMerge.ts (7 errors) ==== declare function _(value: Array): _; + ~ +!!! error TS2300: Duplicate identifier '_'. ~~~~ !!! error TS2304: Cannot find name '_'. declare function _(value: T): _; + ~ +!!! error TS2300: Duplicate identifier '_'. ~~~~ !!! error TS2304: Cannot find name '_'. declare module _ { + ~ +!!! error TS2300: Duplicate identifier '_'. export function each( //list: List, //iterator: ListIterator, diff --git a/tests/baselines/reference/gettersAndSettersErrors.errors.txt b/tests/baselines/reference/gettersAndSettersErrors.errors.txt index b87dba8809c..1cc033cde04 100644 --- a/tests/baselines/reference/gettersAndSettersErrors.errors.txt +++ b/tests/baselines/reference/gettersAndSettersErrors.errors.txt @@ -4,22 +4,28 @@ tests/cases/compiler/gettersAndSettersErrors.ts(6,16): error TS1056: Accessors a tests/cases/compiler/gettersAndSettersErrors.ts(7,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/compiler/gettersAndSettersErrors.ts(11,17): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/compiler/gettersAndSettersErrors.ts(12,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -tests/cases/compiler/gettersAndSettersErrors.ts(5,12): error TS2300: Duplicate identifier 'Foo'. +tests/cases/compiler/gettersAndSettersErrors.ts(2,16): error TS2300: Duplicate identifier 'Foo'. +tests/cases/compiler/gettersAndSettersErrors.ts(3,16): error TS2300: Duplicate identifier 'Foo'. +tests/cases/compiler/gettersAndSettersErrors.ts(5,5): error TS2300: Duplicate identifier 'Foo'. tests/cases/compiler/gettersAndSettersErrors.ts(11,17): error TS2379: Getter and setter accessors do not agree in visibility. tests/cases/compiler/gettersAndSettersErrors.ts(12,16): error TS2379: Getter and setter accessors do not agree in visibility. -==== tests/cases/compiler/gettersAndSettersErrors.ts (9 errors) ==== +==== tests/cases/compiler/gettersAndSettersErrors.ts (11 errors) ==== class C { public get Foo() { return "foo";} // ok ~~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~~ +!!! error TS2300: Duplicate identifier 'Foo'. public set Foo(foo:string) {} // ok ~~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~~ +!!! error TS2300: Duplicate identifier 'Foo'. public Foo = 0; // error - duplicate identifier Foo - confirmed - ~~~ + ~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'Foo'. public get Goo(v:string):string {return null;} // error - getters must not have a parameter ~~~ diff --git a/tests/baselines/reference/giant.errors.txt b/tests/baselines/reference/giant.errors.txt index 01ddc29ea05..46e3632a938 100644 --- a/tests/baselines/reference/giant.errors.txt +++ b/tests/baselines/reference/giant.errors.txt @@ -145,89 +145,143 @@ tests/cases/compiler/giant.ts(672,22): error TS1037: A function implementation c tests/cases/compiler/giant.ts(672,25): error TS1036: Statements are not allowed in ambient contexts. tests/cases/compiler/giant.ts(676,30): error TS1037: A function implementation cannot be declared in an ambient context. tests/cases/compiler/giant.ts(676,33): error TS1036: Statements are not allowed in ambient contexts. -tests/cases/compiler/giant.ts(24,16): error TS2300: Duplicate identifier 'pgF'. +tests/cases/compiler/giant.ts(23,12): error TS2300: Duplicate identifier 'pgF'. +tests/cases/compiler/giant.ts(24,5): error TS2300: Duplicate identifier 'pgF'. tests/cases/compiler/giant.ts(24,16): error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. -tests/cases/compiler/giant.ts(26,16): error TS2300: Duplicate identifier 'psF'. -tests/cases/compiler/giant.ts(28,17): error TS2300: Duplicate identifier 'rgF'. +tests/cases/compiler/giant.ts(25,12): error TS2300: Duplicate identifier 'psF'. +tests/cases/compiler/giant.ts(26,5): error TS2300: Duplicate identifier 'psF'. +tests/cases/compiler/giant.ts(27,13): error TS2300: Duplicate identifier 'rgF'. +tests/cases/compiler/giant.ts(28,5): error TS2300: Duplicate identifier 'rgF'. tests/cases/compiler/giant.ts(28,17): error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. -tests/cases/compiler/giant.ts(30,17): error TS2300: Duplicate identifier 'rsF'. -tests/cases/compiler/giant.ts(34,16): error TS2300: Duplicate identifier 'tsF'. -tests/cases/compiler/giant.ts(36,16): error TS2300: Duplicate identifier 'tgF'. +tests/cases/compiler/giant.ts(29,13): error TS2300: Duplicate identifier 'rsF'. +tests/cases/compiler/giant.ts(30,5): error TS2300: Duplicate identifier 'rsF'. +tests/cases/compiler/giant.ts(33,12): error TS2300: Duplicate identifier 'tsF'. +tests/cases/compiler/giant.ts(34,5): error TS2300: Duplicate identifier 'tsF'. +tests/cases/compiler/giant.ts(35,12): error TS2300: Duplicate identifier 'tgF'. +tests/cases/compiler/giant.ts(36,5): error TS2300: Duplicate identifier 'tgF'. tests/cases/compiler/giant.ts(36,16): error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. tests/cases/compiler/giant.ts(76,5): error TS2386: Overload signatures must all be optional or required. -tests/cases/compiler/giant.ts(88,20): error TS2300: Duplicate identifier 'pgF'. +tests/cases/compiler/giant.ts(87,16): error TS2300: Duplicate identifier 'pgF'. +tests/cases/compiler/giant.ts(88,9): error TS2300: Duplicate identifier 'pgF'. tests/cases/compiler/giant.ts(88,20): error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. -tests/cases/compiler/giant.ts(90,20): error TS2300: Duplicate identifier 'psF'. -tests/cases/compiler/giant.ts(92,21): error TS2300: Duplicate identifier 'rgF'. +tests/cases/compiler/giant.ts(89,16): error TS2300: Duplicate identifier 'psF'. +tests/cases/compiler/giant.ts(90,9): error TS2300: Duplicate identifier 'psF'. +tests/cases/compiler/giant.ts(91,17): error TS2300: Duplicate identifier 'rgF'. +tests/cases/compiler/giant.ts(92,9): error TS2300: Duplicate identifier 'rgF'. tests/cases/compiler/giant.ts(92,21): error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. -tests/cases/compiler/giant.ts(94,21): error TS2300: Duplicate identifier 'rsF'. -tests/cases/compiler/giant.ts(98,20): error TS2300: Duplicate identifier 'tsF'. -tests/cases/compiler/giant.ts(100,20): error TS2300: Duplicate identifier 'tgF'. +tests/cases/compiler/giant.ts(93,17): error TS2300: Duplicate identifier 'rsF'. +tests/cases/compiler/giant.ts(94,9): error TS2300: Duplicate identifier 'rsF'. +tests/cases/compiler/giant.ts(97,16): error TS2300: Duplicate identifier 'tsF'. +tests/cases/compiler/giant.ts(98,9): error TS2300: Duplicate identifier 'tsF'. +tests/cases/compiler/giant.ts(99,16): error TS2300: Duplicate identifier 'tgF'. +tests/cases/compiler/giant.ts(100,9): error TS2300: Duplicate identifier 'tgF'. tests/cases/compiler/giant.ts(100,20): error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. tests/cases/compiler/giant.ts(140,9): error TS2386: Overload signatures must all be optional or required. -tests/cases/compiler/giant.ts(167,20): error TS2300: Duplicate identifier 'pgF'. +tests/cases/compiler/giant.ts(166,16): error TS2300: Duplicate identifier 'pgF'. +tests/cases/compiler/giant.ts(167,9): error TS2300: Duplicate identifier 'pgF'. tests/cases/compiler/giant.ts(167,20): error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. -tests/cases/compiler/giant.ts(169,20): error TS2300: Duplicate identifier 'psF'. -tests/cases/compiler/giant.ts(171,21): error TS2300: Duplicate identifier 'rgF'. +tests/cases/compiler/giant.ts(168,16): error TS2300: Duplicate identifier 'psF'. +tests/cases/compiler/giant.ts(169,9): error TS2300: Duplicate identifier 'psF'. +tests/cases/compiler/giant.ts(170,17): error TS2300: Duplicate identifier 'rgF'. +tests/cases/compiler/giant.ts(171,9): error TS2300: Duplicate identifier 'rgF'. tests/cases/compiler/giant.ts(171,21): error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. -tests/cases/compiler/giant.ts(173,21): error TS2300: Duplicate identifier 'rsF'. -tests/cases/compiler/giant.ts(177,20): error TS2300: Duplicate identifier 'tsF'. -tests/cases/compiler/giant.ts(179,20): error TS2300: Duplicate identifier 'tgF'. +tests/cases/compiler/giant.ts(172,17): error TS2300: Duplicate identifier 'rsF'. +tests/cases/compiler/giant.ts(173,9): error TS2300: Duplicate identifier 'rsF'. +tests/cases/compiler/giant.ts(176,16): error TS2300: Duplicate identifier 'tsF'. +tests/cases/compiler/giant.ts(177,9): error TS2300: Duplicate identifier 'tsF'. +tests/cases/compiler/giant.ts(178,16): error TS2300: Duplicate identifier 'tgF'. +tests/cases/compiler/giant.ts(179,9): error TS2300: Duplicate identifier 'tgF'. tests/cases/compiler/giant.ts(179,20): error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. tests/cases/compiler/giant.ts(219,9): error TS2386: Overload signatures must all be optional or required. -tests/cases/compiler/giant.ts(246,20): error TS2300: Duplicate identifier 'pgF'. -tests/cases/compiler/giant.ts(248,20): error TS2300: Duplicate identifier 'psF'. -tests/cases/compiler/giant.ts(250,21): error TS2300: Duplicate identifier 'rgF'. -tests/cases/compiler/giant.ts(252,21): error TS2300: Duplicate identifier 'rsF'. -tests/cases/compiler/giant.ts(256,20): error TS2300: Duplicate identifier 'tsF'. -tests/cases/compiler/giant.ts(258,20): error TS2300: Duplicate identifier 'tgF'. -tests/cases/compiler/giant.ts(282,16): error TS2300: Duplicate identifier 'pgF'. +tests/cases/compiler/giant.ts(245,16): error TS2300: Duplicate identifier 'pgF'. +tests/cases/compiler/giant.ts(246,9): error TS2300: Duplicate identifier 'pgF'. +tests/cases/compiler/giant.ts(247,16): error TS2300: Duplicate identifier 'psF'. +tests/cases/compiler/giant.ts(248,9): error TS2300: Duplicate identifier 'psF'. +tests/cases/compiler/giant.ts(249,17): error TS2300: Duplicate identifier 'rgF'. +tests/cases/compiler/giant.ts(250,9): error TS2300: Duplicate identifier 'rgF'. +tests/cases/compiler/giant.ts(251,17): error TS2300: Duplicate identifier 'rsF'. +tests/cases/compiler/giant.ts(252,9): error TS2300: Duplicate identifier 'rsF'. +tests/cases/compiler/giant.ts(255,16): error TS2300: Duplicate identifier 'tsF'. +tests/cases/compiler/giant.ts(256,9): error TS2300: Duplicate identifier 'tsF'. +tests/cases/compiler/giant.ts(257,16): error TS2300: Duplicate identifier 'tgF'. +tests/cases/compiler/giant.ts(258,9): error TS2300: Duplicate identifier 'tgF'. +tests/cases/compiler/giant.ts(281,12): error TS2300: Duplicate identifier 'pgF'. +tests/cases/compiler/giant.ts(282,5): error TS2300: Duplicate identifier 'pgF'. tests/cases/compiler/giant.ts(282,16): error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. -tests/cases/compiler/giant.ts(284,16): error TS2300: Duplicate identifier 'psF'. -tests/cases/compiler/giant.ts(286,17): error TS2300: Duplicate identifier 'rgF'. +tests/cases/compiler/giant.ts(283,12): error TS2300: Duplicate identifier 'psF'. +tests/cases/compiler/giant.ts(284,5): error TS2300: Duplicate identifier 'psF'. +tests/cases/compiler/giant.ts(285,13): error TS2300: Duplicate identifier 'rgF'. +tests/cases/compiler/giant.ts(286,5): error TS2300: Duplicate identifier 'rgF'. tests/cases/compiler/giant.ts(286,17): error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. -tests/cases/compiler/giant.ts(288,17): error TS2300: Duplicate identifier 'rsF'. -tests/cases/compiler/giant.ts(292,16): error TS2300: Duplicate identifier 'tsF'. -tests/cases/compiler/giant.ts(294,16): error TS2300: Duplicate identifier 'tgF'. +tests/cases/compiler/giant.ts(287,13): error TS2300: Duplicate identifier 'rsF'. +tests/cases/compiler/giant.ts(288,5): error TS2300: Duplicate identifier 'rsF'. +tests/cases/compiler/giant.ts(291,12): error TS2300: Duplicate identifier 'tsF'. +tests/cases/compiler/giant.ts(292,5): error TS2300: Duplicate identifier 'tsF'. +tests/cases/compiler/giant.ts(293,12): error TS2300: Duplicate identifier 'tgF'. +tests/cases/compiler/giant.ts(294,5): error TS2300: Duplicate identifier 'tgF'. tests/cases/compiler/giant.ts(294,16): error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. tests/cases/compiler/giant.ts(334,5): error TS2386: Overload signatures must all be optional or required. -tests/cases/compiler/giant.ts(346,20): error TS2300: Duplicate identifier 'pgF'. +tests/cases/compiler/giant.ts(345,16): error TS2300: Duplicate identifier 'pgF'. +tests/cases/compiler/giant.ts(346,9): error TS2300: Duplicate identifier 'pgF'. tests/cases/compiler/giant.ts(346,20): error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. -tests/cases/compiler/giant.ts(348,20): error TS2300: Duplicate identifier 'psF'. -tests/cases/compiler/giant.ts(350,21): error TS2300: Duplicate identifier 'rgF'. +tests/cases/compiler/giant.ts(347,16): error TS2300: Duplicate identifier 'psF'. +tests/cases/compiler/giant.ts(348,9): error TS2300: Duplicate identifier 'psF'. +tests/cases/compiler/giant.ts(349,17): error TS2300: Duplicate identifier 'rgF'. +tests/cases/compiler/giant.ts(350,9): error TS2300: Duplicate identifier 'rgF'. tests/cases/compiler/giant.ts(350,21): error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. -tests/cases/compiler/giant.ts(352,21): error TS2300: Duplicate identifier 'rsF'. -tests/cases/compiler/giant.ts(356,20): error TS2300: Duplicate identifier 'tsF'. -tests/cases/compiler/giant.ts(358,20): error TS2300: Duplicate identifier 'tgF'. +tests/cases/compiler/giant.ts(351,17): error TS2300: Duplicate identifier 'rsF'. +tests/cases/compiler/giant.ts(352,9): error TS2300: Duplicate identifier 'rsF'. +tests/cases/compiler/giant.ts(355,16): error TS2300: Duplicate identifier 'tsF'. +tests/cases/compiler/giant.ts(356,9): error TS2300: Duplicate identifier 'tsF'. +tests/cases/compiler/giant.ts(357,16): error TS2300: Duplicate identifier 'tgF'. +tests/cases/compiler/giant.ts(358,9): error TS2300: Duplicate identifier 'tgF'. tests/cases/compiler/giant.ts(358,20): error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. tests/cases/compiler/giant.ts(398,9): error TS2386: Overload signatures must all be optional or required. -tests/cases/compiler/giant.ts(425,20): error TS2300: Duplicate identifier 'pgF'. +tests/cases/compiler/giant.ts(424,16): error TS2300: Duplicate identifier 'pgF'. +tests/cases/compiler/giant.ts(425,9): error TS2300: Duplicate identifier 'pgF'. tests/cases/compiler/giant.ts(425,20): error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. -tests/cases/compiler/giant.ts(427,20): error TS2300: Duplicate identifier 'psF'. -tests/cases/compiler/giant.ts(429,21): error TS2300: Duplicate identifier 'rgF'. +tests/cases/compiler/giant.ts(426,16): error TS2300: Duplicate identifier 'psF'. +tests/cases/compiler/giant.ts(427,9): error TS2300: Duplicate identifier 'psF'. +tests/cases/compiler/giant.ts(428,17): error TS2300: Duplicate identifier 'rgF'. +tests/cases/compiler/giant.ts(429,9): error TS2300: Duplicate identifier 'rgF'. tests/cases/compiler/giant.ts(429,21): error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. -tests/cases/compiler/giant.ts(431,21): error TS2300: Duplicate identifier 'rsF'. -tests/cases/compiler/giant.ts(435,20): error TS2300: Duplicate identifier 'tsF'. -tests/cases/compiler/giant.ts(437,20): error TS2300: Duplicate identifier 'tgF'. +tests/cases/compiler/giant.ts(430,17): error TS2300: Duplicate identifier 'rsF'. +tests/cases/compiler/giant.ts(431,9): error TS2300: Duplicate identifier 'rsF'. +tests/cases/compiler/giant.ts(434,16): error TS2300: Duplicate identifier 'tsF'. +tests/cases/compiler/giant.ts(435,9): error TS2300: Duplicate identifier 'tsF'. +tests/cases/compiler/giant.ts(436,16): error TS2300: Duplicate identifier 'tgF'. +tests/cases/compiler/giant.ts(437,9): error TS2300: Duplicate identifier 'tgF'. tests/cases/compiler/giant.ts(437,20): error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. tests/cases/compiler/giant.ts(477,9): error TS2386: Overload signatures must all be optional or required. -tests/cases/compiler/giant.ts(504,20): error TS2300: Duplicate identifier 'pgF'. -tests/cases/compiler/giant.ts(506,20): error TS2300: Duplicate identifier 'psF'. -tests/cases/compiler/giant.ts(508,21): error TS2300: Duplicate identifier 'rgF'. -tests/cases/compiler/giant.ts(510,21): error TS2300: Duplicate identifier 'rsF'. -tests/cases/compiler/giant.ts(514,20): error TS2300: Duplicate identifier 'tsF'. -tests/cases/compiler/giant.ts(516,20): error TS2300: Duplicate identifier 'tgF'. -tests/cases/compiler/giant.ts(540,16): error TS2300: Duplicate identifier 'pgF'. -tests/cases/compiler/giant.ts(542,16): error TS2300: Duplicate identifier 'psF'. -tests/cases/compiler/giant.ts(544,17): error TS2300: Duplicate identifier 'rgF'. -tests/cases/compiler/giant.ts(546,17): error TS2300: Duplicate identifier 'rsF'. -tests/cases/compiler/giant.ts(550,16): error TS2300: Duplicate identifier 'tsF'. -tests/cases/compiler/giant.ts(552,16): error TS2300: Duplicate identifier 'tgF'. +tests/cases/compiler/giant.ts(503,16): error TS2300: Duplicate identifier 'pgF'. +tests/cases/compiler/giant.ts(504,9): error TS2300: Duplicate identifier 'pgF'. +tests/cases/compiler/giant.ts(505,16): error TS2300: Duplicate identifier 'psF'. +tests/cases/compiler/giant.ts(506,9): error TS2300: Duplicate identifier 'psF'. +tests/cases/compiler/giant.ts(507,17): error TS2300: Duplicate identifier 'rgF'. +tests/cases/compiler/giant.ts(508,9): error TS2300: Duplicate identifier 'rgF'. +tests/cases/compiler/giant.ts(509,17): error TS2300: Duplicate identifier 'rsF'. +tests/cases/compiler/giant.ts(510,9): error TS2300: Duplicate identifier 'rsF'. +tests/cases/compiler/giant.ts(513,16): error TS2300: Duplicate identifier 'tsF'. +tests/cases/compiler/giant.ts(514,9): error TS2300: Duplicate identifier 'tsF'. +tests/cases/compiler/giant.ts(515,16): error TS2300: Duplicate identifier 'tgF'. +tests/cases/compiler/giant.ts(516,9): error TS2300: Duplicate identifier 'tgF'. +tests/cases/compiler/giant.ts(539,12): error TS2300: Duplicate identifier 'pgF'. +tests/cases/compiler/giant.ts(540,5): error TS2300: Duplicate identifier 'pgF'. +tests/cases/compiler/giant.ts(541,12): error TS2300: Duplicate identifier 'psF'. +tests/cases/compiler/giant.ts(542,5): error TS2300: Duplicate identifier 'psF'. +tests/cases/compiler/giant.ts(543,13): error TS2300: Duplicate identifier 'rgF'. +tests/cases/compiler/giant.ts(544,5): error TS2300: Duplicate identifier 'rgF'. +tests/cases/compiler/giant.ts(545,13): error TS2300: Duplicate identifier 'rsF'. +tests/cases/compiler/giant.ts(546,5): error TS2300: Duplicate identifier 'rsF'. +tests/cases/compiler/giant.ts(549,12): error TS2300: Duplicate identifier 'tsF'. +tests/cases/compiler/giant.ts(550,5): error TS2300: Duplicate identifier 'tsF'. +tests/cases/compiler/giant.ts(551,12): error TS2300: Duplicate identifier 'tgF'. +tests/cases/compiler/giant.ts(552,5): error TS2300: Duplicate identifier 'tgF'. tests/cases/compiler/giant.ts(602,9): error TS2386: Overload signatures must all be optional or required. tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all be optional or required. -==== tests/cases/compiler/giant.ts (227 errors) ==== +==== tests/cases/compiler/giant.ts (281 errors) ==== /* Prefixes @@ -251,44 +305,56 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all public pF() { } private rF() { } public pgF() { } + ~~~ +!!! error TS2300: Duplicate identifier 'pgF'. public get pgF() - ~~~ + ~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'pgF'. ~~~ !!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. public psF(param:any) { } ~~~~~~ !!! error TS1005: '{' expected. + ~~~ +!!! error TS2300: Duplicate identifier 'psF'. public set psF(param:any) - ~~~ + ~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'psF'. private rgF() { } ~~~~~~~ !!! error TS1005: '{' expected. + ~~~ +!!! error TS2300: Duplicate identifier 'rgF'. private get rgF() - ~~~ + ~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'rgF'. ~~~ !!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. private rsF(param:any) { } ~~~~~~~ !!! error TS1005: '{' expected. + ~~~ +!!! error TS2300: Duplicate identifier 'rsF'. private set rsF(param:any) - ~~~ + ~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'rsF'. static tV; ~~~~~~ !!! error TS1005: '{' expected. static tF() { } static tsF(param:any) { } + ~~~ +!!! error TS2300: Duplicate identifier 'tsF'. static set tsF(param:any) - ~~~ + ~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'tsF'. static tgF() { } ~~~~~~ !!! error TS1005: '{' expected. + ~~~ +!!! error TS2300: Duplicate identifier 'tgF'. static get tgF() - ~~~ + ~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'tgF'. ~~~ !!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. @@ -353,44 +419,56 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all public pF() { } private rF() { } public pgF() { } + ~~~ +!!! error TS2300: Duplicate identifier 'pgF'. public get pgF() - ~~~ + ~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'pgF'. ~~~ !!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. public psF(param:any) { } ~~~~~~ !!! error TS1005: '{' expected. + ~~~ +!!! error TS2300: Duplicate identifier 'psF'. public set psF(param:any) - ~~~ + ~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'psF'. private rgF() { } ~~~~~~~ !!! error TS1005: '{' expected. + ~~~ +!!! error TS2300: Duplicate identifier 'rgF'. private get rgF() - ~~~ + ~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'rgF'. ~~~ !!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. private rsF(param:any) { } ~~~~~~~ !!! error TS1005: '{' expected. + ~~~ +!!! error TS2300: Duplicate identifier 'rsF'. private set rsF(param:any) - ~~~ + ~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'rsF'. static tV; ~~~~~~ !!! error TS1005: '{' expected. static tF() { } static tsF(param:any) { } + ~~~ +!!! error TS2300: Duplicate identifier 'tsF'. static set tsF(param:any) - ~~~ + ~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'tsF'. static tgF() { } ~~~~~~ !!! error TS1005: '{' expected. + ~~~ +!!! error TS2300: Duplicate identifier 'tgF'. static get tgF() - ~~~ + ~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'tgF'. ~~~ !!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. @@ -472,44 +550,56 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all public pF() { } private rF() { } public pgF() { } + ~~~ +!!! error TS2300: Duplicate identifier 'pgF'. public get pgF() - ~~~ + ~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'pgF'. ~~~ !!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. public psF(param:any) { } ~~~~~~ !!! error TS1005: '{' expected. + ~~~ +!!! error TS2300: Duplicate identifier 'psF'. public set psF(param:any) - ~~~ + ~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'psF'. private rgF() { } ~~~~~~~ !!! error TS1005: '{' expected. + ~~~ +!!! error TS2300: Duplicate identifier 'rgF'. private get rgF() - ~~~ + ~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'rgF'. ~~~ !!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. private rsF(param:any) { } ~~~~~~~ !!! error TS1005: '{' expected. + ~~~ +!!! error TS2300: Duplicate identifier 'rsF'. private set rsF(param:any) - ~~~ + ~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'rsF'. static tV; ~~~~~~ !!! error TS1005: '{' expected. static tF() { } static tsF(param:any) { } + ~~~ +!!! error TS2300: Duplicate identifier 'tsF'. static set tsF(param:any) - ~~~ + ~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'tsF'. static tgF() { } ~~~~~~ !!! error TS1005: '{' expected. + ~~~ +!!! error TS2300: Duplicate identifier 'tgF'. static get tgF() - ~~~ + ~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'tgF'. ~~~ !!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. @@ -601,34 +691,42 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all public pgF() { } ~ !!! error TS1037: A function implementation cannot be declared in an ambient context. + ~~~ +!!! error TS2300: Duplicate identifier 'pgF'. public get pgF() ~~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~ + ~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'pgF'. public psF(param:any) { } ~ !!! error TS1037: A function implementation cannot be declared in an ambient context. + ~~~ +!!! error TS2300: Duplicate identifier 'psF'. public set psF(param:any) ~~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~ + ~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'psF'. private rgF() { } ~ !!! error TS1037: A function implementation cannot be declared in an ambient context. + ~~~ +!!! error TS2300: Duplicate identifier 'rgF'. private get rgF() ~~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~ + ~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'rgF'. private rsF(param:any) { } ~ !!! error TS1037: A function implementation cannot be declared in an ambient context. + ~~~ +!!! error TS2300: Duplicate identifier 'rsF'. private set rsF(param:any) ~~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~ + ~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'rsF'. static tV; static tF() { } @@ -637,18 +735,22 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all static tsF(param:any) { } ~ !!! error TS1037: A function implementation cannot be declared in an ambient context. + ~~~ +!!! error TS2300: Duplicate identifier 'tsF'. static set tsF(param:any) ~~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~ + ~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'tsF'. static tgF() { } ~ !!! error TS1037: A function implementation cannot be declared in an ambient context. + ~~~ +!!! error TS2300: Duplicate identifier 'tgF'. static get tgF() ~~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~ + ~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'tgF'. } export declare module eaM { @@ -681,44 +783,56 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all public pF() { } private rF() { } public pgF() { } + ~~~ +!!! error TS2300: Duplicate identifier 'pgF'. public get pgF() - ~~~ + ~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'pgF'. ~~~ !!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. public psF(param:any) { } ~~~~~~ !!! error TS1005: '{' expected. + ~~~ +!!! error TS2300: Duplicate identifier 'psF'. public set psF(param:any) - ~~~ + ~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'psF'. private rgF() { } ~~~~~~~ !!! error TS1005: '{' expected. + ~~~ +!!! error TS2300: Duplicate identifier 'rgF'. private get rgF() - ~~~ + ~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'rgF'. ~~~ !!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. private rsF(param:any) { } ~~~~~~~ !!! error TS1005: '{' expected. + ~~~ +!!! error TS2300: Duplicate identifier 'rsF'. private set rsF(param:any) - ~~~ + ~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'rsF'. static tV; ~~~~~~ !!! error TS1005: '{' expected. static tF() { } static tsF(param:any) { } + ~~~ +!!! error TS2300: Duplicate identifier 'tsF'. static set tsF(param:any) - ~~~ + ~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'tsF'. static tgF() { } ~~~~~~ !!! error TS1005: '{' expected. + ~~~ +!!! error TS2300: Duplicate identifier 'tgF'. static get tgF() - ~~~ + ~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'tgF'. ~~~ !!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. @@ -783,44 +897,56 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all public pF() { } private rF() { } public pgF() { } + ~~~ +!!! error TS2300: Duplicate identifier 'pgF'. public get pgF() - ~~~ + ~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'pgF'. ~~~ !!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. public psF(param:any) { } ~~~~~~ !!! error TS1005: '{' expected. + ~~~ +!!! error TS2300: Duplicate identifier 'psF'. public set psF(param:any) - ~~~ + ~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'psF'. private rgF() { } ~~~~~~~ !!! error TS1005: '{' expected. + ~~~ +!!! error TS2300: Duplicate identifier 'rgF'. private get rgF() - ~~~ + ~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'rgF'. ~~~ !!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. private rsF(param:any) { } ~~~~~~~ !!! error TS1005: '{' expected. + ~~~ +!!! error TS2300: Duplicate identifier 'rsF'. private set rsF(param:any) - ~~~ + ~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'rsF'. static tV; ~~~~~~ !!! error TS1005: '{' expected. static tF() { } static tsF(param:any) { } + ~~~ +!!! error TS2300: Duplicate identifier 'tsF'. static set tsF(param:any) - ~~~ + ~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'tsF'. static tgF() { } ~~~~~~ !!! error TS1005: '{' expected. + ~~~ +!!! error TS2300: Duplicate identifier 'tgF'. static get tgF() - ~~~ + ~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'tgF'. ~~~ !!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. @@ -902,44 +1028,56 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all public pF() { } private rF() { } public pgF() { } + ~~~ +!!! error TS2300: Duplicate identifier 'pgF'. public get pgF() - ~~~ + ~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'pgF'. ~~~ !!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. public psF(param:any) { } ~~~~~~ !!! error TS1005: '{' expected. + ~~~ +!!! error TS2300: Duplicate identifier 'psF'. public set psF(param:any) - ~~~ + ~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'psF'. private rgF() { } ~~~~~~~ !!! error TS1005: '{' expected. + ~~~ +!!! error TS2300: Duplicate identifier 'rgF'. private get rgF() - ~~~ + ~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'rgF'. ~~~ !!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. private rsF(param:any) { } ~~~~~~~ !!! error TS1005: '{' expected. + ~~~ +!!! error TS2300: Duplicate identifier 'rsF'. private set rsF(param:any) - ~~~ + ~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'rsF'. static tV; ~~~~~~ !!! error TS1005: '{' expected. static tF() { } static tsF(param:any) { } + ~~~ +!!! error TS2300: Duplicate identifier 'tsF'. static set tsF(param:any) - ~~~ + ~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'tsF'. static tgF() { } ~~~~~~ !!! error TS1005: '{' expected. + ~~~ +!!! error TS2300: Duplicate identifier 'tgF'. static get tgF() - ~~~ + ~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'tgF'. ~~~ !!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. @@ -1031,34 +1169,42 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all public pgF() { } ~ !!! error TS1037: A function implementation cannot be declared in an ambient context. + ~~~ +!!! error TS2300: Duplicate identifier 'pgF'. public get pgF() ~~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~ + ~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'pgF'. public psF(param:any) { } ~ !!! error TS1037: A function implementation cannot be declared in an ambient context. + ~~~ +!!! error TS2300: Duplicate identifier 'psF'. public set psF(param:any) ~~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~ + ~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'psF'. private rgF() { } ~ !!! error TS1037: A function implementation cannot be declared in an ambient context. + ~~~ +!!! error TS2300: Duplicate identifier 'rgF'. private get rgF() ~~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~ + ~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'rgF'. private rsF(param:any) { } ~ !!! error TS1037: A function implementation cannot be declared in an ambient context. + ~~~ +!!! error TS2300: Duplicate identifier 'rsF'. private set rsF(param:any) ~~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~ + ~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'rsF'. static tV; static tF() { } @@ -1067,18 +1213,22 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all static tsF(param:any) { } ~ !!! error TS1037: A function implementation cannot be declared in an ambient context. + ~~~ +!!! error TS2300: Duplicate identifier 'tsF'. static set tsF(param:any) ~~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~ + ~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'tsF'. static tgF() { } ~ !!! error TS1037: A function implementation cannot be declared in an ambient context. + ~~~ +!!! error TS2300: Duplicate identifier 'tgF'. static get tgF() ~~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~ + ~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'tgF'. } export declare module eaM { @@ -1121,34 +1271,42 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all public pgF() { } ~ !!! error TS1037: A function implementation cannot be declared in an ambient context. + ~~~ +!!! error TS2300: Duplicate identifier 'pgF'. public get pgF() ~~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~ + ~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'pgF'. public psF(param:any) { } ~ !!! error TS1037: A function implementation cannot be declared in an ambient context. + ~~~ +!!! error TS2300: Duplicate identifier 'psF'. public set psF(param:any) ~~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~ + ~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'psF'. private rgF() { } ~ !!! error TS1037: A function implementation cannot be declared in an ambient context. + ~~~ +!!! error TS2300: Duplicate identifier 'rgF'. private get rgF() ~~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~ + ~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'rgF'. private rsF(param:any) { } ~ !!! error TS1037: A function implementation cannot be declared in an ambient context. + ~~~ +!!! error TS2300: Duplicate identifier 'rsF'. private set rsF(param:any) ~~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~ + ~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'rsF'. static tV; static tF() { } @@ -1157,18 +1315,22 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all static tsF(param:any) { } ~ !!! error TS1037: A function implementation cannot be declared in an ambient context. + ~~~ +!!! error TS2300: Duplicate identifier 'tsF'. static set tsF(param:any) ~~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~ + ~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'tsF'. static tgF() { } ~ !!! error TS1037: A function implementation cannot be declared in an ambient context. + ~~~ +!!! error TS2300: Duplicate identifier 'tgF'. static get tgF() ~~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~ + ~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'tgF'. } export declare module eaM { diff --git a/tests/baselines/reference/importAndVariableDeclarationConflict3.errors.txt b/tests/baselines/reference/importAndVariableDeclarationConflict3.errors.txt index 739ca67724f..3ddd9f7c409 100644 --- a/tests/baselines/reference/importAndVariableDeclarationConflict3.errors.txt +++ b/tests/baselines/reference/importAndVariableDeclarationConflict3.errors.txt @@ -1,13 +1,16 @@ -tests/cases/compiler/importAndVariableDeclarationConflict3.ts(6,8): error TS2300: Duplicate identifier 'x'. +tests/cases/compiler/importAndVariableDeclarationConflict3.ts(5,8): error TS2300: Duplicate identifier 'x'. +tests/cases/compiler/importAndVariableDeclarationConflict3.ts(6,1): error TS2300: Duplicate identifier 'x'. -==== tests/cases/compiler/importAndVariableDeclarationConflict3.ts (1 errors) ==== +==== tests/cases/compiler/importAndVariableDeclarationConflict3.ts (2 errors) ==== module m { export var m = ''; } - import x = m.m; import x = m.m; ~ !!! error TS2300: Duplicate identifier 'x'. + import x = m.m; + ~~~~~~~~~~~~~~~ +!!! error TS2300: Duplicate identifier 'x'. \ No newline at end of file diff --git a/tests/baselines/reference/interfaceDeclaration1.errors.txt b/tests/baselines/reference/interfaceDeclaration1.errors.txt index a9654fabdcf..43cafecf578 100644 --- a/tests/baselines/reference/interfaceDeclaration1.errors.txt +++ b/tests/baselines/reference/interfaceDeclaration1.errors.txt @@ -1,4 +1,6 @@ +tests/cases/compiler/interfaceDeclaration1.ts(2,5): error TS2300: Duplicate identifier 'item'. tests/cases/compiler/interfaceDeclaration1.ts(3,5): error TS2300: Duplicate identifier 'item'. +tests/cases/compiler/interfaceDeclaration1.ts(7,5): error TS2300: Duplicate identifier 'item'. tests/cases/compiler/interfaceDeclaration1.ts(8,5): error TS2300: Duplicate identifier 'item'. tests/cases/compiler/interfaceDeclaration1.ts(22,11): error TS2310: Type 'I5' recursively references itself as a base type. tests/cases/compiler/interfaceDeclaration1.ts(35,7): error TS2421: Class 'C1' incorrectly implements interface 'I3': @@ -8,18 +10,22 @@ tests/cases/compiler/interfaceDeclaration1.ts(52,11): error TS2320: Interface 'i Named properties 'foo' of types 'i10' and 'i11' are not identical. -==== tests/cases/compiler/interfaceDeclaration1.ts (6 errors) ==== +==== tests/cases/compiler/interfaceDeclaration1.ts (8 errors) ==== interface I1 { - item:number; item:number; ~~~~ +!!! error TS2300: Duplicate identifier 'item'. + item:number; + ~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'item'. } interface I2 { item:any; - item:number; ~~~~ +!!! error TS2300: Duplicate identifier 'item'. + item:number; + ~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'item'. } diff --git a/tests/baselines/reference/interfaceDeclaration2.errors.txt b/tests/baselines/reference/interfaceDeclaration2.errors.txt index 8ef5e1a40d7..9739d946bc5 100644 --- a/tests/baselines/reference/interfaceDeclaration2.errors.txt +++ b/tests/baselines/reference/interfaceDeclaration2.errors.txt @@ -1,11 +1,14 @@ +tests/cases/compiler/interfaceDeclaration2.ts(4,11): error TS2300: Duplicate identifier 'I2'. tests/cases/compiler/interfaceDeclaration2.ts(5,7): error TS2300: Duplicate identifier 'I2'. -==== tests/cases/compiler/interfaceDeclaration2.ts (1 errors) ==== +==== tests/cases/compiler/interfaceDeclaration2.ts (2 errors) ==== interface I1 { } module I1 { } interface I2 { } + ~~ +!!! error TS2300: Duplicate identifier 'I2'. class I2 { } ~~ !!! error TS2300: Duplicate identifier 'I2'. diff --git a/tests/baselines/reference/invalidInstantiatedModule.errors.txt b/tests/baselines/reference/invalidInstantiatedModule.errors.txt index e6cb5491407..5a8ac069803 100644 --- a/tests/baselines/reference/invalidInstantiatedModule.errors.txt +++ b/tests/baselines/reference/invalidInstantiatedModule.errors.txt @@ -1,10 +1,13 @@ +tests/cases/conformance/internalModules/moduleDeclarations/invalidInstantiatedModule.ts(2,18): error TS2300: Duplicate identifier 'Point'. tests/cases/conformance/internalModules/moduleDeclarations/invalidInstantiatedModule.ts(3,16): error TS2300: Duplicate identifier 'Point'. tests/cases/conformance/internalModules/moduleDeclarations/invalidInstantiatedModule.ts(12,8): error TS2304: Cannot find name 'm'. -==== tests/cases/conformance/internalModules/moduleDeclarations/invalidInstantiatedModule.ts (2 errors) ==== +==== tests/cases/conformance/internalModules/moduleDeclarations/invalidInstantiatedModule.ts (3 errors) ==== module M { export class Point { x: number; y: number } + ~~~~~ +!!! error TS2300: Duplicate identifier 'Point'. export var Point = 1; // Error ~~~~~ !!! error TS2300: Duplicate identifier 'Point'. diff --git a/tests/baselines/reference/invalidNestedModules.errors.txt b/tests/baselines/reference/invalidNestedModules.errors.txt index 1d7e2641ff4..972c177fc0e 100644 --- a/tests/baselines/reference/invalidNestedModules.errors.txt +++ b/tests/baselines/reference/invalidNestedModules.errors.txt @@ -1,8 +1,9 @@ tests/cases/conformance/internalModules/moduleDeclarations/invalidNestedModules.ts(1,12): error TS2434: A module declaration cannot be located prior to a class or function with which it is merged +tests/cases/conformance/internalModules/moduleDeclarations/invalidNestedModules.ts(17,18): error TS2300: Duplicate identifier 'Point'. tests/cases/conformance/internalModules/moduleDeclarations/invalidNestedModules.ts(24,20): error TS2300: Duplicate identifier 'Point'. -==== tests/cases/conformance/internalModules/moduleDeclarations/invalidNestedModules.ts (2 errors) ==== +==== tests/cases/conformance/internalModules/moduleDeclarations/invalidNestedModules.ts (3 errors) ==== module A.B.C { ~ !!! error TS2434: A module declaration cannot be located prior to a class or function with which it is merged @@ -22,6 +23,8 @@ tests/cases/conformance/internalModules/moduleDeclarations/invalidNestedModules. module M2.X { export class Point { + ~~~~~ +!!! error TS2300: Duplicate identifier 'Point'. x: number; y: number; } } diff --git a/tests/baselines/reference/lastPropertyInLiteralWins.errors.txt b/tests/baselines/reference/lastPropertyInLiteralWins.errors.txt index 1bc749ba399..a6bccf35f39 100644 --- a/tests/baselines/reference/lastPropertyInLiteralWins.errors.txt +++ b/tests/baselines/reference/lastPropertyInLiteralWins.errors.txt @@ -1,13 +1,15 @@ +tests/cases/compiler/lastPropertyInLiteralWins.ts(8,5): error TS2300: Duplicate identifier 'thunk'. tests/cases/compiler/lastPropertyInLiteralWins.ts(9,5): error TS2300: Duplicate identifier 'thunk'. tests/cases/compiler/lastPropertyInLiteralWins.ts(12,6): error TS2345: Argument of type '{ thunk: (num: number) => void; }' is not assignable to parameter of type 'Thing'. Types of property 'thunk' are incompatible: Type '(num: number) => void' is not assignable to type '(str: string) => void': Types of parameters 'num' and 'str' are incompatible: Type 'number' is not assignable to type 'string'. +tests/cases/compiler/lastPropertyInLiteralWins.ts(13,5): error TS2300: Duplicate identifier 'thunk'. tests/cases/compiler/lastPropertyInLiteralWins.ts(14,5): error TS2300: Duplicate identifier 'thunk'. -==== tests/cases/compiler/lastPropertyInLiteralWins.ts (3 errors) ==== +==== tests/cases/compiler/lastPropertyInLiteralWins.ts (5 errors) ==== interface Thing { thunk: (str: string) => void; } @@ -16,8 +18,10 @@ tests/cases/compiler/lastPropertyInLiteralWins.ts(14,5): error TS2300: Duplicate } test({ // Should error, as last one wins, and is wrong type thunk: (str: string) => {}, - thunk: (num: number) => {} ~~~~~ +!!! error TS2300: Duplicate identifier 'thunk'. + thunk: (num: number) => {} + ~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'thunk'. }); @@ -25,9 +29,11 @@ tests/cases/compiler/lastPropertyInLiteralWins.ts(14,5): error TS2300: Duplicate ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ thunk: (num: number) => {}, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~ +!!! error TS2300: Duplicate identifier 'thunk'. thunk: (str: string) => {} ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - ~~~~~ + ~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'thunk'. }); ~ diff --git a/tests/baselines/reference/memberOverride.errors.txt b/tests/baselines/reference/memberOverride.errors.txt index 5cc005b7339..896275c70b1 100644 --- a/tests/baselines/reference/memberOverride.errors.txt +++ b/tests/baselines/reference/memberOverride.errors.txt @@ -1,14 +1,17 @@ +tests/cases/compiler/memberOverride.ts(4,5): error TS2300: Duplicate identifier 'a'. tests/cases/compiler/memberOverride.ts(5,5): error TS2300: Duplicate identifier 'a'. tests/cases/compiler/memberOverride.ts(8,5): error TS2323: Type 'string' is not assignable to type 'number'. -==== tests/cases/compiler/memberOverride.ts (2 errors) ==== +==== tests/cases/compiler/memberOverride.ts (3 errors) ==== // An object initialiser accepts the first definition for the same property with a different type signature // Should compile, since the second declaration of a overrides the first var x = { a: "", - a: 5 ~ +!!! error TS2300: Duplicate identifier 'a'. + a: 5 + ~~~~ !!! error TS2300: Duplicate identifier 'a'. } diff --git a/tests/baselines/reference/mergedInterfacesWithConflictingPropertyNames.errors.txt b/tests/baselines/reference/mergedInterfacesWithConflictingPropertyNames.errors.txt index 28aa8fa4be8..5ea03a4970e 100644 --- a/tests/baselines/reference/mergedInterfacesWithConflictingPropertyNames.errors.txt +++ b/tests/baselines/reference/mergedInterfacesWithConflictingPropertyNames.errors.txt @@ -1,27 +1,34 @@ +tests/cases/conformance/interfaces/declarationMerging/mergedInterfacesWithConflictingPropertyNames.ts(2,5): error TS2300: Duplicate identifier 'x'. tests/cases/conformance/interfaces/declarationMerging/mergedInterfacesWithConflictingPropertyNames.ts(6,5): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/interfaces/declarationMerging/mergedInterfacesWithConflictingPropertyNames.ts(11,9): error TS2300: Duplicate identifier 'x'. tests/cases/conformance/interfaces/declarationMerging/mergedInterfacesWithConflictingPropertyNames.ts(15,9): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/interfaces/declarationMerging/mergedInterfacesWithConflictingPropertyNames.ts(33,9): error TS2300: Duplicate identifier 'x'. tests/cases/conformance/interfaces/declarationMerging/mergedInterfacesWithConflictingPropertyNames.ts(39,9): error TS2300: Duplicate identifier 'x'. -==== tests/cases/conformance/interfaces/declarationMerging/mergedInterfacesWithConflictingPropertyNames.ts (3 errors) ==== +==== tests/cases/conformance/interfaces/declarationMerging/mergedInterfacesWithConflictingPropertyNames.ts (6 errors) ==== interface A { x: string; // error + ~ +!!! error TS2300: Duplicate identifier 'x'. } interface A { x: number; - ~ + ~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'x'. } module M { interface A { x: T; + ~ +!!! error TS2300: Duplicate identifier 'x'. } interface A { x: number; // error - ~ + ~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'x'. } } @@ -41,13 +48,15 @@ tests/cases/conformance/interfaces/declarationMerging/mergedInterfacesWithConfli module M3 { export interface A { x: T; + ~ +!!! error TS2300: Duplicate identifier 'x'. } } module M3 { export interface A { x: number; // error - ~ + ~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'x'. } } \ No newline at end of file diff --git a/tests/baselines/reference/mergedInterfacesWithConflictingPropertyNames2.errors.txt b/tests/baselines/reference/mergedInterfacesWithConflictingPropertyNames2.errors.txt index 74b6c39b1f7..cdf41dfc91d 100644 --- a/tests/baselines/reference/mergedInterfacesWithConflictingPropertyNames2.errors.txt +++ b/tests/baselines/reference/mergedInterfacesWithConflictingPropertyNames2.errors.txt @@ -1,27 +1,34 @@ +tests/cases/conformance/interfaces/declarationMerging/mergedInterfacesWithConflictingPropertyNames2.ts(2,5): error TS2300: Duplicate identifier 'x'. tests/cases/conformance/interfaces/declarationMerging/mergedInterfacesWithConflictingPropertyNames2.ts(6,5): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/interfaces/declarationMerging/mergedInterfacesWithConflictingPropertyNames2.ts(11,9): error TS2300: Duplicate identifier 'x'. tests/cases/conformance/interfaces/declarationMerging/mergedInterfacesWithConflictingPropertyNames2.ts(15,9): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/interfaces/declarationMerging/mergedInterfacesWithConflictingPropertyNames2.ts(33,9): error TS2300: Duplicate identifier 'x'. tests/cases/conformance/interfaces/declarationMerging/mergedInterfacesWithConflictingPropertyNames2.ts(39,9): error TS2300: Duplicate identifier 'x'. -==== tests/cases/conformance/interfaces/declarationMerging/mergedInterfacesWithConflictingPropertyNames2.ts (3 errors) ==== - interface A { - x: string; // error - } - +==== tests/cases/conformance/interfaces/declarationMerging/mergedInterfacesWithConflictingPropertyNames2.ts (6 errors) ==== interface A { x: string; // error ~ !!! error TS2300: Duplicate identifier 'x'. } + interface A { + x: string; // error + ~~~~~~~~~~ +!!! error TS2300: Duplicate identifier 'x'. + } + module M { interface A { x: T; + ~ +!!! error TS2300: Duplicate identifier 'x'. } interface A { x: T; // error - ~ + ~~~~~ !!! error TS2300: Duplicate identifier 'x'. } } @@ -41,13 +48,15 @@ tests/cases/conformance/interfaces/declarationMerging/mergedInterfacesWithConfli module M3 { export interface A { x: T; + ~ +!!! error TS2300: Duplicate identifier 'x'. } } module M3 { export interface A { x: T; // error - ~ + ~~~~~ !!! error TS2300: Duplicate identifier 'x'. } } \ No newline at end of file diff --git a/tests/baselines/reference/mismatchedClassConstructorVariable.errors.txt b/tests/baselines/reference/mismatchedClassConstructorVariable.errors.txt index e294d8fbc72..8c81f7e34c8 100644 --- a/tests/baselines/reference/mismatchedClassConstructorVariable.errors.txt +++ b/tests/baselines/reference/mismatchedClassConstructorVariable.errors.txt @@ -1,8 +1,11 @@ +tests/cases/compiler/mismatchedClassConstructorVariable.ts(1,5): error TS2300: Duplicate identifier 'baz'. tests/cases/compiler/mismatchedClassConstructorVariable.ts(2,7): error TS2300: Duplicate identifier 'baz'. -==== tests/cases/compiler/mismatchedClassConstructorVariable.ts (1 errors) ==== +==== tests/cases/compiler/mismatchedClassConstructorVariable.ts (2 errors) ==== var baz: foo; + ~~~ +!!! error TS2300: Duplicate identifier 'baz'. class baz { } ~~~ !!! error TS2300: Duplicate identifier 'baz'. diff --git a/tests/baselines/reference/module_augmentExistingAmbientVariable.errors.txt b/tests/baselines/reference/module_augmentExistingAmbientVariable.errors.txt index 6174a6a95db..564da071648 100644 --- a/tests/baselines/reference/module_augmentExistingAmbientVariable.errors.txt +++ b/tests/baselines/reference/module_augmentExistingAmbientVariable.errors.txt @@ -1,8 +1,11 @@ +tests/cases/compiler/module_augmentExistingAmbientVariable.ts(1,13): error TS2300: Duplicate identifier 'console'. tests/cases/compiler/module_augmentExistingAmbientVariable.ts(3,8): error TS2300: Duplicate identifier 'console'. -==== tests/cases/compiler/module_augmentExistingAmbientVariable.ts (1 errors) ==== +==== tests/cases/compiler/module_augmentExistingAmbientVariable.ts (2 errors) ==== declare var console: any; + ~~~~~~~ +!!! error TS2300: Duplicate identifier 'console'. module console { ~~~~~~~ diff --git a/tests/baselines/reference/module_augmentExistingVariable.errors.txt b/tests/baselines/reference/module_augmentExistingVariable.errors.txt index a829d094819..f1d17894077 100644 --- a/tests/baselines/reference/module_augmentExistingVariable.errors.txt +++ b/tests/baselines/reference/module_augmentExistingVariable.errors.txt @@ -1,8 +1,11 @@ +tests/cases/compiler/module_augmentExistingVariable.ts(1,5): error TS2300: Duplicate identifier 'console'. tests/cases/compiler/module_augmentExistingVariable.ts(3,8): error TS2300: Duplicate identifier 'console'. -==== tests/cases/compiler/module_augmentExistingVariable.ts (1 errors) ==== +==== tests/cases/compiler/module_augmentExistingVariable.ts (2 errors) ==== var console: any; + ~~~~~~~ +!!! error TS2300: Duplicate identifier 'console'. module console { ~~~~~~~ diff --git a/tests/baselines/reference/nameCollisions.errors.txt b/tests/baselines/reference/nameCollisions.errors.txt index b587d842c6f..ac4bd770c1d 100644 --- a/tests/baselines/reference/nameCollisions.errors.txt +++ b/tests/baselines/reference/nameCollisions.errors.txt @@ -1,17 +1,27 @@ +tests/cases/compiler/nameCollisions.ts(2,9): error TS2300: Duplicate identifier 'x'. tests/cases/compiler/nameCollisions.ts(4,12): error TS2300: Duplicate identifier 'x'. +tests/cases/compiler/nameCollisions.ts(10,12): error TS2300: Duplicate identifier 'z'. tests/cases/compiler/nameCollisions.ts(13,9): error TS2300: Duplicate identifier 'z'. tests/cases/compiler/nameCollisions.ts(15,12): error TS2434: A module declaration cannot be located prior to a class or function with which it is merged -tests/cases/compiler/nameCollisions.ts(25,14): error TS2300: Duplicate identifier 'f'. +tests/cases/compiler/nameCollisions.ts(24,9): error TS2300: Duplicate identifier 'f'. +tests/cases/compiler/nameCollisions.ts(25,5): error TS2300: Duplicate identifier 'f'. +tests/cases/compiler/nameCollisions.ts(27,14): error TS2300: Duplicate identifier 'f2'. tests/cases/compiler/nameCollisions.ts(28,9): error TS2300: Duplicate identifier 'f2'. -tests/cases/compiler/nameCollisions.ts(34,14): error TS2300: Duplicate identifier 'C'. +tests/cases/compiler/nameCollisions.ts(33,11): error TS2300: Duplicate identifier 'C'. +tests/cases/compiler/nameCollisions.ts(34,5): error TS2300: Duplicate identifier 'C'. +tests/cases/compiler/nameCollisions.ts(36,14): error TS2300: Duplicate identifier 'C2'. tests/cases/compiler/nameCollisions.ts(37,11): error TS2300: Duplicate identifier 'C2'. +tests/cases/compiler/nameCollisions.ts(42,11): error TS2300: Duplicate identifier 'cli'. tests/cases/compiler/nameCollisions.ts(43,15): error TS2300: Duplicate identifier 'cli'. +tests/cases/compiler/nameCollisions.ts(45,15): error TS2300: Duplicate identifier 'cli2'. tests/cases/compiler/nameCollisions.ts(46,11): error TS2300: Duplicate identifier 'cli2'. -==== tests/cases/compiler/nameCollisions.ts (9 errors) ==== +==== tests/cases/compiler/nameCollisions.ts (17 errors) ==== module T { var x = 2; + ~ +!!! error TS2300: Duplicate identifier 'x'. module x { // error ~ @@ -22,6 +32,8 @@ tests/cases/compiler/nameCollisions.ts(46,11): error TS2300: Duplicate identifie } module z { + ~ +!!! error TS2300: Duplicate identifier 'z'. var t; } var z; // error @@ -40,11 +52,15 @@ tests/cases/compiler/nameCollisions.ts(46,11): error TS2300: Duplicate identifie module w { } //ok var f; + ~ +!!! error TS2300: Duplicate identifier 'f'. function f() { } //error - ~ + ~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'f'. function f2() { } + ~~ +!!! error TS2300: Duplicate identifier 'f2'. var f2; // error ~~ !!! error TS2300: Duplicate identifier 'f2'. @@ -53,11 +69,15 @@ tests/cases/compiler/nameCollisions.ts(46,11): error TS2300: Duplicate identifie interface i { } //ok class C { } + ~ +!!! error TS2300: Duplicate identifier 'C'. function C() { } // error - ~ + ~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'C'. function C2() { } + ~~ +!!! error TS2300: Duplicate identifier 'C2'. class C2 { } // error ~~ !!! error TS2300: Duplicate identifier 'C2'. @@ -66,11 +86,15 @@ tests/cases/compiler/nameCollisions.ts(46,11): error TS2300: Duplicate identifie interface fi { } // ok class cli { } + ~~~ +!!! error TS2300: Duplicate identifier 'cli'. interface cli { } // error ~~~ !!! error TS2300: Duplicate identifier 'cli'. interface cli2 { } + ~~~~ +!!! error TS2300: Duplicate identifier 'cli2'. class cli2 { } // error ~~~~ !!! error TS2300: Duplicate identifier 'cli2'. diff --git a/tests/baselines/reference/numericClassMembers1.errors.txt b/tests/baselines/reference/numericClassMembers1.errors.txt index 28c06a6fcf5..7d17e7cdcbe 100644 --- a/tests/baselines/reference/numericClassMembers1.errors.txt +++ b/tests/baselines/reference/numericClassMembers1.errors.txt @@ -1,19 +1,25 @@ +tests/cases/compiler/numericClassMembers1.ts(2,3): error TS2300: Duplicate identifier '0'. tests/cases/compiler/numericClassMembers1.ts(3,3): error TS2300: Duplicate identifier '0.0'. +tests/cases/compiler/numericClassMembers1.ts(7,3): error TS2300: Duplicate identifier '0.0'. tests/cases/compiler/numericClassMembers1.ts(8,2): error TS2300: Duplicate identifier ''0''. -==== tests/cases/compiler/numericClassMembers1.ts (2 errors) ==== +==== tests/cases/compiler/numericClassMembers1.ts (4 errors) ==== class C234 { 0 = 1; + ~ +!!! error TS2300: Duplicate identifier '0'. 0.0 = 2; - ~~~ + ~~~~~~~~ !!! error TS2300: Duplicate identifier '0.0'. } class C235 { 0.0 = 1; + ~~~ +!!! error TS2300: Duplicate identifier '0.0'. '0' = 2; - ~~~ + ~~~~~~~~ !!! error TS2300: Duplicate identifier ''0''. } diff --git a/tests/baselines/reference/numericNamedPropertyDuplicates.errors.txt b/tests/baselines/reference/numericNamedPropertyDuplicates.errors.txt index d3192f8e3c5..663cf45fcff 100644 --- a/tests/baselines/reference/numericNamedPropertyDuplicates.errors.txt +++ b/tests/baselines/reference/numericNamedPropertyDuplicates.errors.txt @@ -1,42 +1,57 @@ tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericNamedPropertyDuplicates.ts(20,5): error TS1005: ',' expected. +tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericNamedPropertyDuplicates.ts(2,5): error TS2300: Duplicate identifier '1'. tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericNamedPropertyDuplicates.ts(3,5): error TS2300: Duplicate identifier '1.0'. -tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericNamedPropertyDuplicates.ts(5,12): error TS2300: Duplicate identifier '2'. +tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericNamedPropertyDuplicates.ts(4,12): error TS2300: Duplicate identifier '2'. +tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericNamedPropertyDuplicates.ts(5,5): error TS2300: Duplicate identifier '2'. +tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericNamedPropertyDuplicates.ts(9,5): error TS2300: Duplicate identifier '2'. tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericNamedPropertyDuplicates.ts(10,5): error TS2300: Duplicate identifier '2.'. +tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericNamedPropertyDuplicates.ts(14,5): error TS2300: Duplicate identifier '1'. tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericNamedPropertyDuplicates.ts(15,5): error TS2300: Duplicate identifier '1'. +tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericNamedPropertyDuplicates.ts(19,5): error TS2300: Duplicate identifier '2'. tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericNamedPropertyDuplicates.ts(20,5): error TS2300: Duplicate identifier '2'. -==== tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericNamedPropertyDuplicates.ts (6 errors) ==== +==== tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericNamedPropertyDuplicates.ts (11 errors) ==== class C { 1: number; + ~ +!!! error TS2300: Duplicate identifier '1'. 1.0: number; - ~~~ + ~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier '1.0'. - static 2: number; static 2: number; ~ +!!! error TS2300: Duplicate identifier '2'. + static 2: number; + ~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier '2'. } interface I { 2: number; + ~ +!!! error TS2300: Duplicate identifier '2'. 2.: number; - ~~ + ~~~~~~~~~~~ !!! error TS2300: Duplicate identifier '2.'. } var a: { - 1: number; 1: number; ~ +!!! error TS2300: Duplicate identifier '1'. + 1: number; + ~~~~~~~~~~ !!! error TS2300: Duplicate identifier '1'. } var b = { 2: 1 + ~ +!!! error TS2300: Duplicate identifier '2'. 2: 1 ~ !!! error TS1005: ',' expected. - ~ + ~~~~ !!! error TS2300: Duplicate identifier '2'. } \ No newline at end of file diff --git a/tests/baselines/reference/numericStringNamedPropertyEquivalence.errors.txt b/tests/baselines/reference/numericStringNamedPropertyEquivalence.errors.txt index 9ce36b4937c..a5353efe9ad 100644 --- a/tests/baselines/reference/numericStringNamedPropertyEquivalence.errors.txt +++ b/tests/baselines/reference/numericStringNamedPropertyEquivalence.errors.txt @@ -1,38 +1,50 @@ +tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericStringNamedPropertyEquivalence.ts(4,5): error TS2300: Duplicate identifier '"1"'. tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericStringNamedPropertyEquivalence.ts(6,5): error TS2300: Duplicate identifier '1.0'. +tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericStringNamedPropertyEquivalence.ts(10,5): error TS2300: Duplicate identifier '"1"'. tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericStringNamedPropertyEquivalence.ts(12,5): error TS2300: Duplicate identifier '1'. +tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericStringNamedPropertyEquivalence.ts(16,5): error TS2300: Duplicate identifier '"1"'. tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericStringNamedPropertyEquivalence.ts(17,5): error TS2300: Duplicate identifier '1.0'. +tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericStringNamedPropertyEquivalence.ts(21,5): error TS2300: Duplicate identifier '"0"'. tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericStringNamedPropertyEquivalence.ts(22,5): error TS2300: Duplicate identifier '0'. -==== tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericStringNamedPropertyEquivalence.ts (4 errors) ==== +==== tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericStringNamedPropertyEquivalence.ts (8 errors) ==== // Each of these types has an error in it. // String named and numeric named properties conflict if they would be equivalent after ToNumber on the property name. class C { "1": number; + ~~~ +!!! error TS2300: Duplicate identifier '"1"'. "1.0": number; // not a duplicate 1.0: number; - ~~~ + ~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier '1.0'. } interface I { "1": number; + ~~~ +!!! error TS2300: Duplicate identifier '"1"'. "1.": number; // not a duplicate 1: number; - ~ + ~~~~~~~~~~ !!! error TS2300: Duplicate identifier '1'. } var a: { "1": number; - 1.0: string; ~~~ +!!! error TS2300: Duplicate identifier '"1"'. + 1.0: string; + ~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier '1.0'. } var b = { "0": '', + ~~~ +!!! error TS2300: Duplicate identifier '"0"'. 0: '' - ~ + ~~~~~ !!! error TS2300: Duplicate identifier '0'. } \ No newline at end of file diff --git a/tests/baselines/reference/objectLiteralErrors.errors.txt b/tests/baselines/reference/objectLiteralErrors.errors.txt index 367043a53ef..a301ae56b5f 100644 --- a/tests/baselines/reference/objectLiteralErrors.errors.txt +++ b/tests/baselines/reference/objectLiteralErrors.errors.txt @@ -18,42 +18,78 @@ tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(37,23) tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(38,27): error TS1119: An object literal cannot have property and accessor with the same name. tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(39,26): error TS1119: An object literal cannot have property and accessor with the same name. tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(40,46): error TS1119: An object literal cannot have property and accessor with the same name. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(3,12): error TS2300: Duplicate identifier 'a'. tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(3,18): error TS2300: Duplicate identifier 'a'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(4,12): error TS2300: Duplicate identifier 'a'. tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(4,19): error TS2300: Duplicate identifier 'a'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(5,12): error TS2300: Duplicate identifier 'a'. tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(5,18): error TS2300: Duplicate identifier 'a'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(6,12): error TS2300: Duplicate identifier 'a'. tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(6,21): error TS2300: Duplicate identifier 'a'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(7,12): error TS2300: Duplicate identifier 'a'. tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(7,19): error TS2300: Duplicate identifier 'a'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(8,12): error TS2300: Duplicate identifier 'a'. tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(8,18): error TS2300: Duplicate identifier ''a''. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(9,12): error TS2300: Duplicate identifier ''a''. tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(9,20): error TS2300: Duplicate identifier 'a'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(10,12): error TS2300: Duplicate identifier ''a''. tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(10,20): error TS2300: Duplicate identifier '"a"'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(11,12): error TS2300: Duplicate identifier ''a''. tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(11,20): error TS2300: Duplicate identifier ''a''. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(12,13): error TS2300: Duplicate identifier '"a"'. tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(12,21): error TS2300: Duplicate identifier ''a''. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(13,13): error TS2300: Duplicate identifier '1.0'. tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(13,21): error TS2300: Duplicate identifier ''1''. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(14,13): error TS2300: Duplicate identifier '0'. tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(14,19): error TS2300: Duplicate identifier '0'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(15,13): error TS2300: Duplicate identifier '0'. tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(15,19): error TS2300: Duplicate identifier '0'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(16,13): error TS2300: Duplicate identifier '0'. tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(16,19): error TS2300: Duplicate identifier '0x0'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(17,13): error TS2300: Duplicate identifier '0'. tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(17,19): error TS2300: Duplicate identifier '000'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(18,13): error TS2300: Duplicate identifier '"100"'. tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(18,23): error TS2300: Duplicate identifier '1e2'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(19,13): error TS2300: Duplicate identifier '0x20'. tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(19,22): error TS2300: Duplicate identifier '3.2e1'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(20,13): error TS2300: Duplicate identifier 'a'. tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(20,25): error TS2300: Duplicate identifier 'a'. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(23,22): error TS2300: Duplicate identifier 'a'. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(24,23): error TS2300: Duplicate identifier 'a'. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(25,22): error TS2300: Duplicate identifier 'a'. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(26,25): error TS2300: Duplicate identifier 'a'. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(27,23): error TS2300: Duplicate identifier 'a'. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(28,22): error TS2300: Duplicate identifier ''a''. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(29,24): error TS2300: Duplicate identifier 'a'. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(30,24): error TS2300: Duplicate identifier '"a"'. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(31,24): error TS2300: Duplicate identifier ''a''. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(32,25): error TS2300: Duplicate identifier ''a''. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(33,25): error TS2300: Duplicate identifier ''1''. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(34,23): error TS2300: Duplicate identifier '0'. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(35,23): error TS2300: Duplicate identifier '0'. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(36,23): error TS2300: Duplicate identifier '0x0'. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(37,23): error TS2300: Duplicate identifier '000'. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(38,27): error TS2300: Duplicate identifier '1e2'. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(39,26): error TS2300: Duplicate identifier '3.2e1'. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(40,46): error TS2300: Duplicate identifier 'a'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(23,12): error TS2300: Duplicate identifier 'a'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(23,18): error TS2300: Duplicate identifier 'a'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(24,12): error TS2300: Duplicate identifier 'a'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(24,19): error TS2300: Duplicate identifier 'a'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(25,12): error TS2300: Duplicate identifier 'a'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(25,18): error TS2300: Duplicate identifier 'a'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(26,12): error TS2300: Duplicate identifier 'a'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(26,21): error TS2300: Duplicate identifier 'a'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(27,12): error TS2300: Duplicate identifier 'a'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(27,19): error TS2300: Duplicate identifier 'a'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(28,12): error TS2300: Duplicate identifier 'a'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(28,18): error TS2300: Duplicate identifier ''a''. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(29,12): error TS2300: Duplicate identifier ''a''. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(29,20): error TS2300: Duplicate identifier 'a'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(30,12): error TS2300: Duplicate identifier ''a''. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(30,20): error TS2300: Duplicate identifier '"a"'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(31,12): error TS2300: Duplicate identifier ''a''. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(31,20): error TS2300: Duplicate identifier ''a''. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(32,13): error TS2300: Duplicate identifier '"a"'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(32,21): error TS2300: Duplicate identifier ''a''. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(33,13): error TS2300: Duplicate identifier '1.0'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(33,21): error TS2300: Duplicate identifier ''1''. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(34,13): error TS2300: Duplicate identifier '0'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(34,19): error TS2300: Duplicate identifier '0'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(35,13): error TS2300: Duplicate identifier '0'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(35,19): error TS2300: Duplicate identifier '0'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(36,13): error TS2300: Duplicate identifier '0'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(36,19): error TS2300: Duplicate identifier '0x0'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(37,13): error TS2300: Duplicate identifier '0'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(37,19): error TS2300: Duplicate identifier '000'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(38,13): error TS2300: Duplicate identifier '"100"'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(38,23): error TS2300: Duplicate identifier '1e2'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(39,13): error TS2300: Duplicate identifier '0x20'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(39,22): error TS2300: Duplicate identifier '3.2e1'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(40,13): error TS2300: Duplicate identifier 'a'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(40,42): error TS2300: Duplicate identifier 'a'. tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(43,12): error TS2380: 'get' and 'set' accessor must have the same type. tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(43,43): error TS2380: 'get' and 'set' accessor must have the same type. tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(44,29): error TS2323: Type 'number' is not assignable to type 'string'. @@ -61,158 +97,230 @@ tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(45,12) tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(45,51): error TS2380: 'get' and 'set' accessor must have the same type. -==== tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts (61 errors) ==== +==== tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts (97 errors) ==== // Multiple properties with the same name var e1 = { a: 0, a: 0 }; - ~ + ~ +!!! error TS2300: Duplicate identifier 'a'. + ~~~~ !!! error TS2300: Duplicate identifier 'a'. var e2 = { a: '', a: '' }; - ~ + ~ +!!! error TS2300: Duplicate identifier 'a'. + ~~~~~ !!! error TS2300: Duplicate identifier 'a'. var e3 = { a: 0, a: '' }; - ~ + ~ +!!! error TS2300: Duplicate identifier 'a'. + ~~~~~ !!! error TS2300: Duplicate identifier 'a'. var e4 = { a: true, a: false }; - ~ + ~ +!!! error TS2300: Duplicate identifier 'a'. + ~~~~~~~~ !!! error TS2300: Duplicate identifier 'a'. var e5 = { a: {}, a: {} }; - ~ + ~ +!!! error TS2300: Duplicate identifier 'a'. + ~~~~~ !!! error TS2300: Duplicate identifier 'a'. var e6 = { a: 0, 'a': 0 }; - ~~~ + ~ +!!! error TS2300: Duplicate identifier 'a'. + ~~~~~~ !!! error TS2300: Duplicate identifier ''a''. var e7 = { 'a': 0, a: 0 }; - ~ + ~~~ +!!! error TS2300: Duplicate identifier ''a''. + ~~~~ !!! error TS2300: Duplicate identifier 'a'. var e8 = { 'a': 0, "a": 0 }; - ~~~ + ~~~ +!!! error TS2300: Duplicate identifier ''a''. + ~~~~~~ !!! error TS2300: Duplicate identifier '"a"'. var e9 = { 'a': 0, 'a': 0 }; - ~~~ + ~~~ +!!! error TS2300: Duplicate identifier ''a''. + ~~~~~~ !!! error TS2300: Duplicate identifier ''a''. var e10 = { "a": 0, 'a': 0 }; - ~~~ + ~~~ +!!! error TS2300: Duplicate identifier '"a"'. + ~~~~~~ !!! error TS2300: Duplicate identifier ''a''. var e11 = { 1.0: 0, '1': 0 }; - ~~~ + ~~~ +!!! error TS2300: Duplicate identifier '1.0'. + ~~~~~~ !!! error TS2300: Duplicate identifier ''1''. var e12 = { 0: 0, 0: 0 }; - ~ + ~ +!!! error TS2300: Duplicate identifier '0'. + ~~~~ !!! error TS2300: Duplicate identifier '0'. var e13 = { 0: 0, 0: 0 }; - ~ + ~ +!!! error TS2300: Duplicate identifier '0'. + ~~~~ !!! error TS2300: Duplicate identifier '0'. var e14 = { 0: 0, 0x0: 0 }; - ~~~ + ~ +!!! error TS2300: Duplicate identifier '0'. + ~~~~~~ !!! error TS2300: Duplicate identifier '0x0'. var e14 = { 0: 0, 000: 0 }; ~~~ !!! error TS1085: Octal literals are not available when targeting ECMAScript 5 and higher. - ~~~ + ~ +!!! error TS2300: Duplicate identifier '0'. + ~~~~~~ !!! error TS2300: Duplicate identifier '000'. var e15 = { "100": 0, 1e2: 0 }; - ~~~ + ~~~~~ +!!! error TS2300: Duplicate identifier '"100"'. + ~~~~~~ !!! error TS2300: Duplicate identifier '1e2'. var e16 = { 0x20: 0, 3.2e1: 0 }; - ~~~~~ + ~~~~ +!!! error TS2300: Duplicate identifier '0x20'. + ~~~~~~~~ !!! error TS2300: Duplicate identifier '3.2e1'. var e17 = { a: 0, b: 1, a: 0 }; - ~ + ~ +!!! error TS2300: Duplicate identifier 'a'. + ~~~~ !!! error TS2300: Duplicate identifier 'a'. // Accessor and property with the same name var f1 = { a: 0, get a() { return 0; } }; ~ !!! error TS1119: An object literal cannot have property and accessor with the same name. - ~ + ~ +!!! error TS2300: Duplicate identifier 'a'. + ~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'a'. var f2 = { a: '', get a() { return ''; } }; ~ !!! error TS1119: An object literal cannot have property and accessor with the same name. - ~ + ~ +!!! error TS2300: Duplicate identifier 'a'. + ~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'a'. var f3 = { a: 0, get a() { return ''; } }; ~ !!! error TS1119: An object literal cannot have property and accessor with the same name. - ~ + ~ +!!! error TS2300: Duplicate identifier 'a'. + ~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'a'. var f4 = { a: true, get a() { return false; } }; ~ !!! error TS1119: An object literal cannot have property and accessor with the same name. - ~ + ~ +!!! error TS2300: Duplicate identifier 'a'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'a'. var f5 = { a: {}, get a() { return {}; } }; ~ !!! error TS1119: An object literal cannot have property and accessor with the same name. - ~ + ~ +!!! error TS2300: Duplicate identifier 'a'. + ~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'a'. var f6 = { a: 0, get 'a'() { return 0; } }; ~~~ !!! error TS1119: An object literal cannot have property and accessor with the same name. - ~~~ + ~ +!!! error TS2300: Duplicate identifier 'a'. + ~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier ''a''. var f7 = { 'a': 0, get a() { return 0; } }; ~ !!! error TS1119: An object literal cannot have property and accessor with the same name. - ~ + ~~~ +!!! error TS2300: Duplicate identifier ''a''. + ~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'a'. var f8 = { 'a': 0, get "a"() { return 0; } }; ~~~ !!! error TS1119: An object literal cannot have property and accessor with the same name. - ~~~ + ~~~ +!!! error TS2300: Duplicate identifier ''a''. + ~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier '"a"'. var f9 = { 'a': 0, get 'a'() { return 0; } }; ~~~ !!! error TS1119: An object literal cannot have property and accessor with the same name. - ~~~ + ~~~ +!!! error TS2300: Duplicate identifier ''a''. + ~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier ''a''. var f10 = { "a": 0, get 'a'() { return 0; } }; ~~~ !!! error TS1119: An object literal cannot have property and accessor with the same name. - ~~~ + ~~~ +!!! error TS2300: Duplicate identifier '"a"'. + ~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier ''a''. var f11 = { 1.0: 0, get '1'() { return 0; } }; ~~~ !!! error TS1119: An object literal cannot have property and accessor with the same name. - ~~~ + ~~~ +!!! error TS2300: Duplicate identifier '1.0'. + ~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier ''1''. var f12 = { 0: 0, get 0() { return 0; } }; ~ !!! error TS1119: An object literal cannot have property and accessor with the same name. - ~ + ~ +!!! error TS2300: Duplicate identifier '0'. + ~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier '0'. var f13 = { 0: 0, get 0() { return 0; } }; ~ !!! error TS1119: An object literal cannot have property and accessor with the same name. - ~ + ~ +!!! error TS2300: Duplicate identifier '0'. + ~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier '0'. var f14 = { 0: 0, get 0x0() { return 0; } }; ~~~ !!! error TS1119: An object literal cannot have property and accessor with the same name. - ~~~ + ~ +!!! error TS2300: Duplicate identifier '0'. + ~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier '0x0'. var f14 = { 0: 0, get 000() { return 0; } }; ~~~ !!! error TS1085: Octal literals are not available when targeting ECMAScript 5 and higher. ~~~ !!! error TS1119: An object literal cannot have property and accessor with the same name. - ~~~ + ~ +!!! error TS2300: Duplicate identifier '0'. + ~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier '000'. var f15 = { "100": 0, get 1e2() { return 0; } }; ~~~ !!! error TS1119: An object literal cannot have property and accessor with the same name. - ~~~ + ~~~~~ +!!! error TS2300: Duplicate identifier '"100"'. + ~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier '1e2'. var f16 = { 0x20: 0, get 3.2e1() { return 0; } }; ~~~~~ !!! error TS1119: An object literal cannot have property and accessor with the same name. - ~~~~~ + ~~~~ +!!! error TS2300: Duplicate identifier '0x20'. + ~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier '3.2e1'. var f17 = { a: 0, get b() { return 1; }, get a() { return 0; } }; ~ !!! error TS1119: An object literal cannot have property and accessor with the same name. - ~ + ~ +!!! error TS2300: Duplicate identifier 'a'. + ~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'a'. // Get and set accessor with mismatched type annotations diff --git a/tests/baselines/reference/objectTypeWithDuplicateNumericProperty.errors.txt b/tests/baselines/reference/objectTypeWithDuplicateNumericProperty.errors.txt index 122304d1497..018dae20a79 100644 --- a/tests/baselines/reference/objectTypeWithDuplicateNumericProperty.errors.txt +++ b/tests/baselines/reference/objectTypeWithDuplicateNumericProperty.errors.txt @@ -1,70 +1,82 @@ +tests/cases/conformance/types/members/objectTypeWithDuplicateNumericProperty.ts(5,5): error TS2300: Duplicate identifier '1'. tests/cases/conformance/types/members/objectTypeWithDuplicateNumericProperty.ts(6,5): error TS2300: Duplicate identifier '1.0'. tests/cases/conformance/types/members/objectTypeWithDuplicateNumericProperty.ts(7,5): error TS2300: Duplicate identifier '1.'. tests/cases/conformance/types/members/objectTypeWithDuplicateNumericProperty.ts(8,5): error TS2300: Duplicate identifier '1.00'. +tests/cases/conformance/types/members/objectTypeWithDuplicateNumericProperty.ts(12,5): error TS2300: Duplicate identifier '1'. tests/cases/conformance/types/members/objectTypeWithDuplicateNumericProperty.ts(13,5): error TS2300: Duplicate identifier '1.0'. tests/cases/conformance/types/members/objectTypeWithDuplicateNumericProperty.ts(14,5): error TS2300: Duplicate identifier '1.'. tests/cases/conformance/types/members/objectTypeWithDuplicateNumericProperty.ts(15,5): error TS2300: Duplicate identifier '1.00'. +tests/cases/conformance/types/members/objectTypeWithDuplicateNumericProperty.ts(19,5): error TS2300: Duplicate identifier '1'. tests/cases/conformance/types/members/objectTypeWithDuplicateNumericProperty.ts(20,5): error TS2300: Duplicate identifier '1.0'. tests/cases/conformance/types/members/objectTypeWithDuplicateNumericProperty.ts(21,5): error TS2300: Duplicate identifier '1.'. tests/cases/conformance/types/members/objectTypeWithDuplicateNumericProperty.ts(22,5): error TS2300: Duplicate identifier '1.00'. +tests/cases/conformance/types/members/objectTypeWithDuplicateNumericProperty.ts(26,5): error TS2300: Duplicate identifier '1'. tests/cases/conformance/types/members/objectTypeWithDuplicateNumericProperty.ts(27,5): error TS2300: Duplicate identifier '1.0'. tests/cases/conformance/types/members/objectTypeWithDuplicateNumericProperty.ts(28,5): error TS2300: Duplicate identifier '1.'. tests/cases/conformance/types/members/objectTypeWithDuplicateNumericProperty.ts(29,5): error TS2300: Duplicate identifier '1.00'. -==== tests/cases/conformance/types/members/objectTypeWithDuplicateNumericProperty.ts (12 errors) ==== +==== tests/cases/conformance/types/members/objectTypeWithDuplicateNumericProperty.ts (16 errors) ==== // numeric properties must be distinct after a ToNumber operation // so the below are all errors class C { 1; + ~ +!!! error TS2300: Duplicate identifier '1'. 1.0; - ~~~ + ~~~~ !!! error TS2300: Duplicate identifier '1.0'. 1.; - ~~ + ~~~ !!! error TS2300: Duplicate identifier '1.'. 1.00; - ~~~~ + ~~~~~ !!! error TS2300: Duplicate identifier '1.00'. } interface I { 1; + ~ +!!! error TS2300: Duplicate identifier '1'. 1.0; - ~~~ + ~~~~ !!! error TS2300: Duplicate identifier '1.0'. 1.; - ~~ + ~~~ !!! error TS2300: Duplicate identifier '1.'. 1.00; - ~~~~ + ~~~~~ !!! error TS2300: Duplicate identifier '1.00'. } var a: { 1; + ~ +!!! error TS2300: Duplicate identifier '1'. 1.0; - ~~~ + ~~~~ !!! error TS2300: Duplicate identifier '1.0'. 1.; - ~~ + ~~~ !!! error TS2300: Duplicate identifier '1.'. 1.00; - ~~~~ + ~~~~~ !!! error TS2300: Duplicate identifier '1.00'. } var b = { 1: 1, + ~ +!!! error TS2300: Duplicate identifier '1'. 1.0: 1, - ~~~ + ~~~~~~ !!! error TS2300: Duplicate identifier '1.0'. 1.: 1, - ~~ + ~~~~~ !!! error TS2300: Duplicate identifier '1.'. 1.00: 1 - ~~~~ + ~~~~~~~ !!! error TS2300: Duplicate identifier '1.00'. } diff --git a/tests/baselines/reference/optionalParamArgsTest.errors.txt b/tests/baselines/reference/optionalParamArgsTest.errors.txt index ed46bfd3344..8f02c603eb7 100644 --- a/tests/baselines/reference/optionalParamArgsTest.errors.txt +++ b/tests/baselines/reference/optionalParamArgsTest.errors.txt @@ -1,4 +1,5 @@ tests/cases/compiler/optionalParamArgsTest.ts(35,47): error TS1016: A required parameter cannot follow an optional parameter. +tests/cases/compiler/optionalParamArgsTest.ts(31,5): error TS2393: Duplicate function implementation. tests/cases/compiler/optionalParamArgsTest.ts(35,5): error TS2393: Duplicate function implementation. tests/cases/compiler/optionalParamArgsTest.ts(99,1): error TS2346: Supplied parameters do not match any signature of call target. tests/cases/compiler/optionalParamArgsTest.ts(100,1): error TS2346: Supplied parameters do not match any signature of call target. @@ -22,7 +23,7 @@ tests/cases/compiler/optionalParamArgsTest.ts(117,1): error TS2346: Supplied par tests/cases/compiler/optionalParamArgsTest.ts(118,1): error TS2346: Supplied parameters do not match any signature of call target. -==== tests/cases/compiler/optionalParamArgsTest.ts (22 errors) ==== +==== tests/cases/compiler/optionalParamArgsTest.ts (23 errors) ==== // Optional parameter and default argument tests // Key: @@ -54,6 +55,8 @@ tests/cases/compiler/optionalParamArgsTest.ts(118,1): error TS2346: Supplied par public C1M4(C1M4A1:number,C1M4A2?:number) { return C1M4A1 + C1M4A2; } public C1M5(C1M5A1:number,C1M5A2:number=0,C1M5A3?:number) { return C1M5A1 + C1M5A2; } + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2393: Duplicate function implementation. // Negative test // "Optional parameters may only be followed by other optional parameters" diff --git a/tests/baselines/reference/optionalPropertiesSyntax.errors.txt b/tests/baselines/reference/optionalPropertiesSyntax.errors.txt index 1d081bb64a9..41197ac64e1 100644 --- a/tests/baselines/reference/optionalPropertiesSyntax.errors.txt +++ b/tests/baselines/reference/optionalPropertiesSyntax.errors.txt @@ -8,13 +8,14 @@ tests/cases/compiler/optionalPropertiesSyntax.ts(32,19): error TS1131: Property tests/cases/compiler/optionalPropertiesSyntax.ts(33,5): error TS1131: Property or signature expected. tests/cases/compiler/optionalPropertiesSyntax.ts(34,6): error TS1019: An index signature parameter cannot have a question mark. tests/cases/compiler/optionalPropertiesSyntax.ts(4,5): error TS2386: Overload signatures must all be optional or required. +tests/cases/compiler/optionalPropertiesSyntax.ts(24,5): error TS2300: Duplicate identifier 'prop'. tests/cases/compiler/optionalPropertiesSyntax.ts(25,5): error TS2300: Duplicate identifier 'prop'. tests/cases/compiler/optionalPropertiesSyntax.ts(32,5): error TS2375: Duplicate number index signature. tests/cases/compiler/optionalPropertiesSyntax.ts(33,7): error TS2375: Duplicate number index signature. tests/cases/compiler/optionalPropertiesSyntax.ts(34,5): error TS2375: Duplicate number index signature. -==== tests/cases/compiler/optionalPropertiesSyntax.ts (14 errors) ==== +==== tests/cases/compiler/optionalPropertiesSyntax.ts (15 errors) ==== interface fnSigs { //functions signatures can be optional fn(): void; @@ -51,8 +52,10 @@ tests/cases/compiler/optionalPropertiesSyntax.ts(34,5): error TS2375: Duplicate interface propertySig { //Property signatures can be optional prop: any; - prop?: any; ~~~~ +!!! error TS2300: Duplicate identifier 'prop'. + prop?: any; + ~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'prop'. prop2?: any; } diff --git a/tests/baselines/reference/overloadsWithinClasses.errors.txt b/tests/baselines/reference/overloadsWithinClasses.errors.txt index 1055290316c..39e43d26707 100644 --- a/tests/baselines/reference/overloadsWithinClasses.errors.txt +++ b/tests/baselines/reference/overloadsWithinClasses.errors.txt @@ -1,10 +1,13 @@ +tests/cases/compiler/overloadsWithinClasses.ts(3,5): error TS2393: Duplicate function implementation. tests/cases/compiler/overloadsWithinClasses.ts(5,5): error TS2393: Duplicate function implementation. -==== tests/cases/compiler/overloadsWithinClasses.ts (1 errors) ==== +==== tests/cases/compiler/overloadsWithinClasses.ts (2 errors) ==== class foo { static fnOverload( ) {} + ~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2393: Duplicate function implementation. static fnOverload(foo: string){ } // error ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/tests/baselines/reference/parameterPropertyInConstructor2.errors.txt b/tests/baselines/reference/parameterPropertyInConstructor2.errors.txt index d1a0513c1f6..78a4706ec68 100644 --- a/tests/baselines/reference/parameterPropertyInConstructor2.errors.txt +++ b/tests/baselines/reference/parameterPropertyInConstructor2.errors.txt @@ -1,9 +1,10 @@ tests/cases/compiler/parameterPropertyInConstructor2.ts(3,5): error TS2394: Overload signature is not compatible with function implementation. tests/cases/compiler/parameterPropertyInConstructor2.ts(3,17): error TS2369: A parameter property is only allowed in a constructor implementation. -tests/cases/compiler/parameterPropertyInConstructor2.ts(4,24): error TS2300: Duplicate identifier 'names'. +tests/cases/compiler/parameterPropertyInConstructor2.ts(3,24): error TS2300: Duplicate identifier 'names'. +tests/cases/compiler/parameterPropertyInConstructor2.ts(4,17): error TS2300: Duplicate identifier 'names'. -==== tests/cases/compiler/parameterPropertyInConstructor2.ts (3 errors) ==== +==== tests/cases/compiler/parameterPropertyInConstructor2.ts (4 errors) ==== module mod { class Customers { constructor(public names: string); @@ -11,8 +12,10 @@ tests/cases/compiler/parameterPropertyInConstructor2.ts(4,24): error TS2300: Dup !!! error TS2394: Overload signature is not compatible with function implementation. ~~~~~~~~~~~~~~~~~~~~ !!! error TS2369: A parameter property is only allowed in a constructor implementation. - constructor(public names: string, public ages: number) { ~~~~~ +!!! error TS2300: Duplicate identifier 'names'. + constructor(public names: string, public ages: number) { + ~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'names'. } } diff --git a/tests/baselines/reference/parser0_004152.errors.txt b/tests/baselines/reference/parser0_004152.errors.txt index e1b19738922..cfd6161a48e 100644 --- a/tests/baselines/reference/parser0_004152.errors.txt +++ b/tests/baselines/reference/parser0_004152.errors.txt @@ -19,10 +19,12 @@ tests/cases/conformance/parser/ecmascript5/Fuzz/parser0_004152.ts(2,94): error T tests/cases/conformance/parser/ecmascript5/Fuzz/parser0_004152.ts(2,97): error TS1005: ';' expected. tests/cases/conformance/parser/ecmascript5/Fuzz/parser0_004152.ts(2,98): error TS1068: Unexpected token. A constructor, method, accessor, or property was expected. tests/cases/conformance/parser/ecmascript5/Fuzz/parser0_004152.ts(2,28): error TS2304: Cannot find name 'DisplayPosition'. +tests/cases/conformance/parser/ecmascript5/Fuzz/parser0_004152.ts(2,48): error TS2300: Duplicate identifier '3'. tests/cases/conformance/parser/ecmascript5/Fuzz/parser0_004152.ts(2,51): error TS2300: Duplicate identifier '3'. tests/cases/conformance/parser/ecmascript5/Fuzz/parser0_004152.ts(2,54): error TS2300: Duplicate identifier '3'. tests/cases/conformance/parser/ecmascript5/Fuzz/parser0_004152.ts(2,57): error TS2300: Duplicate identifier '3'. tests/cases/conformance/parser/ecmascript5/Fuzz/parser0_004152.ts(2,60): error TS2300: Duplicate identifier '3'. +tests/cases/conformance/parser/ecmascript5/Fuzz/parser0_004152.ts(2,63): error TS2300: Duplicate identifier '0'. tests/cases/conformance/parser/ecmascript5/Fuzz/parser0_004152.ts(2,66): error TS2300: Duplicate identifier '3'. tests/cases/conformance/parser/ecmascript5/Fuzz/parser0_004152.ts(2,69): error TS2300: Duplicate identifier '3'. tests/cases/conformance/parser/ecmascript5/Fuzz/parser0_004152.ts(2,72): error TS2300: Duplicate identifier '3'. @@ -34,7 +36,7 @@ tests/cases/conformance/parser/ecmascript5/Fuzz/parser0_004152.ts(2,96): error T tests/cases/conformance/parser/ecmascript5/Fuzz/parser0_004152.ts(3,25): error TS2304: Cannot find name 'SeedCoords'. -==== tests/cases/conformance/parser/ecmascript5/Fuzz/parser0_004152.ts (34 errors) ==== +==== tests/cases/conformance/parser/ecmascript5/Fuzz/parser0_004152.ts (36 errors) ==== export class Game { ~~~~ !!! error TS1148: Cannot compile external modules unless the '--module' flag is provided. @@ -79,6 +81,8 @@ tests/cases/conformance/parser/ecmascript5/Fuzz/parser0_004152.ts(3,25): error T !!! error TS1068: Unexpected token. A constructor, method, accessor, or property was expected. ~~~~~~~~~~~~~~~ !!! error TS2304: Cannot find name 'DisplayPosition'. + ~ +!!! error TS2300: Duplicate identifier '3'. ~ !!! error TS2300: Duplicate identifier '3'. ~ @@ -87,6 +91,8 @@ tests/cases/conformance/parser/ecmascript5/Fuzz/parser0_004152.ts(3,25): error T !!! error TS2300: Duplicate identifier '3'. ~ !!! error TS2300: Duplicate identifier '3'. + ~ +!!! error TS2300: Duplicate identifier '0'. ~ !!! error TS2300: Duplicate identifier '3'. ~ diff --git a/tests/baselines/reference/parserErrorRecovery_ModuleElement2.errors.txt b/tests/baselines/reference/parserErrorRecovery_ModuleElement2.errors.txt index 23f8d8bc166..ab0327a716f 100644 --- a/tests/baselines/reference/parserErrorRecovery_ModuleElement2.errors.txt +++ b/tests/baselines/reference/parserErrorRecovery_ModuleElement2.errors.txt @@ -1,11 +1,15 @@ tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ModuleElements/parserErrorRecovery_ModuleElement2.ts(7,1): error TS1128: Declaration or statement expected. tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ModuleElements/parserErrorRecovery_ModuleElement2.ts(8,1): error TS1128: Declaration or statement expected. +tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ModuleElements/parserErrorRecovery_ModuleElement2.ts(1,1): error TS2393: Duplicate function implementation. tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ModuleElements/parserErrorRecovery_ModuleElement2.ts(4,1): error TS2393: Duplicate function implementation. -==== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ModuleElements/parserErrorRecovery_ModuleElement2.ts (3 errors) ==== +==== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ModuleElements/parserErrorRecovery_ModuleElement2.ts (4 errors) ==== function foo() { + ~~~~~~~~~~~~~~~~ } + ~ +!!! error TS2393: Duplicate function implementation. function foo() { ~~~~~~~~~~~~~~~~ diff --git a/tests/baselines/reference/parserMemberFunctionDeclarationAmbiguities1.errors.txt b/tests/baselines/reference/parserMemberFunctionDeclarationAmbiguities1.errors.txt index 1c239f59b22..69db4ac7b57 100644 --- a/tests/baselines/reference/parserMemberFunctionDeclarationAmbiguities1.errors.txt +++ b/tests/baselines/reference/parserMemberFunctionDeclarationAmbiguities1.errors.txt @@ -1,13 +1,21 @@ +tests/cases/conformance/parser/ecmascript5/MemberFunctionDeclarations/parserMemberFunctionDeclarationAmbiguities1.ts(2,3): error TS2393: Duplicate function implementation. +tests/cases/conformance/parser/ecmascript5/MemberFunctionDeclarations/parserMemberFunctionDeclarationAmbiguities1.ts(3,3): error TS2393: Duplicate function implementation. tests/cases/conformance/parser/ecmascript5/MemberFunctionDeclarations/parserMemberFunctionDeclarationAmbiguities1.ts(5,3): error TS2393: Duplicate function implementation. tests/cases/conformance/parser/ecmascript5/MemberFunctionDeclarations/parserMemberFunctionDeclarationAmbiguities1.ts(6,3): error TS2393: Duplicate function implementation. +tests/cases/conformance/parser/ecmascript5/MemberFunctionDeclarations/parserMemberFunctionDeclarationAmbiguities1.ts(8,3): error TS2393: Duplicate function implementation. +tests/cases/conformance/parser/ecmascript5/MemberFunctionDeclarations/parserMemberFunctionDeclarationAmbiguities1.ts(9,3): error TS2393: Duplicate function implementation. tests/cases/conformance/parser/ecmascript5/MemberFunctionDeclarations/parserMemberFunctionDeclarationAmbiguities1.ts(11,3): error TS2393: Duplicate function implementation. tests/cases/conformance/parser/ecmascript5/MemberFunctionDeclarations/parserMemberFunctionDeclarationAmbiguities1.ts(12,3): error TS2393: Duplicate function implementation. -==== tests/cases/conformance/parser/ecmascript5/MemberFunctionDeclarations/parserMemberFunctionDeclarationAmbiguities1.ts (4 errors) ==== +==== tests/cases/conformance/parser/ecmascript5/MemberFunctionDeclarations/parserMemberFunctionDeclarationAmbiguities1.ts (8 errors) ==== class C { public() {} + ~~~~~~~~~~~ +!!! error TS2393: Duplicate function implementation. static() {} + ~~~~~~~~~~~ +!!! error TS2393: Duplicate function implementation. public public() {} ~~~~~~~~~~~~~~~~~~ @@ -17,7 +25,11 @@ tests/cases/conformance/parser/ecmascript5/MemberFunctionDeclarations/parserMemb !!! error TS2393: Duplicate function implementation. public static public() {} + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2393: Duplicate function implementation. public static static() {} + ~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2393: Duplicate function implementation. static public() {} ~~~~~~~~~~~~~~~~~~ diff --git a/tests/baselines/reference/propertyAndAccessorWithSameName.errors.txt b/tests/baselines/reference/propertyAndAccessorWithSameName.errors.txt index ece553abea8..a08a924ff75 100644 --- a/tests/baselines/reference/propertyAndAccessorWithSameName.errors.txt +++ b/tests/baselines/reference/propertyAndAccessorWithSameName.errors.txt @@ -2,45 +2,58 @@ tests/cases/conformance/classes/propertyMemberDeclarations/propertyAndAccessorWi tests/cases/conformance/classes/propertyMemberDeclarations/propertyAndAccessorWithSameName.ts(10,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/conformance/classes/propertyMemberDeclarations/propertyAndAccessorWithSameName.ts(15,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/conformance/classes/propertyMemberDeclarations/propertyAndAccessorWithSameName.ts(18,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -tests/cases/conformance/classes/propertyMemberDeclarations/propertyAndAccessorWithSameName.ts(3,9): error TS2300: Duplicate identifier 'x'. -tests/cases/conformance/classes/propertyMemberDeclarations/propertyAndAccessorWithSameName.ts(10,9): error TS2300: Duplicate identifier 'x'. -tests/cases/conformance/classes/propertyMemberDeclarations/propertyAndAccessorWithSameName.ts(15,9): error TS2300: Duplicate identifier 'x'. -tests/cases/conformance/classes/propertyMemberDeclarations/propertyAndAccessorWithSameName.ts(18,9): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/classes/propertyMemberDeclarations/propertyAndAccessorWithSameName.ts(2,5): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/classes/propertyMemberDeclarations/propertyAndAccessorWithSameName.ts(3,5): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/classes/propertyMemberDeclarations/propertyAndAccessorWithSameName.ts(9,5): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/classes/propertyMemberDeclarations/propertyAndAccessorWithSameName.ts(10,5): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/classes/propertyMemberDeclarations/propertyAndAccessorWithSameName.ts(14,13): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/classes/propertyMemberDeclarations/propertyAndAccessorWithSameName.ts(15,5): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/classes/propertyMemberDeclarations/propertyAndAccessorWithSameName.ts(18,5): error TS2300: Duplicate identifier 'x'. -==== tests/cases/conformance/classes/propertyMemberDeclarations/propertyAndAccessorWithSameName.ts (8 errors) ==== +==== tests/cases/conformance/classes/propertyMemberDeclarations/propertyAndAccessorWithSameName.ts (11 errors) ==== class C { x: number; + ~ +!!! error TS2300: Duplicate identifier 'x'. get x() { // error ~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~ -!!! error TS2300: Duplicate identifier 'x'. + ~~~~~~~~~~~~~~~~~~ return 1; + ~~~~~~~~~~~~~~~~~ } + ~~~~~ +!!! error TS2300: Duplicate identifier 'x'. } class D { x: number; + ~ +!!! error TS2300: Duplicate identifier 'x'. set x(v) { } // error ~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~ + ~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'x'. } class E { private x: number; + ~ +!!! error TS2300: Duplicate identifier 'x'. get x() { // error ~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~ -!!! error TS2300: Duplicate identifier 'x'. + ~~~~~~~~~~~~~~~~~~ return 1; + ~~~~~~~~~~~~~~~~~ } + ~~~~~ +!!! error TS2300: Duplicate identifier 'x'. set x(v) { } ~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~ + ~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'x'. } \ No newline at end of file diff --git a/tests/baselines/reference/propertyAndFunctionWithSameName.errors.txt b/tests/baselines/reference/propertyAndFunctionWithSameName.errors.txt index a98382863a4..58b51c9c39e 100644 --- a/tests/baselines/reference/propertyAndFunctionWithSameName.errors.txt +++ b/tests/baselines/reference/propertyAndFunctionWithSameName.errors.txt @@ -1,20 +1,28 @@ +tests/cases/conformance/classes/propertyMemberDeclarations/propertyAndFunctionWithSameName.ts(2,5): error TS2300: Duplicate identifier 'x'. tests/cases/conformance/classes/propertyMemberDeclarations/propertyAndFunctionWithSameName.ts(3,5): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/classes/propertyMemberDeclarations/propertyAndFunctionWithSameName.ts(9,5): error TS2300: Duplicate identifier 'x'. tests/cases/conformance/classes/propertyMemberDeclarations/propertyAndFunctionWithSameName.ts(10,5): error TS2300: Duplicate identifier 'x'. -==== tests/cases/conformance/classes/propertyMemberDeclarations/propertyAndFunctionWithSameName.ts (2 errors) ==== +==== tests/cases/conformance/classes/propertyMemberDeclarations/propertyAndFunctionWithSameName.ts (4 errors) ==== class C { x: number; - x() { // error ~ !!! error TS2300: Duplicate identifier 'x'. + x() { // error + ~~~~~~~~~~~~~~ return 1; + ~~~~~~~~~~~~~~~~~ } + ~~~~~ +!!! error TS2300: Duplicate identifier 'x'. } class D { x: number; - x(v) { } // error ~ +!!! error TS2300: Duplicate identifier 'x'. + x(v) { } // error + ~~~~~~~~ !!! error TS2300: Duplicate identifier 'x'. } \ No newline at end of file diff --git a/tests/baselines/reference/propertyNamedPrototype.errors.txt b/tests/baselines/reference/propertyNamedPrototype.errors.txt index 6ce4054fb43..38f8279daed 100644 --- a/tests/baselines/reference/propertyNamedPrototype.errors.txt +++ b/tests/baselines/reference/propertyNamedPrototype.errors.txt @@ -1,10 +1,10 @@ -tests/cases/conformance/classes/propertyMemberDeclarations/propertyNamedPrototype.ts(3,12): error TS2300: Duplicate identifier 'prototype'. +tests/cases/conformance/classes/propertyMemberDeclarations/propertyNamedPrototype.ts(3,5): error TS2300: Duplicate identifier 'prototype'. ==== tests/cases/conformance/classes/propertyMemberDeclarations/propertyNamedPrototype.ts (1 errors) ==== class C { prototype: number; // ok static prototype: C; // error - ~~~~~~~~~ + ~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'prototype'. } \ No newline at end of file diff --git a/tests/baselines/reference/propertySignatures.errors.txt b/tests/baselines/reference/propertySignatures.errors.txt index d5ab5678c00..c6bc759dce8 100644 --- a/tests/baselines/reference/propertySignatures.errors.txt +++ b/tests/baselines/reference/propertySignatures.errors.txt @@ -1,11 +1,14 @@ +tests/cases/compiler/propertySignatures.ts(2,13): error TS2300: Duplicate identifier 'a'. tests/cases/compiler/propertySignatures.ts(2,23): error TS2300: Duplicate identifier 'a'. tests/cases/compiler/propertySignatures.ts(14,12): error TS2304: Cannot find name 'foo'. -==== tests/cases/compiler/propertySignatures.ts (2 errors) ==== +==== tests/cases/compiler/propertySignatures.ts (3 errors) ==== // Should be error - duplicate identifiers var foo1: { a:string; a: string; }; - ~ + ~ +!!! error TS2300: Duplicate identifier 'a'. + ~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'a'. // Should be OK diff --git a/tests/baselines/reference/reassignStaticProp.errors.txt b/tests/baselines/reference/reassignStaticProp.errors.txt index eb373437609..e1d845c20e4 100644 --- a/tests/baselines/reference/reassignStaticProp.errors.txt +++ b/tests/baselines/reference/reassignStaticProp.errors.txt @@ -1,13 +1,16 @@ -tests/cases/compiler/reassignStaticProp.ts(5,12): error TS2300: Duplicate identifier 'bar'. +tests/cases/compiler/reassignStaticProp.ts(3,12): error TS2300: Duplicate identifier 'bar'. +tests/cases/compiler/reassignStaticProp.ts(5,5): error TS2300: Duplicate identifier 'bar'. -==== tests/cases/compiler/reassignStaticProp.ts (1 errors) ==== +==== tests/cases/compiler/reassignStaticProp.ts (2 errors) ==== class foo { static bar = 1; + ~~~ +!!! error TS2300: Duplicate identifier 'bar'. static bar:string; // errror - duplicate id - ~~~ + ~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'bar'. } diff --git a/tests/baselines/reference/sourceMapValidationEnums.errors.txt b/tests/baselines/reference/sourceMapValidationEnums.errors.txt index 4ecb81edeea..ae42f0b00b2 100644 --- a/tests/baselines/reference/sourceMapValidationEnums.errors.txt +++ b/tests/baselines/reference/sourceMapValidationEnums.errors.txt @@ -1,9 +1,12 @@ +tests/cases/compiler/sourceMapValidationEnums.ts(2,5): error TS2300: Duplicate identifier 'x'. tests/cases/compiler/sourceMapValidationEnums.ts(4,5): error TS2300: Duplicate identifier 'x'. -==== tests/cases/compiler/sourceMapValidationEnums.ts (1 errors) ==== +==== tests/cases/compiler/sourceMapValidationEnums.ts (2 errors) ==== enum e { x, + ~ +!!! error TS2300: Duplicate identifier 'x'. y, x ~ diff --git a/tests/baselines/reference/staticClassMemberError.errors.txt b/tests/baselines/reference/staticClassMemberError.errors.txt index e0768b03967..9483e3387b7 100644 --- a/tests/baselines/reference/staticClassMemberError.errors.txt +++ b/tests/baselines/reference/staticClassMemberError.errors.txt @@ -1,9 +1,10 @@ tests/cases/compiler/staticClassMemberError.ts(4,3): error TS2304: Cannot find name 's'. +tests/cases/compiler/staticClassMemberError.ts(9,10): error TS2300: Duplicate identifier 'Foo'. tests/cases/compiler/staticClassMemberError.ts(9,10): error TS2391: Function implementation is missing or not immediately following the declaration. tests/cases/compiler/staticClassMemberError.ts(10,7): error TS2300: Duplicate identifier 'Foo'. -==== tests/cases/compiler/staticClassMemberError.ts (3 errors) ==== +==== tests/cases/compiler/staticClassMemberError.ts (4 errors) ==== class C { static s; public a() { @@ -16,6 +17,8 @@ tests/cases/compiler/staticClassMemberError.ts(10,7): error TS2300: Duplicate id // just want to make sure this one doesn't crash the compiler function Foo(); ~~~ +!!! error TS2300: Duplicate identifier 'Foo'. + ~~~ !!! error TS2391: Function implementation is missing or not immediately following the declaration. class Foo { ~~~ diff --git a/tests/baselines/reference/staticPrototypeProperty.errors.txt b/tests/baselines/reference/staticPrototypeProperty.errors.txt index 19b3f3ffb20..32d4438a2cc 100644 --- a/tests/baselines/reference/staticPrototypeProperty.errors.txt +++ b/tests/baselines/reference/staticPrototypeProperty.errors.txt @@ -1,16 +1,16 @@ -tests/cases/compiler/staticPrototypeProperty.ts(2,11): error TS2300: Duplicate identifier 'prototype'. -tests/cases/compiler/staticPrototypeProperty.ts(6,11): error TS2300: Duplicate identifier 'prototype'. +tests/cases/compiler/staticPrototypeProperty.ts(2,4): error TS2300: Duplicate identifier 'prototype'. +tests/cases/compiler/staticPrototypeProperty.ts(6,4): error TS2300: Duplicate identifier 'prototype'. ==== tests/cases/compiler/staticPrototypeProperty.ts (2 errors) ==== class C { static prototype() { } - ~~~~~~~~~ + ~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'prototype'. } class C2 { static prototype; - ~~~~~~~~~ + ~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'prototype'. } \ No newline at end of file diff --git a/tests/baselines/reference/stringLiteralTypesInImplementationSignatures2.errors.txt b/tests/baselines/reference/stringLiteralTypesInImplementationSignatures2.errors.txt index ed30960896e..80857aa1804 100644 --- a/tests/baselines/reference/stringLiteralTypesInImplementationSignatures2.errors.txt +++ b/tests/baselines/reference/stringLiteralTypesInImplementationSignatures2.errors.txt @@ -8,11 +8,12 @@ tests/cases/conformance/types/objectTypeLiteral/callSignatures/stringLiteralType tests/cases/conformance/types/objectTypeLiteral/callSignatures/stringLiteralTypesInImplementationSignatures2.ts(20,5): error TS2382: Specialized overload signature is not assignable to any non-specialized signature. tests/cases/conformance/types/objectTypeLiteral/callSignatures/stringLiteralTypesInImplementationSignatures2.ts(21,5): error TS2382: Specialized overload signature is not assignable to any non-specialized signature. tests/cases/conformance/types/objectTypeLiteral/callSignatures/stringLiteralTypesInImplementationSignatures2.ts(22,5): error TS2382: Specialized overload signature is not assignable to any non-specialized signature. +tests/cases/conformance/types/objectTypeLiteral/callSignatures/stringLiteralTypesInImplementationSignatures2.ts(26,5): error TS2300: Duplicate identifier 'foo'. tests/cases/conformance/types/objectTypeLiteral/callSignatures/stringLiteralTypesInImplementationSignatures2.ts(26,5): error TS2381: A signature with an implementation cannot use a string literal type. tests/cases/conformance/types/objectTypeLiteral/callSignatures/stringLiteralTypesInImplementationSignatures2.ts(27,5): error TS2300: Duplicate identifier 'foo'. -==== tests/cases/conformance/types/objectTypeLiteral/callSignatures/stringLiteralTypesInImplementationSignatures2.ts (12 errors) ==== +==== tests/cases/conformance/types/objectTypeLiteral/callSignatures/stringLiteralTypesInImplementationSignatures2.ts (13 errors) ==== // String literal types are only valid in overload signatures function foo(x: any); @@ -59,10 +60,12 @@ tests/cases/conformance/types/objectTypeLiteral/callSignatures/stringLiteralType var b = { foo(x: 'hi') { }, + ~~~ +!!! error TS2300: Duplicate identifier 'foo'. ~~~~~~~~~~~~~~~~ !!! error TS2381: A signature with an implementation cannot use a string literal type. foo(x: 'a') { }, - ~~~ + ~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'foo'. } \ No newline at end of file diff --git a/tests/baselines/reference/stringNamedPropertyDuplicates.errors.txt b/tests/baselines/reference/stringNamedPropertyDuplicates.errors.txt index 8e8af394d39..9c929aa47ce 100644 --- a/tests/baselines/reference/stringNamedPropertyDuplicates.errors.txt +++ b/tests/baselines/reference/stringNamedPropertyDuplicates.errors.txt @@ -1,42 +1,57 @@ tests/cases/conformance/types/objectTypeLiteral/propertySignatures/stringNamedPropertyDuplicates.ts(20,5): error TS1005: ',' expected. +tests/cases/conformance/types/objectTypeLiteral/propertySignatures/stringNamedPropertyDuplicates.ts(2,5): error TS2300: Duplicate identifier '"a b"'. tests/cases/conformance/types/objectTypeLiteral/propertySignatures/stringNamedPropertyDuplicates.ts(3,5): error TS2300: Duplicate identifier '"a b"'. -tests/cases/conformance/types/objectTypeLiteral/propertySignatures/stringNamedPropertyDuplicates.ts(5,12): error TS2300: Duplicate identifier '"c d"'. +tests/cases/conformance/types/objectTypeLiteral/propertySignatures/stringNamedPropertyDuplicates.ts(4,12): error TS2300: Duplicate identifier '"c d"'. +tests/cases/conformance/types/objectTypeLiteral/propertySignatures/stringNamedPropertyDuplicates.ts(5,5): error TS2300: Duplicate identifier '"c d"'. +tests/cases/conformance/types/objectTypeLiteral/propertySignatures/stringNamedPropertyDuplicates.ts(9,5): error TS2300: Duplicate identifier '"a b"'. tests/cases/conformance/types/objectTypeLiteral/propertySignatures/stringNamedPropertyDuplicates.ts(10,5): error TS2300: Duplicate identifier '"a b"'. +tests/cases/conformance/types/objectTypeLiteral/propertySignatures/stringNamedPropertyDuplicates.ts(14,5): error TS2300: Duplicate identifier '"a b"'. tests/cases/conformance/types/objectTypeLiteral/propertySignatures/stringNamedPropertyDuplicates.ts(15,5): error TS2300: Duplicate identifier '"a b"'. +tests/cases/conformance/types/objectTypeLiteral/propertySignatures/stringNamedPropertyDuplicates.ts(19,5): error TS2300: Duplicate identifier '"a b"'. tests/cases/conformance/types/objectTypeLiteral/propertySignatures/stringNamedPropertyDuplicates.ts(20,5): error TS2300: Duplicate identifier '"a b"'. -==== tests/cases/conformance/types/objectTypeLiteral/propertySignatures/stringNamedPropertyDuplicates.ts (6 errors) ==== +==== tests/cases/conformance/types/objectTypeLiteral/propertySignatures/stringNamedPropertyDuplicates.ts (11 errors) ==== class C { - "a b": number; "a b": number; ~~~~~ !!! error TS2300: Duplicate identifier '"a b"'. - static "c d": number; + "a b": number; + ~~~~~~~~~~~~~~ +!!! error TS2300: Duplicate identifier '"a b"'. static "c d": number; ~~~~~ +!!! error TS2300: Duplicate identifier '"c d"'. + static "c d": number; + ~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier '"c d"'. } interface I { - "a b": number; "a b": number; ~~~~~ +!!! error TS2300: Duplicate identifier '"a b"'. + "a b": number; + ~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier '"a b"'. } var a: { - "a b": number; "a b": number; ~~~~~ +!!! error TS2300: Duplicate identifier '"a b"'. + "a b": number; + ~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier '"a b"'. } var b = { "a b": 1 + ~~~~~ +!!! error TS2300: Duplicate identifier '"a b"'. "a b": 1 ~~~~~ !!! error TS1005: ',' expected. - ~~~~~ + ~~~~~~~~ !!! error TS2300: Duplicate identifier '"a b"'. } \ No newline at end of file diff --git a/tests/baselines/reference/targetTypeCastTest.errors.txt b/tests/baselines/reference/targetTypeCastTest.errors.txt index b719ac656fe..c00ddb36728 100644 --- a/tests/baselines/reference/targetTypeCastTest.errors.txt +++ b/tests/baselines/reference/targetTypeCastTest.errors.txt @@ -1,15 +1,21 @@ -tests/cases/compiler/targetTypeCastTest.ts(3,10): error TS2300: Duplicate identifier 'Point'. +tests/cases/compiler/targetTypeCastTest.ts(1,13): error TS2300: Duplicate identifier 'Point'. +tests/cases/compiler/targetTypeCastTest.ts(3,1): error TS2300: Duplicate identifier 'Point'. -==== tests/cases/compiler/targetTypeCastTest.ts (1 errors) ==== +==== tests/cases/compiler/targetTypeCastTest.ts (2 errors) ==== declare var Point: { new(x:number, y:number): {x: number; y: number; }; } + ~~~~~ +!!! error TS2300: Duplicate identifier 'Point'. function Point(x, y) { - ~~~~~ -!!! error TS2300: Duplicate identifier 'Point'. + ~~~~~~~~~~~~~~~~~~~~~~ this.x = x; + ~~~~~~~~~~~~~~~ this.y = y; + ~~~~~~~~~~~~~~~~~~ } + ~ +!!! error TS2300: Duplicate identifier 'Point'. interface Adder { (x: number, y: number): number; diff --git a/tests/baselines/reference/targetTypeTest1.errors.txt b/tests/baselines/reference/targetTypeTest1.errors.txt index dccc680abaa..1b515bee0fa 100644 --- a/tests/baselines/reference/targetTypeTest1.errors.txt +++ b/tests/baselines/reference/targetTypeTest1.errors.txt @@ -1,10 +1,14 @@ -tests/cases/compiler/targetTypeTest1.ts(14,10): error TS2300: Duplicate identifier 'Point'. +tests/cases/compiler/targetTypeTest1.ts(1,15): error TS2300: Duplicate identifier 'Point'. +tests/cases/compiler/targetTypeTest1.ts(14,1): error TS2300: Duplicate identifier 'Point'. tests/cases/compiler/targetTypeTest1.ts(19,18): error TS2384: Overload signatures must all be ambient or non-ambient. -tests/cases/compiler/targetTypeTest1.ts(60,10): error TS2300: Duplicate identifier 'C'. +tests/cases/compiler/targetTypeTest1.ts(53,15): error TS2300: Duplicate identifier 'C'. +tests/cases/compiler/targetTypeTest1.ts(60,1): error TS2300: Duplicate identifier 'C'. -==== tests/cases/compiler/targetTypeTest1.ts (3 errors) ==== +==== tests/cases/compiler/targetTypeTest1.ts (5 errors) ==== declare class Point + ~~~~~ +!!! error TS2300: Duplicate identifier 'Point'. { constructor(x: number, y: number); public x: number; @@ -18,11 +22,14 @@ tests/cases/compiler/targetTypeTest1.ts(60,10): error TS2300: Duplicate identifi // Because Point is a constructor function, this is inferred // to be Point and return type is inferred to be void function Point(x, y) { - ~~~~~ -!!! error TS2300: Duplicate identifier 'Point'. + ~~~~~~~~~~~~~~~~~~~~~~ this.x = x; + ~~~~~~~~~~~~~~~ this.y = y; + ~~~~~~~~~~~~~~~ } + ~ +!!! error TS2300: Duplicate identifier 'Point'. declare function EF1(a:number, b:number):number; ~~~ @@ -61,6 +68,8 @@ tests/cases/compiler/targetTypeTest1.ts(60,10): error TS2300: Duplicate identifi } declare class C { + ~ +!!! error TS2300: Duplicate identifier 'C'. constructor(a:number, b:number); public a : number; public b: number; @@ -68,11 +77,14 @@ tests/cases/compiler/targetTypeTest1.ts(60,10): error TS2300: Duplicate identifi } function C(a,b) { - ~ -!!! error TS2300: Duplicate identifier 'C'. + ~~~~~~~~~~~~~~~~~ this.a=a; + ~~~~~~~~~~ this.b=b; + ~~~~~~~~~~ } + ~ +!!! error TS2300: Duplicate identifier 'C'. C.prototype = { a:0, diff --git a/tests/baselines/reference/twoAccessorsWithSameName.errors.txt b/tests/baselines/reference/twoAccessorsWithSameName.errors.txt index 6b4990ceeda..fc7b86873f1 100644 --- a/tests/baselines/reference/twoAccessorsWithSameName.errors.txt +++ b/tests/baselines/reference/twoAccessorsWithSameName.errors.txt @@ -9,20 +9,25 @@ tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameN tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName.ts(24,9): error TS1118: An object literal cannot have multiple get/set accessors with the same name. tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName.ts(30,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName.ts(33,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName.ts(3,9): error TS2300: Duplicate identifier 'x'. -tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName.ts(8,9): error TS2300: Duplicate identifier 'x'. -tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName.ts(24,9): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName.ts(2,9): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName.ts(3,5): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName.ts(7,9): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName.ts(8,5): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName.ts(19,9): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName.ts(24,5): error TS2300: Duplicate identifier 'x'. -==== tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName.ts (14 errors) ==== +==== tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName.ts (17 errors) ==== class C { get x() { return 1; } ~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~ +!!! error TS2300: Duplicate identifier 'x'. get x() { return 1; } // error ~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~ + ~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'x'. } @@ -30,10 +35,12 @@ tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameN set x(v) { } ~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~ +!!! error TS2300: Duplicate identifier 'x'. set x(v) { } // error ~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~ + ~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'x'. } @@ -52,6 +59,8 @@ tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameN get x() { ~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~ +!!! error TS2300: Duplicate identifier 'x'. return 1; }, @@ -61,10 +70,12 @@ tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameN !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. ~ !!! error TS1118: An object literal cannot have multiple get/set accessors with the same name. - ~ -!!! error TS2300: Duplicate identifier 'x'. + ~~~~~~~~~ return 1; + ~~~~~~~~~~~~~~~~~ } + ~~~~~ +!!! error TS2300: Duplicate identifier 'x'. } var y = { diff --git a/tests/baselines/reference/twoAccessorsWithSameName2.errors.txt b/tests/baselines/reference/twoAccessorsWithSameName2.errors.txt index 2a6db805b19..d431ed5a828 100644 --- a/tests/baselines/reference/twoAccessorsWithSameName2.errors.txt +++ b/tests/baselines/reference/twoAccessorsWithSameName2.errors.txt @@ -4,19 +4,23 @@ tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameN tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName2.ts(8,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName2.ts(12,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName2.ts(15,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName2.ts(3,16): error TS2300: Duplicate identifier 'x'. -tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName2.ts(8,16): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName2.ts(2,16): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName2.ts(3,5): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName2.ts(7,16): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName2.ts(8,5): error TS2300: Duplicate identifier 'x'. -==== tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName2.ts (8 errors) ==== +==== tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName2.ts (10 errors) ==== class C { static get x() { return 1; } ~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~ +!!! error TS2300: Duplicate identifier 'x'. static get x() { return 1; } // error ~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~ + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'x'. } @@ -24,10 +28,12 @@ tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameN static set x(v) { } ~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~ +!!! error TS2300: Duplicate identifier 'x'. static set x(v) { } // error ~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~ + ~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'x'. } diff --git a/tests/baselines/reference/varAndFunctionShareName.errors.txt b/tests/baselines/reference/varAndFunctionShareName.errors.txt index aa518152fcc..f849bfdfb54 100644 --- a/tests/baselines/reference/varAndFunctionShareName.errors.txt +++ b/tests/baselines/reference/varAndFunctionShareName.errors.txt @@ -1,8 +1,11 @@ -tests/cases/compiler/varAndFunctionShareName.ts(2,10): error TS2300: Duplicate identifier 'myFn'. +tests/cases/compiler/varAndFunctionShareName.ts(1,5): error TS2300: Duplicate identifier 'myFn'. +tests/cases/compiler/varAndFunctionShareName.ts(2,1): error TS2300: Duplicate identifier 'myFn'. -==== tests/cases/compiler/varAndFunctionShareName.ts (1 errors) ==== +==== tests/cases/compiler/varAndFunctionShareName.ts (2 errors) ==== var myFn; + ~~~~ +!!! error TS2300: Duplicate identifier 'myFn'. function myFn(): any { } - ~~~~ + ~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS2300: Duplicate identifier 'myFn'. \ No newline at end of file diff --git a/tests/cases/compiler/augmentedTypesClass2.ts b/tests/cases/compiler/augmentedTypesClass2.ts index a744e2e62e1..c6d64e2bf82 100644 --- a/tests/cases/compiler/augmentedTypesClass2.ts +++ b/tests/cases/compiler/augmentedTypesClass2.ts @@ -1,7 +1,7 @@ // Checking class with other things in type space not value space // class then interface -class c11 { +class c11 { // error foo() { return 1; } diff --git a/tests/cases/compiler/augmentedTypesClass2a.ts b/tests/cases/compiler/augmentedTypesClass2a.ts index ebb1bf6b1b5..c8098a7f133 100644 --- a/tests/cases/compiler/augmentedTypesClass2a.ts +++ b/tests/cases/compiler/augmentedTypesClass2a.ts @@ -1,4 +1,4 @@ //// class then function -class c2 { public foo() { } } +class c2 { public foo() { } } // error function c2() { } // error var c2 = () => { } \ No newline at end of file diff --git a/tests/cases/compiler/augmentedTypesClass4.ts b/tests/cases/compiler/augmentedTypesClass4.ts index 54d96b617e5..d8ab0708272 100644 --- a/tests/cases/compiler/augmentedTypesClass4.ts +++ b/tests/cases/compiler/augmentedTypesClass4.ts @@ -1,3 +1,3 @@ //// class then class -class c3 { public foo() { } } +class c3 { public foo() { } } // error class c3 { public bar() { } } // error diff --git a/tests/cases/compiler/augmentedTypesEnum.ts b/tests/cases/compiler/augmentedTypesEnum.ts index 96ec07fef39..2efcde826ce 100644 --- a/tests/cases/compiler/augmentedTypesEnum.ts +++ b/tests/cases/compiler/augmentedTypesEnum.ts @@ -1,23 +1,23 @@ // enum then var -enum e1111 { One } +enum e1111 { One } // error var e1111 = 1; // error // enum then function -enum e2 { One } +enum e2 { One } // error function e2() { } // error -enum e3 { One } +enum e3 { One } // error var e3 = () => { } // error // enum then class -enum e4 { One } +enum e4 { One } // error class e4 { public foo() { } } // error // enum then enum enum e5 { One } -enum e5 { Two } +enum e5 { Two } // error -enum e5a { One } +enum e5a { One } // error enum e5a { One } // error // enum then internal module diff --git a/tests/cases/compiler/augmentedTypesEnum2.ts b/tests/cases/compiler/augmentedTypesEnum2.ts index 8801c5d935b..2ad69c12f02 100644 --- a/tests/cases/compiler/augmentedTypesEnum2.ts +++ b/tests/cases/compiler/augmentedTypesEnum2.ts @@ -1,14 +1,14 @@ // enum then interface -enum e1 { One } +enum e1 { One } // error -interface e1 { +interface e1 { // error foo(): void; } // interface then enum works // enum then class -enum e2 { One }; +enum e2 { One }; // error class e2 { // error foo() { return 1; diff --git a/tests/cases/compiler/augmentedTypesFunction.ts b/tests/cases/compiler/augmentedTypesFunction.ts index 14bb1f718e8..ab6627f9463 100644 --- a/tests/cases/compiler/augmentedTypesFunction.ts +++ b/tests/cases/compiler/augmentedTypesFunction.ts @@ -1,23 +1,23 @@ // function then var -function y1() { } +function y1() { } // error var y1 = 1; // error // function then function -function y2() { } +function y2() { } // error function y2() { } // error -function y2a() { } +function y2a() { } // error var y2a = () => { } // error // function then class -function y3() { } +function y3() { } // error class y3 { } // error -function y3a() { } +function y3a() { } // error class y3a { public foo() { } } // error // function then enum -function y4() { } +function y4() { } // error enum y4 { One } // error // function then internal module diff --git a/tests/cases/compiler/augmentedTypesInterface.ts b/tests/cases/compiler/augmentedTypesInterface.ts index b9f84d4d8b2..72c85d6619d 100644 --- a/tests/cases/compiler/augmentedTypesInterface.ts +++ b/tests/cases/compiler/augmentedTypesInterface.ts @@ -9,7 +9,7 @@ interface i { } // interface then class -interface i2 { +interface i2 { // error foo(): void; } @@ -20,7 +20,7 @@ class i2 { // error } // interface then enum -interface i3 { +interface i3 { // error foo(): void; } enum i3 { One }; // error diff --git a/tests/cases/compiler/augmentedTypesModules.ts b/tests/cases/compiler/augmentedTypesModules.ts index 6857abf1718..84f03549a42 100644 --- a/tests/cases/compiler/augmentedTypesModules.ts +++ b/tests/cases/compiler/augmentedTypesModules.ts @@ -2,18 +2,18 @@ module m1 { } var m1 = 1; // Should be allowed -module m1a { var y = 2; } -var m1a = 1; +module m1a { var y = 2; } // error +var m1a = 1; // error -module m1b { export var y = 2; } -var m1b = 1; +module m1b { export var y = 2; } // error +var m1b = 1; // error module m1c { export interface I { foo(): void; } } var m1c = 1; // Should be allowed -module m1d { +module m1d { // error export class I { foo() { } } } var m1d = 1; // error diff --git a/tests/cases/compiler/augmentedTypesVar.ts b/tests/cases/compiler/augmentedTypesVar.ts index 75cab810c13..c7e40c8b0e7 100644 --- a/tests/cases/compiler/augmentedTypesVar.ts +++ b/tests/cases/compiler/augmentedTypesVar.ts @@ -3,17 +3,17 @@ var x1 = 1; var x1 = 2; // var then function -var x2 = 1; -function x2() { } // should be an error +var x2 = 1; // error +function x2() { } // error -var x3 = 1; -var x3 = () => { } // should be an error +var x3 = 1; +var x3 = () => { } // error // var then class -var x4 = 1; +var x4 = 1; // error class x4 { } // error -var x4a = 1; +var x4a = 1; // error class x4a { public foo() { } } // error // var then enum @@ -24,10 +24,10 @@ enum x5 { One } // error var x6 = 1; module x6 { } // ok since non-instantiated -var x6a = 1; +var x6a = 1; // error module x6a { var y = 2; } // error since instantiated -var x6b = 1; +var x6b = 1; // error module x6b { export var y = 2; } // error // var then import, messes with other error reporting diff --git a/tests/cases/compiler/callOnInstance.ts b/tests/cases/compiler/callOnInstance.ts index 0125121c12a..0b38dcd12cd 100644 --- a/tests/cases/compiler/callOnInstance.ts +++ b/tests/cases/compiler/callOnInstance.ts @@ -1,6 +1,6 @@ -declare function D(): string; +declare function D(): string; // error -declare class D { constructor (value: number); } // Duplicate identifier +declare class D { constructor (value: number); } // error var s1: string = D(); // OK diff --git a/tests/cases/compiler/callOverloads1.ts b/tests/cases/compiler/callOverloads1.ts index 17abfb7890a..e2ce278eec0 100644 --- a/tests/cases/compiler/callOverloads1.ts +++ b/tests/cases/compiler/callOverloads1.ts @@ -1,4 +1,4 @@ -class Foo { +class Foo { // error bar1() { /*WScript.Echo("bar1");*/ } constructor(x: any) { diff --git a/tests/cases/compiler/callOverloads2.ts b/tests/cases/compiler/callOverloads2.ts index a5db65f505a..3379838dbcf 100644 --- a/tests/cases/compiler/callOverloads2.ts +++ b/tests/cases/compiler/callOverloads2.ts @@ -1,6 +1,6 @@ -class Foo { +class Foo { // error bar1() { /*WScript.Echo("bar1");*/ } constructor(x: any) { @@ -8,10 +8,10 @@ class Foo { } } -function Foo(); +function Foo(); // error -function F1(s:string) {return s;} -function F1(a:any) { return a;} // error - duplicate identifier +function F1(s:string) {return s;} // error +function F1(a:any) { return a;} // error function Goo(s:string); // error - no implementation diff --git a/tests/cases/compiler/callOverloads3.ts b/tests/cases/compiler/callOverloads3.ts index 6b7e1bba907..be14dd478fa 100644 --- a/tests/cases/compiler/callOverloads3.ts +++ b/tests/cases/compiler/callOverloads3.ts @@ -1,7 +1,7 @@ -function Foo():Foo; -function Foo(s:string):Foo; -class Foo { +function Foo():Foo; // error +function Foo(s:string):Foo; // error +class Foo { // error bar1() { /*WScript.Echo("bar1");*/ } constructor(x: any) { // WScript.Echo("Constructor function has executed"); diff --git a/tests/cases/compiler/callOverloads4.ts b/tests/cases/compiler/callOverloads4.ts index 58d89c53bdc..3957c822cc9 100644 --- a/tests/cases/compiler/callOverloads4.ts +++ b/tests/cases/compiler/callOverloads4.ts @@ -1,7 +1,7 @@ -function Foo():Foo; -function Foo(s:string):Foo; -class Foo { +function Foo():Foo; // error +function Foo(s:string):Foo; // error +class Foo { // error bar1() { /*WScript.Echo("bar1");*/ } constructor(s: string); constructor(x: any) { diff --git a/tests/cases/compiler/callOverloads5.ts b/tests/cases/compiler/callOverloads5.ts index 9e491f7d257..212b68b168a 100644 --- a/tests/cases/compiler/callOverloads5.ts +++ b/tests/cases/compiler/callOverloads5.ts @@ -1,6 +1,6 @@ -function Foo():Foo; -function Foo(s:string):Foo; -class Foo { +function Foo():Foo; // error +function Foo(s:string):Foo; // error +class Foo { // error bar1(s:string); bar1(n:number); bar1(a:any) { /*WScript.Echo(a);*/ } diff --git a/tests/cases/compiler/class1.ts b/tests/cases/compiler/class1.ts index d7c7ce2ae0a..c7b2115b88b 100644 --- a/tests/cases/compiler/class1.ts +++ b/tests/cases/compiler/class1.ts @@ -1,2 +1,2 @@ -interface foo{ } -class foo{ } \ No newline at end of file +interface foo{ } // error +class foo{ } // error \ No newline at end of file diff --git a/tests/cases/compiler/classAndInterface1.ts b/tests/cases/compiler/classAndInterface1.ts index 06ada1c8a49..79b02915857 100644 --- a/tests/cases/compiler/classAndInterface1.ts +++ b/tests/cases/compiler/classAndInterface1.ts @@ -1,2 +1,2 @@ -class cli { } + class cli { } // error interface cli { } // error \ No newline at end of file diff --git a/tests/cases/conformance/classes/classDeclarations/classAndVariableWithSameName.ts b/tests/cases/conformance/classes/classDeclarations/classAndVariableWithSameName.ts index 13bc603fada..cd42d742101 100644 --- a/tests/cases/conformance/classes/classDeclarations/classAndVariableWithSameName.ts +++ b/tests/cases/conformance/classes/classDeclarations/classAndVariableWithSameName.ts @@ -1,8 +1,8 @@ -class C { foo: string; } +class C { foo: string; } // error var C = ''; // error module M { - class D { + class D { // error bar: string; } diff --git a/tests/cases/conformance/classes/constructorDeclarations/classWithTwoConstructorDefinitions.ts b/tests/cases/conformance/classes/constructorDeclarations/classWithTwoConstructorDefinitions.ts index 3744cb1f5f4..b3f535c4c3d 100644 --- a/tests/cases/conformance/classes/constructorDeclarations/classWithTwoConstructorDefinitions.ts +++ b/tests/cases/conformance/classes/constructorDeclarations/classWithTwoConstructorDefinitions.ts @@ -1,9 +1,9 @@ class C { - constructor() { } + constructor() { } // error constructor(x) { } // error } class D { - constructor(x: T) { } + constructor(x: T) { } // error constructor(x: T, y: T) { } // error } \ No newline at end of file diff --git a/tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithParameterInitializers2.ts b/tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithParameterInitializers2.ts index 3164e0a4734..04f1acd84ca 100644 --- a/tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithParameterInitializers2.ts +++ b/tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWithParameterInitializers2.ts @@ -17,8 +17,8 @@ c.foo(); c.foo(1); var b = { - foo(x = 1), - foo(x = 1) { }, + foo(x = 1), // error + foo(x = 1) { }, // error } b.foo(); From a939a718cbcc215b5d9e0a33121557395e203e8b Mon Sep 17 00:00:00 2001 From: Vladimir Matveev Date: Tue, 30 Sep 2014 22:55:35 -0700 Subject: [PATCH 056/110] addressed CR feedback --- src/services/services.ts | 6 +++--- src/services/utilities.ts | 18 ++++++++++++++---- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/services/services.ts b/src/services/services.ts index 8ff5fba5540..3770430049c 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -2088,7 +2088,7 @@ module ts { } // TODO: this is a hack for now, we need a proper walking mechanism to verify that we have the correct node - var mappedNode = getTouchingToken(sourceFile, TypeScript.end(node) - 1, /*allowPositionInLeadingTrivia*/ false); + var mappedNode = getTouchingToken(sourceFile, TypeScript.end(node) - 1); if (isPunctuation(mappedNode.kind)) { mappedNode = mappedNode.parent; } @@ -4022,7 +4022,7 @@ module ts { var sourceFile = getCurrentSourceFile(filename); var result: TypeScript.TextSpan[] = []; - var token = getTouchingToken(sourceFile, position, /*allowPositionInLeadingTrivia*/ false); + var token = getTouchingToken(sourceFile, position); if (token.getStart(sourceFile) === position) { var matchKind = getMatchingTokenKind(token); @@ -4178,7 +4178,7 @@ module ts { // OK, we have found a match in the file. This is only an acceptable match if // it is contained within a comment. - var token = getTouchingToken(sourceFile, matchPosition, /*allowPositionInLeadingTrivia*/ true); + var token = getTokenAtPosition(sourceFile, matchPosition); if (token.getStart() <= matchPosition && matchPosition < token.getEnd()) { // match was within the token itself. Not in the comment. Keep searching diff --git a/src/services/utilities.ts b/src/services/utilities.ts index 40680a76338..95ed642c9c9 100644 --- a/src/services/utilities.ts +++ b/src/services/utilities.ts @@ -50,18 +50,28 @@ module ts { * position >= start and (position < end or (position === end && token is keyword or identifier)) */ export function getTouchingWord(sourceFile: SourceFile, position: number): Node { - return getTouchingToken(sourceFile, position, /*allowPositionInLeadingTrivia*/ false, isWord); + return getTouchingToken(sourceFile, position, isWord); } /* Gets the token whose text has range [start, end) and position >= start * and (position < end or (position === end && token is keyword or identifier or numeric\string litera)) */ export function getTouchingPropertyName(sourceFile: SourceFile, position: number): Node { - return getTouchingToken(sourceFile, position, /*allowPositionInLeadingTrivia*/ false, isPropertyName); + return getTouchingToken(sourceFile, position, isPropertyName); + } + + /** Returns the token if position is in [start, end) or if position === end and includeItemAtEndPosition(token) === true */ + export function getTouchingToken(sourceFile: SourceFile, position: number, includeItemAtEndPosition?: (n: Node) => boolean): Node { + return getTokenAtPositionWorker(sourceFile, position, /*allowPositionInLeadingTrivia*/ false, includeItemAtEndPosition); + } + + /** Returns a token if position is in [start-of-leading-trivia, end) */ + export function getTokenAtPosition(sourceFile: SourceFile, position: number): Node { + return getTokenAtPositionWorker(sourceFile, position, /*allowPositionInLeadingTrivia*/ true, /*includeItemAtEndPosition*/ undefined); } /** Get the token whose text contains the position */ - export function getTouchingToken(sourceFile: SourceFile, position: number, allowPositionInLeadingTrivia: boolean, includeItemAtEndPosition?: (n: Node) => boolean): Node { + function getTokenAtPositionWorker(sourceFile: SourceFile, position: number, allowPositionInLeadingTrivia: boolean, includeItemAtEndPosition: (n: Node) => boolean): Node { var current: Node = sourceFile; outer: while (true) { if (isToken(current)) { @@ -101,7 +111,7 @@ module ts { export function findTokenOnLeftOfPosition(file: SourceFile, position: number): Node { // Ideally, getTokenAtPosition should return a token. However, it is currently // broken, so we do a check to make sure the result was indeed a token. - var tokenAtPosition = getTouchingToken(file, position, /*allowPositionInLeadingTrivia*/ true); + var tokenAtPosition = getTokenAtPosition(file, position); if (isToken(tokenAtPosition) && position > tokenAtPosition.getStart(file) && position < tokenAtPosition.getEnd()) { return tokenAtPosition; } From cd4684f4de6ad639bd278945381d1e1c4af3ea95 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Wed, 1 Oct 2014 06:38:08 -0700 Subject: [PATCH 057/110] Formatting fixes --- doc/TypeScript Language Specification.docx | Bin 327374 -> 331277 bytes doc/TypeScript Language Specification.pdf | Bin 1341215 -> 1270138 bytes doc/spec.md | 8 ++++---- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/TypeScript Language Specification.docx b/doc/TypeScript Language Specification.docx index 740dd2c603473b7960e9ad2eab6bfc120999e3ed..381ac186a4bf5b29042c2b97850fbbf98f18426a 100644 GIT binary patch delta 262122 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%0Dj{rU~W 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 TXp{^R%OOebGxfi0U`deh$5k@~bJ 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 Dc#B!; delta 258243 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�nj|5T2sJ?|*bt2wPF# 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 Q+$Cn(Yjn0G8uHoy2ZpPTLjV8( diff --git a/doc/TypeScript Language Specification.pdf b/doc/TypeScript Language Specification.pdf index 4263dd72dc1f244b41b8de5aa0cc8dfd3c598977..049f7e06fb3fcda33388d74648e9adcae91b4945 100644 GIT binary patch delta 406870 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�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

Foq_>1awe}?-pYz0#^@dIXK{H-+fcEpOkA1 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 delta 478165 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Ërdz@>* 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

L-T|o&(}?@H);H_R z42o9pcTP8sQMJ_s9z^2TfD9_#OmX|`??^i6hf5vZl{2~ZB1q%rLS=M@4JGPN=w>wq zAK)itV!E|%9BHjNfn(ix9!(4YDpKMvTDbu3&%1SWLwx|V=57kXJQv!h&g1RKO0xiK z1b7J!!d)PR{LOu`($*?M_&88+aU6zl%I29k(!~(|;Bu7tsi%3Br_SUj5=S_AA= z0}f6K+kCcpT{ILZ8aHT3T24ph6B!f5fWUn-pNT~ui`h5iFX6JyzjlX7(nIhQc3x zQ5tNFM*Bui$0Wl3OfVq3RT$js3_z3;y-9xEk2$!2<3G8*VTVV5R!p4t@C_X>$w?dE zlL9dzN$2gs)Hvrxh#`7L68_RDi;OwVL+7FxfR@zdmmm=q=pAgww8(syXS;_rxR zi2?{{lI*n|4rzUFugA3|EFM}%sZ3?)ntEd_$fG>77I)HE-1T(!GuokRj81 z*J%7p=8*(0WN`YFO7564(M)ehPb(v@A;O`56{rtlvR`N{ZTB4o*0wvy1O>obSTyRt*){X($JSxsQN$zSz`shCx>`t- zq#UAXR;GfTqfsfLrq|6ZZlJI`(`G1RBTCnraH>N!pP*@ej41dvEYbbzI81@YMJ>J5 zu@@1}Tcg9AT~nCgQ0eU+nzoDWdMjE zCAx`(`G+s>@l(!I|D3Z03Xj(E#xL96OG~rEVOb#`+fR2Sc`;Uhcmqe z<5Ws&TOwok64!6sZLMcgYz7(p$tgF5)QbhC38j&`5#|bv!^I&>9|sJN%aA+szyRyv zjf+idR3Zo^5>c!8I|m*zpy#aVuL<)v!y9Dg(pi*^Ekeoc7m9qc=tRYnm;*Gmo63Jx zTdd|;c+aaMdqR2S$r=(=%u`LmqAJtmq~;2<4momtZ06D~P=XK27;C3C@rX*tl-`_) z^4piUgr$Qol2Q5`KdaX1?RPwop+(AUAr^aKH3Cyc$cKXlqBfhPv?4uDh_^4Z(c`

!5q4jLS>9L#C`L(qelr>_*@S6*nY3;fztFFm+ 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�tvf?$w^Y0W4*So788N-}G6*|!CI59q{G!URp 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 diff --git a/doc/spec.md b/doc/spec.md index e49132c61fc..5635c100a40 100644 --- a/doc/spec.md +++ b/doc/spec.md @@ -581,10 +581,10 @@ For this switch statement, the compiler will generate the following code. ```TypeScript switch (op) { - case 0 /* Operator.ADD */ : + case 0 /* Operator.ADD */: // execute add break; - case 1 /* Operator.DIV */ : + case 1 /* Operator.DIV */: // execute div break; // ... @@ -738,7 +738,7 @@ var M; return s; } M.f = f; -})(M||(M={})); +})(M || (M = {})); ``` In this case, the compiler assumes that the module object resides in global variable ‘M’, which may or may not have been initialized to the desired module object. @@ -1068,7 +1068,7 @@ Type references (section [3.6.2](#3.6.2)) to class and interface types are class ###
3.3.2 Array Types -***Array types*** represent JavaScript arrays with a common element type. Array types are named type references created from the generic interface type ‘Array’ in the global module with the array element type as a type argument. Array type literals (section [Error! Reference source not found.](#Error! Reference source not found.)) provide a shorthand notation for creating such references. +***Array types*** represent JavaScript arrays with a common element type. Array types are named type references created from the generic interface type ‘Array’ in the global module with the array element type as a type argument. Array type literals (section [3.6.4](#3.6.4)) provide a shorthand notation for creating such references. The declaration of the ‘Array’ interface includes a property ‘length’ and a numeric index signature for the element type, along with other members: From fe80647a7a32e22d25fbbe8d4c315118ec7929a7 Mon Sep 17 00:00:00 2001 From: Yui T Date: Wed, 1 Oct 2014 11:06:18 -0700 Subject: [PATCH 058/110] Fix error reporting position --- src/compiler/binder.ts | 2 +- src/compiler/checker.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/compiler/binder.ts b/src/compiler/binder.ts index 44ebd50c066..cc876f4e8cf 100644 --- a/src/compiler/binder.ts +++ b/src/compiler/binder.ts @@ -89,7 +89,7 @@ module ts { forEach(symbol.declarations, (declaration) => { file.semanticErrors.push(createDiagnosticForNode(declaration.name, Diagnostics.Duplicate_identifier_0, getDisplayName(declaration))); }); - file.semanticErrors.push(createDiagnosticForNode(node, Diagnostics.Duplicate_identifier_0, getDisplayName(node))); + file.semanticErrors.push(createDiagnosticForNode(node.name, Diagnostics.Duplicate_identifier_0, getDisplayName(node))); symbol = createSymbol(0, name); } diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 0ef10ed8189..f1de90565a3 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -5727,7 +5727,7 @@ module ts { if (duplicateFunctionDeclaration) { forEach( declarations, declaration => { - error(declaration, Diagnostics.Duplicate_function_implementation); + error(declaration.name, Diagnostics.Duplicate_function_implementation); }); } From 296e8e01b372ba836e37432f9540f2d77879fe1f Mon Sep 17 00:00:00 2001 From: Yui T Date: Wed, 1 Oct 2014 11:27:20 -0700 Subject: [PATCH 059/110] Update Baselines --- ...lassStaticFunctionOfTheSameName.errors.txt | 10 +- ...lassStaticFunctionOfTheSameName.errors.txt | 10 +- ...dExportedFunctionThatShareAName.errors.txt | 8 +- ...ambientClassOverloadForFunction.errors.txt | 4 +- .../baselines/reference/anyDeclare.errors.txt | 4 +- .../augmentedTypesClass2a.errors.txt | 4 +- .../reference/augmentedTypesEnum.errors.txt | 4 +- .../augmentedTypesFunction.errors.txt | 8 +- .../reference/augmentedTypesVar.errors.txt | 4 +- .../reference/callOverloads1.errors.txt | 4 +- .../reference/callOverloads2.errors.txt | 22 +- tests/baselines/reference/callOverloads2.js | 12 +- .../reference/callOverloads3.errors.txt | 6 +- tests/baselines/reference/callOverloads3.js | 6 +- .../reference/callOverloads4.errors.txt | 6 +- tests/baselines/reference/callOverloads4.js | 6 +- .../reference/callOverloads5.errors.txt | 6 +- tests/baselines/reference/callOverloads5.js | 6 +- ...gnaturesWithDuplicateParameters.errors.txt | 26 +-- ...turesWithParameterInitializers2.errors.txt | 6 +- tests/baselines/reference/class1.errors.txt | 4 +- tests/baselines/reference/class1.js | 6 +- .../reference/classAndInterface1.errors.txt | 6 +- .../baselines/reference/classAndInterface1.js | 4 +- .../classAndVariableWithSameName.errors.txt | 4 +- .../reference/classAndVariableWithSameName.js | 6 +- .../classOverloadForFunction.errors.txt | 4 +- ...ssWithTwoConstructorDefinitions.errors.txt | 4 +- .../classWithTwoConstructorDefinitions.js | 8 +- .../cloduleWithDuplicateMember1.errors.txt | 8 +- .../cloduleWithDuplicateMember2.errors.txt | 4 +- .../conflictingTypeAnnotatedVar.errors.txt | 8 +- ...ssibilityModifiersOnParameters2.errors.txt | 12 +- .../constructorOverloads4.errors.txt | 8 +- .../constructorOverloads7.errors.txt | 11 +- ...constructorParameterProperties2.errors.txt | 12 +- .../reference/contextualTyping.errors.txt | 11 +- ...faceIncompatibleWithBaseIndexer.errors.txt | 2 +- .../duplicateClassElements.errors.txt | 63 +++-- ...duplicateIdentifierInCatchBlock.errors.txt | 8 +- .../duplicateInterfaceMembers1.errors.txt | 2 +- .../duplicateObjectLiteralProperty.errors.txt | 17 +- ...duplicatePropertiesInStrictMode.errors.txt | 2 +- .../duplicatePropertyNames.errors.txt | 22 +- .../duplicateStringNamedProperty1.errors.txt | 2 +- .../reference/es6ClassTest9.errors.txt | 4 +- .../exportSameNameFuncVar.errors.txt | 9 +- .../fieldAndGetterWithSameName.errors.txt | 4 +- .../baselines/reference/funClodule.errors.txt | 4 +- ...functionAndPropertyNameConflict.errors.txt | 10 +- .../reference/functionCall15.errors.txt | 4 +- .../functionNameConflicts.errors.txt | 8 +- .../functionWithSameNameAsField.errors.txt | 13 +- .../gettersAndSettersErrors.errors.txt | 4 +- tests/baselines/reference/giant.errors.txt | 216 +++++++++--------- ...AndVariableDeclarationConflict3.errors.txt | 4 +- .../interfaceDeclaration1.errors.txt | 4 +- .../lastPropertyInLiteralWins.errors.txt | 4 +- .../reference/memberOverride.errors.txt | 2 +- ...cesWithConflictingPropertyNames.errors.txt | 6 +- ...esWithConflictingPropertyNames2.errors.txt | 6 +- .../reference/nameCollisions.errors.txt | 8 +- .../reference/numericClassMembers1.errors.txt | 4 +- .../numericNamedPropertyDuplicates.errors.txt | 12 +- ...cStringNamedPropertyEquivalence.errors.txt | 8 +- .../reference/objectLiteralErrors.errors.txt | 108 ++++----- ...ypeWithDuplicateNumericProperty.errors.txt | 24 +- .../optionalParamArgsTest.errors.txt | 8 +- .../optionalPropertiesSyntax.errors.txt | 2 +- .../overloadsWithinClasses.errors.txt | 8 +- ...parameterPropertyInConstructor2.errors.txt | 4 +- ...serErrorRecovery_ModuleElement2.errors.txt | 14 +- ...FunctionDeclarationAmbiguities1.errors.txt | 28 +-- ...propertyAndAccessorWithSameName.errors.txt | 28 +-- ...propertyAndFunctionWithSameName.errors.txt | 10 +- .../propertyNamedPrototype.errors.txt | 4 +- .../reference/propertySignatures.errors.txt | 2 +- .../reference/reassignStaticProp.errors.txt | 4 +- .../staticPrototypeProperty.errors.txt | 8 +- ...ypesInImplementationSignatures2.errors.txt | 2 +- .../stringNamedPropertyDuplicates.errors.txt | 12 +- .../reference/targetTypeCastTest.errors.txt | 13 +- .../reference/targetTypeTest1.errors.txt | 26 +-- .../twoAccessorsWithSameName.errors.txt | 18 +- .../twoAccessorsWithSameName2.errors.txt | 8 +- .../varAndFunctionShareName.errors.txt | 4 +- tests/cases/compiler/callOverloads2.ts | 2 +- tests/cases/compiler/callOverloads4.ts | 2 +- ...unctionInDuplicatedConstructorClassBody.ts | 2 +- .../inheritedModuleMembersForClodule2.ts | 2 +- ...nStatementInDuplicateIdentifierFunction.ts | 4 +- 91 files changed, 515 insertions(+), 566 deletions(-) diff --git a/tests/baselines/reference/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndGenericClassStaticFunctionOfTheSameName.errors.txt b/tests/baselines/reference/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndGenericClassStaticFunctionOfTheSameName.errors.txt index ed1c8eaec85..d200258fdb1 100644 --- a/tests/baselines/reference/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndGenericClassStaticFunctionOfTheSameName.errors.txt +++ b/tests/baselines/reference/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndGenericClassStaticFunctionOfTheSameName.errors.txt @@ -1,5 +1,5 @@ tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndGenericClassStaticFunctionOfTheSameName.ts(5,12): error TS2300: Duplicate identifier 'fn'. -tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndGenericClassStaticFunctionOfTheSameName.ts(10,5): error TS2300: Duplicate identifier 'fn'. +tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndGenericClassStaticFunctionOfTheSameName.ts(10,21): error TS2300: Duplicate identifier 'fn'. ==== tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndGenericClassStaticFunctionOfTheSameName.ts (2 errors) ==== @@ -15,12 +15,10 @@ tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMer module clodule { // error: duplicate identifier expected export function fn(x: T, y: T): T { - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - return x; - ~~~~~~~~~~~~~~~~~ - } - ~~~~~ + ~~ !!! error TS2300: Duplicate identifier 'fn'. + return x; + } } \ No newline at end of file diff --git a/tests/baselines/reference/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndNonGenericClassStaticFunctionOfTheSameName.errors.txt b/tests/baselines/reference/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndNonGenericClassStaticFunctionOfTheSameName.errors.txt index bf1c4f36d1b..474613e283f 100644 --- a/tests/baselines/reference/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndNonGenericClassStaticFunctionOfTheSameName.errors.txt +++ b/tests/baselines/reference/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndNonGenericClassStaticFunctionOfTheSameName.errors.txt @@ -1,5 +1,5 @@ tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndNonGenericClassStaticFunctionOfTheSameName.ts(5,12): error TS2300: Duplicate identifier 'fn'. -tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndNonGenericClassStaticFunctionOfTheSameName.ts(10,5): error TS2300: Duplicate identifier 'fn'. +tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndNonGenericClassStaticFunctionOfTheSameName.ts(10,21): error TS2300: Duplicate identifier 'fn'. ==== tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndNonGenericClassStaticFunctionOfTheSameName.ts (2 errors) ==== @@ -15,12 +15,10 @@ tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMer module clodule { // error: duplicate identifier expected export function fn(x: T, y: T): T { - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - return x; - ~~~~~~~~~~~~~~~~~ - } - ~~~~~ + ~~ !!! error TS2300: Duplicate identifier 'fn'. + return x; + } } \ No newline at end of file diff --git a/tests/baselines/reference/ClassAndModuleThatMergeWithStaticFunctionAndExportedFunctionThatShareAName.errors.txt b/tests/baselines/reference/ClassAndModuleThatMergeWithStaticFunctionAndExportedFunctionThatShareAName.errors.txt index b3c2a87e176..a59953e7fb2 100644 --- a/tests/baselines/reference/ClassAndModuleThatMergeWithStaticFunctionAndExportedFunctionThatShareAName.errors.txt +++ b/tests/baselines/reference/ClassAndModuleThatMergeWithStaticFunctionAndExportedFunctionThatShareAName.errors.txt @@ -1,7 +1,7 @@ tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMergeWithStaticFunctionAndExportedFunctionThatShareAName.ts(4,12): error TS2300: Duplicate identifier 'Origin'. -tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMergeWithStaticFunctionAndExportedFunctionThatShareAName.ts(8,5): error TS2300: Duplicate identifier 'Origin'. +tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMergeWithStaticFunctionAndExportedFunctionThatShareAName.ts(8,21): error TS2300: Duplicate identifier 'Origin'. tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMergeWithStaticFunctionAndExportedFunctionThatShareAName.ts(16,16): error TS2300: Duplicate identifier 'Origin'. -tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMergeWithStaticFunctionAndExportedFunctionThatShareAName.ts(20,9): error TS2300: Duplicate identifier 'Origin'. +tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMergeWithStaticFunctionAndExportedFunctionThatShareAName.ts(20,25): error TS2300: Duplicate identifier 'Origin'. ==== tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMergeWithStaticFunctionAndExportedFunctionThatShareAName.ts (4 errors) ==== @@ -15,7 +15,7 @@ tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMer module Point { export function Origin() { return null; } //expected duplicate identifier error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~ !!! error TS2300: Duplicate identifier 'Origin'. } @@ -31,7 +31,7 @@ tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMer export module Point { export function Origin() { return ""; }//expected duplicate identifier error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~ !!! error TS2300: Duplicate identifier 'Origin'. } } \ No newline at end of file diff --git a/tests/baselines/reference/ambientClassOverloadForFunction.errors.txt b/tests/baselines/reference/ambientClassOverloadForFunction.errors.txt index a63f795ec88..16df32bb2c5 100644 --- a/tests/baselines/reference/ambientClassOverloadForFunction.errors.txt +++ b/tests/baselines/reference/ambientClassOverloadForFunction.errors.txt @@ -1,5 +1,5 @@ tests/cases/compiler/ambientClassOverloadForFunction.ts(1,15): error TS2300: Duplicate identifier 'foo'. -tests/cases/compiler/ambientClassOverloadForFunction.ts(2,1): error TS2300: Duplicate identifier 'foo'. +tests/cases/compiler/ambientClassOverloadForFunction.ts(2,10): error TS2300: Duplicate identifier 'foo'. ==== tests/cases/compiler/ambientClassOverloadForFunction.ts (2 errors) ==== @@ -7,6 +7,6 @@ tests/cases/compiler/ambientClassOverloadForFunction.ts(2,1): error TS2300: Dupl ~~~ !!! error TS2300: Duplicate identifier 'foo'. function foo() { return null; } - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'foo'. \ No newline at end of file diff --git a/tests/baselines/reference/anyDeclare.errors.txt b/tests/baselines/reference/anyDeclare.errors.txt index ec21bd1e859..8eda3672f24 100644 --- a/tests/baselines/reference/anyDeclare.errors.txt +++ b/tests/baselines/reference/anyDeclare.errors.txt @@ -1,5 +1,5 @@ tests/cases/compiler/anyDeclare.ts(3,9): error TS2300: Duplicate identifier 'myFn'. -tests/cases/compiler/anyDeclare.ts(4,5): error TS2300: Duplicate identifier 'myFn'. +tests/cases/compiler/anyDeclare.ts(4,14): error TS2300: Duplicate identifier 'myFn'. ==== tests/cases/compiler/anyDeclare.ts (2 errors) ==== @@ -9,7 +9,7 @@ tests/cases/compiler/anyDeclare.ts(4,5): error TS2300: Duplicate identifier 'myF ~~~~ !!! error TS2300: Duplicate identifier 'myFn'. function myFn() { } - ~~~~~~~~~~~~~~~~~~~~ + ~~~~ !!! error TS2300: Duplicate identifier 'myFn'. } \ No newline at end of file diff --git a/tests/baselines/reference/augmentedTypesClass2a.errors.txt b/tests/baselines/reference/augmentedTypesClass2a.errors.txt index ed6c556a826..b17ab32d408 100644 --- a/tests/baselines/reference/augmentedTypesClass2a.errors.txt +++ b/tests/baselines/reference/augmentedTypesClass2a.errors.txt @@ -1,5 +1,5 @@ tests/cases/compiler/augmentedTypesClass2a.ts(2,7): error TS2300: Duplicate identifier 'c2'. -tests/cases/compiler/augmentedTypesClass2a.ts(3,1): error TS2300: Duplicate identifier 'c2'. +tests/cases/compiler/augmentedTypesClass2a.ts(3,10): error TS2300: Duplicate identifier 'c2'. tests/cases/compiler/augmentedTypesClass2a.ts(4,5): error TS2300: Duplicate identifier 'c2'. @@ -9,7 +9,7 @@ tests/cases/compiler/augmentedTypesClass2a.ts(4,5): error TS2300: Duplicate iden ~~ !!! error TS2300: Duplicate identifier 'c2'. function c2() { } // error - ~~~~~~~~~~~~~~~~~ + ~~ !!! error TS2300: Duplicate identifier 'c2'. var c2 = () => { } ~~ diff --git a/tests/baselines/reference/augmentedTypesEnum.errors.txt b/tests/baselines/reference/augmentedTypesEnum.errors.txt index 6e04f9bfcf1..3102f9d4786 100644 --- a/tests/baselines/reference/augmentedTypesEnum.errors.txt +++ b/tests/baselines/reference/augmentedTypesEnum.errors.txt @@ -1,7 +1,7 @@ tests/cases/compiler/augmentedTypesEnum.ts(2,6): error TS2300: Duplicate identifier 'e1111'. tests/cases/compiler/augmentedTypesEnum.ts(3,5): error TS2300: Duplicate identifier 'e1111'. tests/cases/compiler/augmentedTypesEnum.ts(6,6): error TS2300: Duplicate identifier 'e2'. -tests/cases/compiler/augmentedTypesEnum.ts(7,1): error TS2300: Duplicate identifier 'e2'. +tests/cases/compiler/augmentedTypesEnum.ts(7,10): error TS2300: Duplicate identifier 'e2'. tests/cases/compiler/augmentedTypesEnum.ts(9,6): error TS2300: Duplicate identifier 'e3'. tests/cases/compiler/augmentedTypesEnum.ts(10,5): error TS2300: Duplicate identifier 'e3'. tests/cases/compiler/augmentedTypesEnum.ts(13,6): error TS2300: Duplicate identifier 'e4'. @@ -26,7 +26,7 @@ tests/cases/compiler/augmentedTypesEnum.ts(21,12): error TS2432: In an enum with ~~ !!! error TS2300: Duplicate identifier 'e2'. function e2() { } // error - ~~~~~~~~~~~~~~~~~ + ~~ !!! error TS2300: Duplicate identifier 'e2'. enum e3 { One } // error diff --git a/tests/baselines/reference/augmentedTypesFunction.errors.txt b/tests/baselines/reference/augmentedTypesFunction.errors.txt index 60d6dd3b30d..8d1ce671c9e 100644 --- a/tests/baselines/reference/augmentedTypesFunction.errors.txt +++ b/tests/baselines/reference/augmentedTypesFunction.errors.txt @@ -1,7 +1,7 @@ tests/cases/compiler/augmentedTypesFunction.ts(2,10): error TS2300: Duplicate identifier 'y1'. tests/cases/compiler/augmentedTypesFunction.ts(3,5): error TS2300: Duplicate identifier 'y1'. -tests/cases/compiler/augmentedTypesFunction.ts(6,1): error TS2393: Duplicate function implementation. -tests/cases/compiler/augmentedTypesFunction.ts(7,1): error TS2393: Duplicate function implementation. +tests/cases/compiler/augmentedTypesFunction.ts(6,10): error TS2393: Duplicate function implementation. +tests/cases/compiler/augmentedTypesFunction.ts(7,10): error TS2393: Duplicate function implementation. tests/cases/compiler/augmentedTypesFunction.ts(9,10): error TS2300: Duplicate identifier 'y2a'. tests/cases/compiler/augmentedTypesFunction.ts(10,5): error TS2300: Duplicate identifier 'y2a'. tests/cases/compiler/augmentedTypesFunction.ts(13,10): error TS2300: Duplicate identifier 'y3'. @@ -23,10 +23,10 @@ tests/cases/compiler/augmentedTypesFunction.ts(21,6): error TS2300: Duplicate id // function then function function y2() { } // error - ~~~~~~~~~~~~~~~~~ + ~~ !!! error TS2393: Duplicate function implementation. function y2() { } // error - ~~~~~~~~~~~~~~~~~ + ~~ !!! error TS2393: Duplicate function implementation. function y2a() { } // error diff --git a/tests/baselines/reference/augmentedTypesVar.errors.txt b/tests/baselines/reference/augmentedTypesVar.errors.txt index ee4319baffb..24c194d25c3 100644 --- a/tests/baselines/reference/augmentedTypesVar.errors.txt +++ b/tests/baselines/reference/augmentedTypesVar.errors.txt @@ -1,5 +1,5 @@ tests/cases/compiler/augmentedTypesVar.ts(6,5): error TS2300: Duplicate identifier 'x2'. -tests/cases/compiler/augmentedTypesVar.ts(7,1): error TS2300: Duplicate identifier 'x2'. +tests/cases/compiler/augmentedTypesVar.ts(7,10): error TS2300: Duplicate identifier 'x2'. tests/cases/compiler/augmentedTypesVar.ts(10,5): error TS2403: Subsequent variable declarations must have the same type. Variable 'x3' must be of type 'number', but here has type '() => void'. tests/cases/compiler/augmentedTypesVar.ts(13,5): error TS2300: Duplicate identifier 'x4'. tests/cases/compiler/augmentedTypesVar.ts(14,7): error TS2300: Duplicate identifier 'x4'. @@ -23,7 +23,7 @@ tests/cases/compiler/augmentedTypesVar.ts(31,8): error TS2300: Duplicate identif ~~ !!! error TS2300: Duplicate identifier 'x2'. function x2() { } // error - ~~~~~~~~~~~~~~~~~ + ~~ !!! error TS2300: Duplicate identifier 'x2'. var x3 = 1; diff --git a/tests/baselines/reference/callOverloads1.errors.txt b/tests/baselines/reference/callOverloads1.errors.txt index 1f778a42cdf..64927462104 100644 --- a/tests/baselines/reference/callOverloads1.errors.txt +++ b/tests/baselines/reference/callOverloads1.errors.txt @@ -1,5 +1,5 @@ tests/cases/compiler/callOverloads1.ts(1,7): error TS2300: Duplicate identifier 'Foo'. -tests/cases/compiler/callOverloads1.ts(9,1): error TS2300: Duplicate identifier 'Foo'. +tests/cases/compiler/callOverloads1.ts(9,10): error TS2300: Duplicate identifier 'Foo'. tests/cases/compiler/callOverloads1.ts(9,10): error TS2391: Function implementation is missing or not immediately following the declaration. tests/cases/compiler/callOverloads1.ts(17,1): error TS2348: Value of type 'typeof Foo' is not callable. Did you mean to include 'new'? @@ -16,7 +16,7 @@ tests/cases/compiler/callOverloads1.ts(17,1): error TS2348: Value of type 'typeo } function Foo(); // error - ~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'Foo'. ~~~ !!! error TS2391: Function implementation is missing or not immediately following the declaration. diff --git a/tests/baselines/reference/callOverloads2.errors.txt b/tests/baselines/reference/callOverloads2.errors.txt index 3759ae719c9..6291fa8f3de 100644 --- a/tests/baselines/reference/callOverloads2.errors.txt +++ b/tests/baselines/reference/callOverloads2.errors.txt @@ -1,8 +1,8 @@ tests/cases/compiler/callOverloads2.ts(3,7): error TS2300: Duplicate identifier 'Foo'. -tests/cases/compiler/callOverloads2.ts(11,1): error TS2300: Duplicate identifier 'Foo'. -tests/cases/compiler/callOverloads2.ts(13,1): error TS2393: Duplicate function implementation. +tests/cases/compiler/callOverloads2.ts(11,10): error TS2300: Duplicate identifier 'Foo'. tests/cases/compiler/callOverloads2.ts(13,10): error TS2389: Function implementation name must be 'Foo'. -tests/cases/compiler/callOverloads2.ts(14,1): error TS2393: Duplicate function implementation. +tests/cases/compiler/callOverloads2.ts(13,10): error TS2393: Duplicate function implementation. +tests/cases/compiler/callOverloads2.ts(14,10): error TS2393: Duplicate function implementation. tests/cases/compiler/callOverloads2.ts(16,10): error TS2391: Function implementation is missing or not immediately following the declaration. tests/cases/compiler/callOverloads2.ts(24,1): error TS2348: Value of type 'typeof Foo' is not callable. Did you mean to include 'new'? @@ -10,7 +10,7 @@ tests/cases/compiler/callOverloads2.ts(24,1): error TS2348: Value of type 'typeo ==== tests/cases/compiler/callOverloads2.ts (7 errors) ==== - class Foo { + class Foo { // error ~~~ !!! error TS2300: Duplicate identifier 'Foo'. bar1() { /*WScript.Echo("bar1");*/ } @@ -20,17 +20,17 @@ tests/cases/compiler/callOverloads2.ts(24,1): error TS2348: Value of type 'typeo } } - function Foo(); - ~~~~~~~~~~~~~~~ + function Foo(); // error + ~~~ !!! error TS2300: Duplicate identifier 'Foo'. - function F1(s:string) {return s;} - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2393: Duplicate function implementation. + function F1(s:string) {return s;} // error ~~ !!! error TS2389: Function implementation name must be 'Foo'. - function F1(a:any) { return a;} // error - duplicate identifier - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~ +!!! error TS2393: Duplicate function implementation. + function F1(a:any) { return a;} // error + ~~ !!! error TS2393: Duplicate function implementation. function Goo(s:string); // error - no implementation diff --git a/tests/baselines/reference/callOverloads2.js b/tests/baselines/reference/callOverloads2.js index be42753bc3d..e3cbceb177a 100644 --- a/tests/baselines/reference/callOverloads2.js +++ b/tests/baselines/reference/callOverloads2.js @@ -1,7 +1,7 @@ //// [callOverloads2.ts] -class Foo { +class Foo { // error bar1() { /*WScript.Echo("bar1");*/ } constructor(x: any) { @@ -9,10 +9,10 @@ class Foo { } } -function Foo(); +function Foo(); // error -function F1(s:string) {return s;} -function F1(a:any) { return a;} // error - duplicate identifier +function F1(s:string) {return s;} // error +function F1(a:any) { return a;} // error function Goo(s:string); // error - no implementation @@ -36,10 +36,10 @@ var Foo = (function () { })(); function F1(s) { return s; -} +} // error function F1(a) { return a; -} // error - duplicate identifier +} // error var f1 = new Foo("hey"); f1.bar1(); Foo(); diff --git a/tests/baselines/reference/callOverloads3.errors.txt b/tests/baselines/reference/callOverloads3.errors.txt index 86124251752..ecb889bc1ab 100644 --- a/tests/baselines/reference/callOverloads3.errors.txt +++ b/tests/baselines/reference/callOverloads3.errors.txt @@ -9,19 +9,19 @@ tests/cases/compiler/callOverloads3.ts(12,10): error TS2350: Only a void functio ==== tests/cases/compiler/callOverloads3.ts (7 errors) ==== - function Foo():Foo; + function Foo():Foo; // error ~~~ !!! error TS2300: Duplicate identifier 'Foo'. ~~~ !!! error TS2304: Cannot find name 'Foo'. - function Foo(s:string):Foo; + function Foo(s:string):Foo; // error ~~~ !!! error TS2300: Duplicate identifier 'Foo'. ~~~ !!! error TS2391: Function implementation is missing or not immediately following the declaration. ~~~ !!! error TS2304: Cannot find name 'Foo'. - class Foo { + class Foo { // error ~~~ !!! error TS2300: Duplicate identifier 'Foo'. bar1() { /*WScript.Echo("bar1");*/ } diff --git a/tests/baselines/reference/callOverloads3.js b/tests/baselines/reference/callOverloads3.js index 93176cc1edb..85c16fe85a6 100644 --- a/tests/baselines/reference/callOverloads3.js +++ b/tests/baselines/reference/callOverloads3.js @@ -1,8 +1,8 @@ //// [callOverloads3.ts] -function Foo():Foo; -function Foo(s:string):Foo; -class Foo { +function Foo():Foo; // error +function Foo(s:string):Foo; // error +class Foo { // error bar1() { /*WScript.Echo("bar1");*/ } constructor(x: any) { // WScript.Echo("Constructor function has executed"); diff --git a/tests/baselines/reference/callOverloads4.errors.txt b/tests/baselines/reference/callOverloads4.errors.txt index 24d304b45c6..3010d7c15d8 100644 --- a/tests/baselines/reference/callOverloads4.errors.txt +++ b/tests/baselines/reference/callOverloads4.errors.txt @@ -9,19 +9,19 @@ tests/cases/compiler/callOverloads4.ts(12,10): error TS2350: Only a void functio ==== tests/cases/compiler/callOverloads4.ts (7 errors) ==== - function Foo():Foo; + function Foo():Foo; // error ~~~ !!! error TS2300: Duplicate identifier 'Foo'. ~~~ !!! error TS2304: Cannot find name 'Foo'. - function Foo(s:string):Foo; + function Foo(s:string):Foo; // error ~~~ !!! error TS2300: Duplicate identifier 'Foo'. ~~~ !!! error TS2391: Function implementation is missing or not immediately following the declaration. ~~~ !!! error TS2304: Cannot find name 'Foo'. - class Foo { + class Foo { // error ~~~ !!! error TS2300: Duplicate identifier 'Foo'. bar1() { /*WScript.Echo("bar1");*/ } diff --git a/tests/baselines/reference/callOverloads4.js b/tests/baselines/reference/callOverloads4.js index 86ec2b91e7e..6aab555b721 100644 --- a/tests/baselines/reference/callOverloads4.js +++ b/tests/baselines/reference/callOverloads4.js @@ -1,8 +1,8 @@ //// [callOverloads4.ts] -function Foo():Foo; -function Foo(s:string):Foo; -class Foo { +function Foo():Foo; // error +function Foo(s:string):Foo; // error +class Foo { // error bar1() { /*WScript.Echo("bar1");*/ } constructor(s: string); constructor(x: any) { diff --git a/tests/baselines/reference/callOverloads5.errors.txt b/tests/baselines/reference/callOverloads5.errors.txt index a2a8711d211..e521a9a9076 100644 --- a/tests/baselines/reference/callOverloads5.errors.txt +++ b/tests/baselines/reference/callOverloads5.errors.txt @@ -8,19 +8,19 @@ tests/cases/compiler/callOverloads5.ts(13,10): error TS2350: Only a void functio ==== tests/cases/compiler/callOverloads5.ts (7 errors) ==== - function Foo():Foo; + function Foo():Foo; // error ~~~ !!! error TS2300: Duplicate identifier 'Foo'. ~~~ !!! error TS2304: Cannot find name 'Foo'. - function Foo(s:string):Foo; + function Foo(s:string):Foo; // error ~~~ !!! error TS2300: Duplicate identifier 'Foo'. ~~~ !!! error TS2391: Function implementation is missing or not immediately following the declaration. ~~~ !!! error TS2304: Cannot find name 'Foo'. - class Foo { + class Foo { // error ~~~ !!! error TS2300: Duplicate identifier 'Foo'. bar1(s:string); diff --git a/tests/baselines/reference/callOverloads5.js b/tests/baselines/reference/callOverloads5.js index 30cc65915ec..2220568e4c2 100644 --- a/tests/baselines/reference/callOverloads5.js +++ b/tests/baselines/reference/callOverloads5.js @@ -1,7 +1,7 @@ //// [callOverloads5.ts] -function Foo():Foo; -function Foo(s:string):Foo; -class Foo { +function Foo():Foo; // error +function Foo(s:string):Foo; // error +class Foo { // error bar1(s:string); bar1(n:number); bar1(a:any) { /*WScript.Echo(a);*/ } diff --git a/tests/baselines/reference/callSignaturesWithDuplicateParameters.errors.txt b/tests/baselines/reference/callSignaturesWithDuplicateParameters.errors.txt index c87eb32515e..034aa4039cf 100644 --- a/tests/baselines/reference/callSignaturesWithDuplicateParameters.errors.txt +++ b/tests/baselines/reference/callSignaturesWithDuplicateParameters.errors.txt @@ -70,28 +70,28 @@ tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWit var f4 = (x: T, x: T) => { } ~ !!! error TS2300: Duplicate identifier 'x'. - ~~~~ + ~ !!! error TS2300: Duplicate identifier 'x'. function foo2(x: string, x: number) { } ~ !!! error TS2300: Duplicate identifier 'x'. - ~~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier 'x'. var f5 = function foo(x: string, x: number) { } ~ !!! error TS2300: Duplicate identifier 'x'. - ~~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier 'x'. var f6 = function (x: string, x: number) { } ~ !!! error TS2300: Duplicate identifier 'x'. - ~~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier 'x'. var f7 = (x: string, x: number) => { } ~ !!! error TS2300: Duplicate identifier 'x'. - ~~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier 'x'. var f8 = (x: T, y: T) => { } @@ -104,12 +104,12 @@ tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWit foo2(x: number, x: string) { } ~ !!! error TS2300: Duplicate identifier 'x'. - ~~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier 'x'. foo3(x: T, x: T) { } ~ !!! error TS2300: Duplicate identifier 'x'. - ~~~~ + ~ !!! error TS2300: Duplicate identifier 'x'. } @@ -122,7 +122,7 @@ tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWit (x: string, x: number); ~ !!! error TS2300: Duplicate identifier 'x'. - ~~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier 'x'. foo(x, x); ~ @@ -132,12 +132,12 @@ tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWit foo(x: number, x: string); ~ !!! error TS2300: Duplicate identifier 'x'. - ~~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier 'x'. foo3(x: T, x: T); ~ !!! error TS2300: Duplicate identifier 'x'. - ~~~~ + ~ !!! error TS2300: Duplicate identifier 'x'. } @@ -150,7 +150,7 @@ tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWit foo2(x: number, x: string); ~ !!! error TS2300: Duplicate identifier 'x'. - ~~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier 'x'. }; @@ -163,11 +163,11 @@ tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWit a: function foo(x: number, x: string) { }, ~ !!! error TS2300: Duplicate identifier 'x'. - ~~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier 'x'. b: (x: T, x: T) => { } ~ !!! error TS2300: Duplicate identifier 'x'. - ~~~~ + ~ !!! error TS2300: Duplicate identifier 'x'. } \ No newline at end of file diff --git a/tests/baselines/reference/callSignaturesWithParameterInitializers2.errors.txt b/tests/baselines/reference/callSignaturesWithParameterInitializers2.errors.txt index 76bf9aec947..1801bd42e4d 100644 --- a/tests/baselines/reference/callSignaturesWithParameterInitializers2.errors.txt +++ b/tests/baselines/reference/callSignaturesWithParameterInitializers2.errors.txt @@ -29,13 +29,13 @@ tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWit c.foo(1); var b = { - foo(x = 1), + foo(x = 1), // error ~ !!! error TS1005: '{' expected. ~~~ !!! error TS2300: Duplicate identifier 'foo'. - foo(x = 1) { }, - ~~~~~~~~~~~~~~ + foo(x = 1) { }, // error + ~~~ !!! error TS2300: Duplicate identifier 'foo'. } diff --git a/tests/baselines/reference/class1.errors.txt b/tests/baselines/reference/class1.errors.txt index 13602645c45..b90fae9cb40 100644 --- a/tests/baselines/reference/class1.errors.txt +++ b/tests/baselines/reference/class1.errors.txt @@ -3,9 +3,9 @@ tests/cases/compiler/class1.ts(2,7): error TS2300: Duplicate identifier 'foo'. ==== tests/cases/compiler/class1.ts (2 errors) ==== - interface foo{ } + interface foo{ } // error ~~~ !!! error TS2300: Duplicate identifier 'foo'. - class foo{ } + class foo{ } // error ~~~ !!! error TS2300: Duplicate identifier 'foo'. \ No newline at end of file diff --git a/tests/baselines/reference/class1.js b/tests/baselines/reference/class1.js index 96b279e58c6..7a104e237b6 100644 --- a/tests/baselines/reference/class1.js +++ b/tests/baselines/reference/class1.js @@ -1,10 +1,10 @@ //// [class1.ts] -interface foo{ } -class foo{ } +interface foo{ } // error +class foo{ } // error //// [class1.js] var foo = (function () { function foo() { } return foo; -})(); +})(); // error diff --git a/tests/baselines/reference/classAndInterface1.errors.txt b/tests/baselines/reference/classAndInterface1.errors.txt index a7a1b028d82..8d31e847d71 100644 --- a/tests/baselines/reference/classAndInterface1.errors.txt +++ b/tests/baselines/reference/classAndInterface1.errors.txt @@ -1,10 +1,10 @@ -tests/cases/compiler/classAndInterface1.ts(1,7): error TS2300: Duplicate identifier 'cli'. +tests/cases/compiler/classAndInterface1.ts(1,8): error TS2300: Duplicate identifier 'cli'. tests/cases/compiler/classAndInterface1.ts(2,11): error TS2300: Duplicate identifier 'cli'. ==== tests/cases/compiler/classAndInterface1.ts (2 errors) ==== - class cli { } - ~~~ + class cli { } // error + ~~~ !!! error TS2300: Duplicate identifier 'cli'. interface cli { } // error ~~~ diff --git a/tests/baselines/reference/classAndInterface1.js b/tests/baselines/reference/classAndInterface1.js index 74eec3e942e..5efabded838 100644 --- a/tests/baselines/reference/classAndInterface1.js +++ b/tests/baselines/reference/classAndInterface1.js @@ -1,5 +1,5 @@ //// [classAndInterface1.ts] -class cli { } + class cli { } // error interface cli { } // error //// [classAndInterface1.js] @@ -7,4 +7,4 @@ var cli = (function () { function cli() { } return cli; -})(); +})(); // error diff --git a/tests/baselines/reference/classAndVariableWithSameName.errors.txt b/tests/baselines/reference/classAndVariableWithSameName.errors.txt index 909ea253926..2e8c16d4494 100644 --- a/tests/baselines/reference/classAndVariableWithSameName.errors.txt +++ b/tests/baselines/reference/classAndVariableWithSameName.errors.txt @@ -5,7 +5,7 @@ tests/cases/conformance/classes/classDeclarations/classAndVariableWithSameName.t ==== tests/cases/conformance/classes/classDeclarations/classAndVariableWithSameName.ts (4 errors) ==== - class C { foo: string; } + class C { foo: string; } // error ~ !!! error TS2300: Duplicate identifier 'C'. var C = ''; // error @@ -13,7 +13,7 @@ tests/cases/conformance/classes/classDeclarations/classAndVariableWithSameName.t !!! error TS2300: Duplicate identifier 'C'. module M { - class D { + class D { // error ~ !!! error TS2300: Duplicate identifier 'D'. bar: string; diff --git a/tests/baselines/reference/classAndVariableWithSameName.js b/tests/baselines/reference/classAndVariableWithSameName.js index ab17905d5b2..1d547dc5508 100644 --- a/tests/baselines/reference/classAndVariableWithSameName.js +++ b/tests/baselines/reference/classAndVariableWithSameName.js @@ -1,9 +1,9 @@ //// [classAndVariableWithSameName.ts] -class C { foo: string; } +class C { foo: string; } // error var C = ''; // error module M { - class D { + class D { // error bar: string; } @@ -15,7 +15,7 @@ var C = (function () { function C() { } return C; -})(); +})(); // error var C = ''; // error var M; (function (M) { diff --git a/tests/baselines/reference/classOverloadForFunction.errors.txt b/tests/baselines/reference/classOverloadForFunction.errors.txt index c52da033a2c..14bc27fb5ca 100644 --- a/tests/baselines/reference/classOverloadForFunction.errors.txt +++ b/tests/baselines/reference/classOverloadForFunction.errors.txt @@ -1,5 +1,5 @@ tests/cases/compiler/classOverloadForFunction.ts(1,7): error TS2300: Duplicate identifier 'foo'. -tests/cases/compiler/classOverloadForFunction.ts(2,1): error TS2300: Duplicate identifier 'foo'. +tests/cases/compiler/classOverloadForFunction.ts(2,10): error TS2300: Duplicate identifier 'foo'. ==== tests/cases/compiler/classOverloadForFunction.ts (2 errors) ==== @@ -7,6 +7,6 @@ tests/cases/compiler/classOverloadForFunction.ts(2,1): error TS2300: Duplicate i ~~~ !!! error TS2300: Duplicate identifier 'foo'. function foo() {} - ~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'foo'. \ No newline at end of file diff --git a/tests/baselines/reference/classWithTwoConstructorDefinitions.errors.txt b/tests/baselines/reference/classWithTwoConstructorDefinitions.errors.txt index fa093b91c2d..6b08be330a0 100644 --- a/tests/baselines/reference/classWithTwoConstructorDefinitions.errors.txt +++ b/tests/baselines/reference/classWithTwoConstructorDefinitions.errors.txt @@ -6,7 +6,7 @@ tests/cases/conformance/classes/constructorDeclarations/classWithTwoConstructorD ==== tests/cases/conformance/classes/constructorDeclarations/classWithTwoConstructorDefinitions.ts (4 errors) ==== class C { - constructor() { } + constructor() { } // error ~~~~~~~~~~~~~~~~~ !!! error TS2392: Multiple constructor implementations are not allowed. constructor(x) { } // error @@ -15,7 +15,7 @@ tests/cases/conformance/classes/constructorDeclarations/classWithTwoConstructorD } class D { - constructor(x: T) { } + constructor(x: T) { } // error ~~~~~~~~~~~~~~~~~~~~~ !!! error TS2392: Multiple constructor implementations are not allowed. constructor(x: T, y: T) { } // error diff --git a/tests/baselines/reference/classWithTwoConstructorDefinitions.js b/tests/baselines/reference/classWithTwoConstructorDefinitions.js index 77c98697f1f..31e5498cfc9 100644 --- a/tests/baselines/reference/classWithTwoConstructorDefinitions.js +++ b/tests/baselines/reference/classWithTwoConstructorDefinitions.js @@ -1,22 +1,22 @@ //// [classWithTwoConstructorDefinitions.ts] class C { - constructor() { } + constructor() { } // error constructor(x) { } // error } class D { - constructor(x: T) { } + constructor(x: T) { } // error constructor(x: T, y: T) { } // error } //// [classWithTwoConstructorDefinitions.js] var C = (function () { function C() { - } + } // error return C; })(); var D = (function () { function D(x) { - } + } // error return D; })(); diff --git a/tests/baselines/reference/cloduleWithDuplicateMember1.errors.txt b/tests/baselines/reference/cloduleWithDuplicateMember1.errors.txt index 901affa2554..914088f6c19 100644 --- a/tests/baselines/reference/cloduleWithDuplicateMember1.errors.txt +++ b/tests/baselines/reference/cloduleWithDuplicateMember1.errors.txt @@ -3,8 +3,8 @@ tests/cases/compiler/cloduleWithDuplicateMember1.ts(3,16): error TS1056: Accesso tests/cases/compiler/cloduleWithDuplicateMember1.ts(3,16): error TS2300: Duplicate identifier 'x'. tests/cases/compiler/cloduleWithDuplicateMember1.ts(6,12): error TS2300: Duplicate identifier 'foo'. tests/cases/compiler/cloduleWithDuplicateMember1.ts(10,16): error TS2300: Duplicate identifier 'x'. -tests/cases/compiler/cloduleWithDuplicateMember1.ts(13,5): error TS2300: Duplicate identifier 'foo'. -tests/cases/compiler/cloduleWithDuplicateMember1.ts(14,5): error TS2300: Duplicate identifier 'x'. +tests/cases/compiler/cloduleWithDuplicateMember1.ts(13,21): error TS2300: Duplicate identifier 'foo'. +tests/cases/compiler/cloduleWithDuplicateMember1.ts(14,21): error TS2300: Duplicate identifier 'x'. ==== tests/cases/compiler/cloduleWithDuplicateMember1.ts (7 errors) ==== @@ -31,9 +31,9 @@ tests/cases/compiler/cloduleWithDuplicateMember1.ts(14,5): error TS2300: Duplica } module C { export function foo() { } - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'foo'. export function x() { } - ~~~~~~~~~~~~~~~~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier 'x'. } \ No newline at end of file diff --git a/tests/baselines/reference/cloduleWithDuplicateMember2.errors.txt b/tests/baselines/reference/cloduleWithDuplicateMember2.errors.txt index d8702a546d0..55d2fdbddf2 100644 --- a/tests/baselines/reference/cloduleWithDuplicateMember2.errors.txt +++ b/tests/baselines/reference/cloduleWithDuplicateMember2.errors.txt @@ -1,7 +1,7 @@ tests/cases/compiler/cloduleWithDuplicateMember2.ts(2,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/compiler/cloduleWithDuplicateMember2.ts(3,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/compiler/cloduleWithDuplicateMember2.ts(7,16): error TS2300: Duplicate identifier 'x'. -tests/cases/compiler/cloduleWithDuplicateMember2.ts(10,5): error TS2300: Duplicate identifier 'x'. +tests/cases/compiler/cloduleWithDuplicateMember2.ts(10,21): error TS2300: Duplicate identifier 'x'. ==== tests/cases/compiler/cloduleWithDuplicateMember2.ts (4 errors) ==== @@ -21,6 +21,6 @@ tests/cases/compiler/cloduleWithDuplicateMember2.ts(10,5): error TS2300: Duplica } module C { export function x() { } - ~~~~~~~~~~~~~~~~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier 'x'. } \ No newline at end of file diff --git a/tests/baselines/reference/conflictingTypeAnnotatedVar.errors.txt b/tests/baselines/reference/conflictingTypeAnnotatedVar.errors.txt index 080167cd760..0b667108b5f 100644 --- a/tests/baselines/reference/conflictingTypeAnnotatedVar.errors.txt +++ b/tests/baselines/reference/conflictingTypeAnnotatedVar.errors.txt @@ -1,7 +1,7 @@ tests/cases/compiler/conflictingTypeAnnotatedVar.ts(1,5): error TS2300: Duplicate identifier 'foo'. -tests/cases/compiler/conflictingTypeAnnotatedVar.ts(2,1): error TS2300: Duplicate identifier 'foo'. +tests/cases/compiler/conflictingTypeAnnotatedVar.ts(2,10): error TS2300: Duplicate identifier 'foo'. tests/cases/compiler/conflictingTypeAnnotatedVar.ts(2,17): 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/compiler/conflictingTypeAnnotatedVar.ts(3,1): error TS2300: Duplicate identifier 'foo'. +tests/cases/compiler/conflictingTypeAnnotatedVar.ts(3,10): error TS2300: Duplicate identifier 'foo'. tests/cases/compiler/conflictingTypeAnnotatedVar.ts(3,17): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value or consist of a single 'throw' statement. @@ -10,12 +10,12 @@ tests/cases/compiler/conflictingTypeAnnotatedVar.ts(3,17): error TS2355: A funct ~~~ !!! error TS2300: Duplicate identifier 'foo'. function foo(): number { } - ~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'foo'. ~~~~~~ !!! error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value or consist of a single 'throw' statement. function foo(): number { } - ~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'foo'. ~~~~~~ !!! 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/constructSignatureWithAccessibilityModifiersOnParameters2.errors.txt b/tests/baselines/reference/constructSignatureWithAccessibilityModifiersOnParameters2.errors.txt index e3d17237f1d..e12f3a59ca1 100644 --- a/tests/baselines/reference/constructSignatureWithAccessibilityModifiersOnParameters2.errors.txt +++ b/tests/baselines/reference/constructSignatureWithAccessibilityModifiersOnParameters2.errors.txt @@ -2,11 +2,11 @@ tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatur tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatureWithAccessibilityModifiersOnParameters2.ts(4,24): error TS2300: Duplicate identifier 'x'. tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatureWithAccessibilityModifiersOnParameters2.ts(4,27): error TS2369: A parameter property is only allowed in a constructor implementation. tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatureWithAccessibilityModifiersOnParameters2.ts(4,35): error TS2300: Duplicate identifier 'y'. -tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatureWithAccessibilityModifiersOnParameters2.ts(5,17): error TS2300: Duplicate identifier 'x'. -tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatureWithAccessibilityModifiersOnParameters2.ts(5,27): error TS2300: Duplicate identifier 'y'. +tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatureWithAccessibilityModifiersOnParameters2.ts(5,24): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatureWithAccessibilityModifiersOnParameters2.ts(5,35): error TS2300: Duplicate identifier 'y'. tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatureWithAccessibilityModifiersOnParameters2.ts(9,17): error TS2369: A parameter property is only allowed in a constructor implementation. tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatureWithAccessibilityModifiersOnParameters2.ts(9,25): error TS2300: Duplicate identifier 'x'. -tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatureWithAccessibilityModifiersOnParameters2.ts(10,17): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatureWithAccessibilityModifiersOnParameters2.ts(10,24): error TS2300: Duplicate identifier 'x'. tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatureWithAccessibilityModifiersOnParameters2.ts(14,17): error TS2369: A parameter property is only allowed in a constructor implementation. tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatureWithAccessibilityModifiersOnParameters2.ts(19,10): error TS2369: A parameter property is only allowed in a constructor implementation. tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatureWithAccessibilityModifiersOnParameters2.ts(20,10): error TS2369: A parameter property is only allowed in a constructor implementation. @@ -32,9 +32,9 @@ tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatur ~ !!! error TS2300: Duplicate identifier 'y'. constructor(public x, private y) { } - ~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier 'x'. - ~~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier 'y'. } @@ -45,7 +45,7 @@ tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatur ~ !!! error TS2300: Duplicate identifier 'x'. constructor(public x) { } - ~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier 'x'. } diff --git a/tests/baselines/reference/constructorOverloads4.errors.txt b/tests/baselines/reference/constructorOverloads4.errors.txt index 31c82ed5237..d2cc5ecd65b 100644 --- a/tests/baselines/reference/constructorOverloads4.errors.txt +++ b/tests/baselines/reference/constructorOverloads4.errors.txt @@ -1,6 +1,6 @@ tests/cases/compiler/constructorOverloads4.ts(2,18): error TS2300: Duplicate identifier 'Function'. -tests/cases/compiler/constructorOverloads4.ts(5,5): error TS2300: Duplicate identifier 'Function'. -tests/cases/compiler/constructorOverloads4.ts(6,5): error TS2300: Duplicate identifier 'Function'. +tests/cases/compiler/constructorOverloads4.ts(5,21): error TS2300: Duplicate identifier 'Function'. +tests/cases/compiler/constructorOverloads4.ts(6,21): error TS2300: Duplicate identifier 'Function'. tests/cases/compiler/constructorOverloads4.ts(10,1): error TS2349: Cannot invoke an expression whose type lacks a call signature. tests/cases/compiler/constructorOverloads4.ts(11,1): error TS2348: Value of type 'typeof Function' is not callable. Did you mean to include 'new'? @@ -13,10 +13,10 @@ tests/cases/compiler/constructorOverloads4.ts(11,1): error TS2348: Value of type constructor(...args: string[]); } export function Function(...args: any[]): any; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~ !!! error TS2300: Duplicate identifier 'Function'. export function Function(...args: string[]): Function; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~ !!! error TS2300: Duplicate identifier 'Function'. } diff --git a/tests/baselines/reference/constructorOverloads7.errors.txt b/tests/baselines/reference/constructorOverloads7.errors.txt index b7ad6d427b8..e3409dbb399 100644 --- a/tests/baselines/reference/constructorOverloads7.errors.txt +++ b/tests/baselines/reference/constructorOverloads7.errors.txt @@ -1,5 +1,5 @@ tests/cases/compiler/constructorOverloads7.ts(1,15): error TS2300: Duplicate identifier 'Point'. -tests/cases/compiler/constructorOverloads7.ts(15,1): error TS2300: Duplicate identifier 'Point'. +tests/cases/compiler/constructorOverloads7.ts(15,10): error TS2300: Duplicate identifier 'Point'. tests/cases/compiler/constructorOverloads7.ts(22,18): error TS2384: Overload signatures must all be ambient or non-ambient. @@ -21,18 +21,13 @@ tests/cases/compiler/constructorOverloads7.ts(22,18): error TS2384: Overload sig // Because Point is a constructor function, this is inferred // to be Point and return type is inferred to be void function Point(x, y) { - ~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~ +!!! error TS2300: Duplicate identifier 'Point'. this.x = x; - ~~~~~~~~~~~~~~~ this.y = y; - ~~~~~~~~~~~~~~~ - return this; - ~~~~~~~~~~~~~~~~ } - ~ -!!! error TS2300: Duplicate identifier 'Point'. declare function EF1(a:number, b:number):number; ~~~ diff --git a/tests/baselines/reference/constructorParameterProperties2.errors.txt b/tests/baselines/reference/constructorParameterProperties2.errors.txt index 8a51ad82682..42df015bc5b 100644 --- a/tests/baselines/reference/constructorParameterProperties2.errors.txt +++ b/tests/baselines/reference/constructorParameterProperties2.errors.txt @@ -1,9 +1,9 @@ tests/cases/conformance/classes/constructorDeclarations/constructorParameters/constructorParameterProperties2.ts(10,5): error TS2300: Duplicate identifier 'y'. -tests/cases/conformance/classes/constructorDeclarations/constructorParameters/constructorParameterProperties2.ts(11,17): error TS2300: Duplicate identifier 'y'. +tests/cases/conformance/classes/constructorDeclarations/constructorParameters/constructorParameterProperties2.ts(11,24): error TS2300: Duplicate identifier 'y'. tests/cases/conformance/classes/constructorDeclarations/constructorParameters/constructorParameterProperties2.ts(18,5): error TS2300: Duplicate identifier 'y'. -tests/cases/conformance/classes/constructorDeclarations/constructorParameters/constructorParameterProperties2.ts(19,17): error TS2300: Duplicate identifier 'y'. +tests/cases/conformance/classes/constructorDeclarations/constructorParameters/constructorParameterProperties2.ts(19,25): error TS2300: Duplicate identifier 'y'. tests/cases/conformance/classes/constructorDeclarations/constructorParameters/constructorParameterProperties2.ts(26,5): error TS2300: Duplicate identifier 'y'. -tests/cases/conformance/classes/constructorDeclarations/constructorParameters/constructorParameterProperties2.ts(27,17): error TS2300: Duplicate identifier 'y'. +tests/cases/conformance/classes/constructorDeclarations/constructorParameters/constructorParameterProperties2.ts(27,27): error TS2300: Duplicate identifier 'y'. ==== tests/cases/conformance/classes/constructorDeclarations/constructorParameters/constructorParameterProperties2.ts (6 errors) ==== @@ -20,7 +20,7 @@ tests/cases/conformance/classes/constructorDeclarations/constructorParameters/co ~ !!! error TS2300: Duplicate identifier 'y'. constructor(public y: number) { } // error - ~~~~~~~~~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier 'y'. } @@ -32,7 +32,7 @@ tests/cases/conformance/classes/constructorDeclarations/constructorParameters/co ~ !!! error TS2300: Duplicate identifier 'y'. constructor(private y: number) { } // error - ~~~~~~~~~~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier 'y'. } @@ -44,7 +44,7 @@ tests/cases/conformance/classes/constructorDeclarations/constructorParameters/co ~ !!! error TS2300: Duplicate identifier 'y'. constructor(protected y: number) { } // error - ~~~~~~~~~~~~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier 'y'. } diff --git a/tests/baselines/reference/contextualTyping.errors.txt b/tests/baselines/reference/contextualTyping.errors.txt index 630da5a903d..ed6e50c1dbd 100644 --- a/tests/baselines/reference/contextualTyping.errors.txt +++ b/tests/baselines/reference/contextualTyping.errors.txt @@ -1,6 +1,6 @@ tests/cases/compiler/contextualTyping.ts(189,18): error TS2384: Overload signatures must all be ambient or non-ambient. tests/cases/compiler/contextualTyping.ts(197,15): error TS2300: Duplicate identifier 'Point'. -tests/cases/compiler/contextualTyping.ts(207,1): error TS2300: Duplicate identifier 'Point'. +tests/cases/compiler/contextualTyping.ts(207,10): error TS2300: Duplicate identifier 'Point'. tests/cases/compiler/contextualTyping.ts(230,5): error TS2322: Type '{}' is not assignable to type 'B':\n Property 'x' is missing in type '{}'. @@ -216,18 +216,13 @@ tests/cases/compiler/contextualTyping.ts(230,5): error TS2322: Type '{}' is not } function Point(x, y) { - ~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~ +!!! error TS2300: Duplicate identifier 'Point'. this.x = x; - ~~~~~~~~~~~~~~~ this.y = y; - ~~~~~~~~~~~~~~~ - return this; - ~~~~~~~~~~~~~~~~ } - ~ -!!! error TS2300: Duplicate identifier 'Point'. Point.origin = new Point(0, 0); diff --git a/tests/baselines/reference/derivedInterfaceIncompatibleWithBaseIndexer.errors.txt b/tests/baselines/reference/derivedInterfaceIncompatibleWithBaseIndexer.errors.txt index dcbde21e670..7212121e106 100644 --- a/tests/baselines/reference/derivedInterfaceIncompatibleWithBaseIndexer.errors.txt +++ b/tests/baselines/reference/derivedInterfaceIncompatibleWithBaseIndexer.errors.txt @@ -54,6 +54,6 @@ tests/cases/conformance/interfaces/interfaceDeclarations/derivedInterfaceIncompa interface Derived5 extends Base { '1': { x: number } // error - ~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier ''1''. } \ No newline at end of file diff --git a/tests/baselines/reference/duplicateClassElements.errors.txt b/tests/baselines/reference/duplicateClassElements.errors.txt index ee9fb937004..004e68314fd 100644 --- a/tests/baselines/reference/duplicateClassElements.errors.txt +++ b/tests/baselines/reference/duplicateClassElements.errors.txt @@ -9,21 +9,21 @@ tests/cases/compiler/duplicateClassElements.ts(32,9): error TS1056: Accessors ar tests/cases/compiler/duplicateClassElements.ts(36,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/compiler/duplicateClassElements.ts(39,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/compiler/duplicateClassElements.ts(2,12): error TS2300: Duplicate identifier 'a'. -tests/cases/compiler/duplicateClassElements.ts(3,5): error TS2300: Duplicate identifier 'a'. -tests/cases/compiler/duplicateClassElements.ts(4,5): error TS2393: Duplicate function implementation. -tests/cases/compiler/duplicateClassElements.ts(6,5): error TS2393: Duplicate function implementation. +tests/cases/compiler/duplicateClassElements.ts(3,12): error TS2300: Duplicate identifier 'a'. +tests/cases/compiler/duplicateClassElements.ts(4,12): error TS2393: Duplicate function implementation. +tests/cases/compiler/duplicateClassElements.ts(6,12): error TS2393: Duplicate function implementation. tests/cases/compiler/duplicateClassElements.ts(8,12): error TS2300: Duplicate identifier 'x'. -tests/cases/compiler/duplicateClassElements.ts(9,5): error TS2300: Duplicate identifier 'x'. -tests/cases/compiler/duplicateClassElements.ts(12,5): error TS2300: Duplicate identifier 'x'. +tests/cases/compiler/duplicateClassElements.ts(9,9): error TS2300: Duplicate identifier 'x'. +tests/cases/compiler/duplicateClassElements.ts(12,9): error TS2300: Duplicate identifier 'x'. tests/cases/compiler/duplicateClassElements.ts(21,12): error TS2300: Duplicate identifier 'z'. -tests/cases/compiler/duplicateClassElements.ts(23,5): error TS2300: Duplicate identifier 'z'. -tests/cases/compiler/duplicateClassElements.ts(26,5): error TS2300: Duplicate identifier 'z'. +tests/cases/compiler/duplicateClassElements.ts(23,9): error TS2300: Duplicate identifier 'z'. +tests/cases/compiler/duplicateClassElements.ts(26,9): error TS2300: Duplicate identifier 'z'. tests/cases/compiler/duplicateClassElements.ts(29,9): error TS2300: Duplicate identifier 'x2'. tests/cases/compiler/duplicateClassElements.ts(32,9): error TS2300: Duplicate identifier 'x2'. -tests/cases/compiler/duplicateClassElements.ts(34,5): error TS2300: Duplicate identifier 'x2'. +tests/cases/compiler/duplicateClassElements.ts(34,12): error TS2300: Duplicate identifier 'x2'. tests/cases/compiler/duplicateClassElements.ts(36,9): error TS2300: Duplicate identifier 'z2'. tests/cases/compiler/duplicateClassElements.ts(39,9): error TS2300: Duplicate identifier 'z2'. -tests/cases/compiler/duplicateClassElements.ts(41,5): error TS2300: Duplicate identifier 'z2'. +tests/cases/compiler/duplicateClassElements.ts(41,12): error TS2300: Duplicate identifier 'z2'. ==== tests/cases/compiler/duplicateClassElements.ts (26 errors) ==== @@ -32,37 +32,32 @@ tests/cases/compiler/duplicateClassElements.ts(41,5): error TS2300: Duplicate id ~ !!! error TS2300: Duplicate identifier 'a'. public a; - ~~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier 'a'. public b() { - ~~~~~~~~~~~~ - } - ~~~~~ + ~ !!! error TS2393: Duplicate function implementation. + } public b() { - ~~~~~~~~~~~~ - } - ~~~~~ + ~ !!! error TS2393: Duplicate function implementation. + } public x; ~ !!! error TS2300: Duplicate identifier 'x'. get x() { ~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~~~~~~~ - return 10; - ~~~~~~~~~~~~~~~~~~ - } - ~~~~~ + ~ !!! error TS2300: Duplicate identifier 'x'. + return 10; + } set x(_x: number) { ~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~~~~~~~~~~~~~~~~~ - } - ~~~~~ + ~ !!! error TS2300: Duplicate identifier 'x'. + } get y() { ~ @@ -81,19 +76,16 @@ tests/cases/compiler/duplicateClassElements.ts(41,5): error TS2300: Duplicate id get z() { ~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~~~~~~~ - return "Hello"; - ~~~~~~~~~~~~~~~~~~~~~~~ - } - ~~~~~ + ~ !!! error TS2300: Duplicate identifier 'z'. + return "Hello"; + } set z(_y: string) { ~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~~~~~~~~~~~~~~~~~ - } - ~~~~~ + ~ !!! error TS2300: Duplicate identifier 'z'. + } get x2() { ~~ @@ -109,7 +101,7 @@ tests/cases/compiler/duplicateClassElements.ts(41,5): error TS2300: Duplicate id !!! error TS2300: Duplicate identifier 'x2'. } public x2; - ~~~~~~~~~~ + ~~ !!! error TS2300: Duplicate identifier 'x2'. get z2() { @@ -126,9 +118,8 @@ tests/cases/compiler/duplicateClassElements.ts(41,5): error TS2300: Duplicate id !!! error TS2300: Duplicate identifier 'z2'. } public z2() { - ~~~~~~~~~~~~~ - } - ~~~~~ + ~~ !!! error TS2300: Duplicate identifier 'z2'. + } } \ No newline at end of file diff --git a/tests/baselines/reference/duplicateIdentifierInCatchBlock.errors.txt b/tests/baselines/reference/duplicateIdentifierInCatchBlock.errors.txt index 7c43bc81289..d8065df27c8 100644 --- a/tests/baselines/reference/duplicateIdentifierInCatchBlock.errors.txt +++ b/tests/baselines/reference/duplicateIdentifierInCatchBlock.errors.txt @@ -1,9 +1,9 @@ tests/cases/compiler/duplicateIdentifierInCatchBlock.ts(1,5): error TS2300: Duplicate identifier 'v'. -tests/cases/compiler/duplicateIdentifierInCatchBlock.ts(3,5): error TS2300: Duplicate identifier 'v'. +tests/cases/compiler/duplicateIdentifierInCatchBlock.ts(3,14): error TS2300: Duplicate identifier 'v'. tests/cases/compiler/duplicateIdentifierInCatchBlock.ts(6,10): error TS2300: Duplicate identifier 'w'. tests/cases/compiler/duplicateIdentifierInCatchBlock.ts(8,9): error TS2300: Duplicate identifier 'w'. tests/cases/compiler/duplicateIdentifierInCatchBlock.ts(12,9): error TS2300: Duplicate identifier 'x'. -tests/cases/compiler/duplicateIdentifierInCatchBlock.ts(13,5): error TS2300: Duplicate identifier 'x'. +tests/cases/compiler/duplicateIdentifierInCatchBlock.ts(13,14): error TS2300: Duplicate identifier 'x'. tests/cases/compiler/duplicateIdentifierInCatchBlock.ts(16,9): error TS2403: Subsequent variable declarations must have the same type. Variable 'p' must be of type 'string', but here has type 'number'. @@ -13,7 +13,7 @@ tests/cases/compiler/duplicateIdentifierInCatchBlock.ts(16,9): error TS2403: Sub !!! error TS2300: Duplicate identifier 'v'. try { } catch (e) { function v() { } - ~~~~~~~~~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier 'v'. } @@ -31,7 +31,7 @@ tests/cases/compiler/duplicateIdentifierInCatchBlock.ts(16,9): error TS2403: Sub ~ !!! error TS2300: Duplicate identifier 'x'. function x() { } // error - ~~~~~~~~~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier 'x'. function e() { } // error var p: string; diff --git a/tests/baselines/reference/duplicateInterfaceMembers1.errors.txt b/tests/baselines/reference/duplicateInterfaceMembers1.errors.txt index 5920064dd99..674d4f601e6 100644 --- a/tests/baselines/reference/duplicateInterfaceMembers1.errors.txt +++ b/tests/baselines/reference/duplicateInterfaceMembers1.errors.txt @@ -8,7 +8,7 @@ tests/cases/compiler/duplicateInterfaceMembers1.ts(3,4): error TS2300: Duplicate ~ !!! error TS2300: Duplicate identifier 'x'. x: number; - ~~~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier 'x'. } \ No newline at end of file diff --git a/tests/baselines/reference/duplicateObjectLiteralProperty.errors.txt b/tests/baselines/reference/duplicateObjectLiteralProperty.errors.txt index 6ea3a636ab8..4c3f6d1eb7e 100644 --- a/tests/baselines/reference/duplicateObjectLiteralProperty.errors.txt +++ b/tests/baselines/reference/duplicateObjectLiteralProperty.errors.txt @@ -10,7 +10,7 @@ tests/cases/compiler/duplicateObjectLiteralProperty.ts(7,9): error TS2300: Dupli tests/cases/compiler/duplicateObjectLiteralProperty.ts(8,9): error TS2300: Duplicate identifier '"c"'. tests/cases/compiler/duplicateObjectLiteralProperty.ts(14,9): error TS2300: Duplicate identifier 'a'. tests/cases/compiler/duplicateObjectLiteralProperty.ts(15,9): error TS2300: Duplicate identifier 'a'. -tests/cases/compiler/duplicateObjectLiteralProperty.ts(16,5): error TS2300: Duplicate identifier 'a'. +tests/cases/compiler/duplicateObjectLiteralProperty.ts(16,9): error TS2300: Duplicate identifier 'a'. ==== tests/cases/compiler/duplicateObjectLiteralProperty.ts (13 errors) ==== @@ -20,24 +20,21 @@ tests/cases/compiler/duplicateObjectLiteralProperty.ts(16,5): error TS2300: Dupl !!! error TS2300: Duplicate identifier 'a'. b: true, // OK a: 56, // Duplicate - ~~~~~ + ~ !!! error TS2300: Duplicate identifier 'a'. \u0061: "ss", // Duplicate - ~~~~~~~~~~~~ + ~~~~~~ !!! error TS2300: Duplicate identifier '\u0061'. a: { - ~~~~ + ~ +!!! error TS2300: Duplicate identifier 'a'. c: 1, - ~~~~~~~~~~~~~ ~ !!! error TS2300: Duplicate identifier 'c'. "c": 56, // Duplicate - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - ~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier '"c"'. } - ~~~~~ -!!! error TS2300: Duplicate identifier 'a'. }; @@ -57,7 +54,7 @@ tests/cases/compiler/duplicateObjectLiteralProperty.ts(16,5): error TS2300: Dupl !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. ~ !!! error TS1118: An object literal cannot have multiple get/set accessors with the same name. - ~~~~~~~~~~~~~~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier 'a'. }; \ No newline at end of file diff --git a/tests/baselines/reference/duplicatePropertiesInStrictMode.errors.txt b/tests/baselines/reference/duplicatePropertiesInStrictMode.errors.txt index 50b29eff93a..6ae8518677d 100644 --- a/tests/baselines/reference/duplicatePropertiesInStrictMode.errors.txt +++ b/tests/baselines/reference/duplicatePropertiesInStrictMode.errors.txt @@ -12,6 +12,6 @@ tests/cases/compiler/duplicatePropertiesInStrictMode.ts(4,3): error TS2300: Dupl x: 2 ~ !!! error TS1117: An object literal cannot have multiple properties with the same name in strict mode. - ~~~~ + ~ !!! error TS2300: Duplicate identifier 'x'. } \ No newline at end of file diff --git a/tests/baselines/reference/duplicatePropertyNames.errors.txt b/tests/baselines/reference/duplicatePropertyNames.errors.txt index 6ed93382aef..108a88d1451 100644 --- a/tests/baselines/reference/duplicatePropertyNames.errors.txt +++ b/tests/baselines/reference/duplicatePropertyNames.errors.txt @@ -28,7 +28,7 @@ tests/cases/conformance/types/members/duplicatePropertyNames.ts(46,5): error TS2 ~~~ !!! error TS2300: Duplicate identifier 'foo'. foo: string; - ~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'foo'. } @@ -42,7 +42,7 @@ tests/cases/conformance/types/members/duplicatePropertyNames.ts(46,5): error TS2 ~~~ !!! error TS2300: Duplicate identifier 'foo'. foo: T; - ~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'foo'. } @@ -51,21 +51,21 @@ tests/cases/conformance/types/members/duplicatePropertyNames.ts(46,5): error TS2 ~~~ !!! error TS2300: Duplicate identifier 'foo'. foo: string; - ~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'foo'. bar(x) { } - ~~~~~~~~~~ + ~~~ !!! error TS2393: Duplicate function implementation. bar(x) { } - ~~~~~~~~~~ + ~~~ !!! error TS2393: Duplicate function implementation. baz = () => { } ~~~ !!! error TS2300: Duplicate identifier 'baz'. baz = () => { } - ~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'baz'. } @@ -74,7 +74,7 @@ tests/cases/conformance/types/members/duplicatePropertyNames.ts(46,5): error TS2 ~~~ !!! error TS2300: Duplicate identifier 'foo'. foo: string; - ~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'foo'. } @@ -83,14 +83,14 @@ tests/cases/conformance/types/members/duplicatePropertyNames.ts(46,5): error TS2 ~~~ !!! error TS2300: Duplicate identifier 'foo'. foo: string; - ~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'foo'. bar: () => {}; ~~~ !!! error TS2300: Duplicate identifier 'bar'. bar: () => {}; - ~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'bar'. } @@ -99,13 +99,13 @@ tests/cases/conformance/types/members/duplicatePropertyNames.ts(46,5): error TS2 ~~~ !!! error TS2300: Duplicate identifier 'foo'. foo: '', - ~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'foo'. bar: () => { }, ~~~ !!! error TS2300: Duplicate identifier 'bar'. bar: () => { } - ~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'bar'. } \ No newline at end of file diff --git a/tests/baselines/reference/duplicateStringNamedProperty1.errors.txt b/tests/baselines/reference/duplicateStringNamedProperty1.errors.txt index 38652e37f10..7d6c5d6bafc 100644 --- a/tests/baselines/reference/duplicateStringNamedProperty1.errors.txt +++ b/tests/baselines/reference/duplicateStringNamedProperty1.errors.txt @@ -8,6 +8,6 @@ tests/cases/compiler/duplicateStringNamedProperty1.ts(3,5): error TS2300: Duplic ~~~~~~~~ !!! error TS2300: Duplicate identifier '"artist"'. artist: string; - ~~~~~~~~~~~~~~~ + ~~~~~~ !!! error TS2300: Duplicate identifier 'artist'. } \ No newline at end of file diff --git a/tests/baselines/reference/es6ClassTest9.errors.txt b/tests/baselines/reference/es6ClassTest9.errors.txt index d8af974a176..ae7d1ba92d5 100644 --- a/tests/baselines/reference/es6ClassTest9.errors.txt +++ b/tests/baselines/reference/es6ClassTest9.errors.txt @@ -1,7 +1,7 @@ tests/cases/compiler/es6ClassTest9.ts(1,18): error TS1005: '{' expected. tests/cases/compiler/es6ClassTest9.ts(1,19): error TS1109: Expression expected. tests/cases/compiler/es6ClassTest9.ts(1,15): error TS2300: Duplicate identifier 'foo'. -tests/cases/compiler/es6ClassTest9.ts(2,1): error TS2300: Duplicate identifier 'foo'. +tests/cases/compiler/es6ClassTest9.ts(2,10): error TS2300: Duplicate identifier 'foo'. ==== tests/cases/compiler/es6ClassTest9.ts (4 errors) ==== @@ -13,6 +13,6 @@ tests/cases/compiler/es6ClassTest9.ts(2,1): error TS2300: Duplicate identifier ' ~~~ !!! error TS2300: Duplicate identifier 'foo'. function foo() {} - ~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'foo'. \ No newline at end of file diff --git a/tests/baselines/reference/exportSameNameFuncVar.errors.txt b/tests/baselines/reference/exportSameNameFuncVar.errors.txt index 4d6d835b13b..a06457e88ae 100644 --- a/tests/baselines/reference/exportSameNameFuncVar.errors.txt +++ b/tests/baselines/reference/exportSameNameFuncVar.errors.txt @@ -1,5 +1,5 @@ tests/cases/compiler/exportSameNameFuncVar.ts(1,12): error TS2300: Duplicate identifier 'a'. -tests/cases/compiler/exportSameNameFuncVar.ts(2,1): error TS2300: Duplicate identifier 'a'. +tests/cases/compiler/exportSameNameFuncVar.ts(2,17): error TS2300: Duplicate identifier 'a'. ==== tests/cases/compiler/exportSameNameFuncVar.ts (2 errors) ==== @@ -7,7 +7,6 @@ tests/cases/compiler/exportSameNameFuncVar.ts(2,1): error TS2300: Duplicate iden ~ !!! error TS2300: Duplicate identifier 'a'. export function a() { - ~~~~~~~~~~~~~~~~~~~~~ - } - ~ -!!! error TS2300: Duplicate identifier 'a'. \ No newline at end of file + ~ +!!! error TS2300: Duplicate identifier 'a'. + } \ No newline at end of file diff --git a/tests/baselines/reference/fieldAndGetterWithSameName.errors.txt b/tests/baselines/reference/fieldAndGetterWithSameName.errors.txt index 34b6ea08e09..dd2374f2447 100644 --- a/tests/baselines/reference/fieldAndGetterWithSameName.errors.txt +++ b/tests/baselines/reference/fieldAndGetterWithSameName.errors.txt @@ -1,6 +1,6 @@ tests/cases/compiler/fieldAndGetterWithSameName.ts(3,7): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/compiler/fieldAndGetterWithSameName.ts(2,5): error TS2300: Duplicate identifier 'x'. -tests/cases/compiler/fieldAndGetterWithSameName.ts(3,3): error TS2300: Duplicate identifier 'x'. +tests/cases/compiler/fieldAndGetterWithSameName.ts(3,7): error TS2300: Duplicate identifier 'x'. ==== tests/cases/compiler/fieldAndGetterWithSameName.ts (3 errors) ==== @@ -11,6 +11,6 @@ tests/cases/compiler/fieldAndGetterWithSameName.ts(3,3): error TS2300: Duplicate get x(): number { return 1; } ~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier 'x'. } \ No newline at end of file diff --git a/tests/baselines/reference/funClodule.errors.txt b/tests/baselines/reference/funClodule.errors.txt index 9a4f6c27224..72a9ed0db51 100644 --- a/tests/baselines/reference/funClodule.errors.txt +++ b/tests/baselines/reference/funClodule.errors.txt @@ -3,7 +3,7 @@ tests/cases/compiler/funClodule.ts(2,16): error TS2300: Duplicate identifier 'fo tests/cases/compiler/funClodule.ts(5,15): error TS2300: Duplicate identifier 'foo'. tests/cases/compiler/funClodule.ts(8,15): error TS2300: Duplicate identifier 'foo2'. tests/cases/compiler/funClodule.ts(9,16): error TS2300: Duplicate identifier 'foo2'. -tests/cases/compiler/funClodule.ts(12,1): error TS2300: Duplicate identifier 'foo2'. +tests/cases/compiler/funClodule.ts(12,18): error TS2300: Duplicate identifier 'foo2'. tests/cases/compiler/funClodule.ts(15,10): error TS2300: Duplicate identifier 'foo3'. tests/cases/compiler/funClodule.ts(16,8): error TS2300: Duplicate identifier 'foo3'. tests/cases/compiler/funClodule.ts(19,7): error TS2300: Duplicate identifier 'foo3'. @@ -32,7 +32,7 @@ tests/cases/compiler/funClodule.ts(19,7): error TS2300: Duplicate identifier 'fo export function x(): any; } declare function foo2(); // Should error - ~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~ !!! error TS2300: Duplicate identifier 'foo2'. diff --git a/tests/baselines/reference/functionAndPropertyNameConflict.errors.txt b/tests/baselines/reference/functionAndPropertyNameConflict.errors.txt index 1e246184fb1..640844064c4 100644 --- a/tests/baselines/reference/functionAndPropertyNameConflict.errors.txt +++ b/tests/baselines/reference/functionAndPropertyNameConflict.errors.txt @@ -1,6 +1,6 @@ tests/cases/compiler/functionAndPropertyNameConflict.ts(3,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/compiler/functionAndPropertyNameConflict.ts(2,12): error TS2300: Duplicate identifier 'aaaaa'. -tests/cases/compiler/functionAndPropertyNameConflict.ts(3,5): error TS2300: Duplicate identifier 'aaaaa'. +tests/cases/compiler/functionAndPropertyNameConflict.ts(3,16): error TS2300: Duplicate identifier 'aaaaa'. ==== tests/cases/compiler/functionAndPropertyNameConflict.ts (3 errors) ==== @@ -11,10 +11,8 @@ tests/cases/compiler/functionAndPropertyNameConflict.ts(3,5): error TS2300: Dupl public get aaaaa() { ~~~~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~~~~~~~~~~~~~~~~~~ - return 1; - ~~~~~~~~~~~~~~~~~ - } - ~~~~~ + ~~~~~ !!! error TS2300: Duplicate identifier 'aaaaa'. + return 1; + } } \ No newline at end of file diff --git a/tests/baselines/reference/functionCall15.errors.txt b/tests/baselines/reference/functionCall15.errors.txt index 3d170c34fa0..4b6acf34e14 100644 --- a/tests/baselines/reference/functionCall15.errors.txt +++ b/tests/baselines/reference/functionCall15.errors.txt @@ -1,10 +1,10 @@ tests/cases/compiler/functionCall15.ts(1,25): error TS2300: Duplicate identifier 'b'. -tests/cases/compiler/functionCall15.ts(1,36): error TS2300: Duplicate identifier 'b'. +tests/cases/compiler/functionCall15.ts(1,39): error TS2300: Duplicate identifier 'b'. ==== tests/cases/compiler/functionCall15.ts (2 errors) ==== function foo(a?:string, b?:number, ...b:number[]){} ~ !!! error TS2300: Duplicate identifier 'b'. - ~~~~~~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier 'b'. \ No newline at end of file diff --git a/tests/baselines/reference/functionNameConflicts.errors.txt b/tests/baselines/reference/functionNameConflicts.errors.txt index cf37103eed5..86fa348d817 100644 --- a/tests/baselines/reference/functionNameConflicts.errors.txt +++ b/tests/baselines/reference/functionNameConflicts.errors.txt @@ -1,11 +1,11 @@ tests/cases/conformance/functions/functionNameConflicts.ts(5,14): error TS2300: Duplicate identifier 'fn1'. tests/cases/conformance/functions/functionNameConflicts.ts(6,9): error TS2300: Duplicate identifier 'fn1'. tests/cases/conformance/functions/functionNameConflicts.ts(8,9): error TS2300: Duplicate identifier 'fn2'. -tests/cases/conformance/functions/functionNameConflicts.ts(9,5): error TS2300: Duplicate identifier 'fn2'. +tests/cases/conformance/functions/functionNameConflicts.ts(9,14): error TS2300: Duplicate identifier 'fn2'. tests/cases/conformance/functions/functionNameConflicts.ts(12,10): error TS2300: Duplicate identifier 'fn3'. tests/cases/conformance/functions/functionNameConflicts.ts(13,5): error TS2300: Duplicate identifier 'fn3'. tests/cases/conformance/functions/functionNameConflicts.ts(16,9): error TS2300: Duplicate identifier 'fn4'. -tests/cases/conformance/functions/functionNameConflicts.ts(17,5): error TS2300: Duplicate identifier 'fn4'. +tests/cases/conformance/functions/functionNameConflicts.ts(17,14): error TS2300: Duplicate identifier 'fn4'. tests/cases/conformance/functions/functionNameConflicts.ts(19,14): error TS2300: Duplicate identifier 'fn5'. tests/cases/conformance/functions/functionNameConflicts.ts(20,9): error TS2300: Duplicate identifier 'fn5'. tests/cases/conformance/functions/functionNameConflicts.ts(24,10): error TS2389: Function implementation name must be 'over'. @@ -27,7 +27,7 @@ tests/cases/conformance/functions/functionNameConflicts.ts(24,10): error TS2389: ~~~ !!! error TS2300: Duplicate identifier 'fn2'. function fn2() { } - ~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'fn2'. } @@ -43,7 +43,7 @@ tests/cases/conformance/functions/functionNameConflicts.ts(24,10): error TS2389: ~~~ !!! error TS2300: Duplicate identifier 'fn4'. function fn4() { } - ~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'fn4'. function fn5() { } diff --git a/tests/baselines/reference/functionWithSameNameAsField.errors.txt b/tests/baselines/reference/functionWithSameNameAsField.errors.txt index 4dd114c8872..168b9191df4 100644 --- a/tests/baselines/reference/functionWithSameNameAsField.errors.txt +++ b/tests/baselines/reference/functionWithSameNameAsField.errors.txt @@ -1,5 +1,5 @@ tests/cases/compiler/functionWithSameNameAsField.ts(2,12): error TS2300: Duplicate identifier 'total'. -tests/cases/compiler/functionWithSameNameAsField.ts(3,5): error TS2300: Duplicate identifier 'total'. +tests/cases/compiler/functionWithSameNameAsField.ts(3,12): error TS2300: Duplicate identifier 'total'. ==== tests/cases/compiler/functionWithSameNameAsField.ts (2 errors) ==== @@ -8,13 +8,10 @@ tests/cases/compiler/functionWithSameNameAsField.ts(3,5): error TS2300: Duplicat ~~~~~ !!! error TS2300: Duplicate identifier 'total'. public total(total: number) { - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - this.total = total; - ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - return this; - ~~~~~~~~~~~~~~~~~~~~ - } - ~~~~~ + ~~~~~ !!! error TS2300: Duplicate identifier 'total'. + this.total = total; + return this; + } } \ No newline at end of file diff --git a/tests/baselines/reference/gettersAndSettersErrors.errors.txt b/tests/baselines/reference/gettersAndSettersErrors.errors.txt index 1cc033cde04..95fb571d9b8 100644 --- a/tests/baselines/reference/gettersAndSettersErrors.errors.txt +++ b/tests/baselines/reference/gettersAndSettersErrors.errors.txt @@ -6,7 +6,7 @@ tests/cases/compiler/gettersAndSettersErrors.ts(11,17): error TS1056: Accessors tests/cases/compiler/gettersAndSettersErrors.ts(12,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/compiler/gettersAndSettersErrors.ts(2,16): error TS2300: Duplicate identifier 'Foo'. tests/cases/compiler/gettersAndSettersErrors.ts(3,16): error TS2300: Duplicate identifier 'Foo'. -tests/cases/compiler/gettersAndSettersErrors.ts(5,5): error TS2300: Duplicate identifier 'Foo'. +tests/cases/compiler/gettersAndSettersErrors.ts(5,12): error TS2300: Duplicate identifier 'Foo'. tests/cases/compiler/gettersAndSettersErrors.ts(11,17): error TS2379: Getter and setter accessors do not agree in visibility. tests/cases/compiler/gettersAndSettersErrors.ts(12,16): error TS2379: Getter and setter accessors do not agree in visibility. @@ -25,7 +25,7 @@ tests/cases/compiler/gettersAndSettersErrors.ts(12,16): error TS2379: Getter and !!! error TS2300: Duplicate identifier 'Foo'. public Foo = 0; // error - duplicate identifier Foo - confirmed - ~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'Foo'. public get Goo(v:string):string {return null;} // error - getters must not have a parameter ~~~ diff --git a/tests/baselines/reference/giant.errors.txt b/tests/baselines/reference/giant.errors.txt index 46e3632a938..5ef1393915d 100644 --- a/tests/baselines/reference/giant.errors.txt +++ b/tests/baselines/reference/giant.errors.txt @@ -146,137 +146,137 @@ tests/cases/compiler/giant.ts(672,25): error TS1036: Statements are not allowed tests/cases/compiler/giant.ts(676,30): error TS1037: A function implementation cannot be declared in an ambient context. tests/cases/compiler/giant.ts(676,33): error TS1036: Statements are not allowed in ambient contexts. tests/cases/compiler/giant.ts(23,12): error TS2300: Duplicate identifier 'pgF'. -tests/cases/compiler/giant.ts(24,5): error TS2300: Duplicate identifier 'pgF'. +tests/cases/compiler/giant.ts(24,16): error TS2300: Duplicate identifier 'pgF'. tests/cases/compiler/giant.ts(24,16): error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. tests/cases/compiler/giant.ts(25,12): error TS2300: Duplicate identifier 'psF'. -tests/cases/compiler/giant.ts(26,5): error TS2300: Duplicate identifier 'psF'. +tests/cases/compiler/giant.ts(26,16): error TS2300: Duplicate identifier 'psF'. tests/cases/compiler/giant.ts(27,13): error TS2300: Duplicate identifier 'rgF'. -tests/cases/compiler/giant.ts(28,5): error TS2300: Duplicate identifier 'rgF'. +tests/cases/compiler/giant.ts(28,17): error TS2300: Duplicate identifier 'rgF'. tests/cases/compiler/giant.ts(28,17): error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. tests/cases/compiler/giant.ts(29,13): error TS2300: Duplicate identifier 'rsF'. -tests/cases/compiler/giant.ts(30,5): error TS2300: Duplicate identifier 'rsF'. +tests/cases/compiler/giant.ts(30,17): error TS2300: Duplicate identifier 'rsF'. tests/cases/compiler/giant.ts(33,12): error TS2300: Duplicate identifier 'tsF'. -tests/cases/compiler/giant.ts(34,5): error TS2300: Duplicate identifier 'tsF'. +tests/cases/compiler/giant.ts(34,16): error TS2300: Duplicate identifier 'tsF'. tests/cases/compiler/giant.ts(35,12): error TS2300: Duplicate identifier 'tgF'. -tests/cases/compiler/giant.ts(36,5): error TS2300: Duplicate identifier 'tgF'. +tests/cases/compiler/giant.ts(36,16): error TS2300: Duplicate identifier 'tgF'. tests/cases/compiler/giant.ts(36,16): error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. tests/cases/compiler/giant.ts(76,5): error TS2386: Overload signatures must all be optional or required. tests/cases/compiler/giant.ts(87,16): error TS2300: Duplicate identifier 'pgF'. -tests/cases/compiler/giant.ts(88,9): error TS2300: Duplicate identifier 'pgF'. +tests/cases/compiler/giant.ts(88,20): error TS2300: Duplicate identifier 'pgF'. tests/cases/compiler/giant.ts(88,20): error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. tests/cases/compiler/giant.ts(89,16): error TS2300: Duplicate identifier 'psF'. -tests/cases/compiler/giant.ts(90,9): error TS2300: Duplicate identifier 'psF'. +tests/cases/compiler/giant.ts(90,20): error TS2300: Duplicate identifier 'psF'. tests/cases/compiler/giant.ts(91,17): error TS2300: Duplicate identifier 'rgF'. -tests/cases/compiler/giant.ts(92,9): error TS2300: Duplicate identifier 'rgF'. +tests/cases/compiler/giant.ts(92,21): error TS2300: Duplicate identifier 'rgF'. tests/cases/compiler/giant.ts(92,21): error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. tests/cases/compiler/giant.ts(93,17): error TS2300: Duplicate identifier 'rsF'. -tests/cases/compiler/giant.ts(94,9): error TS2300: Duplicate identifier 'rsF'. +tests/cases/compiler/giant.ts(94,21): error TS2300: Duplicate identifier 'rsF'. tests/cases/compiler/giant.ts(97,16): error TS2300: Duplicate identifier 'tsF'. -tests/cases/compiler/giant.ts(98,9): error TS2300: Duplicate identifier 'tsF'. +tests/cases/compiler/giant.ts(98,20): error TS2300: Duplicate identifier 'tsF'. tests/cases/compiler/giant.ts(99,16): error TS2300: Duplicate identifier 'tgF'. -tests/cases/compiler/giant.ts(100,9): error TS2300: Duplicate identifier 'tgF'. +tests/cases/compiler/giant.ts(100,20): error TS2300: Duplicate identifier 'tgF'. tests/cases/compiler/giant.ts(100,20): error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. tests/cases/compiler/giant.ts(140,9): error TS2386: Overload signatures must all be optional or required. tests/cases/compiler/giant.ts(166,16): error TS2300: Duplicate identifier 'pgF'. -tests/cases/compiler/giant.ts(167,9): error TS2300: Duplicate identifier 'pgF'. +tests/cases/compiler/giant.ts(167,20): error TS2300: Duplicate identifier 'pgF'. tests/cases/compiler/giant.ts(167,20): error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. tests/cases/compiler/giant.ts(168,16): error TS2300: Duplicate identifier 'psF'. -tests/cases/compiler/giant.ts(169,9): error TS2300: Duplicate identifier 'psF'. +tests/cases/compiler/giant.ts(169,20): error TS2300: Duplicate identifier 'psF'. tests/cases/compiler/giant.ts(170,17): error TS2300: Duplicate identifier 'rgF'. -tests/cases/compiler/giant.ts(171,9): error TS2300: Duplicate identifier 'rgF'. +tests/cases/compiler/giant.ts(171,21): error TS2300: Duplicate identifier 'rgF'. tests/cases/compiler/giant.ts(171,21): error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. tests/cases/compiler/giant.ts(172,17): error TS2300: Duplicate identifier 'rsF'. -tests/cases/compiler/giant.ts(173,9): error TS2300: Duplicate identifier 'rsF'. +tests/cases/compiler/giant.ts(173,21): error TS2300: Duplicate identifier 'rsF'. tests/cases/compiler/giant.ts(176,16): error TS2300: Duplicate identifier 'tsF'. -tests/cases/compiler/giant.ts(177,9): error TS2300: Duplicate identifier 'tsF'. +tests/cases/compiler/giant.ts(177,20): error TS2300: Duplicate identifier 'tsF'. tests/cases/compiler/giant.ts(178,16): error TS2300: Duplicate identifier 'tgF'. -tests/cases/compiler/giant.ts(179,9): error TS2300: Duplicate identifier 'tgF'. +tests/cases/compiler/giant.ts(179,20): error TS2300: Duplicate identifier 'tgF'. tests/cases/compiler/giant.ts(179,20): error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. tests/cases/compiler/giant.ts(219,9): error TS2386: Overload signatures must all be optional or required. tests/cases/compiler/giant.ts(245,16): error TS2300: Duplicate identifier 'pgF'. -tests/cases/compiler/giant.ts(246,9): error TS2300: Duplicate identifier 'pgF'. +tests/cases/compiler/giant.ts(246,20): error TS2300: Duplicate identifier 'pgF'. tests/cases/compiler/giant.ts(247,16): error TS2300: Duplicate identifier 'psF'. -tests/cases/compiler/giant.ts(248,9): error TS2300: Duplicate identifier 'psF'. +tests/cases/compiler/giant.ts(248,20): error TS2300: Duplicate identifier 'psF'. tests/cases/compiler/giant.ts(249,17): error TS2300: Duplicate identifier 'rgF'. -tests/cases/compiler/giant.ts(250,9): error TS2300: Duplicate identifier 'rgF'. +tests/cases/compiler/giant.ts(250,21): error TS2300: Duplicate identifier 'rgF'. tests/cases/compiler/giant.ts(251,17): error TS2300: Duplicate identifier 'rsF'. -tests/cases/compiler/giant.ts(252,9): error TS2300: Duplicate identifier 'rsF'. +tests/cases/compiler/giant.ts(252,21): error TS2300: Duplicate identifier 'rsF'. tests/cases/compiler/giant.ts(255,16): error TS2300: Duplicate identifier 'tsF'. -tests/cases/compiler/giant.ts(256,9): error TS2300: Duplicate identifier 'tsF'. +tests/cases/compiler/giant.ts(256,20): error TS2300: Duplicate identifier 'tsF'. tests/cases/compiler/giant.ts(257,16): error TS2300: Duplicate identifier 'tgF'. -tests/cases/compiler/giant.ts(258,9): error TS2300: Duplicate identifier 'tgF'. +tests/cases/compiler/giant.ts(258,20): error TS2300: Duplicate identifier 'tgF'. tests/cases/compiler/giant.ts(281,12): error TS2300: Duplicate identifier 'pgF'. -tests/cases/compiler/giant.ts(282,5): error TS2300: Duplicate identifier 'pgF'. +tests/cases/compiler/giant.ts(282,16): error TS2300: Duplicate identifier 'pgF'. tests/cases/compiler/giant.ts(282,16): error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. tests/cases/compiler/giant.ts(283,12): error TS2300: Duplicate identifier 'psF'. -tests/cases/compiler/giant.ts(284,5): error TS2300: Duplicate identifier 'psF'. +tests/cases/compiler/giant.ts(284,16): error TS2300: Duplicate identifier 'psF'. tests/cases/compiler/giant.ts(285,13): error TS2300: Duplicate identifier 'rgF'. -tests/cases/compiler/giant.ts(286,5): error TS2300: Duplicate identifier 'rgF'. +tests/cases/compiler/giant.ts(286,17): error TS2300: Duplicate identifier 'rgF'. tests/cases/compiler/giant.ts(286,17): error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. tests/cases/compiler/giant.ts(287,13): error TS2300: Duplicate identifier 'rsF'. -tests/cases/compiler/giant.ts(288,5): error TS2300: Duplicate identifier 'rsF'. +tests/cases/compiler/giant.ts(288,17): error TS2300: Duplicate identifier 'rsF'. tests/cases/compiler/giant.ts(291,12): error TS2300: Duplicate identifier 'tsF'. -tests/cases/compiler/giant.ts(292,5): error TS2300: Duplicate identifier 'tsF'. +tests/cases/compiler/giant.ts(292,16): error TS2300: Duplicate identifier 'tsF'. tests/cases/compiler/giant.ts(293,12): error TS2300: Duplicate identifier 'tgF'. -tests/cases/compiler/giant.ts(294,5): error TS2300: Duplicate identifier 'tgF'. +tests/cases/compiler/giant.ts(294,16): error TS2300: Duplicate identifier 'tgF'. tests/cases/compiler/giant.ts(294,16): error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. tests/cases/compiler/giant.ts(334,5): error TS2386: Overload signatures must all be optional or required. tests/cases/compiler/giant.ts(345,16): error TS2300: Duplicate identifier 'pgF'. -tests/cases/compiler/giant.ts(346,9): error TS2300: Duplicate identifier 'pgF'. +tests/cases/compiler/giant.ts(346,20): error TS2300: Duplicate identifier 'pgF'. tests/cases/compiler/giant.ts(346,20): error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. tests/cases/compiler/giant.ts(347,16): error TS2300: Duplicate identifier 'psF'. -tests/cases/compiler/giant.ts(348,9): error TS2300: Duplicate identifier 'psF'. +tests/cases/compiler/giant.ts(348,20): error TS2300: Duplicate identifier 'psF'. tests/cases/compiler/giant.ts(349,17): error TS2300: Duplicate identifier 'rgF'. -tests/cases/compiler/giant.ts(350,9): error TS2300: Duplicate identifier 'rgF'. +tests/cases/compiler/giant.ts(350,21): error TS2300: Duplicate identifier 'rgF'. tests/cases/compiler/giant.ts(350,21): error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. tests/cases/compiler/giant.ts(351,17): error TS2300: Duplicate identifier 'rsF'. -tests/cases/compiler/giant.ts(352,9): error TS2300: Duplicate identifier 'rsF'. +tests/cases/compiler/giant.ts(352,21): error TS2300: Duplicate identifier 'rsF'. tests/cases/compiler/giant.ts(355,16): error TS2300: Duplicate identifier 'tsF'. -tests/cases/compiler/giant.ts(356,9): error TS2300: Duplicate identifier 'tsF'. +tests/cases/compiler/giant.ts(356,20): error TS2300: Duplicate identifier 'tsF'. tests/cases/compiler/giant.ts(357,16): error TS2300: Duplicate identifier 'tgF'. -tests/cases/compiler/giant.ts(358,9): error TS2300: Duplicate identifier 'tgF'. +tests/cases/compiler/giant.ts(358,20): error TS2300: Duplicate identifier 'tgF'. tests/cases/compiler/giant.ts(358,20): error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. tests/cases/compiler/giant.ts(398,9): error TS2386: Overload signatures must all be optional or required. tests/cases/compiler/giant.ts(424,16): error TS2300: Duplicate identifier 'pgF'. -tests/cases/compiler/giant.ts(425,9): error TS2300: Duplicate identifier 'pgF'. +tests/cases/compiler/giant.ts(425,20): error TS2300: Duplicate identifier 'pgF'. tests/cases/compiler/giant.ts(425,20): error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. tests/cases/compiler/giant.ts(426,16): error TS2300: Duplicate identifier 'psF'. -tests/cases/compiler/giant.ts(427,9): error TS2300: Duplicate identifier 'psF'. +tests/cases/compiler/giant.ts(427,20): error TS2300: Duplicate identifier 'psF'. tests/cases/compiler/giant.ts(428,17): error TS2300: Duplicate identifier 'rgF'. -tests/cases/compiler/giant.ts(429,9): error TS2300: Duplicate identifier 'rgF'. +tests/cases/compiler/giant.ts(429,21): error TS2300: Duplicate identifier 'rgF'. tests/cases/compiler/giant.ts(429,21): error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. tests/cases/compiler/giant.ts(430,17): error TS2300: Duplicate identifier 'rsF'. -tests/cases/compiler/giant.ts(431,9): error TS2300: Duplicate identifier 'rsF'. +tests/cases/compiler/giant.ts(431,21): error TS2300: Duplicate identifier 'rsF'. tests/cases/compiler/giant.ts(434,16): error TS2300: Duplicate identifier 'tsF'. -tests/cases/compiler/giant.ts(435,9): error TS2300: Duplicate identifier 'tsF'. +tests/cases/compiler/giant.ts(435,20): error TS2300: Duplicate identifier 'tsF'. tests/cases/compiler/giant.ts(436,16): error TS2300: Duplicate identifier 'tgF'. -tests/cases/compiler/giant.ts(437,9): error TS2300: Duplicate identifier 'tgF'. +tests/cases/compiler/giant.ts(437,20): error TS2300: Duplicate identifier 'tgF'. tests/cases/compiler/giant.ts(437,20): error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. tests/cases/compiler/giant.ts(477,9): error TS2386: Overload signatures must all be optional or required. tests/cases/compiler/giant.ts(503,16): error TS2300: Duplicate identifier 'pgF'. -tests/cases/compiler/giant.ts(504,9): error TS2300: Duplicate identifier 'pgF'. +tests/cases/compiler/giant.ts(504,20): error TS2300: Duplicate identifier 'pgF'. tests/cases/compiler/giant.ts(505,16): error TS2300: Duplicate identifier 'psF'. -tests/cases/compiler/giant.ts(506,9): error TS2300: Duplicate identifier 'psF'. +tests/cases/compiler/giant.ts(506,20): error TS2300: Duplicate identifier 'psF'. tests/cases/compiler/giant.ts(507,17): error TS2300: Duplicate identifier 'rgF'. -tests/cases/compiler/giant.ts(508,9): error TS2300: Duplicate identifier 'rgF'. +tests/cases/compiler/giant.ts(508,21): error TS2300: Duplicate identifier 'rgF'. tests/cases/compiler/giant.ts(509,17): error TS2300: Duplicate identifier 'rsF'. -tests/cases/compiler/giant.ts(510,9): error TS2300: Duplicate identifier 'rsF'. +tests/cases/compiler/giant.ts(510,21): error TS2300: Duplicate identifier 'rsF'. tests/cases/compiler/giant.ts(513,16): error TS2300: Duplicate identifier 'tsF'. -tests/cases/compiler/giant.ts(514,9): error TS2300: Duplicate identifier 'tsF'. +tests/cases/compiler/giant.ts(514,20): error TS2300: Duplicate identifier 'tsF'. tests/cases/compiler/giant.ts(515,16): error TS2300: Duplicate identifier 'tgF'. -tests/cases/compiler/giant.ts(516,9): error TS2300: Duplicate identifier 'tgF'. +tests/cases/compiler/giant.ts(516,20): error TS2300: Duplicate identifier 'tgF'. tests/cases/compiler/giant.ts(539,12): error TS2300: Duplicate identifier 'pgF'. -tests/cases/compiler/giant.ts(540,5): error TS2300: Duplicate identifier 'pgF'. +tests/cases/compiler/giant.ts(540,16): error TS2300: Duplicate identifier 'pgF'. tests/cases/compiler/giant.ts(541,12): error TS2300: Duplicate identifier 'psF'. -tests/cases/compiler/giant.ts(542,5): error TS2300: Duplicate identifier 'psF'. +tests/cases/compiler/giant.ts(542,16): error TS2300: Duplicate identifier 'psF'. tests/cases/compiler/giant.ts(543,13): error TS2300: Duplicate identifier 'rgF'. -tests/cases/compiler/giant.ts(544,5): error TS2300: Duplicate identifier 'rgF'. +tests/cases/compiler/giant.ts(544,17): error TS2300: Duplicate identifier 'rgF'. tests/cases/compiler/giant.ts(545,13): error TS2300: Duplicate identifier 'rsF'. -tests/cases/compiler/giant.ts(546,5): error TS2300: Duplicate identifier 'rsF'. +tests/cases/compiler/giant.ts(546,17): error TS2300: Duplicate identifier 'rsF'. tests/cases/compiler/giant.ts(549,12): error TS2300: Duplicate identifier 'tsF'. -tests/cases/compiler/giant.ts(550,5): error TS2300: Duplicate identifier 'tsF'. +tests/cases/compiler/giant.ts(550,16): error TS2300: Duplicate identifier 'tsF'. tests/cases/compiler/giant.ts(551,12): error TS2300: Duplicate identifier 'tgF'. -tests/cases/compiler/giant.ts(552,5): error TS2300: Duplicate identifier 'tgF'. +tests/cases/compiler/giant.ts(552,16): error TS2300: Duplicate identifier 'tgF'. tests/cases/compiler/giant.ts(602,9): error TS2386: Overload signatures must all be optional or required. tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all be optional or required. @@ -308,7 +308,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all ~~~ !!! error TS2300: Duplicate identifier 'pgF'. public get pgF() - ~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'pgF'. ~~~ !!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. @@ -318,7 +318,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all ~~~ !!! error TS2300: Duplicate identifier 'psF'. public set psF(param:any) - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'psF'. private rgF() { } ~~~~~~~ @@ -326,7 +326,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all ~~~ !!! error TS2300: Duplicate identifier 'rgF'. private get rgF() - ~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'rgF'. ~~~ !!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. @@ -336,7 +336,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all ~~~ !!! error TS2300: Duplicate identifier 'rsF'. private set rsF(param:any) - ~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'rsF'. static tV; ~~~~~~ @@ -346,7 +346,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all ~~~ !!! error TS2300: Duplicate identifier 'tsF'. static set tsF(param:any) - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'tsF'. static tgF() { } ~~~~~~ @@ -354,7 +354,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all ~~~ !!! error TS2300: Duplicate identifier 'tgF'. static get tgF() - ~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'tgF'. ~~~ !!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. @@ -422,7 +422,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all ~~~ !!! error TS2300: Duplicate identifier 'pgF'. public get pgF() - ~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'pgF'. ~~~ !!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. @@ -432,7 +432,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all ~~~ !!! error TS2300: Duplicate identifier 'psF'. public set psF(param:any) - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'psF'. private rgF() { } ~~~~~~~ @@ -440,7 +440,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all ~~~ !!! error TS2300: Duplicate identifier 'rgF'. private get rgF() - ~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'rgF'. ~~~ !!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. @@ -450,7 +450,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all ~~~ !!! error TS2300: Duplicate identifier 'rsF'. private set rsF(param:any) - ~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'rsF'. static tV; ~~~~~~ @@ -460,7 +460,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all ~~~ !!! error TS2300: Duplicate identifier 'tsF'. static set tsF(param:any) - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'tsF'. static tgF() { } ~~~~~~ @@ -468,7 +468,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all ~~~ !!! error TS2300: Duplicate identifier 'tgF'. static get tgF() - ~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'tgF'. ~~~ !!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. @@ -553,7 +553,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all ~~~ !!! error TS2300: Duplicate identifier 'pgF'. public get pgF() - ~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'pgF'. ~~~ !!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. @@ -563,7 +563,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all ~~~ !!! error TS2300: Duplicate identifier 'psF'. public set psF(param:any) - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'psF'. private rgF() { } ~~~~~~~ @@ -571,7 +571,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all ~~~ !!! error TS2300: Duplicate identifier 'rgF'. private get rgF() - ~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'rgF'. ~~~ !!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. @@ -581,7 +581,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all ~~~ !!! error TS2300: Duplicate identifier 'rsF'. private set rsF(param:any) - ~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'rsF'. static tV; ~~~~~~ @@ -591,7 +591,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all ~~~ !!! error TS2300: Duplicate identifier 'tsF'. static set tsF(param:any) - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'tsF'. static tgF() { } ~~~~~~ @@ -599,7 +599,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all ~~~ !!! error TS2300: Duplicate identifier 'tgF'. static get tgF() - ~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'tgF'. ~~~ !!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. @@ -696,7 +696,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all public get pgF() ~~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'pgF'. public psF(param:any) { } ~ @@ -706,7 +706,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all public set psF(param:any) ~~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'psF'. private rgF() { } ~ @@ -716,7 +716,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all private get rgF() ~~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'rgF'. private rsF(param:any) { } ~ @@ -726,7 +726,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all private set rsF(param:any) ~~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'rsF'. static tV; static tF() { } @@ -740,7 +740,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all static set tsF(param:any) ~~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'tsF'. static tgF() { } ~ @@ -750,7 +750,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all static get tgF() ~~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'tgF'. } export declare module eaM { @@ -786,7 +786,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all ~~~ !!! error TS2300: Duplicate identifier 'pgF'. public get pgF() - ~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'pgF'. ~~~ !!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. @@ -796,7 +796,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all ~~~ !!! error TS2300: Duplicate identifier 'psF'. public set psF(param:any) - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'psF'. private rgF() { } ~~~~~~~ @@ -804,7 +804,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all ~~~ !!! error TS2300: Duplicate identifier 'rgF'. private get rgF() - ~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'rgF'. ~~~ !!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. @@ -814,7 +814,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all ~~~ !!! error TS2300: Duplicate identifier 'rsF'. private set rsF(param:any) - ~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'rsF'. static tV; ~~~~~~ @@ -824,7 +824,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all ~~~ !!! error TS2300: Duplicate identifier 'tsF'. static set tsF(param:any) - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'tsF'. static tgF() { } ~~~~~~ @@ -832,7 +832,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all ~~~ !!! error TS2300: Duplicate identifier 'tgF'. static get tgF() - ~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'tgF'. ~~~ !!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. @@ -900,7 +900,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all ~~~ !!! error TS2300: Duplicate identifier 'pgF'. public get pgF() - ~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'pgF'. ~~~ !!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. @@ -910,7 +910,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all ~~~ !!! error TS2300: Duplicate identifier 'psF'. public set psF(param:any) - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'psF'. private rgF() { } ~~~~~~~ @@ -918,7 +918,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all ~~~ !!! error TS2300: Duplicate identifier 'rgF'. private get rgF() - ~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'rgF'. ~~~ !!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. @@ -928,7 +928,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all ~~~ !!! error TS2300: Duplicate identifier 'rsF'. private set rsF(param:any) - ~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'rsF'. static tV; ~~~~~~ @@ -938,7 +938,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all ~~~ !!! error TS2300: Duplicate identifier 'tsF'. static set tsF(param:any) - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'tsF'. static tgF() { } ~~~~~~ @@ -946,7 +946,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all ~~~ !!! error TS2300: Duplicate identifier 'tgF'. static get tgF() - ~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'tgF'. ~~~ !!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. @@ -1031,7 +1031,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all ~~~ !!! error TS2300: Duplicate identifier 'pgF'. public get pgF() - ~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'pgF'. ~~~ !!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. @@ -1041,7 +1041,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all ~~~ !!! error TS2300: Duplicate identifier 'psF'. public set psF(param:any) - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'psF'. private rgF() { } ~~~~~~~ @@ -1049,7 +1049,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all ~~~ !!! error TS2300: Duplicate identifier 'rgF'. private get rgF() - ~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'rgF'. ~~~ !!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. @@ -1059,7 +1059,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all ~~~ !!! error TS2300: Duplicate identifier 'rsF'. private set rsF(param:any) - ~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'rsF'. static tV; ~~~~~~ @@ -1069,7 +1069,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all ~~~ !!! error TS2300: Duplicate identifier 'tsF'. static set tsF(param:any) - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'tsF'. static tgF() { } ~~~~~~ @@ -1077,7 +1077,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all ~~~ !!! error TS2300: Duplicate identifier 'tgF'. static get tgF() - ~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'tgF'. ~~~ !!! error TS2378: A 'get' accessor must return a value or consist of a single 'throw' statement. @@ -1174,7 +1174,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all public get pgF() ~~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'pgF'. public psF(param:any) { } ~ @@ -1184,7 +1184,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all public set psF(param:any) ~~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'psF'. private rgF() { } ~ @@ -1194,7 +1194,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all private get rgF() ~~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'rgF'. private rsF(param:any) { } ~ @@ -1204,7 +1204,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all private set rsF(param:any) ~~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'rsF'. static tV; static tF() { } @@ -1218,7 +1218,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all static set tsF(param:any) ~~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'tsF'. static tgF() { } ~ @@ -1228,7 +1228,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all static get tgF() ~~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'tgF'. } export declare module eaM { @@ -1276,7 +1276,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all public get pgF() ~~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'pgF'. public psF(param:any) { } ~ @@ -1286,7 +1286,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all public set psF(param:any) ~~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'psF'. private rgF() { } ~ @@ -1296,7 +1296,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all private get rgF() ~~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'rgF'. private rsF(param:any) { } ~ @@ -1306,7 +1306,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all private set rsF(param:any) ~~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'rsF'. static tV; static tF() { } @@ -1320,7 +1320,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all static set tsF(param:any) ~~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'tsF'. static tgF() { } ~ @@ -1330,7 +1330,7 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all static get tgF() ~~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'tgF'. } export declare module eaM { diff --git a/tests/baselines/reference/importAndVariableDeclarationConflict3.errors.txt b/tests/baselines/reference/importAndVariableDeclarationConflict3.errors.txt index 3ddd9f7c409..39567a11753 100644 --- a/tests/baselines/reference/importAndVariableDeclarationConflict3.errors.txt +++ b/tests/baselines/reference/importAndVariableDeclarationConflict3.errors.txt @@ -1,5 +1,5 @@ tests/cases/compiler/importAndVariableDeclarationConflict3.ts(5,8): error TS2300: Duplicate identifier 'x'. -tests/cases/compiler/importAndVariableDeclarationConflict3.ts(6,1): error TS2300: Duplicate identifier 'x'. +tests/cases/compiler/importAndVariableDeclarationConflict3.ts(6,8): error TS2300: Duplicate identifier 'x'. ==== tests/cases/compiler/importAndVariableDeclarationConflict3.ts (2 errors) ==== @@ -11,6 +11,6 @@ tests/cases/compiler/importAndVariableDeclarationConflict3.ts(6,1): error TS2300 ~ !!! error TS2300: Duplicate identifier 'x'. import x = m.m; - ~~~~~~~~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier 'x'. \ No newline at end of file diff --git a/tests/baselines/reference/interfaceDeclaration1.errors.txt b/tests/baselines/reference/interfaceDeclaration1.errors.txt index 43cafecf578..3d7fcb86784 100644 --- a/tests/baselines/reference/interfaceDeclaration1.errors.txt +++ b/tests/baselines/reference/interfaceDeclaration1.errors.txt @@ -16,7 +16,7 @@ tests/cases/compiler/interfaceDeclaration1.ts(52,11): error TS2320: Interface 'i ~~~~ !!! error TS2300: Duplicate identifier 'item'. item:number; - ~~~~~~~~~~~~ + ~~~~ !!! error TS2300: Duplicate identifier 'item'. } @@ -25,7 +25,7 @@ tests/cases/compiler/interfaceDeclaration1.ts(52,11): error TS2320: Interface 'i ~~~~ !!! error TS2300: Duplicate identifier 'item'. item:number; - ~~~~~~~~~~~~ + ~~~~ !!! error TS2300: Duplicate identifier 'item'. } diff --git a/tests/baselines/reference/lastPropertyInLiteralWins.errors.txt b/tests/baselines/reference/lastPropertyInLiteralWins.errors.txt index a6bccf35f39..39e5cfaa834 100644 --- a/tests/baselines/reference/lastPropertyInLiteralWins.errors.txt +++ b/tests/baselines/reference/lastPropertyInLiteralWins.errors.txt @@ -21,7 +21,7 @@ tests/cases/compiler/lastPropertyInLiteralWins.ts(14,5): error TS2300: Duplicate ~~~~~ !!! error TS2300: Duplicate identifier 'thunk'. thunk: (num: number) => {} - ~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~ !!! error TS2300: Duplicate identifier 'thunk'. }); @@ -33,7 +33,7 @@ tests/cases/compiler/lastPropertyInLiteralWins.ts(14,5): error TS2300: Duplicate !!! error TS2300: Duplicate identifier 'thunk'. thunk: (str: string) => {} ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - ~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~ !!! error TS2300: Duplicate identifier 'thunk'. }); ~ diff --git a/tests/baselines/reference/memberOverride.errors.txt b/tests/baselines/reference/memberOverride.errors.txt index 896275c70b1..c63803f5aa1 100644 --- a/tests/baselines/reference/memberOverride.errors.txt +++ b/tests/baselines/reference/memberOverride.errors.txt @@ -11,7 +11,7 @@ tests/cases/compiler/memberOverride.ts(8,5): error TS2323: Type 'string' is not ~ !!! error TS2300: Duplicate identifier 'a'. a: 5 - ~~~~ + ~ !!! error TS2300: Duplicate identifier 'a'. } diff --git a/tests/baselines/reference/mergedInterfacesWithConflictingPropertyNames.errors.txt b/tests/baselines/reference/mergedInterfacesWithConflictingPropertyNames.errors.txt index 5ea03a4970e..0b5984dcc6d 100644 --- a/tests/baselines/reference/mergedInterfacesWithConflictingPropertyNames.errors.txt +++ b/tests/baselines/reference/mergedInterfacesWithConflictingPropertyNames.errors.txt @@ -15,7 +15,7 @@ tests/cases/conformance/interfaces/declarationMerging/mergedInterfacesWithConfli interface A { x: number; - ~~~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier 'x'. } @@ -28,7 +28,7 @@ tests/cases/conformance/interfaces/declarationMerging/mergedInterfacesWithConfli interface A { x: number; // error - ~~~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier 'x'. } } @@ -56,7 +56,7 @@ tests/cases/conformance/interfaces/declarationMerging/mergedInterfacesWithConfli module M3 { export interface A { x: number; // error - ~~~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier 'x'. } } \ No newline at end of file diff --git a/tests/baselines/reference/mergedInterfacesWithConflictingPropertyNames2.errors.txt b/tests/baselines/reference/mergedInterfacesWithConflictingPropertyNames2.errors.txt index cdf41dfc91d..d0a50f4ae69 100644 --- a/tests/baselines/reference/mergedInterfacesWithConflictingPropertyNames2.errors.txt +++ b/tests/baselines/reference/mergedInterfacesWithConflictingPropertyNames2.errors.txt @@ -15,7 +15,7 @@ tests/cases/conformance/interfaces/declarationMerging/mergedInterfacesWithConfli interface A { x: string; // error - ~~~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier 'x'. } @@ -28,7 +28,7 @@ tests/cases/conformance/interfaces/declarationMerging/mergedInterfacesWithConfli interface A { x: T; // error - ~~~~~ + ~ !!! error TS2300: Duplicate identifier 'x'. } } @@ -56,7 +56,7 @@ tests/cases/conformance/interfaces/declarationMerging/mergedInterfacesWithConfli module M3 { export interface A { x: T; // error - ~~~~~ + ~ !!! error TS2300: Duplicate identifier 'x'. } } \ No newline at end of file diff --git a/tests/baselines/reference/nameCollisions.errors.txt b/tests/baselines/reference/nameCollisions.errors.txt index ac4bd770c1d..baa7c6cbfd5 100644 --- a/tests/baselines/reference/nameCollisions.errors.txt +++ b/tests/baselines/reference/nameCollisions.errors.txt @@ -4,11 +4,11 @@ tests/cases/compiler/nameCollisions.ts(10,12): error TS2300: Duplicate identifie tests/cases/compiler/nameCollisions.ts(13,9): error TS2300: Duplicate identifier 'z'. tests/cases/compiler/nameCollisions.ts(15,12): error TS2434: A module declaration cannot be located prior to a class or function with which it is merged tests/cases/compiler/nameCollisions.ts(24,9): error TS2300: Duplicate identifier 'f'. -tests/cases/compiler/nameCollisions.ts(25,5): error TS2300: Duplicate identifier 'f'. +tests/cases/compiler/nameCollisions.ts(25,14): error TS2300: Duplicate identifier 'f'. tests/cases/compiler/nameCollisions.ts(27,14): error TS2300: Duplicate identifier 'f2'. tests/cases/compiler/nameCollisions.ts(28,9): error TS2300: Duplicate identifier 'f2'. tests/cases/compiler/nameCollisions.ts(33,11): error TS2300: Duplicate identifier 'C'. -tests/cases/compiler/nameCollisions.ts(34,5): error TS2300: Duplicate identifier 'C'. +tests/cases/compiler/nameCollisions.ts(34,14): error TS2300: Duplicate identifier 'C'. tests/cases/compiler/nameCollisions.ts(36,14): error TS2300: Duplicate identifier 'C2'. tests/cases/compiler/nameCollisions.ts(37,11): error TS2300: Duplicate identifier 'C2'. tests/cases/compiler/nameCollisions.ts(42,11): error TS2300: Duplicate identifier 'cli'. @@ -55,7 +55,7 @@ tests/cases/compiler/nameCollisions.ts(46,11): error TS2300: Duplicate identifie ~ !!! error TS2300: Duplicate identifier 'f'. function f() { } //error - ~~~~~~~~~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier 'f'. function f2() { } @@ -72,7 +72,7 @@ tests/cases/compiler/nameCollisions.ts(46,11): error TS2300: Duplicate identifie ~ !!! error TS2300: Duplicate identifier 'C'. function C() { } // error - ~~~~~~~~~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier 'C'. function C2() { } diff --git a/tests/baselines/reference/numericClassMembers1.errors.txt b/tests/baselines/reference/numericClassMembers1.errors.txt index 7d17e7cdcbe..eb99f26bb4c 100644 --- a/tests/baselines/reference/numericClassMembers1.errors.txt +++ b/tests/baselines/reference/numericClassMembers1.errors.txt @@ -10,7 +10,7 @@ tests/cases/compiler/numericClassMembers1.ts(8,2): error TS2300: Duplicate ident ~ !!! error TS2300: Duplicate identifier '0'. 0.0 = 2; - ~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier '0.0'. } @@ -19,7 +19,7 @@ tests/cases/compiler/numericClassMembers1.ts(8,2): error TS2300: Duplicate ident ~~~ !!! error TS2300: Duplicate identifier '0.0'. '0' = 2; - ~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier ''0''. } diff --git a/tests/baselines/reference/numericNamedPropertyDuplicates.errors.txt b/tests/baselines/reference/numericNamedPropertyDuplicates.errors.txt index 663cf45fcff..c5890d7c98c 100644 --- a/tests/baselines/reference/numericNamedPropertyDuplicates.errors.txt +++ b/tests/baselines/reference/numericNamedPropertyDuplicates.errors.txt @@ -2,7 +2,7 @@ tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericNamedP tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericNamedPropertyDuplicates.ts(2,5): error TS2300: Duplicate identifier '1'. tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericNamedPropertyDuplicates.ts(3,5): error TS2300: Duplicate identifier '1.0'. tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericNamedPropertyDuplicates.ts(4,12): error TS2300: Duplicate identifier '2'. -tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericNamedPropertyDuplicates.ts(5,5): error TS2300: Duplicate identifier '2'. +tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericNamedPropertyDuplicates.ts(5,12): error TS2300: Duplicate identifier '2'. tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericNamedPropertyDuplicates.ts(9,5): error TS2300: Duplicate identifier '2'. tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericNamedPropertyDuplicates.ts(10,5): error TS2300: Duplicate identifier '2.'. tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericNamedPropertyDuplicates.ts(14,5): error TS2300: Duplicate identifier '1'. @@ -17,13 +17,13 @@ tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericNamedP ~ !!! error TS2300: Duplicate identifier '1'. 1.0: number; - ~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier '1.0'. static 2: number; ~ !!! error TS2300: Duplicate identifier '2'. static 2: number; - ~~~~~~~~~~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier '2'. } @@ -32,7 +32,7 @@ tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericNamedP ~ !!! error TS2300: Duplicate identifier '2'. 2.: number; - ~~~~~~~~~~~ + ~~ !!! error TS2300: Duplicate identifier '2.'. } @@ -41,7 +41,7 @@ tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericNamedP ~ !!! error TS2300: Duplicate identifier '1'. 1: number; - ~~~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier '1'. } @@ -52,6 +52,6 @@ tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericNamedP 2: 1 ~ !!! error TS1005: ',' expected. - ~~~~ + ~ !!! error TS2300: Duplicate identifier '2'. } \ No newline at end of file diff --git a/tests/baselines/reference/numericStringNamedPropertyEquivalence.errors.txt b/tests/baselines/reference/numericStringNamedPropertyEquivalence.errors.txt index a5353efe9ad..4ebef99bd07 100644 --- a/tests/baselines/reference/numericStringNamedPropertyEquivalence.errors.txt +++ b/tests/baselines/reference/numericStringNamedPropertyEquivalence.errors.txt @@ -17,7 +17,7 @@ tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericString !!! error TS2300: Duplicate identifier '"1"'. "1.0": number; // not a duplicate 1.0: number; - ~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier '1.0'. } @@ -27,7 +27,7 @@ tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericString !!! error TS2300: Duplicate identifier '"1"'. "1.": number; // not a duplicate 1: number; - ~~~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier '1'. } @@ -36,7 +36,7 @@ tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericString ~~~ !!! error TS2300: Duplicate identifier '"1"'. 1.0: string; - ~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier '1.0'. } @@ -45,6 +45,6 @@ tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericString ~~~ !!! error TS2300: Duplicate identifier '"0"'. 0: '' - ~~~~~ + ~ !!! error TS2300: Duplicate identifier '0'. } \ No newline at end of file diff --git a/tests/baselines/reference/objectLiteralErrors.errors.txt b/tests/baselines/reference/objectLiteralErrors.errors.txt index a301ae56b5f..1fc92ac5a48 100644 --- a/tests/baselines/reference/objectLiteralErrors.errors.txt +++ b/tests/baselines/reference/objectLiteralErrors.errors.txt @@ -55,41 +55,41 @@ tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(19,22) tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(20,13): error TS2300: Duplicate identifier 'a'. tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(20,25): error TS2300: Duplicate identifier 'a'. tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(23,12): error TS2300: Duplicate identifier 'a'. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(23,18): error TS2300: Duplicate identifier 'a'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(23,22): error TS2300: Duplicate identifier 'a'. tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(24,12): error TS2300: Duplicate identifier 'a'. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(24,19): error TS2300: Duplicate identifier 'a'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(24,23): error TS2300: Duplicate identifier 'a'. tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(25,12): error TS2300: Duplicate identifier 'a'. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(25,18): error TS2300: Duplicate identifier 'a'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(25,22): error TS2300: Duplicate identifier 'a'. tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(26,12): error TS2300: Duplicate identifier 'a'. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(26,21): error TS2300: Duplicate identifier 'a'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(26,25): error TS2300: Duplicate identifier 'a'. tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(27,12): error TS2300: Duplicate identifier 'a'. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(27,19): error TS2300: Duplicate identifier 'a'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(27,23): error TS2300: Duplicate identifier 'a'. tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(28,12): error TS2300: Duplicate identifier 'a'. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(28,18): error TS2300: Duplicate identifier ''a''. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(28,22): error TS2300: Duplicate identifier ''a''. tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(29,12): error TS2300: Duplicate identifier ''a''. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(29,20): error TS2300: Duplicate identifier 'a'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(29,24): error TS2300: Duplicate identifier 'a'. tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(30,12): error TS2300: Duplicate identifier ''a''. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(30,20): error TS2300: Duplicate identifier '"a"'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(30,24): error TS2300: Duplicate identifier '"a"'. tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(31,12): error TS2300: Duplicate identifier ''a''. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(31,20): error TS2300: Duplicate identifier ''a''. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(31,24): error TS2300: Duplicate identifier ''a''. tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(32,13): error TS2300: Duplicate identifier '"a"'. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(32,21): error TS2300: Duplicate identifier ''a''. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(32,25): error TS2300: Duplicate identifier ''a''. tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(33,13): error TS2300: Duplicate identifier '1.0'. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(33,21): error TS2300: Duplicate identifier ''1''. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(33,25): error TS2300: Duplicate identifier ''1''. tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(34,13): error TS2300: Duplicate identifier '0'. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(34,19): error TS2300: Duplicate identifier '0'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(34,23): error TS2300: Duplicate identifier '0'. tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(35,13): error TS2300: Duplicate identifier '0'. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(35,19): error TS2300: Duplicate identifier '0'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(35,23): error TS2300: Duplicate identifier '0'. tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(36,13): error TS2300: Duplicate identifier '0'. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(36,19): error TS2300: Duplicate identifier '0x0'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(36,23): error TS2300: Duplicate identifier '0x0'. tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(37,13): error TS2300: Duplicate identifier '0'. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(37,19): error TS2300: Duplicate identifier '000'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(37,23): error TS2300: Duplicate identifier '000'. tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(38,13): error TS2300: Duplicate identifier '"100"'. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(38,23): error TS2300: Duplicate identifier '1e2'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(38,27): error TS2300: Duplicate identifier '1e2'. tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(39,13): error TS2300: Duplicate identifier '0x20'. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(39,22): error TS2300: Duplicate identifier '3.2e1'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(39,26): error TS2300: Duplicate identifier '3.2e1'. tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(40,13): error TS2300: Duplicate identifier 'a'. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(40,42): error TS2300: Duplicate identifier 'a'. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(40,46): error TS2300: Duplicate identifier 'a'. tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(43,12): error TS2380: 'get' and 'set' accessor must have the same type. tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(43,43): error TS2380: 'get' and 'set' accessor must have the same type. tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(44,29): error TS2323: Type 'number' is not assignable to type 'string'. @@ -103,94 +103,94 @@ tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(45,51) var e1 = { a: 0, a: 0 }; ~ !!! error TS2300: Duplicate identifier 'a'. - ~~~~ + ~ !!! error TS2300: Duplicate identifier 'a'. var e2 = { a: '', a: '' }; ~ !!! error TS2300: Duplicate identifier 'a'. - ~~~~~ + ~ !!! error TS2300: Duplicate identifier 'a'. var e3 = { a: 0, a: '' }; ~ !!! error TS2300: Duplicate identifier 'a'. - ~~~~~ + ~ !!! error TS2300: Duplicate identifier 'a'. var e4 = { a: true, a: false }; ~ !!! error TS2300: Duplicate identifier 'a'. - ~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier 'a'. var e5 = { a: {}, a: {} }; ~ !!! error TS2300: Duplicate identifier 'a'. - ~~~~~ + ~ !!! error TS2300: Duplicate identifier 'a'. var e6 = { a: 0, 'a': 0 }; ~ !!! error TS2300: Duplicate identifier 'a'. - ~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier ''a''. var e7 = { 'a': 0, a: 0 }; ~~~ !!! error TS2300: Duplicate identifier ''a''. - ~~~~ + ~ !!! error TS2300: Duplicate identifier 'a'. var e8 = { 'a': 0, "a": 0 }; ~~~ !!! error TS2300: Duplicate identifier ''a''. - ~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier '"a"'. var e9 = { 'a': 0, 'a': 0 }; ~~~ !!! error TS2300: Duplicate identifier ''a''. - ~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier ''a''. var e10 = { "a": 0, 'a': 0 }; ~~~ !!! error TS2300: Duplicate identifier '"a"'. - ~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier ''a''. var e11 = { 1.0: 0, '1': 0 }; ~~~ !!! error TS2300: Duplicate identifier '1.0'. - ~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier ''1''. var e12 = { 0: 0, 0: 0 }; ~ !!! error TS2300: Duplicate identifier '0'. - ~~~~ + ~ !!! error TS2300: Duplicate identifier '0'. var e13 = { 0: 0, 0: 0 }; ~ !!! error TS2300: Duplicate identifier '0'. - ~~~~ + ~ !!! error TS2300: Duplicate identifier '0'. var e14 = { 0: 0, 0x0: 0 }; ~ !!! error TS2300: Duplicate identifier '0'. - ~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier '0x0'. var e14 = { 0: 0, 000: 0 }; ~~~ !!! error TS1085: Octal literals are not available when targeting ECMAScript 5 and higher. ~ !!! error TS2300: Duplicate identifier '0'. - ~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier '000'. var e15 = { "100": 0, 1e2: 0 }; ~~~~~ !!! error TS2300: Duplicate identifier '"100"'. - ~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier '1e2'. var e16 = { 0x20: 0, 3.2e1: 0 }; ~~~~ !!! error TS2300: Duplicate identifier '0x20'. - ~~~~~~~~ + ~~~~~ !!! error TS2300: Duplicate identifier '3.2e1'. var e17 = { a: 0, b: 1, a: 0 }; ~ !!! error TS2300: Duplicate identifier 'a'. - ~~~~ + ~ !!! error TS2300: Duplicate identifier 'a'. // Accessor and property with the same name @@ -199,98 +199,98 @@ tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(45,51) !!! error TS1119: An object literal cannot have property and accessor with the same name. ~ !!! error TS2300: Duplicate identifier 'a'. - ~~~~~~~~~~~~~~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier 'a'. var f2 = { a: '', get a() { return ''; } }; ~ !!! error TS1119: An object literal cannot have property and accessor with the same name. ~ !!! error TS2300: Duplicate identifier 'a'. - ~~~~~~~~~~~~~~~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier 'a'. var f3 = { a: 0, get a() { return ''; } }; ~ !!! error TS1119: An object literal cannot have property and accessor with the same name. ~ !!! error TS2300: Duplicate identifier 'a'. - ~~~~~~~~~~~~~~~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier 'a'. var f4 = { a: true, get a() { return false; } }; ~ !!! error TS1119: An object literal cannot have property and accessor with the same name. ~ !!! error TS2300: Duplicate identifier 'a'. - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier 'a'. var f5 = { a: {}, get a() { return {}; } }; ~ !!! error TS1119: An object literal cannot have property and accessor with the same name. ~ !!! error TS2300: Duplicate identifier 'a'. - ~~~~~~~~~~~~~~~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier 'a'. var f6 = { a: 0, get 'a'() { return 0; } }; ~~~ !!! error TS1119: An object literal cannot have property and accessor with the same name. ~ !!! error TS2300: Duplicate identifier 'a'. - ~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier ''a''. var f7 = { 'a': 0, get a() { return 0; } }; ~ !!! error TS1119: An object literal cannot have property and accessor with the same name. ~~~ !!! error TS2300: Duplicate identifier ''a''. - ~~~~~~~~~~~~~~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier 'a'. var f8 = { 'a': 0, get "a"() { return 0; } }; ~~~ !!! error TS1119: An object literal cannot have property and accessor with the same name. ~~~ !!! error TS2300: Duplicate identifier ''a''. - ~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier '"a"'. var f9 = { 'a': 0, get 'a'() { return 0; } }; ~~~ !!! error TS1119: An object literal cannot have property and accessor with the same name. ~~~ !!! error TS2300: Duplicate identifier ''a''. - ~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier ''a''. var f10 = { "a": 0, get 'a'() { return 0; } }; ~~~ !!! error TS1119: An object literal cannot have property and accessor with the same name. ~~~ !!! error TS2300: Duplicate identifier '"a"'. - ~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier ''a''. var f11 = { 1.0: 0, get '1'() { return 0; } }; ~~~ !!! error TS1119: An object literal cannot have property and accessor with the same name. ~~~ !!! error TS2300: Duplicate identifier '1.0'. - ~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier ''1''. var f12 = { 0: 0, get 0() { return 0; } }; ~ !!! error TS1119: An object literal cannot have property and accessor with the same name. ~ !!! error TS2300: Duplicate identifier '0'. - ~~~~~~~~~~~~~~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier '0'. var f13 = { 0: 0, get 0() { return 0; } }; ~ !!! error TS1119: An object literal cannot have property and accessor with the same name. ~ !!! error TS2300: Duplicate identifier '0'. - ~~~~~~~~~~~~~~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier '0'. var f14 = { 0: 0, get 0x0() { return 0; } }; ~~~ !!! error TS1119: An object literal cannot have property and accessor with the same name. ~ !!! error TS2300: Duplicate identifier '0'. - ~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier '0x0'. var f14 = { 0: 0, get 000() { return 0; } }; ~~~ @@ -299,28 +299,28 @@ tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(45,51) !!! error TS1119: An object literal cannot have property and accessor with the same name. ~ !!! error TS2300: Duplicate identifier '0'. - ~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier '000'. var f15 = { "100": 0, get 1e2() { return 0; } }; ~~~ !!! error TS1119: An object literal cannot have property and accessor with the same name. ~~~~~ !!! error TS2300: Duplicate identifier '"100"'. - ~~~~~~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier '1e2'. var f16 = { 0x20: 0, get 3.2e1() { return 0; } }; ~~~~~ !!! error TS1119: An object literal cannot have property and accessor with the same name. ~~~~ !!! error TS2300: Duplicate identifier '0x20'. - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~ !!! error TS2300: Duplicate identifier '3.2e1'. var f17 = { a: 0, get b() { return 1; }, get a() { return 0; } }; ~ !!! error TS1119: An object literal cannot have property and accessor with the same name. ~ !!! error TS2300: Duplicate identifier 'a'. - ~~~~~~~~~~~~~~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier 'a'. // Get and set accessor with mismatched type annotations diff --git a/tests/baselines/reference/objectTypeWithDuplicateNumericProperty.errors.txt b/tests/baselines/reference/objectTypeWithDuplicateNumericProperty.errors.txt index 018dae20a79..c89cd04d1ee 100644 --- a/tests/baselines/reference/objectTypeWithDuplicateNumericProperty.errors.txt +++ b/tests/baselines/reference/objectTypeWithDuplicateNumericProperty.errors.txt @@ -25,13 +25,13 @@ tests/cases/conformance/types/members/objectTypeWithDuplicateNumericProperty.ts( ~ !!! error TS2300: Duplicate identifier '1'. 1.0; - ~~~~ + ~~~ !!! error TS2300: Duplicate identifier '1.0'. 1.; - ~~~ + ~~ !!! error TS2300: Duplicate identifier '1.'. 1.00; - ~~~~~ + ~~~~ !!! error TS2300: Duplicate identifier '1.00'. } @@ -40,13 +40,13 @@ tests/cases/conformance/types/members/objectTypeWithDuplicateNumericProperty.ts( ~ !!! error TS2300: Duplicate identifier '1'. 1.0; - ~~~~ + ~~~ !!! error TS2300: Duplicate identifier '1.0'. 1.; - ~~~ + ~~ !!! error TS2300: Duplicate identifier '1.'. 1.00; - ~~~~~ + ~~~~ !!! error TS2300: Duplicate identifier '1.00'. } @@ -55,13 +55,13 @@ tests/cases/conformance/types/members/objectTypeWithDuplicateNumericProperty.ts( ~ !!! error TS2300: Duplicate identifier '1'. 1.0; - ~~~~ + ~~~ !!! error TS2300: Duplicate identifier '1.0'. 1.; - ~~~ + ~~ !!! error TS2300: Duplicate identifier '1.'. 1.00; - ~~~~~ + ~~~~ !!! error TS2300: Duplicate identifier '1.00'. } @@ -70,13 +70,13 @@ tests/cases/conformance/types/members/objectTypeWithDuplicateNumericProperty.ts( ~ !!! error TS2300: Duplicate identifier '1'. 1.0: 1, - ~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier '1.0'. 1.: 1, - ~~~~~ + ~~ !!! error TS2300: Duplicate identifier '1.'. 1.00: 1 - ~~~~~~~ + ~~~~ !!! error TS2300: Duplicate identifier '1.00'. } diff --git a/tests/baselines/reference/optionalParamArgsTest.errors.txt b/tests/baselines/reference/optionalParamArgsTest.errors.txt index 8f02c603eb7..a8ce88e494e 100644 --- a/tests/baselines/reference/optionalParamArgsTest.errors.txt +++ b/tests/baselines/reference/optionalParamArgsTest.errors.txt @@ -1,6 +1,6 @@ tests/cases/compiler/optionalParamArgsTest.ts(35,47): error TS1016: A required parameter cannot follow an optional parameter. -tests/cases/compiler/optionalParamArgsTest.ts(31,5): error TS2393: Duplicate function implementation. -tests/cases/compiler/optionalParamArgsTest.ts(35,5): error TS2393: Duplicate function implementation. +tests/cases/compiler/optionalParamArgsTest.ts(31,12): error TS2393: Duplicate function implementation. +tests/cases/compiler/optionalParamArgsTest.ts(35,12): error TS2393: Duplicate function implementation. tests/cases/compiler/optionalParamArgsTest.ts(99,1): error TS2346: Supplied parameters do not match any signature of call target. tests/cases/compiler/optionalParamArgsTest.ts(100,1): error TS2346: Supplied parameters do not match any signature of call target. tests/cases/compiler/optionalParamArgsTest.ts(101,1): error TS2346: Supplied parameters do not match any signature of call target. @@ -55,7 +55,7 @@ tests/cases/compiler/optionalParamArgsTest.ts(118,1): error TS2346: Supplied par public C1M4(C1M4A1:number,C1M4A2?:number) { return C1M4A1 + C1M4A2; } public C1M5(C1M5A1:number,C1M5A2:number=0,C1M5A3?:number) { return C1M5A1 + C1M5A2; } - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~ !!! error TS2393: Duplicate function implementation. // Negative test @@ -63,7 +63,7 @@ tests/cases/compiler/optionalParamArgsTest.ts(118,1): error TS2346: Supplied par public C1M5(C1M5A1:number,C1M5A2:number=0,C1M5A3:number) { return C1M5A1 + C1M5A2; } ~~~~~~ !!! error TS1016: A required parameter cannot follow an optional parameter. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~ !!! error TS2393: Duplicate function implementation. } diff --git a/tests/baselines/reference/optionalPropertiesSyntax.errors.txt b/tests/baselines/reference/optionalPropertiesSyntax.errors.txt index 41197ac64e1..66c1cae2a7e 100644 --- a/tests/baselines/reference/optionalPropertiesSyntax.errors.txt +++ b/tests/baselines/reference/optionalPropertiesSyntax.errors.txt @@ -55,7 +55,7 @@ tests/cases/compiler/optionalPropertiesSyntax.ts(34,5): error TS2375: Duplicate ~~~~ !!! error TS2300: Duplicate identifier 'prop'. prop?: any; - ~~~~~~~~~~~ + ~~~~ !!! error TS2300: Duplicate identifier 'prop'. prop2?: any; } diff --git a/tests/baselines/reference/overloadsWithinClasses.errors.txt b/tests/baselines/reference/overloadsWithinClasses.errors.txt index 39e43d26707..02872861a4b 100644 --- a/tests/baselines/reference/overloadsWithinClasses.errors.txt +++ b/tests/baselines/reference/overloadsWithinClasses.errors.txt @@ -1,16 +1,16 @@ -tests/cases/compiler/overloadsWithinClasses.ts(3,5): error TS2393: Duplicate function implementation. -tests/cases/compiler/overloadsWithinClasses.ts(5,5): error TS2393: Duplicate function implementation. +tests/cases/compiler/overloadsWithinClasses.ts(3,12): error TS2393: Duplicate function implementation. +tests/cases/compiler/overloadsWithinClasses.ts(5,12): error TS2393: Duplicate function implementation. ==== tests/cases/compiler/overloadsWithinClasses.ts (2 errors) ==== class foo { static fnOverload( ) {} - ~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~ !!! error TS2393: Duplicate function implementation. static fnOverload(foo: string){ } // error - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~~ !!! error TS2393: Duplicate function implementation. } diff --git a/tests/baselines/reference/parameterPropertyInConstructor2.errors.txt b/tests/baselines/reference/parameterPropertyInConstructor2.errors.txt index 78a4706ec68..5885385a20c 100644 --- a/tests/baselines/reference/parameterPropertyInConstructor2.errors.txt +++ b/tests/baselines/reference/parameterPropertyInConstructor2.errors.txt @@ -1,7 +1,7 @@ tests/cases/compiler/parameterPropertyInConstructor2.ts(3,5): error TS2394: Overload signature is not compatible with function implementation. tests/cases/compiler/parameterPropertyInConstructor2.ts(3,17): error TS2369: A parameter property is only allowed in a constructor implementation. tests/cases/compiler/parameterPropertyInConstructor2.ts(3,24): error TS2300: Duplicate identifier 'names'. -tests/cases/compiler/parameterPropertyInConstructor2.ts(4,17): error TS2300: Duplicate identifier 'names'. +tests/cases/compiler/parameterPropertyInConstructor2.ts(4,24): error TS2300: Duplicate identifier 'names'. ==== tests/cases/compiler/parameterPropertyInConstructor2.ts (4 errors) ==== @@ -15,7 +15,7 @@ tests/cases/compiler/parameterPropertyInConstructor2.ts(4,17): error TS2300: Dup ~~~~~ !!! error TS2300: Duplicate identifier 'names'. constructor(public names: string, public ages: number) { - ~~~~~~~~~~~~~~~~~~~~ + ~~~~~ !!! error TS2300: Duplicate identifier 'names'. } } diff --git a/tests/baselines/reference/parserErrorRecovery_ModuleElement2.errors.txt b/tests/baselines/reference/parserErrorRecovery_ModuleElement2.errors.txt index ab0327a716f..eb4d6dc3471 100644 --- a/tests/baselines/reference/parserErrorRecovery_ModuleElement2.errors.txt +++ b/tests/baselines/reference/parserErrorRecovery_ModuleElement2.errors.txt @@ -1,21 +1,19 @@ tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ModuleElements/parserErrorRecovery_ModuleElement2.ts(7,1): error TS1128: Declaration or statement expected. tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ModuleElements/parserErrorRecovery_ModuleElement2.ts(8,1): error TS1128: Declaration or statement expected. -tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ModuleElements/parserErrorRecovery_ModuleElement2.ts(1,1): error TS2393: Duplicate function implementation. -tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ModuleElements/parserErrorRecovery_ModuleElement2.ts(4,1): error TS2393: Duplicate function implementation. +tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ModuleElements/parserErrorRecovery_ModuleElement2.ts(1,10): error TS2393: Duplicate function implementation. +tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ModuleElements/parserErrorRecovery_ModuleElement2.ts(4,10): error TS2393: Duplicate function implementation. ==== tests/cases/conformance/parser/ecmascript5/ErrorRecovery/ModuleElements/parserErrorRecovery_ModuleElement2.ts (4 errors) ==== function foo() { - ~~~~~~~~~~~~~~~~ - } - ~ + ~~~ !!! error TS2393: Duplicate function implementation. + } function foo() { - ~~~~~~~~~~~~~~~~ - } - ~ + ~~~ !!! error TS2393: Duplicate function implementation. + } ) ~ diff --git a/tests/baselines/reference/parserMemberFunctionDeclarationAmbiguities1.errors.txt b/tests/baselines/reference/parserMemberFunctionDeclarationAmbiguities1.errors.txt index 69db4ac7b57..e0d49bb8470 100644 --- a/tests/baselines/reference/parserMemberFunctionDeclarationAmbiguities1.errors.txt +++ b/tests/baselines/reference/parserMemberFunctionDeclarationAmbiguities1.errors.txt @@ -1,40 +1,40 @@ tests/cases/conformance/parser/ecmascript5/MemberFunctionDeclarations/parserMemberFunctionDeclarationAmbiguities1.ts(2,3): error TS2393: Duplicate function implementation. tests/cases/conformance/parser/ecmascript5/MemberFunctionDeclarations/parserMemberFunctionDeclarationAmbiguities1.ts(3,3): error TS2393: Duplicate function implementation. -tests/cases/conformance/parser/ecmascript5/MemberFunctionDeclarations/parserMemberFunctionDeclarationAmbiguities1.ts(5,3): error TS2393: Duplicate function implementation. -tests/cases/conformance/parser/ecmascript5/MemberFunctionDeclarations/parserMemberFunctionDeclarationAmbiguities1.ts(6,3): error TS2393: Duplicate function implementation. -tests/cases/conformance/parser/ecmascript5/MemberFunctionDeclarations/parserMemberFunctionDeclarationAmbiguities1.ts(8,3): error TS2393: Duplicate function implementation. -tests/cases/conformance/parser/ecmascript5/MemberFunctionDeclarations/parserMemberFunctionDeclarationAmbiguities1.ts(9,3): error TS2393: Duplicate function implementation. -tests/cases/conformance/parser/ecmascript5/MemberFunctionDeclarations/parserMemberFunctionDeclarationAmbiguities1.ts(11,3): error TS2393: Duplicate function implementation. -tests/cases/conformance/parser/ecmascript5/MemberFunctionDeclarations/parserMemberFunctionDeclarationAmbiguities1.ts(12,3): error TS2393: Duplicate function implementation. +tests/cases/conformance/parser/ecmascript5/MemberFunctionDeclarations/parserMemberFunctionDeclarationAmbiguities1.ts(5,10): error TS2393: Duplicate function implementation. +tests/cases/conformance/parser/ecmascript5/MemberFunctionDeclarations/parserMemberFunctionDeclarationAmbiguities1.ts(6,10): error TS2393: Duplicate function implementation. +tests/cases/conformance/parser/ecmascript5/MemberFunctionDeclarations/parserMemberFunctionDeclarationAmbiguities1.ts(8,17): error TS2393: Duplicate function implementation. +tests/cases/conformance/parser/ecmascript5/MemberFunctionDeclarations/parserMemberFunctionDeclarationAmbiguities1.ts(9,17): error TS2393: Duplicate function implementation. +tests/cases/conformance/parser/ecmascript5/MemberFunctionDeclarations/parserMemberFunctionDeclarationAmbiguities1.ts(11,10): error TS2393: Duplicate function implementation. +tests/cases/conformance/parser/ecmascript5/MemberFunctionDeclarations/parserMemberFunctionDeclarationAmbiguities1.ts(12,10): error TS2393: Duplicate function implementation. ==== tests/cases/conformance/parser/ecmascript5/MemberFunctionDeclarations/parserMemberFunctionDeclarationAmbiguities1.ts (8 errors) ==== class C { public() {} - ~~~~~~~~~~~ + ~~~~~~ !!! error TS2393: Duplicate function implementation. static() {} - ~~~~~~~~~~~ + ~~~~~~ !!! error TS2393: Duplicate function implementation. public public() {} - ~~~~~~~~~~~~~~~~~~ + ~~~~~~ !!! error TS2393: Duplicate function implementation. public static() {} - ~~~~~~~~~~~~~~~~~~ + ~~~~~~ !!! error TS2393: Duplicate function implementation. public static public() {} - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~ !!! error TS2393: Duplicate function implementation. public static static() {} - ~~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~ !!! error TS2393: Duplicate function implementation. static public() {} - ~~~~~~~~~~~~~~~~~~ + ~~~~~~ !!! error TS2393: Duplicate function implementation. static static() {} - ~~~~~~~~~~~~~~~~~~ + ~~~~~~ !!! error TS2393: Duplicate function implementation. } \ No newline at end of file diff --git a/tests/baselines/reference/propertyAndAccessorWithSameName.errors.txt b/tests/baselines/reference/propertyAndAccessorWithSameName.errors.txt index a08a924ff75..9ef943cc07a 100644 --- a/tests/baselines/reference/propertyAndAccessorWithSameName.errors.txt +++ b/tests/baselines/reference/propertyAndAccessorWithSameName.errors.txt @@ -3,12 +3,12 @@ tests/cases/conformance/classes/propertyMemberDeclarations/propertyAndAccessorWi tests/cases/conformance/classes/propertyMemberDeclarations/propertyAndAccessorWithSameName.ts(15,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/conformance/classes/propertyMemberDeclarations/propertyAndAccessorWithSameName.ts(18,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/conformance/classes/propertyMemberDeclarations/propertyAndAccessorWithSameName.ts(2,5): error TS2300: Duplicate identifier 'x'. -tests/cases/conformance/classes/propertyMemberDeclarations/propertyAndAccessorWithSameName.ts(3,5): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/classes/propertyMemberDeclarations/propertyAndAccessorWithSameName.ts(3,9): error TS2300: Duplicate identifier 'x'. tests/cases/conformance/classes/propertyMemberDeclarations/propertyAndAccessorWithSameName.ts(9,5): error TS2300: Duplicate identifier 'x'. -tests/cases/conformance/classes/propertyMemberDeclarations/propertyAndAccessorWithSameName.ts(10,5): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/classes/propertyMemberDeclarations/propertyAndAccessorWithSameName.ts(10,9): error TS2300: Duplicate identifier 'x'. tests/cases/conformance/classes/propertyMemberDeclarations/propertyAndAccessorWithSameName.ts(14,13): error TS2300: Duplicate identifier 'x'. -tests/cases/conformance/classes/propertyMemberDeclarations/propertyAndAccessorWithSameName.ts(15,5): error TS2300: Duplicate identifier 'x'. -tests/cases/conformance/classes/propertyMemberDeclarations/propertyAndAccessorWithSameName.ts(18,5): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/classes/propertyMemberDeclarations/propertyAndAccessorWithSameName.ts(15,9): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/classes/propertyMemberDeclarations/propertyAndAccessorWithSameName.ts(18,9): error TS2300: Duplicate identifier 'x'. ==== tests/cases/conformance/classes/propertyMemberDeclarations/propertyAndAccessorWithSameName.ts (11 errors) ==== @@ -19,12 +19,10 @@ tests/cases/conformance/classes/propertyMemberDeclarations/propertyAndAccessorWi get x() { // error ~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~~~~~~~~~~~~~~~~ - return 1; - ~~~~~~~~~~~~~~~~~ - } - ~~~~~ + ~ !!! error TS2300: Duplicate identifier 'x'. + return 1; + } } class D { @@ -34,7 +32,7 @@ tests/cases/conformance/classes/propertyMemberDeclarations/propertyAndAccessorWi set x(v) { } // error ~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~~~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier 'x'. } @@ -45,15 +43,13 @@ tests/cases/conformance/classes/propertyMemberDeclarations/propertyAndAccessorWi get x() { // error ~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~~~~~~~~~~~~~~~~ - return 1; - ~~~~~~~~~~~~~~~~~ - } - ~~~~~ + ~ !!! error TS2300: Duplicate identifier 'x'. + return 1; + } set x(v) { } ~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~~~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier 'x'. } \ No newline at end of file diff --git a/tests/baselines/reference/propertyAndFunctionWithSameName.errors.txt b/tests/baselines/reference/propertyAndFunctionWithSameName.errors.txt index 58b51c9c39e..84428a2dfb1 100644 --- a/tests/baselines/reference/propertyAndFunctionWithSameName.errors.txt +++ b/tests/baselines/reference/propertyAndFunctionWithSameName.errors.txt @@ -10,12 +10,10 @@ tests/cases/conformance/classes/propertyMemberDeclarations/propertyAndFunctionWi ~ !!! error TS2300: Duplicate identifier 'x'. x() { // error - ~~~~~~~~~~~~~~ - return 1; - ~~~~~~~~~~~~~~~~~ - } - ~~~~~ + ~ !!! error TS2300: Duplicate identifier 'x'. + return 1; + } } class D { @@ -23,6 +21,6 @@ tests/cases/conformance/classes/propertyMemberDeclarations/propertyAndFunctionWi ~ !!! error TS2300: Duplicate identifier 'x'. x(v) { } // error - ~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier 'x'. } \ No newline at end of file diff --git a/tests/baselines/reference/propertyNamedPrototype.errors.txt b/tests/baselines/reference/propertyNamedPrototype.errors.txt index 38f8279daed..6ce4054fb43 100644 --- a/tests/baselines/reference/propertyNamedPrototype.errors.txt +++ b/tests/baselines/reference/propertyNamedPrototype.errors.txt @@ -1,10 +1,10 @@ -tests/cases/conformance/classes/propertyMemberDeclarations/propertyNamedPrototype.ts(3,5): error TS2300: Duplicate identifier 'prototype'. +tests/cases/conformance/classes/propertyMemberDeclarations/propertyNamedPrototype.ts(3,12): error TS2300: Duplicate identifier 'prototype'. ==== tests/cases/conformance/classes/propertyMemberDeclarations/propertyNamedPrototype.ts (1 errors) ==== class C { prototype: number; // ok static prototype: C; // error - ~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~ !!! error TS2300: Duplicate identifier 'prototype'. } \ No newline at end of file diff --git a/tests/baselines/reference/propertySignatures.errors.txt b/tests/baselines/reference/propertySignatures.errors.txt index c6bc759dce8..fd415334e74 100644 --- a/tests/baselines/reference/propertySignatures.errors.txt +++ b/tests/baselines/reference/propertySignatures.errors.txt @@ -8,7 +8,7 @@ tests/cases/compiler/propertySignatures.ts(14,12): error TS2304: Cannot find nam var foo1: { a:string; a: string; }; ~ !!! error TS2300: Duplicate identifier 'a'. - ~~~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier 'a'. // Should be OK diff --git a/tests/baselines/reference/reassignStaticProp.errors.txt b/tests/baselines/reference/reassignStaticProp.errors.txt index e1d845c20e4..bbcfe826787 100644 --- a/tests/baselines/reference/reassignStaticProp.errors.txt +++ b/tests/baselines/reference/reassignStaticProp.errors.txt @@ -1,5 +1,5 @@ tests/cases/compiler/reassignStaticProp.ts(3,12): error TS2300: Duplicate identifier 'bar'. -tests/cases/compiler/reassignStaticProp.ts(5,5): error TS2300: Duplicate identifier 'bar'. +tests/cases/compiler/reassignStaticProp.ts(5,12): error TS2300: Duplicate identifier 'bar'. ==== tests/cases/compiler/reassignStaticProp.ts (2 errors) ==== @@ -10,7 +10,7 @@ tests/cases/compiler/reassignStaticProp.ts(5,5): error TS2300: Duplicate identif !!! error TS2300: Duplicate identifier 'bar'. static bar:string; // errror - duplicate id - ~~~~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'bar'. } diff --git a/tests/baselines/reference/staticPrototypeProperty.errors.txt b/tests/baselines/reference/staticPrototypeProperty.errors.txt index 32d4438a2cc..19b3f3ffb20 100644 --- a/tests/baselines/reference/staticPrototypeProperty.errors.txt +++ b/tests/baselines/reference/staticPrototypeProperty.errors.txt @@ -1,16 +1,16 @@ -tests/cases/compiler/staticPrototypeProperty.ts(2,4): error TS2300: Duplicate identifier 'prototype'. -tests/cases/compiler/staticPrototypeProperty.ts(6,4): error TS2300: Duplicate identifier 'prototype'. +tests/cases/compiler/staticPrototypeProperty.ts(2,11): error TS2300: Duplicate identifier 'prototype'. +tests/cases/compiler/staticPrototypeProperty.ts(6,11): error TS2300: Duplicate identifier 'prototype'. ==== tests/cases/compiler/staticPrototypeProperty.ts (2 errors) ==== class C { static prototype() { } - ~~~~~~~~~~~~~~~~~~~~~~ + ~~~~~~~~~ !!! error TS2300: Duplicate identifier 'prototype'. } class C2 { static prototype; - ~~~~~~~~~~~~~~~~~ + ~~~~~~~~~ !!! error TS2300: Duplicate identifier 'prototype'. } \ No newline at end of file diff --git a/tests/baselines/reference/stringLiteralTypesInImplementationSignatures2.errors.txt b/tests/baselines/reference/stringLiteralTypesInImplementationSignatures2.errors.txt index 80857aa1804..cbc517e0520 100644 --- a/tests/baselines/reference/stringLiteralTypesInImplementationSignatures2.errors.txt +++ b/tests/baselines/reference/stringLiteralTypesInImplementationSignatures2.errors.txt @@ -65,7 +65,7 @@ tests/cases/conformance/types/objectTypeLiteral/callSignatures/stringLiteralType ~~~~~~~~~~~~~~~~ !!! error TS2381: A signature with an implementation cannot use a string literal type. foo(x: 'a') { }, - ~~~~~~~~~~~~~~~ + ~~~ !!! error TS2300: Duplicate identifier 'foo'. } \ No newline at end of file diff --git a/tests/baselines/reference/stringNamedPropertyDuplicates.errors.txt b/tests/baselines/reference/stringNamedPropertyDuplicates.errors.txt index 9c929aa47ce..e15cb03e062 100644 --- a/tests/baselines/reference/stringNamedPropertyDuplicates.errors.txt +++ b/tests/baselines/reference/stringNamedPropertyDuplicates.errors.txt @@ -2,7 +2,7 @@ tests/cases/conformance/types/objectTypeLiteral/propertySignatures/stringNamedPr tests/cases/conformance/types/objectTypeLiteral/propertySignatures/stringNamedPropertyDuplicates.ts(2,5): error TS2300: Duplicate identifier '"a b"'. tests/cases/conformance/types/objectTypeLiteral/propertySignatures/stringNamedPropertyDuplicates.ts(3,5): error TS2300: Duplicate identifier '"a b"'. tests/cases/conformance/types/objectTypeLiteral/propertySignatures/stringNamedPropertyDuplicates.ts(4,12): error TS2300: Duplicate identifier '"c d"'. -tests/cases/conformance/types/objectTypeLiteral/propertySignatures/stringNamedPropertyDuplicates.ts(5,5): error TS2300: Duplicate identifier '"c d"'. +tests/cases/conformance/types/objectTypeLiteral/propertySignatures/stringNamedPropertyDuplicates.ts(5,12): error TS2300: Duplicate identifier '"c d"'. tests/cases/conformance/types/objectTypeLiteral/propertySignatures/stringNamedPropertyDuplicates.ts(9,5): error TS2300: Duplicate identifier '"a b"'. tests/cases/conformance/types/objectTypeLiteral/propertySignatures/stringNamedPropertyDuplicates.ts(10,5): error TS2300: Duplicate identifier '"a b"'. tests/cases/conformance/types/objectTypeLiteral/propertySignatures/stringNamedPropertyDuplicates.ts(14,5): error TS2300: Duplicate identifier '"a b"'. @@ -17,13 +17,13 @@ tests/cases/conformance/types/objectTypeLiteral/propertySignatures/stringNamedPr ~~~~~ !!! error TS2300: Duplicate identifier '"a b"'. "a b": number; - ~~~~~~~~~~~~~~ + ~~~~~ !!! error TS2300: Duplicate identifier '"a b"'. static "c d": number; ~~~~~ !!! error TS2300: Duplicate identifier '"c d"'. static "c d": number; - ~~~~~~~~~~~~~~~~~~~~~ + ~~~~~ !!! error TS2300: Duplicate identifier '"c d"'. } @@ -32,7 +32,7 @@ tests/cases/conformance/types/objectTypeLiteral/propertySignatures/stringNamedPr ~~~~~ !!! error TS2300: Duplicate identifier '"a b"'. "a b": number; - ~~~~~~~~~~~~~~ + ~~~~~ !!! error TS2300: Duplicate identifier '"a b"'. } @@ -41,7 +41,7 @@ tests/cases/conformance/types/objectTypeLiteral/propertySignatures/stringNamedPr ~~~~~ !!! error TS2300: Duplicate identifier '"a b"'. "a b": number; - ~~~~~~~~~~~~~~ + ~~~~~ !!! error TS2300: Duplicate identifier '"a b"'. } @@ -52,6 +52,6 @@ tests/cases/conformance/types/objectTypeLiteral/propertySignatures/stringNamedPr "a b": 1 ~~~~~ !!! error TS1005: ',' expected. - ~~~~~~~~ + ~~~~~ !!! error TS2300: Duplicate identifier '"a b"'. } \ No newline at end of file diff --git a/tests/baselines/reference/targetTypeCastTest.errors.txt b/tests/baselines/reference/targetTypeCastTest.errors.txt index c00ddb36728..c44de5535d0 100644 --- a/tests/baselines/reference/targetTypeCastTest.errors.txt +++ b/tests/baselines/reference/targetTypeCastTest.errors.txt @@ -1,5 +1,5 @@ tests/cases/compiler/targetTypeCastTest.ts(1,13): error TS2300: Duplicate identifier 'Point'. -tests/cases/compiler/targetTypeCastTest.ts(3,1): error TS2300: Duplicate identifier 'Point'. +tests/cases/compiler/targetTypeCastTest.ts(3,10): error TS2300: Duplicate identifier 'Point'. ==== tests/cases/compiler/targetTypeCastTest.ts (2 errors) ==== @@ -8,14 +8,11 @@ tests/cases/compiler/targetTypeCastTest.ts(3,1): error TS2300: Duplicate identif !!! error TS2300: Duplicate identifier 'Point'. function Point(x, y) { - ~~~~~~~~~~~~~~~~~~~~~~ - this.x = x; - ~~~~~~~~~~~~~~~ - this.y = y; - ~~~~~~~~~~~~~~~~~~ - } - ~ + ~~~~~ !!! error TS2300: Duplicate identifier 'Point'. + this.x = x; + this.y = y; + } interface Adder { (x: number, y: number): number; diff --git a/tests/baselines/reference/targetTypeTest1.errors.txt b/tests/baselines/reference/targetTypeTest1.errors.txt index 1b515bee0fa..a0b05690a3b 100644 --- a/tests/baselines/reference/targetTypeTest1.errors.txt +++ b/tests/baselines/reference/targetTypeTest1.errors.txt @@ -1,8 +1,8 @@ tests/cases/compiler/targetTypeTest1.ts(1,15): error TS2300: Duplicate identifier 'Point'. -tests/cases/compiler/targetTypeTest1.ts(14,1): error TS2300: Duplicate identifier 'Point'. +tests/cases/compiler/targetTypeTest1.ts(14,10): error TS2300: Duplicate identifier 'Point'. tests/cases/compiler/targetTypeTest1.ts(19,18): error TS2384: Overload signatures must all be ambient or non-ambient. tests/cases/compiler/targetTypeTest1.ts(53,15): error TS2300: Duplicate identifier 'C'. -tests/cases/compiler/targetTypeTest1.ts(60,1): error TS2300: Duplicate identifier 'C'. +tests/cases/compiler/targetTypeTest1.ts(60,10): error TS2300: Duplicate identifier 'C'. ==== tests/cases/compiler/targetTypeTest1.ts (5 errors) ==== @@ -22,14 +22,11 @@ tests/cases/compiler/targetTypeTest1.ts(60,1): error TS2300: Duplicate identifie // Because Point is a constructor function, this is inferred // to be Point and return type is inferred to be void function Point(x, y) { - ~~~~~~~~~~~~~~~~~~~~~~ - this.x = x; - ~~~~~~~~~~~~~~~ - this.y = y; - ~~~~~~~~~~~~~~~ - } - ~ + ~~~~~ !!! error TS2300: Duplicate identifier 'Point'. + this.x = x; + this.y = y; + } declare function EF1(a:number, b:number):number; ~~~ @@ -77,14 +74,11 @@ tests/cases/compiler/targetTypeTest1.ts(60,1): error TS2300: Duplicate identifie } function C(a,b) { - ~~~~~~~~~~~~~~~~~ - this.a=a; - ~~~~~~~~~~ - this.b=b; - ~~~~~~~~~~ - } - ~ + ~ !!! error TS2300: Duplicate identifier 'C'. + this.a=a; + this.b=b; + } C.prototype = { a:0, diff --git a/tests/baselines/reference/twoAccessorsWithSameName.errors.txt b/tests/baselines/reference/twoAccessorsWithSameName.errors.txt index fc7b86873f1..81da707c566 100644 --- a/tests/baselines/reference/twoAccessorsWithSameName.errors.txt +++ b/tests/baselines/reference/twoAccessorsWithSameName.errors.txt @@ -10,11 +10,11 @@ tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameN tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName.ts(30,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName.ts(33,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName.ts(2,9): error TS2300: Duplicate identifier 'x'. -tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName.ts(3,5): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName.ts(3,9): error TS2300: Duplicate identifier 'x'. tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName.ts(7,9): error TS2300: Duplicate identifier 'x'. -tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName.ts(8,5): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName.ts(8,9): error TS2300: Duplicate identifier 'x'. tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName.ts(19,9): error TS2300: Duplicate identifier 'x'. -tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName.ts(24,5): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName.ts(24,9): error TS2300: Duplicate identifier 'x'. ==== tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName.ts (17 errors) ==== @@ -27,7 +27,7 @@ tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameN get x() { return 1; } // error ~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~~~~~~~~~~~~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier 'x'. } @@ -40,7 +40,7 @@ tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameN set x(v) { } // error ~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~~~~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier 'x'. } @@ -70,12 +70,10 @@ tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameN !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. ~ !!! error TS1118: An object literal cannot have multiple get/set accessors with the same name. - ~~~~~~~~~ - return 1; - ~~~~~~~~~~~~~~~~~ - } - ~~~~~ + ~ !!! error TS2300: Duplicate identifier 'x'. + return 1; + } } var y = { diff --git a/tests/baselines/reference/twoAccessorsWithSameName2.errors.txt b/tests/baselines/reference/twoAccessorsWithSameName2.errors.txt index d431ed5a828..836a06a8192 100644 --- a/tests/baselines/reference/twoAccessorsWithSameName2.errors.txt +++ b/tests/baselines/reference/twoAccessorsWithSameName2.errors.txt @@ -5,9 +5,9 @@ tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameN tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName2.ts(12,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName2.ts(15,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName2.ts(2,16): error TS2300: Duplicate identifier 'x'. -tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName2.ts(3,5): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName2.ts(3,16): error TS2300: Duplicate identifier 'x'. tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName2.ts(7,16): error TS2300: Duplicate identifier 'x'. -tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName2.ts(8,5): error TS2300: Duplicate identifier 'x'. +tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName2.ts(8,16): error TS2300: Duplicate identifier 'x'. ==== tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameName2.ts (10 errors) ==== @@ -20,7 +20,7 @@ tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameN static get x() { return 1; } // error ~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier 'x'. } @@ -33,7 +33,7 @@ tests/cases/conformance/classes/propertyMemberDeclarations/twoAccessorsWithSameN static set x(v) { } // error ~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~~~~~~~~~~~~~~~~~~~~ + ~ !!! error TS2300: Duplicate identifier 'x'. } diff --git a/tests/baselines/reference/varAndFunctionShareName.errors.txt b/tests/baselines/reference/varAndFunctionShareName.errors.txt index f849bfdfb54..dc4dd4e1b3b 100644 --- a/tests/baselines/reference/varAndFunctionShareName.errors.txt +++ b/tests/baselines/reference/varAndFunctionShareName.errors.txt @@ -1,5 +1,5 @@ tests/cases/compiler/varAndFunctionShareName.ts(1,5): error TS2300: Duplicate identifier 'myFn'. -tests/cases/compiler/varAndFunctionShareName.ts(2,1): error TS2300: Duplicate identifier 'myFn'. +tests/cases/compiler/varAndFunctionShareName.ts(2,10): error TS2300: Duplicate identifier 'myFn'. ==== tests/cases/compiler/varAndFunctionShareName.ts (2 errors) ==== @@ -7,5 +7,5 @@ tests/cases/compiler/varAndFunctionShareName.ts(2,1): error TS2300: Duplicate id ~~~~ !!! error TS2300: Duplicate identifier 'myFn'. function myFn(): any { } - ~~~~~~~~~~~~~~~~~~~~~~~~ + ~~~~ !!! error TS2300: Duplicate identifier 'myFn'. \ No newline at end of file diff --git a/tests/cases/compiler/callOverloads2.ts b/tests/cases/compiler/callOverloads2.ts index 3379838dbcf..e18815fd46b 100644 --- a/tests/cases/compiler/callOverloads2.ts +++ b/tests/cases/compiler/callOverloads2.ts @@ -10,7 +10,7 @@ class Foo { // error function Foo(); // error -function F1(s:string) {return s;} // error +function F1(s:string) {return s;} // error function F1(a:any) { return a;} // error function Goo(s:string); // error - no implementation diff --git a/tests/cases/compiler/callOverloads4.ts b/tests/cases/compiler/callOverloads4.ts index 3957c822cc9..7240e73d0ac 100644 --- a/tests/cases/compiler/callOverloads4.ts +++ b/tests/cases/compiler/callOverloads4.ts @@ -1,7 +1,7 @@ function Foo():Foo; // error function Foo(s:string):Foo; // error -class Foo { // error +class Foo { // error bar1() { /*WScript.Echo("bar1");*/ } constructor(s: string); constructor(x: any) { diff --git a/tests/cases/fourslash/addFunctionInDuplicatedConstructorClassBody.ts b/tests/cases/fourslash/addFunctionInDuplicatedConstructorClassBody.ts index 3315a226528..adbdd4820a0 100644 --- a/tests/cases/fourslash/addFunctionInDuplicatedConstructorClassBody.ts +++ b/tests/cases/fourslash/addFunctionInDuplicatedConstructorClassBody.ts @@ -9,4 +9,4 @@ goTo.marker(); var func = 'fn() { }'; edit.insert(func); -verify.numberOfErrorsInCurrentFile(1); +verify.numberOfErrorsInCurrentFile(2); diff --git a/tests/cases/fourslash/inheritedModuleMembersForClodule2.ts b/tests/cases/fourslash/inheritedModuleMembersForClodule2.ts index 2be62b045c2..7380936d6b2 100644 --- a/tests/cases/fourslash/inheritedModuleMembersForClodule2.ts +++ b/tests/cases/fourslash/inheritedModuleMembersForClodule2.ts @@ -14,4 +14,4 @@ goTo.marker(); verify.quickInfoExists(); -verify.numberOfErrorsInCurrentFile(2); \ No newline at end of file +verify.numberOfErrorsInCurrentFile(4); \ No newline at end of file diff --git a/tests/cases/fourslash/insertReturnStatementInDuplicateIdentifierFunction.ts b/tests/cases/fourslash/insertReturnStatementInDuplicateIdentifierFunction.ts index a5fd6623610..8abdac6d206 100644 --- a/tests/cases/fourslash/insertReturnStatementInDuplicateIdentifierFunction.ts +++ b/tests/cases/fourslash/insertReturnStatementInDuplicateIdentifierFunction.ts @@ -6,9 +6,9 @@ goTo.marker(); // One error: duplicate identifier 'foo' -verify.numberOfErrorsInCurrentFile(1); +verify.numberOfErrorsInCurrentFile(2); // Shouldn't change the number of errors edit.insert('return null;'); -verify.numberOfErrorsInCurrentFile(1); +verify.numberOfErrorsInCurrentFile(2); From a6e991a3db04ca8b77e52aa323d1e1b528d9bced Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Wed, 1 Oct 2014 12:44:17 -0700 Subject: [PATCH 060/110] Fixed bug where value-space identifiers got classified as interfaces when sharing the same name as an interface. --- src/compiler/checker.ts | 86 ----------------- src/compiler/parser.ts | 94 +++++++++++++++++++ src/harness/fourslash.ts | 6 +- src/services/services.ts | 16 ++-- .../fourslash/semanticClassification1.ts | 1 - .../fourslash/semanticClassification2.ts | 11 +++ 6 files changed, 117 insertions(+), 97 deletions(-) create mode 100644 tests/cases/fourslash/semanticClassification2.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 99b387dd18c..6b288ccbae7 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -7077,23 +7077,6 @@ module ts { return mapToArray(symbols); } - // True if the given identifier is the name of a type declaration node (class, interface, enum, type parameter, etc) - function isTypeDeclarationName(name: Node): boolean { - return name.kind == SyntaxKind.Identifier && - isTypeDeclaration(name.parent) && - (name.parent).name === name; - } - - function isTypeDeclaration(node: Node): boolean { - switch (node.kind) { - case SyntaxKind.TypeParameter: - case SyntaxKind.ClassDeclaration: - case SyntaxKind.InterfaceDeclaration: - case SyntaxKind.EnumDeclaration: - return true; - } - } - // True if the given identifier is part of a type reference function isTypeReferenceIdentifier(entityName: EntityName): boolean { var node: Node = entityName; @@ -7172,75 +7155,6 @@ module ts { return false; } - function isTypeNode(node: Node): boolean { - if (node.kind >= SyntaxKind.FirstTypeNode && node.kind <= SyntaxKind.LastTypeNode) { - return true; - } - - switch (node.kind) { - case SyntaxKind.AnyKeyword: - case SyntaxKind.NumberKeyword: - case SyntaxKind.StringKeyword: - case SyntaxKind.BooleanKeyword: - return true; - case SyntaxKind.VoidKeyword: - return node.parent.kind !== SyntaxKind.PrefixOperator; - case SyntaxKind.StringLiteral: - // Specialized signatures can have string literals as their parameters' type names - return node.parent.kind === SyntaxKind.Parameter; - // Identifiers and qualified names may be type nodes, depending on their context. Climb - // above them to find the lowest container - case SyntaxKind.Identifier: - // If the identifier is the RHS of a qualified name, then it's a type iff its parent is. - if (node.parent.kind === SyntaxKind.QualifiedName) { - node = node.parent; - } - // Fall through - case SyntaxKind.QualifiedName: - // At this point, node is either a qualified name or an identifier - var parent = node.parent; - if (parent.kind === SyntaxKind.TypeQuery) { - return false; - } - // Do not recursively call isTypeNode on the parent. In the example: - // - // var a: A.B.C; - // - // Calling isTypeNode would consider the qualified name A.B a type node. Only C or - // A.B.C is a type node. - if (parent.kind >= SyntaxKind.FirstTypeNode && parent.kind <= SyntaxKind.LastTypeNode) { - return true; - } - switch (parent.kind) { - case SyntaxKind.TypeParameter: - return node === (parent).constraint; - case SyntaxKind.Property: - case SyntaxKind.Parameter: - case SyntaxKind.VariableDeclaration: - return node === (parent).type; - case SyntaxKind.FunctionDeclaration: - case SyntaxKind.FunctionExpression: - case SyntaxKind.ArrowFunction: - case SyntaxKind.Constructor: - case SyntaxKind.Method: - case SyntaxKind.GetAccessor: - case SyntaxKind.SetAccessor: - return node === (parent).type; - case SyntaxKind.CallSignature: - case SyntaxKind.ConstructSignature: - case SyntaxKind.IndexSignature: - return node === (parent).type; - case SyntaxKind.TypeAssertion: - return node === (parent).type; - case SyntaxKind.CallExpression: - case SyntaxKind.NewExpression: - return (parent).typeArguments.indexOf(node) >= 0; - } - } - - return false; - } - function isInRightSideOfImportOrExportAssignment(node: EntityName) { while (node.parent.kind === SyntaxKind.QualifiedName) { node = node.parent; diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index b06326f6925..6b8b857d476 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -402,6 +402,100 @@ module ts { return false; } + /** + * Note: this function only works when given a node with valid parent pointers. + */ + export function isTypeNode(node: Node): boolean { + if (node.kind >= SyntaxKind.FirstTypeNode && node.kind <= SyntaxKind.LastTypeNode) { + return true; + } + + switch (node.kind) { + case SyntaxKind.AnyKeyword: + case SyntaxKind.NumberKeyword: + case SyntaxKind.StringKeyword: + case SyntaxKind.BooleanKeyword: + return true; + case SyntaxKind.VoidKeyword: + return node.parent.kind !== SyntaxKind.PrefixOperator; + case SyntaxKind.StringLiteral: + // Specialized signatures can have string literals as their parameters' type names + return node.parent.kind === SyntaxKind.Parameter; + // Identifiers and qualified names may be type nodes, depending on their context. Climb + // above them to find the lowest container + case SyntaxKind.Identifier: + // If the identifier is the RHS of a qualified name, then it's a type iff its parent is. + if (node.parent.kind === SyntaxKind.QualifiedName) { + node = node.parent; + } + // Fall through + case SyntaxKind.QualifiedName: + // At this point, node is either a qualified name or an identifier + var parent = node.parent; + if (parent.kind === SyntaxKind.TypeQuery) { + return false; + } + // Do not recursively call isTypeNode on the parent. In the example: + // + // var a: A.B.C; + // + // Calling isTypeNode would consider the qualified name A.B a type node. Only C or + // A.B.C is a type node. + if (parent.kind >= SyntaxKind.FirstTypeNode && parent.kind <= SyntaxKind.LastTypeNode) { + return true; + } + switch (parent.kind) { + case SyntaxKind.TypeParameter: + return node === (parent).constraint; + case SyntaxKind.Property: + case SyntaxKind.Parameter: + case SyntaxKind.VariableDeclaration: + return node === (parent).type; + case SyntaxKind.FunctionDeclaration: + case SyntaxKind.FunctionExpression: + case SyntaxKind.ArrowFunction: + case SyntaxKind.Constructor: + case SyntaxKind.Method: + case SyntaxKind.GetAccessor: + case SyntaxKind.SetAccessor: + return node === (parent).type; + case SyntaxKind.CallSignature: + case SyntaxKind.ConstructSignature: + case SyntaxKind.IndexSignature: + return node === (parent).type; + case SyntaxKind.TypeAssertion: + return node === (parent).type; + case SyntaxKind.CallExpression: + case SyntaxKind.NewExpression: + return (parent).typeArguments.indexOf(node) >= 0; + } + } + + return false; + } + + /** + * Note: this function only works when given a node with valid parent pointers. + * + * returns true if the given identifier is the name of a type declaration node (class, interface, enum, type parameter, etc) + */ + export function isTypeDeclarationName(name: Node): boolean { + return name.kind == SyntaxKind.Identifier && + isTypeDeclaration(name.parent) && + (name.parent).name === name; + } + + + export function isTypeDeclaration(node: Node): boolean { + switch (node.kind) { + case SyntaxKind.TypeParameter: + case SyntaxKind.ClassDeclaration: + case SyntaxKind.InterfaceDeclaration: + case SyntaxKind.EnumDeclaration: + return true; + } + } + export function getContainingFunction(node: Node): SignatureDeclaration { while (true) { node = node.parent; diff --git a/src/harness/fourslash.ts b/src/harness/fourslash.ts index c264c59348f..228648f04bb 100644 --- a/src/harness/fourslash.ts +++ b/src/harness/fourslash.ts @@ -1582,7 +1582,7 @@ module FourSlash { private verifyClassifications(expected: { classificationType: string; text: string }[], actual: ts.ClassifiedSpan[]) { if (actual.length !== expected.length) { - this.raiseError('verifySyntacticClassification failed - expected total classifications to be ' + expected.length + ', but was ' + actual.length); + this.raiseError('verifyClassifications failed - expected total classifications to be ' + expected.length + ', but was ' + actual.length); } for (var i = 0; i < expected.length; i++) { @@ -1591,7 +1591,7 @@ module FourSlash { var expectedType: string = (ts.ClassificationTypeNames)[expectedClassification.classificationType]; if (expectedType !== actualClassification.classificationType) { - this.raiseError('verifySyntacticClassification failed - expected classifications type to be ' + + this.raiseError('verifyClassifications failed - expected classifications type to be ' + expectedType + ', but was ' + actualClassification.classificationType); } @@ -1599,7 +1599,7 @@ module FourSlash { var actualSpan = actualClassification.textSpan; var actualText = this.activeFile.content.substr(actualSpan.start(), actualSpan.length()); if (expectedClassification.text !== actualText) { - this.raiseError('verifySyntacticClassification failed - expected classificatied text to be ' + + this.raiseError('verifyClassifications failed - expected classificatied text to be ' + expectedClassification.text + ', but was ' + actualText); } diff --git a/src/services/services.ts b/src/services/services.ts index e2089e0ade7..e1bd0feefb9 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -4034,7 +4034,7 @@ module ts { return result; - function classifySymbol(symbol: Symbol) { + function classifySymbol(symbol: Symbol, isInTypePosition: boolean) { var flags = symbol.getFlags(); if (flags & SymbolFlags.Class) { @@ -4043,14 +4043,16 @@ module ts { else if (flags & SymbolFlags.Enum) { return ClassificationTypeNames.enumName; } - else if (flags & SymbolFlags.Interface) { - return ClassificationTypeNames.interfaceName; - } else if (flags & SymbolFlags.Module) { return ClassificationTypeNames.moduleName; } - else if (flags & SymbolFlags.TypeParameter) { - return ClassificationTypeNames.typeParameterName; + else if (isInTypePosition) { + if (flags & SymbolFlags.Interface) { + return ClassificationTypeNames.interfaceName; + } + else if (flags & SymbolFlags.TypeParameter) { + return ClassificationTypeNames.typeParameterName; + } } } @@ -4060,7 +4062,7 @@ module ts { if (node.kind === SyntaxKind.Identifier && node.getWidth() > 0) { var symbol = typeInfoResolver.getSymbolInfo(node); if (symbol) { - var type = classifySymbol(symbol); + var type = classifySymbol(symbol, isTypeNode(node) || isTypeDeclarationName(node)); if (type) { result.push({ textSpan: new TypeScript.TextSpan(node.getStart(), node.getWidth()), diff --git a/tests/cases/fourslash/semanticClassification1.ts b/tests/cases/fourslash/semanticClassification1.ts index 0a0cc68250e..ad9e88ea842 100644 --- a/tests/cases/fourslash/semanticClassification1.ts +++ b/tests/cases/fourslash/semanticClassification1.ts @@ -6,7 +6,6 @@ //// } //// interface X extends M.I { } -debugger; var c = classification; verify.semanticClassificationsAre( c.moduleName("M"), c.interfaceName("I"), c.interfaceName("X"), c.moduleName("M"), c.interfaceName("I")); diff --git a/tests/cases/fourslash/semanticClassification2.ts b/tests/cases/fourslash/semanticClassification2.ts new file mode 100644 index 00000000000..810636dba3e --- /dev/null +++ b/tests/cases/fourslash/semanticClassification2.ts @@ -0,0 +1,11 @@ +/// + +//// interface Thing { +//// toExponential(): number; +//// } +//// +//// var Thing = 0; +//// Thing.toExponential(); + +var c = classification; +verify.semanticClassificationsAre(c.interfaceName("Thing")); \ No newline at end of file From 8e54c62f9e11e90ab97e9ef75ff34d0de946cd88 Mon Sep 17 00:00:00 2001 From: Yui T Date: Wed, 1 Oct 2014 14:16:55 -0700 Subject: [PATCH 061/110] Fix spelling --- src/compiler/checker.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index f1de90565a3..7411a9c50b9 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -5669,7 +5669,7 @@ module ts { // names and consistency of modifiers are verified when we check local symbol var isExportSymbolInsideModule = symbol.parent && symbol.parent.flags & SymbolFlags.Module; var duplicateFunctionDeclaration = false; - var multipleConstructorImplemenation = false; + var multipleConstructorImplementation = false; for (var i = 0; i < declarations.length; i++) { var node = declarations[i]; var inAmbientContext = isInAmbientContext(node); @@ -5692,7 +5692,7 @@ module ts { if (node.body && bodyDeclaration) { if (isConstructor) { - multipleConstructorImplemenation = true; + multipleConstructorImplementation = true; } else { duplicateFunctionDeclaration = true; @@ -5719,7 +5719,7 @@ module ts { } } - if (multipleConstructorImplemenation) { + if (multipleConstructorImplementation) { forEach(declarations, declaration => { error(declaration, Diagnostics.Multiple_constructor_implementations_are_not_allowed); }); From 0434635b94457a6d3b1467ebd850268cf2b0dbb7 Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Wed, 1 Oct 2014 16:12:16 -0700 Subject: [PATCH 062/110] handle absolute path in /// references --- src/compiler/parser.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 6dd593c7fee..9e4d5cd1da4 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -4019,7 +4019,8 @@ module ts { function processReferencedFiles(file: SourceFile, basePath: string) { forEach(file.referencedFiles, ref => { - processSourceFile(normalizePath(combinePaths(basePath, ref.filename)), /* isDefaultLib */ false, file, ref.pos, ref.end); + var referencedFilename = isRootedDiskPath(ref.filename) ? ref.filename : combinePaths(basePath, ref.filename); + processSourceFile(normalizePath(referencedFilename), /* isDefaultLib */ false, file, ref.pos, ref.end); }); } From 93e5a94dc85feb67997a80c6e2f6437da8ed3d80 Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Wed, 1 Oct 2014 16:13:06 -0700 Subject: [PATCH 063/110] support goto def on /// references with absolute path --- src/services/services.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/services/services.ts b/src/services/services.ts index a35c1213956..ced52fd69c3 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -2573,7 +2573,8 @@ module ts { /// Triple slash reference comments var comment = forEach(sourceFile.referencedFiles, r => (r.pos <= position && position < r.end) ? r : undefined); if (comment) { - var targetFilename = normalizePath(combinePaths(getDirectoryPath(filename), comment.filename)); + var targetFilename = isRootedDiskPath(comment.filename) ? comment.filename : combinePaths(getDirectoryPath(filename), comment.filename); + targetFilename = normalizePath(targetFilename); if (program.getSourceFile(targetFilename)) { return [{ fileName: targetFilename, From 782275924fbb6ae3cee4fdea1c445a3b2372d7fb Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Wed, 1 Oct 2014 18:51:58 -0700 Subject: [PATCH 064/110] Only show first overload in a series of consecutive overload signatures for navigateTo --- src/services/services.ts | 32 +++++++++++++++---- .../fourslash/navigationItemsOverloads1.ts | 30 +++++++++++++++++ .../fourslash/navigationItemsOverloads2.ts | 12 +++++++ .../navigationItemsOverloadsBroken.ts | 29 +++++++++++++++++ 4 files changed, 96 insertions(+), 7 deletions(-) create mode 100644 tests/cases/fourslash/navigationItemsOverloads1.ts create mode 100644 tests/cases/fourslash/navigationItemsOverloads2.ts create mode 100644 tests/cases/fourslash/navigationItemsOverloadsBroken.ts diff --git a/src/services/services.ts b/src/services/services.ts index a35c1213956..a7a3b43afd1 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -504,17 +504,36 @@ module ts { if (!this.namedDeclarations) { var sourceFile = this; var namedDeclarations: Declaration[] = []; - var isExternalModule = ts.isExternalModule(sourceFile); + + // This keeps track of the last encountered function/method/method signature + // so that we may ignore all but the first overload. + var overloadDeclaration: FunctionDeclaration; forEachChild(sourceFile, function visit(node: Node): boolean { switch (node.kind) { + case SyntaxKind.FunctionDeclaration: + case SyntaxKind.Method: + var functionDeclaration = node; + + // We can assume that overloadDeclaration will never be "trampled" + // between consecutive overloads because we never dive into parameter initializers. + if (functionDeclaration.name) { + if (overloadDeclaration && + functionDeclaration.name.text === overloadDeclaration.name.text && + node.parent === overloadDeclaration.parent) { + break; + } + + namedDeclarations.push(functionDeclaration); + overloadDeclaration = functionDeclaration; + } + break; + case SyntaxKind.ClassDeclaration: case SyntaxKind.InterfaceDeclaration: case SyntaxKind.EnumDeclaration: case SyntaxKind.ModuleDeclaration: case SyntaxKind.ImportDeclaration: - case SyntaxKind.Method: - case SyntaxKind.FunctionDeclaration: case SyntaxKind.Constructor: case SyntaxKind.GetAccessor: case SyntaxKind.SetAccessor: @@ -522,9 +541,7 @@ module ts { if ((node).name) { namedDeclarations.push(node); } - forEachChild(node, visit); - break; - + // fall through case SyntaxKind.VariableStatement: case SyntaxKind.ModuleBlock: case SyntaxKind.FunctionBlock: @@ -532,10 +549,11 @@ module ts { break; case SyntaxKind.Parameter: + // Only consider properties defined as constructor parameters if (!(node.flags & NodeFlags.AccessibilityModifier)) { - // Only consider properties defined as constructor parameters break; } + // fall through case SyntaxKind.VariableDeclaration: case SyntaxKind.EnumMember: case SyntaxKind.Property: diff --git a/tests/cases/fourslash/navigationItemsOverloads1.ts b/tests/cases/fourslash/navigationItemsOverloads1.ts new file mode 100644 index 00000000000..5f1981fe917 --- /dev/null +++ b/tests/cases/fourslash/navigationItemsOverloads1.ts @@ -0,0 +1,30 @@ +/// + +////function overload(a: string): boolean; +////function overload(b: boolean): boolean; +////function overload(b: number): boolean; +////function overload(f: typeof overload): boolean; +////function overload(x: any, b = (function overload() { return false })): boolean { +//// throw overload; +////} +//// +////interface I { +//// interfaceMethodSignature(a: string): boolean; +//// interfaceMethodSignature(b: boolean): boolean; +//// interfaceMethodSignature(b: number): boolean; +//// interfaceMethodSignature(f: I): boolean; +////} +//// +////class C { +//// methodOverload(a: string): boolean; +//// methodOverload(b: boolean): boolean; +//// methodOverload(b: number): boolean; +//// methodOverload(f: I): boolean; +//// methodOverload(x: any, b = (function overload() { return false })): boolean { +//// throw C; +//// } +////} + +verify.navigationItemsListCount(1, "overload", "exact"); +verify.navigationItemsListCount(1, "interfaceMethodSignature", "exact"); +verify.navigationItemsListCount(1, "methodOverload", "exact"); diff --git a/tests/cases/fourslash/navigationItemsOverloads2.ts b/tests/cases/fourslash/navigationItemsOverloads2.ts new file mode 100644 index 00000000000..c5824b639bc --- /dev/null +++ b/tests/cases/fourslash/navigationItemsOverloads2.ts @@ -0,0 +1,12 @@ +/// + +////interface I { +//// interfaceMethodSignature(a: string): boolean; +//// interfaceMethodSignature(b: number): boolean; +//// interfaceMethodSignature(f: I): boolean; +////} +////interface I { +//// interfaceMethodSignature(b: boolean): boolean; +////} + +verify.navigationItemsListCount(2, "interfaceMethodSignature", "exact"); diff --git a/tests/cases/fourslash/navigationItemsOverloadsBroken.ts b/tests/cases/fourslash/navigationItemsOverloadsBroken.ts new file mode 100644 index 00000000000..f9501948272 --- /dev/null +++ b/tests/cases/fourslash/navigationItemsOverloadsBroken.ts @@ -0,0 +1,29 @@ +/// + +////function overload1(a: string): boolean; +////function overload1(b: boolean): boolean; +////function overload1(b: number): boolean; +//// +////var heyImNotInterruptingAnythingAmI = '?'; +//// +////function overload1(f: typeof overload): boolean; +////function overload1(x: any, b = (function overload() { return false })): boolean { +//// throw overload; +////} + +////function overload2(a: string): boolean; +////function overload2(b: boolean): boolean; +////function overload2(b: number): boolean; +//// +////function iJustRuinEverything(x: any, b = (function overload() { return false })): boolean { +//// throw overload; +////} +//// +////function overload2(f: typeof overload): boolean; +////function overload2(x: any, b = (function overload() { return false })): boolean { +//// throw overload; +////} + +verify.navigationItemsListCount(1, "overload1", "exact"); +verify.navigationItemsListCount(2, "overload2", "exact"); +verify.navigationItemsListCount(3, "overload", "prefix"); \ No newline at end of file From 12e1566af15d232a4d2fddeb6479f55356df73a2 Mon Sep 17 00:00:00 2001 From: ChrisBubernak Date: Thu, 2 Oct 2014 16:02:29 -0700 Subject: [PATCH 065/110] First changes to checker for this fix --- src/compiler/checker.ts | 47 ++++++++++++++++--- .../diagnosticInformationMap.generated.ts | 2 + src/compiler/diagnosticMessages.json | 8 ++++ 3 files changed, 51 insertions(+), 6 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index cf35c1c02f5..bcd0adfb40d 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -5022,12 +5022,16 @@ module ts { if (leftType.flags & (TypeFlags.Undefined | TypeFlags.Null)) leftType = rightType; if (rightType.flags & (TypeFlags.Undefined | TypeFlags.Null)) rightType = leftType; - var leftOk = checkArithmeticOperandType(node.left, leftType, Diagnostics.The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type); - var rightOk = checkArithmeticOperandType(node.right, rightType, Diagnostics.The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type); - if (leftOk && rightOk) { - checkAssignmentOperator(numberType); - } - + var boolean = typeToString(booleanType); + if (typeToString(leftType) === boolean && typeToString(rightType) === boolean) { + error(node, Diagnostics.The_0_operator_is_not_allowed_for_boolean_types_1, tokenToString(node.operator), preferredBooleanOperator(node.operator)); + } else { + var leftOk = checkArithmeticOperandType(node.left, leftType, Diagnostics.The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type); + var rightOk = checkArithmeticOperandType(node.right, rightType, Diagnostics.The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type); + if (leftOk && rightOk) { + checkAssignmentOperator(numberType); + } + } return numberType; case SyntaxKind.PlusToken: case SyntaxKind.PlusEqualsToken: @@ -5091,6 +5095,37 @@ module ts { return rightType; } + function preferredBooleanOperator(operator: any): string { + var message = ""; + var suggestion:SyntaxKind; + switch (operator) { + case SyntaxKind.BarToken: + suggestion = SyntaxKind.BarBarToken; + break; + case SyntaxKind.CaretToken: + suggestion = SyntaxKind.ExclamationEqualsEqualsToken; + break; + case SyntaxKind.AmpersandToken: + suggestion = SyntaxKind.AmpersandAmpersandToken; + break; + case SyntaxKind.CaretEqualsToken: + suggestion = SyntaxKind.CaretEqualsToken; + break; + case SyntaxKind.BarEqualsToken: + suggestion = SyntaxKind.BarEqualsToken; + break; + case SyntaxKind.AmpersandEqualsToken: + suggestion = SyntaxKind.AmpersandEqualsToken; + break; + } + if (suggestion !== undefined) { + return "Consider using " + tokenToString(suggestion) + "."; + //message = createCompilerDiagnostic(Diagnostics.Consider_using_0_instead, tokenToString(suggestion)); + //message = message(node, Diagnostics.Consider_using_0_instead, tokenToString(suggestion)); + } + return message; + } + function checkAssignmentOperator(valueType: Type): void { if (fullTypeCheck && operator >= SyntaxKind.FirstAssignment && operator <= SyntaxKind.LastAssignment) { // TypeScript 1.0 spec (April 2014): 4.17 diff --git a/src/compiler/diagnosticInformationMap.generated.ts b/src/compiler/diagnosticInformationMap.generated.ts index ba6f742c4c1..e4889cd5741 100644 --- a/src/compiler/diagnosticInformationMap.generated.ts +++ b/src/compiler/diagnosticInformationMap.generated.ts @@ -260,6 +260,7 @@ module ts { Property_0_is_protected_in_type_1_but_public_in_type_2: { code: 2444, category: DiagnosticCategory.Error, key: "Property '{0}' is protected in type '{1}' but public in type '{2}'." }, Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses: { code: 2445, category: DiagnosticCategory.Error, key: "Property '{0}' is protected and only accessible within class '{1}' and its subclasses." }, Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1: { code: 2446, category: DiagnosticCategory.Error, key: "Property '{0}' is protected and only accessible through an instance of class '{1}'." }, + The_0_operator_is_not_allowed_for_boolean_types_1: { code: 2447, category: DiagnosticCategory.Error, key: "The '{0}' operator is not allowed for boolean types {1}." }, Import_declaration_0_is_using_private_name_1: { code: 4000, category: DiagnosticCategory.Error, key: "Import declaration '{0}' is using private name '{1}'." }, Type_parameter_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4001, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of exported class has or is using name '{1}' from private module '{2}'." }, Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: { code: 4002, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of exported class has or is using private name '{1}'." }, @@ -353,6 +354,7 @@ module ts { Specifies_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations: { code: 6004, category: DiagnosticCategory.Message, key: "Specifies the location where debugger should locate TypeScript files instead of source locations." }, Watch_input_files: { code: 6005, category: DiagnosticCategory.Message, key: "Watch input files." }, Redirect_output_structure_to_the_directory: { code: 6006, category: DiagnosticCategory.Message, key: "Redirect output structure to the directory." }, + Consider_using_0_instead: { code: 6007, category: DiagnosticCategory.Message, key: "Consider using '{0}' instead." }, Do_not_emit_comments_to_output: { code: 6009, category: DiagnosticCategory.Message, key: "Do not emit comments to output." }, Specify_ECMAScript_target_version_Colon_ES3_default_or_ES5: { code: 6015, category: DiagnosticCategory.Message, key: "Specify ECMAScript target version: 'ES3' (default), or 'ES5'" }, Specify_module_code_generation_Colon_commonjs_or_amd: { code: 6016, category: DiagnosticCategory.Message, key: "Specify module code generation: 'commonjs' or 'amd'" }, diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 0480cd3000c..7cce4be878b 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -1032,6 +1032,10 @@ "category": "Error", "code": 2446 }, + "The '{0}' operator is not allowed for boolean types {1}.": { + "category": "Error", + "code": 2447 + }, "Import declaration '{0}' is using private name '{1}'.": { "category": "Error", @@ -1407,6 +1411,10 @@ "category": "Message", "code": 6006 }, + "Consider using '{0}' instead.": { + "category": "Message", + "code": 6007 + }, "Do not emit comments to output.": { "category": "Message", "code": 6009 From 183bed1bb8b19ff1138ec1f2780ef7c7f5a0a62d Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Thu, 2 Oct 2014 17:35:48 -0700 Subject: [PATCH 066/110] Specify which outlining spans should auto-collapse if the user choose "collapse to definitions". --- src/compiler/parser.ts | 2 +- src/services/outliningElementsCollector.ts | 22 +++++++++++++++++----- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index b9865772c06..5318e679c4e 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -467,7 +467,7 @@ module ts { return node === (parent).type; case SyntaxKind.CallExpression: case SyntaxKind.NewExpression: - return (parent).typeArguments.indexOf(node) >= 0; + return (parent).typeArguments && (parent).typeArguments.indexOf(node) >= 0; } } diff --git a/src/services/outliningElementsCollector.ts b/src/services/outliningElementsCollector.ts index 134508bc067..c9a513ee2aa 100644 --- a/src/services/outliningElementsCollector.ts +++ b/src/services/outliningElementsCollector.ts @@ -34,18 +34,30 @@ module ts { export function collectElements(sourceFile: SourceFile): OutliningSpan[] { var elements: OutliningSpan[] = []; - function addOutlineRange(hintSpanNode: Node, startElement: Node, endElement: Node) { + function addOutliningSpan(hintSpanNode: Node, startElement: Node, endElement: Node, autoCollapse: boolean) { if (hintSpanNode && startElement && endElement) { var span: OutliningSpan = { textSpan: TypeScript.TextSpan.fromBounds(startElement.pos, endElement.end), hintSpan: TypeScript.TextSpan.fromBounds(hintSpanNode.getStart(), hintSpanNode.end), bannerText: "...", - autoCollapse: false + autoCollapse: autoCollapse }; elements.push(span); } } + function autoCollapse(node: Node) { + switch (node.kind) { + case SyntaxKind.ModuleBlock: + case SyntaxKind.ClassDeclaration: + case SyntaxKind.InterfaceDeclaration: + case SyntaxKind.EnumDeclaration: + return false; + } + + return true; + } + var depth = 0; var maxDepth = 20; function walk(n: Node): void { @@ -62,7 +74,7 @@ module ts { case SyntaxKind.FinallyBlock: var openBrace = findChildOfKind(n, SyntaxKind.OpenBraceToken, sourceFile); var closeBrace = findChildOfKind(n, SyntaxKind.CloseBraceToken, sourceFile); - addOutlineRange(n.parent, openBrace, closeBrace); + addOutliningSpan(n.parent, openBrace, closeBrace, autoCollapse(n)); break; case SyntaxKind.ClassDeclaration: case SyntaxKind.InterfaceDeclaration: @@ -71,12 +83,12 @@ module ts { case SyntaxKind.SwitchStatement: var openBrace = findChildOfKind(n, SyntaxKind.OpenBraceToken, sourceFile); var closeBrace = findChildOfKind(n, SyntaxKind.CloseBraceToken, sourceFile); - addOutlineRange(n, openBrace, closeBrace); + addOutliningSpan(n, openBrace, closeBrace, autoCollapse(n)); break; case SyntaxKind.ArrayLiteral: var openBracket = findChildOfKind(n, SyntaxKind.OpenBracketToken, sourceFile); var closeBracket = findChildOfKind(n, SyntaxKind.CloseBracketToken, sourceFile); - addOutlineRange(n, openBracket, closeBracket); + addOutliningSpan(n, openBracket, closeBracket, autoCollapse(n)); break; } depth++; From a14e46a5e73c6e9694782a4c41ece0cce07e40e2 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Thu, 2 Oct 2014 17:58:05 -0700 Subject: [PATCH 067/110] Update compiler localized messages with those provided by the language service. --- src/compiler/core.ts | 8 +++----- src/services/core/diagnosticCore.ts | 2 -- src/services/services.ts | 4 ++-- src/services/shims.ts | 1 + 4 files changed, 6 insertions(+), 9 deletions(-) diff --git a/src/compiler/core.ts b/src/compiler/core.ts index fb2bde52453..123bde2e719 100644 --- a/src/compiler/core.ts +++ b/src/compiler/core.ts @@ -209,11 +209,9 @@ module ts { export var localizedDiagnosticMessages: Map = undefined; export function getLocaleSpecificMessage(message: string) { - if (ts.localizedDiagnosticMessages) { - message = localizedDiagnosticMessages[message]; - } - - return message; + return localizedDiagnosticMessages && localizedDiagnosticMessages[message] + ? localizedDiagnosticMessages[message] + : message; } export function createFileDiagnostic(file: SourceFile, start: number, length: number, message: DiagnosticMessage, ...args: any[]): Diagnostic; diff --git a/src/services/core/diagnosticCore.ts b/src/services/core/diagnosticCore.ts index b4d95a1c60b..369b8114eac 100644 --- a/src/services/core/diagnosticCore.ts +++ b/src/services/core/diagnosticCore.ts @@ -1,8 +1,6 @@ /// module TypeScript { - export var LocalizedDiagnosticMessages: ts.Map = null; - export class Location { private _fileName: string; private _lineMap: LineMap; diff --git a/src/services/services.ts b/src/services/services.ts index 7463acc6c68..88efbaf2a2a 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -1650,8 +1650,8 @@ module ts { var writer: (filename: string, data: string, writeByteOrderMark: boolean) => void = undefined; // Check if the localized messages json is set, otherwise query the host for it - if (!TypeScript.LocalizedDiagnosticMessages) { - TypeScript.LocalizedDiagnosticMessages = host.getLocalizedDiagnosticMessages(); + if (!localizedDiagnosticMessages) { + localizedDiagnosticMessages = host.getLocalizedDiagnosticMessages(); } function getSourceFile(filename: string): SourceFile { diff --git a/src/services/shims.ts b/src/services/shims.ts index a1e616f6c77..f2b259ffa93 100644 --- a/src/services/shims.ts +++ b/src/services/shims.ts @@ -369,6 +369,7 @@ module ts { if (diagnosticMessagesJson == null || diagnosticMessagesJson == "") { return null; } + try { return JSON.parse(diagnosticMessagesJson); } From e751c34fcb90e1ff8a15d04ec72ae4019355f0cf Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Fri, 3 Oct 2014 01:54:43 -0700 Subject: [PATCH 068/110] Add some heuristics in the lexical classifier to make it play better with the syntactic classifier when classifying expressions involving generics. --- src/services/services.ts | 46 ++++++++++++++++++- .../cases/unittests/services/colorization.ts | 38 +++++++++++++++ 2 files changed, 83 insertions(+), 1 deletion(-) diff --git a/src/services/services.ts b/src/services/services.ts index 88efbaf2a2a..ebea261d41d 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -1,4 +1,4 @@ -/// + /// /// /// /// @@ -4692,6 +4692,27 @@ module ts { entries: [] }; + // We can run into an unfortunate interaction between the lexical and syntactic classifier + // when the user is typing something generic. Consider the case where the user types: + // + // Foo tokens. It's a weak heuristic, but should + // work well enough in practice. + var inGenericStack = 0; + do { token = scanner.scan(); @@ -4711,6 +4732,29 @@ module ts { // we recognize that 'var' is actually an identifier here. token = SyntaxKind.Identifier; } + else if (lastNonTriviaToken === SyntaxKind.Identifier && + token === SyntaxKind.LessThanToken) { + // Could be the start of something generic. Keep track of that by bumping + // up the current count of generic contexts we may be in. + inGenericStack++; + } + else if (token === SyntaxKind.GreaterThanToken && inGenericStack > 0) { + // If we think we're currently in something generic, then mark that that + // generic entity is complete. + inGenericStack--; + } + else if (token === SyntaxKind.AnyKeyword || + token === SyntaxKind.StringKeyword || + token === SyntaxKind.NumberKeyword || + token === SyntaxKind.BooleanKeyword || + token === SyntaxKind.VoidKeyword) { + if (inGenericStack > 0) { + // If it looks like we're could be in something generic, don't classify this + // as a keyword. We may just get overwritten by the syntactic classifier, + // causing a noisy experience for the user. + token = SyntaxKind.Identifier; + } + } lastNonTriviaToken = token; } diff --git a/tests/cases/unittests/services/colorization.ts b/tests/cases/unittests/services/colorization.ts index 18b157f26b0..ee5350a25eb 100644 --- a/tests/cases/unittests/services/colorization.ts +++ b/tests/cases/unittests/services/colorization.ts @@ -231,5 +231,43 @@ describe('Colorization', function () { identifier("var"), finalEndOfLineState(ts.EndOfLineState.Start)); }); + + it("classifies partially written generics correctly.", function () { + test("Foo number", + ts.EndOfLineState.Start, + identifier("Foo"), + operator("<"), + identifier("Foo"), + operator(">" + identifier("keyword"), + finalEndOfLineState(ts.EndOfLineState.Start)); + }); }); }); \ No newline at end of file From 4714c2654372229931204e85f948150f87501bf8 Mon Sep 17 00:00:00 2001 From: Chris Bubernak Date: Fri, 3 Oct 2014 08:09:57 -0700 Subject: [PATCH 069/110] rewrote changes to the checker --- src/compiler/checker.ts | 44 +++++++------------ .../diagnosticInformationMap.generated.ts | 3 +- src/compiler/diagnosticMessages.json | 6 +-- 3 files changed, 18 insertions(+), 35 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index bcd0adfb40d..48433984c4d 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -5022,9 +5022,11 @@ module ts { if (leftType.flags & (TypeFlags.Undefined | TypeFlags.Null)) leftType = rightType; if (rightType.flags & (TypeFlags.Undefined | TypeFlags.Null)) rightType = leftType; - var boolean = typeToString(booleanType); - if (typeToString(leftType) === boolean && typeToString(rightType) === boolean) { - error(node, Diagnostics.The_0_operator_is_not_allowed_for_boolean_types_1, tokenToString(node.operator), preferredBooleanOperator(node.operator)); + if (leftType.flags & TypeFlags.Boolean && rightType.flags & TypeFlags.Boolean) { + var suggestedOperator = suggestedBooleanOperator(node.operator); + if (suggestedOperator !== undefined) { + error(node, Diagnostics.The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead, tokenToString(node.operator), tokenToString(suggestedOperator)); + } } else { var leftOk = checkArithmeticOperandType(node.left, leftType, Diagnostics.The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type); var rightOk = checkArithmeticOperandType(node.right, rightType, Diagnostics.The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type); @@ -5094,36 +5096,22 @@ module ts { case SyntaxKind.CommaToken: return rightType; } - - function preferredBooleanOperator(operator: any): string { - var message = ""; - var suggestion:SyntaxKind; + + // if a user tries to apply an innappropriate operator to 2 boolean operands try and return them a helpful suggestion + function suggestedBooleanOperator(operator: any): SyntaxKind { switch (operator) { case SyntaxKind.BarToken: - suggestion = SyntaxKind.BarBarToken; - break; - case SyntaxKind.CaretToken: - suggestion = SyntaxKind.ExclamationEqualsEqualsToken; - break; - case SyntaxKind.AmpersandToken: - suggestion = SyntaxKind.AmpersandAmpersandToken; - break; - case SyntaxKind.CaretEqualsToken: - suggestion = SyntaxKind.CaretEqualsToken; - break; case SyntaxKind.BarEqualsToken: - suggestion = SyntaxKind.BarEqualsToken; - break; + return SyntaxKind.BarBarToken; + case SyntaxKind.CaretToken: + case SyntaxKind.CaretEqualsToken: + return SyntaxKind.ExclamationEqualsEqualsToken; + case SyntaxKind.AmpersandToken: case SyntaxKind.AmpersandEqualsToken: - suggestion = SyntaxKind.AmpersandEqualsToken; - break; + return SyntaxKind.AmpersandAmpersandToken; + default: + return undefined; } - if (suggestion !== undefined) { - return "Consider using " + tokenToString(suggestion) + "."; - //message = createCompilerDiagnostic(Diagnostics.Consider_using_0_instead, tokenToString(suggestion)); - //message = message(node, Diagnostics.Consider_using_0_instead, tokenToString(suggestion)); - } - return message; } function checkAssignmentOperator(valueType: Type): void { diff --git a/src/compiler/diagnosticInformationMap.generated.ts b/src/compiler/diagnosticInformationMap.generated.ts index e4889cd5741..a430799ba50 100644 --- a/src/compiler/diagnosticInformationMap.generated.ts +++ b/src/compiler/diagnosticInformationMap.generated.ts @@ -260,7 +260,7 @@ module ts { Property_0_is_protected_in_type_1_but_public_in_type_2: { code: 2444, category: DiagnosticCategory.Error, key: "Property '{0}' is protected in type '{1}' but public in type '{2}'." }, Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses: { code: 2445, category: DiagnosticCategory.Error, key: "Property '{0}' is protected and only accessible within class '{1}' and its subclasses." }, Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1: { code: 2446, category: DiagnosticCategory.Error, key: "Property '{0}' is protected and only accessible through an instance of class '{1}'." }, - The_0_operator_is_not_allowed_for_boolean_types_1: { code: 2447, category: DiagnosticCategory.Error, key: "The '{0}' operator is not allowed for boolean types {1}." }, + The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead: { code: 2447, category: DiagnosticCategory.Error, key: "The '{0}' operator is not allowed for boolean types. Consider using {1} instead." }, Import_declaration_0_is_using_private_name_1: { code: 4000, category: DiagnosticCategory.Error, key: "Import declaration '{0}' is using private name '{1}'." }, Type_parameter_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4001, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of exported class has or is using name '{1}' from private module '{2}'." }, Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: { code: 4002, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of exported class has or is using private name '{1}'." }, @@ -354,7 +354,6 @@ module ts { Specifies_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations: { code: 6004, category: DiagnosticCategory.Message, key: "Specifies the location where debugger should locate TypeScript files instead of source locations." }, Watch_input_files: { code: 6005, category: DiagnosticCategory.Message, key: "Watch input files." }, Redirect_output_structure_to_the_directory: { code: 6006, category: DiagnosticCategory.Message, key: "Redirect output structure to the directory." }, - Consider_using_0_instead: { code: 6007, category: DiagnosticCategory.Message, key: "Consider using '{0}' instead." }, Do_not_emit_comments_to_output: { code: 6009, category: DiagnosticCategory.Message, key: "Do not emit comments to output." }, Specify_ECMAScript_target_version_Colon_ES3_default_or_ES5: { code: 6015, category: DiagnosticCategory.Message, key: "Specify ECMAScript target version: 'ES3' (default), or 'ES5'" }, Specify_module_code_generation_Colon_commonjs_or_amd: { code: 6016, category: DiagnosticCategory.Message, key: "Specify module code generation: 'commonjs' or 'amd'" }, diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 7cce4be878b..d715c898510 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -1032,7 +1032,7 @@ "category": "Error", "code": 2446 }, - "The '{0}' operator is not allowed for boolean types {1}.": { + "The '{0}' operator is not allowed for boolean types. Consider using {1} instead.": { "category": "Error", "code": 2447 }, @@ -1411,10 +1411,6 @@ "category": "Message", "code": 6006 }, - "Consider using '{0}' instead.": { - "category": "Message", - "code": 6007 - }, "Do not emit comments to output.": { "category": "Message", "code": 6009 From 71b77106a883bec43707a1d8c75c4e12e5009bfc Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Fri, 3 Oct 2014 14:51:22 -0700 Subject: [PATCH 070/110] Add test case to verify the definition name and container name Rename dialog will use this name and scope name returned --- src/harness/fourslash.ts | 41 +++++++++++++------ .../fourslash/definitionNameOnEnumMember.ts | 12 ++++++ tests/cases/fourslash/fourslash.ts | 4 ++ 3 files changed, 44 insertions(+), 13 deletions(-) create mode 100644 tests/cases/fourslash/definitionNameOnEnumMember.ts diff --git a/src/harness/fourslash.ts b/src/harness/fourslash.ts index e746bd9e7c9..b5a3897196b 100644 --- a/src/harness/fourslash.ts +++ b/src/harness/fourslash.ts @@ -413,10 +413,14 @@ module FourSlash { } private raiseError(message: string) { - message = "Marker: " + currentTestState.lastKnownMarker + "\n" + message; + message = this.assertionMessage(message); throw new Error(message); } + private assertionMessage(message: string) { + return "Marker: " + currentTestState.lastKnownMarker + "\n" + message; + } + private getDiagnostics(fileName: string): ts.Diagnostic[] { var syntacticErrors = this.languageService.getSyntacticDiagnostics(fileName); var semanticErrors = this.languageService.getSemanticDiagnostics(fileName); @@ -772,35 +776,31 @@ module FourSlash { var actualQuickInfoSymbolName = actualQuickInfo ? actualQuickInfo.fullSymbolName : ""; var actualQuickInfoKind = actualQuickInfo ? actualQuickInfo.kind : ""; - function assertionMessage(name: string, actualValue: string, expectedValue: string) { - return "\nActual " + name + ":\n\t" + actualValue + "\nExpected value:\n\t" + expectedValue; - } - if (negative) { if (expectedTypeName !== undefined) { - assert.notEqual(actualQuickInfoMemberName, expectedTypeName, assertionMessage("quick info member name", actualQuickInfoMemberName, expectedTypeName)); + assert.notEqual(actualQuickInfoMemberName, expectedTypeName, this.assertionMessage("quick info member name")); } if (docComment != undefined) { - assert.notEqual(actualQuickInfoDocComment, docComment, assertionMessage("quick info doc comment", actualQuickInfoDocComment, docComment)); + assert.notEqual(actualQuickInfoDocComment, docComment, this.assertionMessage("quick info doc comment")); } if (symbolName !== undefined) { - assert.notEqual(actualQuickInfoSymbolName, symbolName, assertionMessage("quick info symbol name", actualQuickInfoSymbolName, symbolName)); + assert.notEqual(actualQuickInfoSymbolName, symbolName, this.assertionMessage("quick info symbol name")); } if (kind !== undefined) { - assert.notEqual(actualQuickInfoKind, kind, assertionMessage("quick info kind", actualQuickInfoKind, kind)); + assert.notEqual(actualQuickInfoKind, kind, this.assertionMessage("quick info kind")); } } else { if (expectedTypeName !== undefined) { - assert.equal(actualQuickInfoMemberName, expectedTypeName, assertionMessage("quick info member", actualQuickInfoMemberName, expectedTypeName)); + assert.equal(actualQuickInfoMemberName, expectedTypeName, this.assertionMessage("quick info member")); } if (docComment != undefined) { - assert.equal(actualQuickInfoDocComment, docComment, assertionMessage("quick info doc", actualQuickInfoDocComment, docComment)); + assert.equal(actualQuickInfoDocComment, docComment, this.assertionMessage("quick info doc")); } if (symbolName !== undefined) { - assert.equal(actualQuickInfoSymbolName, symbolName, assertionMessage("quick info symbol name", actualQuickInfoSymbolName, symbolName)); + assert.equal(actualQuickInfoSymbolName, symbolName, this.assertionMessage("quick info symbol name")); } if (kind !== undefined) { - assert.equal(actualQuickInfoKind, kind, assertionMessage("quick info kind", actualQuickInfoKind, kind)); + assert.equal(actualQuickInfoKind, kind, this.assertionMessage("quick info kind")); } } } @@ -1448,6 +1448,21 @@ module FourSlash { } } + public verifyDefinitionsName(negative: boolean, expectedName: string, expectedContainerName: string) { + this.taoInvalidReason = 'verifyDefinititionsInfo NYI'; + + var definitions = this.languageService.getDefinitionAtPosition(this.activeFile.fileName, this.currentCaretPosition); + var actualDefinitionName = definitions && definitions.length ? definitions[0].name : ""; + var actualDefinitionContainerName = definitions && definitions.length ? definitions[0].containerName : ""; + if (negative) { + assert.notEqual(actualDefinitionName, expectedName, this.assertionMessage("Definition Info Name")); + assert.notEqual(actualDefinitionName, expectedName, this.assertionMessage("Definition Info Container Name")); + } else { + assert.equal(actualDefinitionName, expectedName, this.assertionMessage("Definition Info Name")); + assert.equal(actualDefinitionName, expectedName, this.assertionMessage("Definition Info Container Name")); + } + } + public getMarkers(): Marker[] { // Return a copy of the list return this.testData.markers.slice(0); diff --git a/tests/cases/fourslash/definitionNameOnEnumMember.ts b/tests/cases/fourslash/definitionNameOnEnumMember.ts new file mode 100644 index 00000000000..b22b9d16c07 --- /dev/null +++ b/tests/cases/fourslash/definitionNameOnEnumMember.ts @@ -0,0 +1,12 @@ +/// + +////enum e { +//// firstMember, +//// secondMember, +//// thirdMember +////} +////var enumMember = e./*1*/thirdMember; + +goTo.marker("1"); +// This is bug #652 +verify.verifyDefinitionsName("e.thirdMember", "e"); \ No newline at end of file diff --git a/tests/cases/fourslash/fourslash.ts b/tests/cases/fourslash/fourslash.ts index c204a98c4a4..9b5958792bc 100644 --- a/tests/cases/fourslash/fourslash.ts +++ b/tests/cases/fourslash/fourslash.ts @@ -237,6 +237,10 @@ module FourSlashInterface { public definitionLocationExists() { FourSlash.currentTestState.verifyDefinitionLocationExists(this.negative); } + + public verifyDefinitionsName(name: string, containerName: string) { + FourSlash.currentTestState.verifyDefinitionsName(this.negative, name, containerName); + } } export class verify extends verifyNegatable { From 8533b592e11323b5354b3bc9a34a02dc6789550b Mon Sep 17 00:00:00 2001 From: ChrisBubernak Date: Fri, 3 Oct 2014 14:52:16 -0700 Subject: [PATCH 071/110] refactored checker again --- src/compiler/checker.ts | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 48433984c4d..4ee96be9bd7 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -5022,18 +5022,20 @@ module ts { if (leftType.flags & (TypeFlags.Undefined | TypeFlags.Null)) leftType = rightType; if (rightType.flags & (TypeFlags.Undefined | TypeFlags.Null)) rightType = leftType; - if (leftType.flags & TypeFlags.Boolean && rightType.flags & TypeFlags.Boolean) { - var suggestedOperator = suggestedBooleanOperator(node.operator); - if (suggestedOperator !== undefined) { - error(node, Diagnostics.The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead, tokenToString(node.operator), tokenToString(suggestedOperator)); - } - } else { + var suggestedOperator: SyntaxKind; + // if both operands are booleans and we have a guess as to what the user meant to do return a helpful error + if ((leftType.flags & TypeFlags.Boolean) && (rightType.flags & TypeFlags.Boolean) && (suggestedOperator = getSuggestedBooleanOperator(node.operator)) !== undefined) { + error(node, Diagnostics.The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead, tokenToString(node.operator), tokenToString(suggestedOperator)); + } + // otherwise just check each operand seperately and report errors as normal + else { var leftOk = checkArithmeticOperandType(node.left, leftType, Diagnostics.The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type); var rightOk = checkArithmeticOperandType(node.right, rightType, Diagnostics.The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type); if (leftOk && rightOk) { checkAssignmentOperator(numberType); - } - } + } + } + return numberType; case SyntaxKind.PlusToken: case SyntaxKind.PlusEqualsToken: @@ -5098,7 +5100,7 @@ module ts { } // if a user tries to apply an innappropriate operator to 2 boolean operands try and return them a helpful suggestion - function suggestedBooleanOperator(operator: any): SyntaxKind { + function getSuggestedBooleanOperator(operator: any): SyntaxKind { switch (operator) { case SyntaxKind.BarToken: case SyntaxKind.BarEqualsToken: From 2a8b9ef21f4605c68a7d2e64a4932efa8f3e6f26 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Fri, 3 Oct 2014 14:53:50 -0700 Subject: [PATCH 072/110] Support rename in comments and strings. --- src/compiler/checker.ts | 4 +- src/compiler/parser.ts | 8 +-- src/harness/typeWriter.ts | 2 +- src/services/services.ts | 103 ++++++++++++++++++++++++++++++++++++-- src/services/shims.ts | 14 ++++++ src/services/utilities.ts | 2 +- 6 files changed, 121 insertions(+), 12 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index a0e55520237..c2df5760e4e 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -2575,7 +2575,7 @@ module ts { function getStringLiteralType(node: StringLiteralTypeNode): StringLiteralType { if (hasProperty(stringLiteralTypes, node.text)) return stringLiteralTypes[node.text]; var type = stringLiteralTypes[node.text] = createType(TypeFlags.StringLiteral); - type.text = getSourceTextOfNode(node); + type.text = getTextOfNode(node); return type; } @@ -7430,7 +7430,7 @@ module ts { while (!isUniqueLocalName(escapeIdentifier(prefix + name), container)) { prefix += "_"; } - links.localModuleName = prefix + getSourceTextOfNode(container.name); + links.localModuleName = prefix + getTextOfNode(container.name); } return links.localModuleName; } diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 5318e679c4e..13fe69cf1ba 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -54,11 +54,11 @@ module ts { return skipTrivia((sourceFile || getSourceFileOfNode(node)).text, node.pos); } - export function getSourceTextOfNodeFromSourceText(sourceText: string, node: Node): string { + export function getTextOfNodeFromSourceText(sourceText: string, node: Node): string { return sourceText.substring(skipTrivia(sourceText, node.pos), node.end); } - export function getSourceTextOfNode(node: Node): string { + export function getTextOfNode(node: Node): string { var text = getSourceFileOfNode(node).text; return text.substring(skipTrivia(text, node.pos), node.end); } @@ -75,7 +75,7 @@ module ts { // Return display name of an identifier export function identifierToString(identifier: Identifier) { - return identifier.kind === SyntaxKind.Missing ? "(Missing)" : getSourceTextOfNode(identifier); + return identifier.kind === SyntaxKind.Missing ? "(Missing)" : getTextOfNode(identifier); } export function createDiagnosticForNode(node: Node, message: DiagnosticMessage, arg0?: any, arg1?: any, arg2?: any): Diagnostic { @@ -3045,7 +3045,7 @@ module ts { parseExpected(SyntaxKind.ColonToken); if (labelledStatementInfo.nodeIsNestedInLabel(node.label, /*requireIterationStatement*/ false, /*stopAtFunctionBoundary*/ true)) { - grammarErrorOnNode(node.label, Diagnostics.Duplicate_label_0, getSourceTextOfNodeFromSourceText(sourceText, node.label)); + grammarErrorOnNode(node.label, Diagnostics.Duplicate_label_0, getTextOfNodeFromSourceText(sourceText, node.label)); } labelledStatementInfo.addLabel(node.label); diff --git a/src/harness/typeWriter.ts b/src/harness/typeWriter.ts index 3b5d8cd3fff..8169531c27e 100644 --- a/src/harness/typeWriter.ts +++ b/src/harness/typeWriter.ts @@ -76,7 +76,7 @@ class TypeWriterWalker { private log(node: ts.Node, type: ts.Type): void { var actualPos = ts.skipTrivia(this.currentSourceFile.text, node.pos); var lineAndCharacter = this.currentSourceFile.getLineAndCharacterFromPosition(actualPos); - var sourceText = ts.getSourceTextOfNodeFromSourceText(this.currentSourceFile.text, node); + var sourceText = ts.getTextOfNodeFromSourceText(this.currentSourceFile.text, node); // If we got an unknown type, we temporarily want to fall back to just pretending the name // (source text) of the node is the type. This is to align with the old typeWriter to make diff --git a/src/services/services.ts b/src/services/services.ts index 88efbaf2a2a..16d2bd9dffd 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -666,6 +666,8 @@ module ts { getSignatureAtPosition(fileName: string, position: number): SignatureInfo; getRenameInfo(fileName: string, position: number): RenameInfo; + findRenameLocations(fileName: string, position: number, findInStrings: boolean, findInComments: boolean): RenameLocation[]; + getDefinitionAtPosition(fileName: string, position: number): DefinitionInfo[]; getReferencesAtPosition(fileName: string, position: number): ReferenceEntry[]; getOccurrencesAtPosition(fileName: string, position: number): ReferenceEntry[]; @@ -757,6 +759,11 @@ module ts { newText: string; } + export interface RenameLocation { + textSpan: TypeScript.TextSpan; + fileName: string; + } + export interface ReferenceEntry { textSpan: TypeScript.TextSpan; fileName: string; @@ -3062,11 +3069,19 @@ module ts { } } - function getReferencesAtPosition(filename: string, position: number): ReferenceEntry[] { + function findRenameLocations(fileName: string, position: number, findInStrings: boolean, findInComments: boolean): RenameLocation[] { + return findReferences(fileName, position, findInStrings, findInComments); + } + + function getReferencesAtPosition(fileName: string, position: number): ReferenceEntry[] { + return findReferences(fileName, position, /*findInStrings:*/ false, /*findInComments:*/ false); + } + + function findReferences(fileName: string, position: number, findInStrings: boolean, findInComments: boolean): ReferenceEntry[] { synchronizeHostData(); - filename = TypeScript.switchToForwardSlashes(filename); - var sourceFile = getSourceFile(filename); + fileName = TypeScript.switchToForwardSlashes(fileName); + var sourceFile = getSourceFile(fileName); var node = getTouchingPropertyName(sourceFile, position); if (!node) { @@ -3082,7 +3097,86 @@ module ts { return undefined; } - return getReferencesForNode(node, program.getSourceFiles()); + Debug.assert(node.kind === SyntaxKind.Identifier || node.kind === SyntaxKind.NumericLiteral || node.kind === SyntaxKind.StringLiteral); + var references = getReferencesForNode(node, program.getSourceFiles()); + + var name = (node).text; + var tripleSlashDirectivePrefixRegex = /^\/\/\/\s*= 0) { + // Only consider it a match if there isn't a letter/number before or after + // the match. + var indexInSourceText = rawTextPositionInSourceText + matchIndex; + + if (indexInSourceText === 0 || !isIdentifierPart(sourceText.charCodeAt(indexInSourceText - 1), ScriptTarget.ES5)) { + var matchEnd = indexInSourceText + name.length; + if (matchEnd >= sourceText.length || !isIdentifierPart(sourceText.charCodeAt(matchEnd), ScriptTarget.ES5)) { + + references.push({ + fileName: sourceFile.filename, + textSpan: new TypeScript.TextSpan(indexInSourceText, name.length), + isWriteAccess: false + }); + } + } + + matchIndex++; + } + } + + function addCommentReferences(sourceFile: SourceFile) { + var sourceText = sourceFile.text; + forEachChild(sourceFile, addCommentReferencesInNode); + + function addCommentReferencesInNode(node: Node) { + if (isToken(node)) { + // Found a token, walk its comments (if it has any) for matches). + forEach(getLeadingCommentRanges(sourceText, node.pos), addReferencesInCommentRange); + } + else { + forEach(node.getChildren(), addCommentReferencesInNode); + } + } + + function addReferencesInCommentRange(range: CommentRange) { + var commentText = sourceText.substring(range.pos, range.end); + + // Don't add matches in /// { + return this.languageService.findRenameLocations(fileName, position, findInStrings, findInComments); + }); + } + /// GET BRACE MATCHING public getBraceMatchingAtPosition(fileName: string, position: number): string { return this.forwardJSONCall( diff --git a/src/services/utilities.ts b/src/services/utilities.ts index caa324fcc7b..af320ea0a0c 100644 --- a/src/services/utilities.ts +++ b/src/services/utilities.ts @@ -222,7 +222,7 @@ module ts { return n.kind !== SyntaxKind.SyntaxList || n.getChildCount() !== 0; } - function isToken(n: Node): boolean { + export function isToken(n: Node): boolean { return n.kind >= SyntaxKind.FirstToken && n.kind <= SyntaxKind.LastToken; } From 8a650bf7ed16cf326b4623ce069cc454b8a95677 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Fri, 3 Oct 2014 14:58:11 -0700 Subject: [PATCH 073/110] Get just the name of the symbol (instead of qualified path) as symbolName of the definition info. Fixes #652 --- src/services/services.ts | 2 +- tests/cases/fourslash/definitionNameOnEnumMember.ts | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/services/services.ts b/src/services/services.ts index 88efbaf2a2a..6b098add581 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -2599,7 +2599,7 @@ module ts { var result: DefinitionInfo[] = []; var declarations = symbol.getDeclarations(); - var symbolName = typeInfoResolver.symbolToString(symbol, node); + var symbolName = typeInfoResolver.symbolToString(symbol); // Do not get scoped name, just the name of the symbol var symbolKind = getSymbolKind(symbol); var containerSymbol = symbol.parent; var containerName = containerSymbol ? typeInfoResolver.symbolToString(containerSymbol, node) : ""; diff --git a/tests/cases/fourslash/definitionNameOnEnumMember.ts b/tests/cases/fourslash/definitionNameOnEnumMember.ts index b22b9d16c07..d88e1ef688e 100644 --- a/tests/cases/fourslash/definitionNameOnEnumMember.ts +++ b/tests/cases/fourslash/definitionNameOnEnumMember.ts @@ -8,5 +8,4 @@ ////var enumMember = e./*1*/thirdMember; goTo.marker("1"); -// This is bug #652 -verify.verifyDefinitionsName("e.thirdMember", "e"); \ No newline at end of file +verify.verifyDefinitionsName("thirdMember", "e"); \ No newline at end of file From 422324f0af459438e60e2e31b38715b207addf48 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Fri, 3 Oct 2014 15:06:04 -0700 Subject: [PATCH 074/110] CodeReview feedback. --- src/services/services.ts | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/services/services.ts b/src/services/services.ts index ebea261d41d..36ea451497b 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -1,4 +1,4 @@ - /// +/// /// /// /// @@ -4711,7 +4711,7 @@ module ts { // In order to determine if the user is potentially typing something generic, we use a // weak heuristic where we track < and > tokens. It's a weak heuristic, but should // work well enough in practice. - var inGenericStack = 0; + var angleBracketStack = 0; do { token = scanner.scan(); @@ -4736,19 +4736,18 @@ module ts { token === SyntaxKind.LessThanToken) { // Could be the start of something generic. Keep track of that by bumping // up the current count of generic contexts we may be in. - inGenericStack++; + angleBracketStack++; } - else if (token === SyntaxKind.GreaterThanToken && inGenericStack > 0) { + else if (token === SyntaxKind.GreaterThanToken && angleBracketStack > 0) { // If we think we're currently in something generic, then mark that that // generic entity is complete. - inGenericStack--; + angleBracketStack--; } else if (token === SyntaxKind.AnyKeyword || token === SyntaxKind.StringKeyword || token === SyntaxKind.NumberKeyword || - token === SyntaxKind.BooleanKeyword || - token === SyntaxKind.VoidKeyword) { - if (inGenericStack > 0) { + token === SyntaxKind.BooleanKeyword) { + if (angleBracketStack > 0) { // If it looks like we're could be in something generic, don't classify this // as a keyword. We may just get overwritten by the syntactic classifier, // causing a noisy experience for the user. From fe8f73620789976b8894f8cef907996e85caccd3 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Fri, 3 Oct 2014 15:07:18 -0700 Subject: [PATCH 075/110] Enable tests for the case sensitive and non case sensitive path resolution during soucemap path calculation --- src/harness/fourslash.ts | 22 +-- src/harness/harness.ts | 50 +++++- .../sourceMapWithCaseSensitiveFileNames.js | 26 +++ ...sourceMapWithCaseSensitiveFileNames.js.map | 2 + ...apWithCaseSensitiveFileNames.sourcemap.txt | 150 ++++++++++++++++++ .../sourceMapWithCaseSensitiveFileNames.types | 11 ++ .../sourceMapWithNonCaseSensitiveFileNames.js | 26 +++ ...rceMapWithNonCaseSensitiveFileNames.js.map | 2 + ...ithNonCaseSensitiveFileNames.sourcemap.txt | 150 ++++++++++++++++++ ...urceMapWithNonCaseSensitiveFileNames.types | 11 ++ .../sourceMapWithCaseSensitiveFileNames.ts | 12 ++ .../sourceMapWithNonCaseSensitiveFileNames.ts | 12 ++ 12 files changed, 452 insertions(+), 22 deletions(-) create mode 100644 tests/baselines/reference/sourceMapWithCaseSensitiveFileNames.js create mode 100644 tests/baselines/reference/sourceMapWithCaseSensitiveFileNames.js.map create mode 100644 tests/baselines/reference/sourceMapWithCaseSensitiveFileNames.sourcemap.txt create mode 100644 tests/baselines/reference/sourceMapWithCaseSensitiveFileNames.types create mode 100644 tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNames.js create mode 100644 tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNames.js.map create mode 100644 tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNames.sourcemap.txt create mode 100644 tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNames.types create mode 100644 tests/cases/compiler/sourceMapWithCaseSensitiveFileNames.ts create mode 100644 tests/cases/compiler/sourceMapWithNonCaseSensitiveFileNames.ts diff --git a/src/harness/fourslash.ts b/src/harness/fourslash.ts index e746bd9e7c9..e0c34bacb67 100644 --- a/src/harness/fourslash.ts +++ b/src/harness/fourslash.ts @@ -2096,9 +2096,6 @@ module FourSlash { xmlData.push(xml); } - // Cache these between executions so we don't have to re-parse them for every test - var fourslashSourceFile: ts.SourceFile = undefined; - export function runFourSlashTestContent(content: string, fileName: string): TestXmlData { // Parse out the files and their metadata var testData = parseTestData(content, fileName); @@ -2106,21 +2103,16 @@ module FourSlash { currentTestState = new TestState(testData); var result = ''; - var fourslashFilename = 'fourslash.ts'; - var tsFn = 'tests/cases/fourslash/' + fourslashFilename; - fourslashSourceFile = fourslashSourceFile || ts.createSourceFile(tsFn, Harness.IO.readFile(tsFn), ts.ScriptTarget.ES5, /*version*/ "0", /*isOpen*/ false); - - var files: { [filename: string]: ts.SourceFile; } = {}; - files[Harness.Compiler.getCanonicalFileName(fourslashFilename)] = fourslashSourceFile; - files[Harness.Compiler.getCanonicalFileName(fileName)] = ts.createSourceFile(fileName, content, ts.ScriptTarget.ES5, /*version*/ "0", /*isOpen*/ false); - files[Harness.Compiler.getCanonicalFileName(Harness.Compiler.defaultLibFileName)] = Harness.Compiler.defaultLibSourceFile; - - var host = Harness.Compiler.createCompilerHost(files, (fn, contents) => result = contents); - var program = ts.createProgram([fourslashFilename, fileName], { out: "fourslashTestOutput.js" }, host); + var host = Harness.Compiler.createCompilerHost([{ unitName: Harness.Compiler.fourslashFilename, content: undefined }, + { unitName: fileName, content: content }], + (fn, contents) => result = contents, + ts.ScriptTarget.ES5, + sys.useCaseSensitiveFileNames); + var program = ts.createProgram([Harness.Compiler.fourslashFilename, fileName], { out: "fourslashTestOutput.js" }, host); var checker = ts.createTypeChecker(program, /*fullTypeCheckMode*/ true); checker.checkProgram(); - var errs = checker.getDiagnostics(files[fileName]); + var errs = checker.getDiagnostics(program.getSourceFile(fileName)); if (errs.length > 0) { throw new Error('Error compiling ' + fileName + ': ' + errs.map(e => e.messageText).join('\r\n')); } diff --git a/src/harness/harness.ts b/src/harness/harness.ts index 268d2125c2c..686f6f9bd0f 100644 --- a/src/harness/harness.ts +++ b/src/harness/harness.ts @@ -534,18 +534,47 @@ module Harness { export var defaultLibFileName = 'lib.d.ts'; export var defaultLibSourceFile = ts.createSourceFile(defaultLibFileName, IO.readFile(libFolder + 'lib.core.d.ts'), /*languageVersion*/ ts.ScriptTarget.ES5, /*version:*/ "0"); + // Cache these between executions so we don't have to re-parse them for every test + export var fourslashFilename = 'fourslash.ts'; + export var fourslashSourceFile: ts.SourceFile; + export function getCanonicalFileName(fileName: string): string { return sys.useCaseSensitiveFileNames ? fileName : fileName.toLowerCase(); } - export function createCompilerHost(filemap: { [filename: string]: ts.SourceFile; }, writeFile: (fn: string, contents: string, writeByteOrderMark:boolean) => void): ts.CompilerHost { + export function createCompilerHost(inputFiles: { unitName: string; content: string; }[], + writeFile: (fn: string, contents: string, writeByteOrderMark: boolean) => void, + scriptTarget: ts.ScriptTarget, + useCaseSensitiveFileNames: boolean): ts.CompilerHost { + + // Local get canonical file name function, that depends on passed in parameter for useCaseSensitiveFileNames + function getCanonicalFileName(fileName: string): string { + return useCaseSensitiveFileNames ? fileName : fileName.toLowerCase(); + } + + var filemap: { [filename: string]: ts.SourceFile; } = {}; + // Register input files + function register(file: { unitName: string; content: string; }) { + if (file.content !== undefined) { + var filename = Path.switchToForwardSlashes(file.unitName); + filemap[getCanonicalFileName(filename)] = ts.createSourceFile(filename, file.content, scriptTarget, /*version:*/ "0"); + } + }; + inputFiles.forEach(register); + return { getCurrentDirectory: sys.getCurrentDirectory, getCancellationToken: (): any => undefined, getSourceFile: (fn, languageVersion) => { if (Object.prototype.hasOwnProperty.call(filemap, getCanonicalFileName(fn))) { return filemap[getCanonicalFileName(fn)]; - } else { + } + else if (fn === fourslashFilename) { + var tsFn = 'tests/cases/fourslash/' + fourslashFilename; + fourslashSourceFile = fourslashSourceFile || ts.createSourceFile(tsFn, Harness.IO.readFile(tsFn), scriptTarget, /*version*/ "0", /*isOpen*/ false); + return fourslashSourceFile; + } + else { var lib = defaultLibFileName; if (fn === defaultLibFileName) { return defaultLibSourceFile; @@ -557,7 +586,7 @@ module Harness { getDefaultLibFilename: () => defaultLibFileName, writeFile: writeFile, getCanonicalFileName: getCanonicalFileName, - useCaseSensitiveFileNames: () => sys.useCaseSensitiveFileNames, + useCaseSensitiveFileNames: () => useCaseSensitiveFileNames, getNewLine: ()=> sys.newLine }; } @@ -614,7 +643,7 @@ module Harness { } public compileFiles(inputFiles: { unitName: string; content: string }[], - otherFiles: { unitName: string; content?: string }[], + otherFiles: { unitName: string; content: string }[], onComplete: (result: CompilerResult, checker: ts.TypeChecker) => void, settingsCallback?: (settings: ts.CompilerOptions) => void, options?: ts.CompilerOptions) { @@ -628,6 +657,7 @@ module Harness { settingsCallback(null); } + var useCaseSensitiveFileNames = sys.useCaseSensitiveFileNames; this.settings.forEach(setting => { switch (setting.flag.toLowerCase()) { // "filename", "comments", "declaration", "module", "nolib", "sourcemap", "target", "out", "outDir", "noimplicitany", "noresolve" @@ -706,10 +736,13 @@ module Harness { options.removeComments = setting.value === 'false'; break; + case 'usecasesensitivefilenames': + useCaseSensitiveFileNames = setting.value === 'true'; + break; + case 'mapsourcefiles': case 'maproot': case 'generatedeclarationfiles': - case 'usecasesensitivefileresolution': case 'gatherDiagnostics': case 'codepage': case 'createFileLog': @@ -748,7 +781,10 @@ module Harness { var fileOutputs: GeneratedFile[] = []; var programFiles = inputFiles.map(file => file.unitName); - var program = ts.createProgram(programFiles, options, createCompilerHost(filemap, (fn, contents, writeByteOrderMark) => fileOutputs.push({ fileName: fn, code: contents, writeByteOrderMark: writeByteOrderMark }))); + var program = ts.createProgram(programFiles, options, createCompilerHost(inputFiles.concat(otherFiles), + (fn, contents, writeByteOrderMark) => fileOutputs.push({ fileName: fn, code: contents, writeByteOrderMark: writeByteOrderMark }), + options.target, + useCaseSensitiveFileNames)); var hadParseErrors = program.getDiagnostics().length > 0; @@ -1034,7 +1070,7 @@ module Harness { var optionRegex = /^[\/]{2}\s*@(\w+)\s*:\s*(\S*)/gm; // multiple matches on multiple lines // List of allowed metadata names - var fileMetadataNames = ["filename", "comments", "declaration", "module", "nolib", "sourcemap", "target", "out", "outDir", "noimplicitany", "noresolve", "newline", "newlines", "emitbom", "errortruncation"]; + var fileMetadataNames = ["filename", "comments", "declaration", "module", "nolib", "sourcemap", "target", "out", "outDir", "noimplicitany", "noresolve", "newline", "newlines", "emitbom", "errortruncation", "usecasesensitivefilenames"]; function extractCompilerSettings(content: string): CompilerSetting[] { diff --git a/tests/baselines/reference/sourceMapWithCaseSensitiveFileNames.js b/tests/baselines/reference/sourceMapWithCaseSensitiveFileNames.js new file mode 100644 index 00000000000..37ef08d97fb --- /dev/null +++ b/tests/baselines/reference/sourceMapWithCaseSensitiveFileNames.js @@ -0,0 +1,26 @@ +//// [tests/cases/compiler/sourceMapWithCaseSensitiveFileNames.ts] //// + +//// [app.ts] +// Note in the out result we are using same folder name only different in casing +// Since this is case sensitive, the folders are different and hence the relative paths in sourcemap shouldn't be just app.ts or app2.ts +class c { +} + +//// [app2.ts] +class d { +} + +//// [fooResult.js] +// Note in the out result we are using same folder name only different in casing +// Since this is case sensitive, the folders are different and hence the relative paths in sourcemap shouldn't be just app.ts or app2.ts +var c = (function () { + function c() { + } + return c; +})(); +var d = (function () { + function d() { + } + return d; +})(); +//# sourceMappingURL=fooResult.js.map \ No newline at end of file diff --git a/tests/baselines/reference/sourceMapWithCaseSensitiveFileNames.js.map b/tests/baselines/reference/sourceMapWithCaseSensitiveFileNames.js.map new file mode 100644 index 00000000000..384caae23ea --- /dev/null +++ b/tests/baselines/reference/sourceMapWithCaseSensitiveFileNames.js.map @@ -0,0 +1,2 @@ +//// [fooResult.js.map] +{"version":3,"file":"fooResult.js","sourceRoot":"","sources":["../testFiles/app.ts","../testFiles/app2.ts"],"names":["c","c.constructor","d","d.constructor"],"mappings":"AAEA,AAFA,gFAAgF;AAChF,wIAAwI;IAClI,CAAC;IAAPA,SAAMA,CAACA;IACPC,CAACA;IAADD,QAACA;AAADA,CAACA,AADD,IACC;ACHD,IAAM,CAAC;IAAPE,SAAMA,CAACA;IACPC,CAACA;IAADD,QAACA;AAADA,CAACA,AADD,IACC"} \ No newline at end of file diff --git a/tests/baselines/reference/sourceMapWithCaseSensitiveFileNames.sourcemap.txt b/tests/baselines/reference/sourceMapWithCaseSensitiveFileNames.sourcemap.txt new file mode 100644 index 00000000000..b67d4e3be57 --- /dev/null +++ b/tests/baselines/reference/sourceMapWithCaseSensitiveFileNames.sourcemap.txt @@ -0,0 +1,150 @@ +=================================================================== +JsFile: fooResult.js +mapUrl: fooResult.js.map +sourceRoot: +sources: ../testFiles/app.ts,../testFiles/app2.ts +=================================================================== +------------------------------------------------------------------- +emittedFile:tests/cases/compiler/testfiles/fooResult.js +sourceFile:../testFiles/app.ts +------------------------------------------------------------------- +>>>// Note in the out result we are using same folder name only different in casing +1 > +2 > +3 >^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +1 >// Note in the out result we are using same folder name only different in casing + >// Since this is case sensitive, the folders are different and hence the relative paths in sourcemap shouldn't be just app.ts or app2.ts + > +2 > +3 >// Note in the out result we are using same folder name only different in casing +1 >Emitted(1, 1) Source(3, 1) + SourceIndex(0) +2 >Emitted(1, 1) Source(1, 1) + SourceIndex(0) +3 >Emitted(1, 81) Source(1, 81) + SourceIndex(0) +--- +>>>// Since this is case sensitive, the folders are different and hence the relative paths in sourcemap shouldn't be just app.ts or app2.ts +1-> +2 >^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +1-> + > +2 >// Since this is case sensitive, the folders are different and hence the relative paths in sourcemap shouldn't be just app.ts or app2.ts +1->Emitted(2, 1) Source(2, 1) + SourceIndex(0) +2 >Emitted(2, 137) Source(2, 137) + SourceIndex(0) +--- +>>>var c = (function () { +1 >^^^^ +2 > ^ +3 > ^^^^^^^^^^^^^^-> +1 > + >class +2 > c +1 >Emitted(3, 5) Source(3, 7) + SourceIndex(0) +2 >Emitted(3, 6) Source(3, 8) + SourceIndex(0) +--- +>>> function c() { +1->^^^^ +2 > ^^^^^^^^^ +3 > ^ +1-> +2 > class +3 > c +1->Emitted(4, 5) Source(3, 1) + SourceIndex(0) name (c) +2 >Emitted(4, 14) Source(3, 7) + SourceIndex(0) name (c) +3 >Emitted(4, 15) Source(3, 8) + SourceIndex(0) name (c) +--- +>>> } +1 >^^^^ +2 > ^ +3 > ^^^^^^^^^-> +1 > { + > +2 > } +1 >Emitted(5, 5) Source(4, 1) + SourceIndex(0) name (c.constructor) +2 >Emitted(5, 6) Source(4, 2) + SourceIndex(0) name (c.constructor) +--- +>>> return c; +1->^^^^ +2 > ^^^^^^^^ +1-> +2 > } +1->Emitted(6, 5) Source(4, 1) + SourceIndex(0) name (c) +2 >Emitted(6, 13) Source(4, 2) + SourceIndex(0) name (c) +--- +>>>})(); +1 > +2 >^ +3 > +4 > ^^^^ +5 > ^^^^^^^^^^^^^^^^^^-> +1 > +2 >} +3 > +4 > class c { + > } +1 >Emitted(7, 1) Source(4, 1) + SourceIndex(0) name (c) +2 >Emitted(7, 2) Source(4, 2) + SourceIndex(0) name (c) +3 >Emitted(7, 2) Source(3, 1) + SourceIndex(0) +4 >Emitted(7, 6) Source(4, 2) + SourceIndex(0) +--- +------------------------------------------------------------------- +emittedFile:tests/cases/compiler/testfiles/fooResult.js +sourceFile:../testFiles/app2.ts +------------------------------------------------------------------- +>>>var d = (function () { +1-> +2 >^^^^ +3 > ^ +4 > ^^^^^^^^^^^^^^-> +1-> +2 >class +3 > d +1->Emitted(8, 1) Source(1, 1) + SourceIndex(1) +2 >Emitted(8, 5) Source(1, 7) + SourceIndex(1) +3 >Emitted(8, 6) Source(1, 8) + SourceIndex(1) +--- +>>> function d() { +1->^^^^ +2 > ^^^^^^^^^ +3 > ^ +1-> +2 > class +3 > d +1->Emitted(9, 5) Source(1, 1) + SourceIndex(1) name (d) +2 >Emitted(9, 14) Source(1, 7) + SourceIndex(1) name (d) +3 >Emitted(9, 15) Source(1, 8) + SourceIndex(1) name (d) +--- +>>> } +1 >^^^^ +2 > ^ +3 > ^^^^^^^^^-> +1 > { + > +2 > } +1 >Emitted(10, 5) Source(2, 1) + SourceIndex(1) name (d.constructor) +2 >Emitted(10, 6) Source(2, 2) + SourceIndex(1) name (d.constructor) +--- +>>> return d; +1->^^^^ +2 > ^^^^^^^^ +1-> +2 > } +1->Emitted(11, 5) Source(2, 1) + SourceIndex(1) name (d) +2 >Emitted(11, 13) Source(2, 2) + SourceIndex(1) name (d) +--- +>>>})(); +1 > +2 >^ +3 > +4 > ^^^^ +5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +1 > +2 >} +3 > +4 > class d { + > } +1 >Emitted(12, 1) Source(2, 1) + SourceIndex(1) name (d) +2 >Emitted(12, 2) Source(2, 2) + SourceIndex(1) name (d) +3 >Emitted(12, 2) Source(1, 1) + SourceIndex(1) +4 >Emitted(12, 6) Source(2, 2) + SourceIndex(1) +--- +>>>//# sourceMappingURL=fooResult.js.map \ No newline at end of file diff --git a/tests/baselines/reference/sourceMapWithCaseSensitiveFileNames.types b/tests/baselines/reference/sourceMapWithCaseSensitiveFileNames.types new file mode 100644 index 00000000000..2d42e0b5e4b --- /dev/null +++ b/tests/baselines/reference/sourceMapWithCaseSensitiveFileNames.types @@ -0,0 +1,11 @@ +=== tests/cases/compiler/testFiles/app.ts === +// Note in the out result we are using same folder name only different in casing +// Since this is case sensitive, the folders are different and hence the relative paths in sourcemap shouldn't be just app.ts or app2.ts +class c { +>c : c +} + +=== tests/cases/compiler/testFiles/app2.ts === +class d { +>d : d +} diff --git a/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNames.js b/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNames.js new file mode 100644 index 00000000000..50a3a2f3bc8 --- /dev/null +++ b/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNames.js @@ -0,0 +1,26 @@ +//// [tests/cases/compiler/sourceMapWithNonCaseSensitiveFileNames.ts] //// + +//// [app.ts] +// Note in the out result we are using same folder name only different in casing +// Since this is non case sensitive, the relative paths should be just app.ts and app2.ts in the sourcemap +class c { +} + +//// [app2.ts] +class d { +} + +//// [fooResult.js] +// Note in the out result we are using same folder name only different in casing +// Since this is non case sensitive, the relative paths should be just app.ts and app2.ts in the sourcemap +var c = (function () { + function c() { + } + return c; +})(); +var d = (function () { + function d() { + } + return d; +})(); +//# sourceMappingURL=fooResult.js.map \ No newline at end of file diff --git a/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNames.js.map b/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNames.js.map new file mode 100644 index 00000000000..49f94ed3829 --- /dev/null +++ b/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNames.js.map @@ -0,0 +1,2 @@ +//// [fooResult.js.map] +{"version":3,"file":"fooResult.js","sourceRoot":"","sources":["../testFiles/app.ts","../testFiles/app2.ts"],"names":["c","c.constructor","d","d.constructor"],"mappings":"AAEA,AAFA,gFAAgF;AAChF,0GAA0G;IACpG,CAAC;IAAPA,SAAMA,CAACA;IACPC,CAACA;IAADD,QAACA;AAADA,CAACA,AADD,IACC;ACHD,IAAM,CAAC;IAAPE,SAAMA,CAACA;IACPC,CAACA;IAADD,QAACA;AAADA,CAACA,AADD,IACC"} \ No newline at end of file diff --git a/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNames.sourcemap.txt b/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNames.sourcemap.txt new file mode 100644 index 00000000000..67f80b38bec --- /dev/null +++ b/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNames.sourcemap.txt @@ -0,0 +1,150 @@ +=================================================================== +JsFile: fooResult.js +mapUrl: fooResult.js.map +sourceRoot: +sources: ../testFiles/app.ts,../testFiles/app2.ts +=================================================================== +------------------------------------------------------------------- +emittedFile:tests/cases/compiler/testfiles/fooResult.js +sourceFile:../testFiles/app.ts +------------------------------------------------------------------- +>>>// Note in the out result we are using same folder name only different in casing +1 > +2 > +3 >^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +1 >// Note in the out result we are using same folder name only different in casing + >// Since this is non case sensitive, the relative paths should be just app.ts and app2.ts in the sourcemap + > +2 > +3 >// Note in the out result we are using same folder name only different in casing +1 >Emitted(1, 1) Source(3, 1) + SourceIndex(0) +2 >Emitted(1, 1) Source(1, 1) + SourceIndex(0) +3 >Emitted(1, 81) Source(1, 81) + SourceIndex(0) +--- +>>>// Since this is non case sensitive, the relative paths should be just app.ts and app2.ts in the sourcemap +1-> +2 >^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +1-> + > +2 >// Since this is non case sensitive, the relative paths should be just app.ts and app2.ts in the sourcemap +1->Emitted(2, 1) Source(2, 1) + SourceIndex(0) +2 >Emitted(2, 107) Source(2, 107) + SourceIndex(0) +--- +>>>var c = (function () { +1 >^^^^ +2 > ^ +3 > ^^^^^^^^^^^^^^-> +1 > + >class +2 > c +1 >Emitted(3, 5) Source(3, 7) + SourceIndex(0) +2 >Emitted(3, 6) Source(3, 8) + SourceIndex(0) +--- +>>> function c() { +1->^^^^ +2 > ^^^^^^^^^ +3 > ^ +1-> +2 > class +3 > c +1->Emitted(4, 5) Source(3, 1) + SourceIndex(0) name (c) +2 >Emitted(4, 14) Source(3, 7) + SourceIndex(0) name (c) +3 >Emitted(4, 15) Source(3, 8) + SourceIndex(0) name (c) +--- +>>> } +1 >^^^^ +2 > ^ +3 > ^^^^^^^^^-> +1 > { + > +2 > } +1 >Emitted(5, 5) Source(4, 1) + SourceIndex(0) name (c.constructor) +2 >Emitted(5, 6) Source(4, 2) + SourceIndex(0) name (c.constructor) +--- +>>> return c; +1->^^^^ +2 > ^^^^^^^^ +1-> +2 > } +1->Emitted(6, 5) Source(4, 1) + SourceIndex(0) name (c) +2 >Emitted(6, 13) Source(4, 2) + SourceIndex(0) name (c) +--- +>>>})(); +1 > +2 >^ +3 > +4 > ^^^^ +5 > ^^^^^^^^^^^^^^^^^^-> +1 > +2 >} +3 > +4 > class c { + > } +1 >Emitted(7, 1) Source(4, 1) + SourceIndex(0) name (c) +2 >Emitted(7, 2) Source(4, 2) + SourceIndex(0) name (c) +3 >Emitted(7, 2) Source(3, 1) + SourceIndex(0) +4 >Emitted(7, 6) Source(4, 2) + SourceIndex(0) +--- +------------------------------------------------------------------- +emittedFile:tests/cases/compiler/testfiles/fooResult.js +sourceFile:../testFiles/app2.ts +------------------------------------------------------------------- +>>>var d = (function () { +1-> +2 >^^^^ +3 > ^ +4 > ^^^^^^^^^^^^^^-> +1-> +2 >class +3 > d +1->Emitted(8, 1) Source(1, 1) + SourceIndex(1) +2 >Emitted(8, 5) Source(1, 7) + SourceIndex(1) +3 >Emitted(8, 6) Source(1, 8) + SourceIndex(1) +--- +>>> function d() { +1->^^^^ +2 > ^^^^^^^^^ +3 > ^ +1-> +2 > class +3 > d +1->Emitted(9, 5) Source(1, 1) + SourceIndex(1) name (d) +2 >Emitted(9, 14) Source(1, 7) + SourceIndex(1) name (d) +3 >Emitted(9, 15) Source(1, 8) + SourceIndex(1) name (d) +--- +>>> } +1 >^^^^ +2 > ^ +3 > ^^^^^^^^^-> +1 > { + > +2 > } +1 >Emitted(10, 5) Source(2, 1) + SourceIndex(1) name (d.constructor) +2 >Emitted(10, 6) Source(2, 2) + SourceIndex(1) name (d.constructor) +--- +>>> return d; +1->^^^^ +2 > ^^^^^^^^ +1-> +2 > } +1->Emitted(11, 5) Source(2, 1) + SourceIndex(1) name (d) +2 >Emitted(11, 13) Source(2, 2) + SourceIndex(1) name (d) +--- +>>>})(); +1 > +2 >^ +3 > +4 > ^^^^ +5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +1 > +2 >} +3 > +4 > class d { + > } +1 >Emitted(12, 1) Source(2, 1) + SourceIndex(1) name (d) +2 >Emitted(12, 2) Source(2, 2) + SourceIndex(1) name (d) +3 >Emitted(12, 2) Source(1, 1) + SourceIndex(1) +4 >Emitted(12, 6) Source(2, 2) + SourceIndex(1) +--- +>>>//# sourceMappingURL=fooResult.js.map \ No newline at end of file diff --git a/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNames.types b/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNames.types new file mode 100644 index 00000000000..2dd1319e9dd --- /dev/null +++ b/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNames.types @@ -0,0 +1,11 @@ +=== tests/cases/compiler/testFiles/app.ts === +// Note in the out result we are using same folder name only different in casing +// Since this is non case sensitive, the relative paths should be just app.ts and app2.ts in the sourcemap +class c { +>c : c +} + +=== tests/cases/compiler/testFiles/app2.ts === +class d { +>d : d +} diff --git a/tests/cases/compiler/sourceMapWithCaseSensitiveFileNames.ts b/tests/cases/compiler/sourceMapWithCaseSensitiveFileNames.ts new file mode 100644 index 00000000000..d0dff702aae --- /dev/null +++ b/tests/cases/compiler/sourceMapWithCaseSensitiveFileNames.ts @@ -0,0 +1,12 @@ +// @out: tests/cases/compiler/testfiles/fooResult.js +// @sourcemap: true +// @useCaseSensitiveFileNames: true +// @Filename: testFiles/app.ts +// Note in the out result we are using same folder name only different in casing +// Since this is case sensitive, the folders are different and hence the relative paths in sourcemap shouldn't be just app.ts or app2.ts +class c { +} + +// @Filename: testFiles/app2.ts +class d { +} \ No newline at end of file diff --git a/tests/cases/compiler/sourceMapWithNonCaseSensitiveFileNames.ts b/tests/cases/compiler/sourceMapWithNonCaseSensitiveFileNames.ts new file mode 100644 index 00000000000..85905fb29b9 --- /dev/null +++ b/tests/cases/compiler/sourceMapWithNonCaseSensitiveFileNames.ts @@ -0,0 +1,12 @@ +// @out: tests/cases/compiler/testfiles/fooResult.js +// @sourcemap: true +// @useCaseSensitiveFileNames: false +// @Filename: testFiles/app.ts +// Note in the out result we are using same folder name only different in casing +// Since this is non case sensitive, the relative paths should be just app.ts and app2.ts in the sourcemap +class c { +} + +// @Filename: testFiles/app2.ts +class d { +} \ No newline at end of file From 710bac6d81a11174eff8c0e60fe1de99262c98ba Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Fri, 3 Oct 2014 15:10:12 -0700 Subject: [PATCH 076/110] Fix the source map directory resolution with non case sensitive file names --- src/compiler/core.ts | 4 ++-- src/compiler/emitter.ts | 9 ++++++--- src/harness/projectsRunner.ts | 3 ++- .../sourceMapWithNonCaseSensitiveFileNames.js.map | 2 +- .../sourceMapWithNonCaseSensitiveFileNames.sourcemap.txt | 6 +++--- 5 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/compiler/core.ts b/src/compiler/core.ts index 123bde2e719..5155289c73a 100644 --- a/src/compiler/core.ts +++ b/src/compiler/core.ts @@ -476,7 +476,7 @@ module ts { } } - export function getRelativePathToDirectoryOrUrl(directoryPathOrUrl: string, relativeOrAbsolutePath: string, currentDirectory: string, isAbsolutePathAnUrl: boolean) { + export function getRelativePathToDirectoryOrUrl(directoryPathOrUrl: string, relativeOrAbsolutePath: string, currentDirectory: string, getCanonicalFileName: (fileName: string) => string, isAbsolutePathAnUrl: boolean) { var pathComponents = getNormalizedPathOrUrlComponents(relativeOrAbsolutePath, currentDirectory); var directoryComponents = getNormalizedPathOrUrlComponents(directoryPathOrUrl, currentDirectory); if (directoryComponents.length > 1 && directoryComponents[directoryComponents.length - 1] === "") { @@ -487,7 +487,7 @@ module ts { // Find the component that differs for (var joinStartIndex = 0; joinStartIndex < pathComponents.length && joinStartIndex < directoryComponents.length; joinStartIndex++) { - if (directoryComponents[joinStartIndex] !== pathComponents[joinStartIndex]) { + if (getCanonicalFileName(directoryComponents[joinStartIndex]) !== getCanonicalFileName(pathComponents[joinStartIndex])) { break; } } diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index a91637f2332..d9eb5ca12c9 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -527,7 +527,8 @@ module ts { sourceMapData.sourceMapSources.push(getRelativePathToDirectoryOrUrl(sourcesDirectoryPath, node.filename, compilerHost.getCurrentDirectory(), - /*isAbsolutePathAnUrl*/ true)); + compilerHost.getCanonicalFileName, + /*isAbsolutePathAnUrl*/ true)); sourceMapSourceIndex = sourceMapData.sourceMapSources.length - 1; // The one that can be used from program to get the actual source file @@ -692,7 +693,8 @@ module ts { getDirectoryPath(normalizePath(jsFilePath)), // get the relative sourceMapDir path based on jsFilePath combinePaths(sourceMapDir, sourceMapData.jsSourceMappingURL), // this is where user expects to see sourceMap compilerHost.getCurrentDirectory(), - /*isAbsolutePathAnUrl*/ true); + compilerHost.getCanonicalFileName, + /*isAbsolutePathAnUrl*/ true); } else { sourceMapData.jsSourceMappingURL = combinePaths(sourceMapDir, sourceMapData.jsSourceMappingURL); @@ -3170,7 +3172,8 @@ module ts { getDirectoryPath(normalizeSlashes(jsFilePath)), declFileName, compilerHost.getCurrentDirectory(), - /*isAbsolutePathAnUrl*/ false); + compilerHost.getCanonicalFileName, + /*isAbsolutePathAnUrl*/ false); referencePathsOutput += "/// " + newLine; } diff --git a/src/harness/projectsRunner.ts b/src/harness/projectsRunner.ts index c294f5b1be4..2886c43f091 100644 --- a/src/harness/projectsRunner.ts +++ b/src/harness/projectsRunner.ts @@ -226,7 +226,8 @@ class ProjectRunner extends RunnerBase { ? filename : ts.normalizeSlashes(testCase.projectRoot) + "/" + ts.normalizeSlashes(filename); - var diskRelativeName = ts.getRelativePathToDirectoryOrUrl(testCase.projectRoot, diskFileName, getCurrentDirectory(), false); + var diskRelativeName = ts.getRelativePathToDirectoryOrUrl(testCase.projectRoot, diskFileName, + getCurrentDirectory(), Harness.Compiler.getCanonicalFileName, /*isAbsolutePathAnUrl*/ false); if (ts.isRootedDiskPath(diskRelativeName) || diskRelativeName.substr(0, 3) === "../") { // If the generated output file resides in the parent folder or is rooted path, // we need to instead create files that can live in the project reference folder diff --git a/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNames.js.map b/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNames.js.map index 49f94ed3829..0a164a2a2c2 100644 --- a/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNames.js.map +++ b/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNames.js.map @@ -1,2 +1,2 @@ //// [fooResult.js.map] -{"version":3,"file":"fooResult.js","sourceRoot":"","sources":["../testFiles/app.ts","../testFiles/app2.ts"],"names":["c","c.constructor","d","d.constructor"],"mappings":"AAEA,AAFA,gFAAgF;AAChF,0GAA0G;IACpG,CAAC;IAAPA,SAAMA,CAACA;IACPC,CAACA;IAADD,QAACA;AAADA,CAACA,AADD,IACC;ACHD,IAAM,CAAC;IAAPE,SAAMA,CAACA;IACPC,CAACA;IAADD,QAACA;AAADA,CAACA,AADD,IACC"} \ No newline at end of file +{"version":3,"file":"fooResult.js","sourceRoot":"","sources":["app.ts","app2.ts"],"names":["c","c.constructor","d","d.constructor"],"mappings":"AAEA,AAFA,gFAAgF;AAChF,0GAA0G;IACpG,CAAC;IAAPA,SAAMA,CAACA;IACPC,CAACA;IAADD,QAACA;AAADA,CAACA,AADD,IACC;ACHD,IAAM,CAAC;IAAPE,SAAMA,CAACA;IACPC,CAACA;IAADD,QAACA;AAADA,CAACA,AADD,IACC"} \ No newline at end of file diff --git a/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNames.sourcemap.txt b/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNames.sourcemap.txt index 67f80b38bec..1923426adc6 100644 --- a/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNames.sourcemap.txt +++ b/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNames.sourcemap.txt @@ -2,11 +2,11 @@ JsFile: fooResult.js mapUrl: fooResult.js.map sourceRoot: -sources: ../testFiles/app.ts,../testFiles/app2.ts +sources: app.ts,app2.ts =================================================================== ------------------------------------------------------------------- emittedFile:tests/cases/compiler/testfiles/fooResult.js -sourceFile:../testFiles/app.ts +sourceFile:app.ts ------------------------------------------------------------------- >>>// Note in the out result we are using same folder name only different in casing 1 > @@ -88,7 +88,7 @@ sourceFile:../testFiles/app.ts --- ------------------------------------------------------------------- emittedFile:tests/cases/compiler/testfiles/fooResult.js -sourceFile:../testFiles/app2.ts +sourceFile:app2.ts ------------------------------------------------------------------- >>>var d = (function () { 1-> From 1f045e1227cf1a15acff83c827f9a0d232ef32ec Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Fri, 3 Oct 2014 15:33:29 -0700 Subject: [PATCH 077/110] Adding rename tests. --- src/harness/fourslash.ts | 58 +++++++++++++++++++++++------- tests/cases/fourslash/fourslash.ts | 5 ++- 2 files changed, 49 insertions(+), 14 deletions(-) diff --git a/src/harness/fourslash.ts b/src/harness/fourslash.ts index e746bd9e7c9..ebc6ec61d8f 100644 --- a/src/harness/fourslash.ts +++ b/src/harness/fourslash.ts @@ -758,6 +758,10 @@ module FourSlash { return this.languageService.getImplementorsAtPosition(this.activeFile.fileName, this.currentCaretPosition); } + private assertionMessage(name: string, actualValue: any, expectedValue: any) { + return "\nActual " + name + ":\n\t" + actualValue + "\nExpected value:\n\t" + expectedValue; + } + public verifyQuickInfo(negative: boolean, expectedTypeName?: string, docComment?: string, symbolName?: string, kind?: string) { [expectedTypeName, docComment, symbolName, kind].forEach(str => { if (str) { @@ -772,40 +776,68 @@ module FourSlash { var actualQuickInfoSymbolName = actualQuickInfo ? actualQuickInfo.fullSymbolName : ""; var actualQuickInfoKind = actualQuickInfo ? actualQuickInfo.kind : ""; - function assertionMessage(name: string, actualValue: string, expectedValue: string) { - return "\nActual " + name + ":\n\t" + actualValue + "\nExpected value:\n\t" + expectedValue; - } - if (negative) { if (expectedTypeName !== undefined) { - assert.notEqual(actualQuickInfoMemberName, expectedTypeName, assertionMessage("quick info member name", actualQuickInfoMemberName, expectedTypeName)); + assert.notEqual(actualQuickInfoMemberName, expectedTypeName, this.assertionMessage("quick info member name", actualQuickInfoMemberName, expectedTypeName)); } if (docComment != undefined) { - assert.notEqual(actualQuickInfoDocComment, docComment, assertionMessage("quick info doc comment", actualQuickInfoDocComment, docComment)); + assert.notEqual(actualQuickInfoDocComment, docComment, this.assertionMessage("quick info doc comment", actualQuickInfoDocComment, docComment)); } if (symbolName !== undefined) { - assert.notEqual(actualQuickInfoSymbolName, symbolName, assertionMessage("quick info symbol name", actualQuickInfoSymbolName, symbolName)); + assert.notEqual(actualQuickInfoSymbolName, symbolName, this.assertionMessage("quick info symbol name", actualQuickInfoSymbolName, symbolName)); } if (kind !== undefined) { - assert.notEqual(actualQuickInfoKind, kind, assertionMessage("quick info kind", actualQuickInfoKind, kind)); + assert.notEqual(actualQuickInfoKind, kind, this.assertionMessage("quick info kind", actualQuickInfoKind, kind)); } } else { if (expectedTypeName !== undefined) { - assert.equal(actualQuickInfoMemberName, expectedTypeName, assertionMessage("quick info member", actualQuickInfoMemberName, expectedTypeName)); + assert.equal(actualQuickInfoMemberName, expectedTypeName, this.assertionMessage("quick info member", actualQuickInfoMemberName, expectedTypeName)); } if (docComment != undefined) { - assert.equal(actualQuickInfoDocComment, docComment, assertionMessage("quick info doc", actualQuickInfoDocComment, docComment)); + assert.equal(actualQuickInfoDocComment, docComment, this.assertionMessage("quick info doc", actualQuickInfoDocComment, docComment)); } if (symbolName !== undefined) { - assert.equal(actualQuickInfoSymbolName, symbolName, assertionMessage("quick info symbol name", actualQuickInfoSymbolName, symbolName)); + assert.equal(actualQuickInfoSymbolName, symbolName, this.assertionMessage("quick info symbol name", actualQuickInfoSymbolName, symbolName)); } if (kind !== undefined) { - assert.equal(actualQuickInfoKind, kind, assertionMessage("quick info kind", actualQuickInfoKind, kind)); + assert.equal(actualQuickInfoKind, kind, this.assertionMessage("quick info kind", actualQuickInfoKind, kind)); } } } - public verifyQuickInfoExists(negative: number) { + public verifyRenameLocations(findInStrings: boolean, findInComments: boolean) { + var renameInfo = this.languageService.getRenameInfo(this.activeFile.fileName, this.currentCaretPosition); + if (renameInfo.canRename) { + var references = this.languageService.findRenameLocations( + this.activeFile.fileName, this.currentCaretPosition, findInStrings, findInComments); + + var ranges = this.getRanges(); + if (ranges.length !== references.length) { + this.raiseError(this.assertionMessage("Rename locations", references.length, ranges.length)); + } + + ranges = ranges.sort((r1, r2) => r1.start - r2.start); + references = references.sort((r1, r2) => r1.textSpan.start() - r2.textSpan.start()); + + for (var i = 0, n = ranges.length; i < n; i++) { + var reference = references[i]; + var range = ranges[i]; + + if (reference.textSpan.start() !== range.start || + reference.textSpan.end() !== range.end) { + + this.raiseError(this.assertionMessage("Rename location", + "[" + reference.textSpan.start() + "," + reference.textSpan.end() + ")", + "[" + range.start + "," + range.end + ")")); + } + } + } + else { + this.raiseError("Expected rename to succeed, but it actually failed."); + } + } + + public verifyQuickInfoExists(negative: boolean) { this.taoInvalidReason = 'verifyQuickInfoExists NYI'; var actualQuickInfo = this.languageService.getTypeAtPosition(this.activeFile.fileName, this.currentCaretPosition); diff --git a/tests/cases/fourslash/fourslash.ts b/tests/cases/fourslash/fourslash.ts index c204a98c4a4..537ff8527d6 100644 --- a/tests/cases/fourslash/fourslash.ts +++ b/tests/cases/fourslash/fourslash.ts @@ -240,7 +240,6 @@ module FourSlashInterface { } export class verify extends verifyNegatable { - public caretAtMarker(markerName?: string) { FourSlash.currentTestState.verifyCaretAtMarker(markerName); } @@ -417,6 +416,10 @@ module FourSlashInterface { public renameInfoFailed(message?: string) { FourSlash.currentTestState.verifyRenameInfoFailed(message) } + + public renameLocations(findInStrings: boolean, findInComments: boolean) { + FourSlash.currentTestState.verifyRenameLocations(findInStrings, findInComments); + } } export class edit { From 4069e0a0d00a1bed4654a9c252a895e8ae4b8bf2 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Fri, 3 Oct 2014 15:53:35 -0700 Subject: [PATCH 078/110] Finished up "overload collapsing" for navigate-to. Current semantics: - If an overload lacks an implementation, go to the first implementation. - If an overload has any implementation, go to the first one. - If there are any declarations between an implementation and any overload, this will split the series of overloads (note that this is invalid code). --- src/services/services.ts | 36 +++++++++---------- ....ts => navigationItemsOverloadsBroken1.ts} | 4 +-- .../navigationItemsOverloadsBroken2.ts | 23 ++++++++++++ 3 files changed, 43 insertions(+), 20 deletions(-) rename tests/cases/fourslash/{navigationItemsOverloadsBroken.ts => navigationItemsOverloadsBroken1.ts} (88%) create mode 100644 tests/cases/fourslash/navigationItemsOverloadsBroken2.ts diff --git a/src/services/services.ts b/src/services/services.ts index a7a3b43afd1..11a84a42635 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -504,28 +504,31 @@ module ts { if (!this.namedDeclarations) { var sourceFile = this; var namedDeclarations: Declaration[] = []; - - // This keeps track of the last encountered function/method/method signature - // so that we may ignore all but the first overload. - var overloadDeclaration: FunctionDeclaration; - forEachChild(sourceFile, function visit(node: Node): boolean { + forEachChild(sourceFile, function visit(node: Node): void { switch (node.kind) { case SyntaxKind.FunctionDeclaration: case SyntaxKind.Method: var functionDeclaration = node; - // We can assume that overloadDeclaration will never be "trampled" - // between consecutive overloads because we never dive into parameter initializers. - if (functionDeclaration.name) { - if (overloadDeclaration && - functionDeclaration.name.text === overloadDeclaration.name.text && - node.parent === overloadDeclaration.parent) { - break; + if (functionDeclaration.name && functionDeclaration.name.kind !== SyntaxKind.Missing) { + var lastDeclaration = namedDeclarations.length > 0 ? + namedDeclarations[namedDeclarations.length - 1] : + undefined; + + // Check whether this declaration belongs to an "overload group". + if (lastDeclaration && functionDeclaration.symbol === lastDeclaration.symbol) { + // Overwrite the last declaration if it was an overload + // and this one is an implementation. + if (functionDeclaration.body && !(lastDeclaration).body) { + namedDeclarations[namedDeclarations.length - 1] = functionDeclaration; + } + } + else { + namedDeclarations.push(node); } - namedDeclarations.push(functionDeclaration); - overloadDeclaration = functionDeclaration; + forEachChild(node, visit); } break; @@ -534,7 +537,6 @@ module ts { case SyntaxKind.EnumDeclaration: case SyntaxKind.ModuleDeclaration: case SyntaxKind.ImportDeclaration: - case SyntaxKind.Constructor: case SyntaxKind.GetAccessor: case SyntaxKind.SetAccessor: case SyntaxKind.TypeLiteral: @@ -542,6 +544,7 @@ module ts { namedDeclarations.push(node); } // fall through + case SyntaxKind.Constructor: case SyntaxKind.VariableStatement: case SyntaxKind.ModuleBlock: case SyntaxKind.FunctionBlock: @@ -560,9 +563,6 @@ module ts { namedDeclarations.push(node); break; } - - // do not go any deeper - return undefined; }); this.namedDeclarations = namedDeclarations; diff --git a/tests/cases/fourslash/navigationItemsOverloadsBroken.ts b/tests/cases/fourslash/navigationItemsOverloadsBroken1.ts similarity index 88% rename from tests/cases/fourslash/navigationItemsOverloadsBroken.ts rename to tests/cases/fourslash/navigationItemsOverloadsBroken1.ts index f9501948272..7b8ebc9181f 100644 --- a/tests/cases/fourslash/navigationItemsOverloadsBroken.ts +++ b/tests/cases/fourslash/navigationItemsOverloadsBroken1.ts @@ -24,6 +24,6 @@ //// throw overload; ////} -verify.navigationItemsListCount(1, "overload1", "exact"); +verify.navigationItemsListCount(2, "overload1", "exact"); verify.navigationItemsListCount(2, "overload2", "exact"); -verify.navigationItemsListCount(3, "overload", "prefix"); \ No newline at end of file +verify.navigationItemsListCount(4, "overload", "prefix"); \ No newline at end of file diff --git a/tests/cases/fourslash/navigationItemsOverloadsBroken2.ts b/tests/cases/fourslash/navigationItemsOverloadsBroken2.ts new file mode 100644 index 00000000000..c1f6ccae2f5 --- /dev/null +++ b/tests/cases/fourslash/navigationItemsOverloadsBroken2.ts @@ -0,0 +1,23 @@ +/// + +////function overload1(a: string): boolean; +////function overload1(b: boolean): boolean; +////function overload1(x: any, b = (function overload() { return false })): boolean { +//// throw overload1; +////} +////function overload1(b: number): boolean; +////function overload1(f: typeof overload): boolean; + +////function overload2(a: string): boolean; +////function overload2(b: boolean): boolean; +////function overload2(x: any, b = (function overload() { return false })): boolean { +//// function overload2(): boolean; +//// function overload2(x: any): boolean; +//// throw overload2; +////} +////function overload2(b: number): boolean; +////function overload2(f: typeof overload): boolean; + +verify.navigationItemsListCount(1, "overload1", "exact"); +verify.navigationItemsListCount(3, "overload2", "exact"); +verify.navigationItemsListCount(4, "overload", "prefix"); \ No newline at end of file From 468e9b62baf412b77c5198254f063111ae82760e Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Fri, 3 Oct 2014 15:53:41 -0700 Subject: [PATCH 079/110] Renamed assertionMessage to messageAtLastKnownMarker in fourslash --- src/harness/fourslash.ts | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/harness/fourslash.ts b/src/harness/fourslash.ts index b5a3897196b..1e0369ff098 100644 --- a/src/harness/fourslash.ts +++ b/src/harness/fourslash.ts @@ -413,11 +413,11 @@ module FourSlash { } private raiseError(message: string) { - message = this.assertionMessage(message); + message = this.messageAtLastKnownMarker(message); throw new Error(message); } - private assertionMessage(message: string) { + private messageAtLastKnownMarker(message: string) { return "Marker: " + currentTestState.lastKnownMarker + "\n" + message; } @@ -778,29 +778,29 @@ module FourSlash { if (negative) { if (expectedTypeName !== undefined) { - assert.notEqual(actualQuickInfoMemberName, expectedTypeName, this.assertionMessage("quick info member name")); + assert.notEqual(actualQuickInfoMemberName, expectedTypeName, this.messageAtLastKnownMarker("quick info member name")); } if (docComment != undefined) { - assert.notEqual(actualQuickInfoDocComment, docComment, this.assertionMessage("quick info doc comment")); + assert.notEqual(actualQuickInfoDocComment, docComment, this.messageAtLastKnownMarker("quick info doc comment")); } if (symbolName !== undefined) { - assert.notEqual(actualQuickInfoSymbolName, symbolName, this.assertionMessage("quick info symbol name")); + assert.notEqual(actualQuickInfoSymbolName, symbolName, this.messageAtLastKnownMarker("quick info symbol name")); } if (kind !== undefined) { - assert.notEqual(actualQuickInfoKind, kind, this.assertionMessage("quick info kind")); + assert.notEqual(actualQuickInfoKind, kind, this.messageAtLastKnownMarker("quick info kind")); } } else { if (expectedTypeName !== undefined) { - assert.equal(actualQuickInfoMemberName, expectedTypeName, this.assertionMessage("quick info member")); + assert.equal(actualQuickInfoMemberName, expectedTypeName, this.messageAtLastKnownMarker("quick info member")); } if (docComment != undefined) { - assert.equal(actualQuickInfoDocComment, docComment, this.assertionMessage("quick info doc")); + assert.equal(actualQuickInfoDocComment, docComment, this.messageAtLastKnownMarker("quick info doc")); } if (symbolName !== undefined) { - assert.equal(actualQuickInfoSymbolName, symbolName, this.assertionMessage("quick info symbol name")); + assert.equal(actualQuickInfoSymbolName, symbolName, this.messageAtLastKnownMarker("quick info symbol name")); } if (kind !== undefined) { - assert.equal(actualQuickInfoKind, kind, this.assertionMessage("quick info kind")); + assert.equal(actualQuickInfoKind, kind, this.messageAtLastKnownMarker("quick info kind")); } } } @@ -1455,11 +1455,11 @@ module FourSlash { var actualDefinitionName = definitions && definitions.length ? definitions[0].name : ""; var actualDefinitionContainerName = definitions && definitions.length ? definitions[0].containerName : ""; if (negative) { - assert.notEqual(actualDefinitionName, expectedName, this.assertionMessage("Definition Info Name")); - assert.notEqual(actualDefinitionName, expectedName, this.assertionMessage("Definition Info Container Name")); + assert.notEqual(actualDefinitionName, expectedName, this.messageAtLastKnownMarker("Definition Info Name")); + assert.notEqual(actualDefinitionName, expectedName, this.messageAtLastKnownMarker("Definition Info Container Name")); } else { - assert.equal(actualDefinitionName, expectedName, this.assertionMessage("Definition Info Name")); - assert.equal(actualDefinitionName, expectedName, this.assertionMessage("Definition Info Container Name")); + assert.equal(actualDefinitionName, expectedName, this.messageAtLastKnownMarker("Definition Info Name")); + assert.equal(actualDefinitionName, expectedName, this.messageAtLastKnownMarker("Definition Info Container Name")); } } From 8aaee0740911f9b94398bed465cf2775e2620179 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Fri, 3 Oct 2014 15:56:44 -0700 Subject: [PATCH 080/110] CodeReview feedback, and some tests. --- src/services/services.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/services/services.ts b/src/services/services.ts index 16d2bd9dffd..0d397eef6f3 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -3132,6 +3132,8 @@ module ts { } } + // Advance the matchIndex forward (if we don't, then we'll simply find the same + // match at the same position again). matchIndex++; } } From a39064457ed23101366e5b22b0006c7afc4106e1 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Fri, 3 Oct 2014 15:59:20 -0700 Subject: [PATCH 081/110] Adding tests. --- tests/cases/fourslash/renameCommentsAndStrings1.ts | 11 +++++++++++ tests/cases/fourslash/renameCommentsAndStrings2.ts | 11 +++++++++++ tests/cases/fourslash/renameCommentsAndStrings3.ts | 11 +++++++++++ tests/cases/fourslash/renameCommentsAndStrings4.ts | 11 +++++++++++ 4 files changed, 44 insertions(+) create mode 100644 tests/cases/fourslash/renameCommentsAndStrings1.ts create mode 100644 tests/cases/fourslash/renameCommentsAndStrings2.ts create mode 100644 tests/cases/fourslash/renameCommentsAndStrings3.ts create mode 100644 tests/cases/fourslash/renameCommentsAndStrings4.ts diff --git a/tests/cases/fourslash/renameCommentsAndStrings1.ts b/tests/cases/fourslash/renameCommentsAndStrings1.ts new file mode 100644 index 00000000000..b5c8ac6aacc --- /dev/null +++ b/tests/cases/fourslash/renameCommentsAndStrings1.ts @@ -0,0 +1,11 @@ +/// + +/////// + +////function /**/[|Bar|]() { +//// // This is a reference to Bar in a comment. +//// "this is a reference to Bar in a string" +////} + +goTo.marker(); +verify.renameLocations(/*findInStrings:*/ false, /*findInComments:*/ false); \ No newline at end of file diff --git a/tests/cases/fourslash/renameCommentsAndStrings2.ts b/tests/cases/fourslash/renameCommentsAndStrings2.ts new file mode 100644 index 00000000000..590f3a0833f --- /dev/null +++ b/tests/cases/fourslash/renameCommentsAndStrings2.ts @@ -0,0 +1,11 @@ +/// + +/////// + +////function /**/[|Bar|]() { +//// // This is a reference to Bar in a comment. +//// "this is a reference to [|Bar|] in a string" +////} + +goTo.marker(); +verify.renameLocations(/*findInStrings:*/ true, /*findInComments:*/ false); \ No newline at end of file diff --git a/tests/cases/fourslash/renameCommentsAndStrings3.ts b/tests/cases/fourslash/renameCommentsAndStrings3.ts new file mode 100644 index 00000000000..5f1aa09a948 --- /dev/null +++ b/tests/cases/fourslash/renameCommentsAndStrings3.ts @@ -0,0 +1,11 @@ +/// + +/////// + +////function /**/[|Bar|]() { +//// // This is a reference to [|Bar|] in a comment. +//// "this is a reference to Bar in a string" +////} + +goTo.marker(); +verify.renameLocations(/*findInStrings:*/ false, /*findInComments:*/ true); \ No newline at end of file diff --git a/tests/cases/fourslash/renameCommentsAndStrings4.ts b/tests/cases/fourslash/renameCommentsAndStrings4.ts new file mode 100644 index 00000000000..4f8b7b98cd4 --- /dev/null +++ b/tests/cases/fourslash/renameCommentsAndStrings4.ts @@ -0,0 +1,11 @@ +/// + +/////// + +////function /**/[|Bar|]() { +//// // This is a reference to [|Bar|] in a comment. +//// "this is a reference to [|Bar|] in a string" +////} + +goTo.marker(); +verify.renameLocations(/*findInStrings:*/ true, /*findInComments:*/ true); \ No newline at end of file From 4ba0ce433f84daf42aa70764e2a4754610eb614a Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Fri, 3 Oct 2014 16:12:59 -0700 Subject: [PATCH 082/110] Renamed 'getScriptLexicalItemsWalkerSuperCala[...].ts' to 'navigationBar.ts'. --- Jakefile | 2 +- .../{getScriptLexicalStructureWalker.ts => navigationBar.ts} | 4 ++-- src/services/services.ts | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) rename src/services/{getScriptLexicalStructureWalker.ts => navigationBar.ts} (96%) diff --git a/Jakefile b/Jakefile index 4929a9e1468..4f2808dcbd1 100644 --- a/Jakefile +++ b/Jakefile @@ -58,7 +58,7 @@ var servicesSources = [ "shims.ts", "signatureHelp.ts", "utilities.ts", - "getScriptLexicalStructureWalker.ts" + "navigationBar.ts" ].map(function (f) { return path.join(servicesDirectory, f); })); diff --git a/src/services/getScriptLexicalStructureWalker.ts b/src/services/navigationBar.ts similarity index 96% rename from src/services/getScriptLexicalStructureWalker.ts rename to src/services/navigationBar.ts index 2162c619fa9..4b5904e3cff 100644 --- a/src/services/getScriptLexicalStructureWalker.ts +++ b/src/services/navigationBar.ts @@ -1,8 +1,8 @@ /// /// -module ts { - export function getNavigationBarItemsHelper(sourceFile: SourceFile): ts.NavigationBarItem[] { +module ts.NavigationBar { + export function getNavigationBarItems(sourceFile: SourceFile): ts.NavigationBarItem[] { var hasGlobalNode = false; return getItemsWorker(getTopLevelNodes(sourceFile), createTopLevelItem); diff --git a/src/services/services.ts b/src/services/services.ts index 5605d0f6c84..320e0072d97 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -6,7 +6,7 @@ /// /// -/// +/// /// /// /// @@ -3907,7 +3907,7 @@ module ts { function getNavigationBarItems(filename: string): NavigationBarItem[] { filename = TypeScript.switchToForwardSlashes(filename); - return getNavigationBarItemsHelper(getCurrentSourceFile(filename)); + return NavigationBar.getNavigationBarItems(getCurrentSourceFile(filename)); } function getSemanticClassifications(fileName: string, span: TypeScript.TextSpan): ClassifiedSpan[] { From 7d9bf5093bcebc68620aa906d2f41c0df24dcc7d Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Fri, 3 Oct 2014 16:19:30 -0700 Subject: [PATCH 083/110] Replaced 'getModuleNameFromFilename' with 'removeFileExtension'. --- src/compiler/binder.ts | 2 +- src/compiler/emitter.ts | 8 ++++---- src/compiler/parser.ts | 4 ---- 3 files changed, 5 insertions(+), 9 deletions(-) diff --git a/src/compiler/binder.ts b/src/compiler/binder.ts index 3959335542c..16302ecf4b5 100644 --- a/src/compiler/binder.ts +++ b/src/compiler/binder.ts @@ -332,7 +332,7 @@ module ts { break; case SyntaxKind.SourceFile: if (isExternalModule(node)) { - bindAnonymousDeclaration(node, SymbolFlags.ValueModule, '"' + getModuleNameFromFilename((node).filename) + '"'); + bindAnonymousDeclaration(node, SymbolFlags.ValueModule, '"' + removeFileExtension((node).filename) + '"'); break; } default: diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 1b7fff6747f..5dfedc37e0a 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -56,10 +56,10 @@ module ts { function getOwnEmitOutputFilePath(sourceFile: SourceFile, extension: string) { if (compilerOptions.outDir) { - var emitOutputFilePathWithoutExtension = getModuleNameFromFilename(getSourceFilePathInNewDir(compilerOptions.outDir, sourceFile)); + var emitOutputFilePathWithoutExtension = removeFileExtension(getSourceFilePathInNewDir(compilerOptions.outDir, sourceFile)); } else { - var emitOutputFilePathWithoutExtension = getModuleNameFromFilename(sourceFile.filename); + var emitOutputFilePathWithoutExtension = removeFileExtension(sourceFile.filename); } return emitOutputFilePathWithoutExtension + extension; @@ -3141,7 +3141,7 @@ module ts { ? referencedFile.filename // Declaration file, use declaration file name : shouldEmitToOwnFile(referencedFile, compilerOptions) ? getOwnEmitOutputFilePath(referencedFile, ".d.ts") // Own output file so get the .d.ts file - : getModuleNameFromFilename(compilerOptions.out) + ".d.ts";// Global out file + : removeFileExtension(compilerOptions.out) + ".d.ts";// Global out file declFileName = getRelativePathToDirectoryOrUrl( getDirectoryPath(normalizeSlashes(jsFilePath)), @@ -3214,7 +3214,7 @@ module ts { } }); declarationOutput += synchronousDeclarationOutput.substring(appliedSyncOutputPos); - writeFile(getModuleNameFromFilename(jsFilePath) + ".d.ts", declarationOutput, compilerOptions.emitBOM); + writeFile(removeFileExtension(jsFilePath) + ".d.ts", declarationOutput, compilerOptions.emitBOM); } } diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index ede29fba891..9a11fef88b0 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -22,10 +22,6 @@ module ts { amdDependencies: string[]; } - export function getModuleNameFromFilename(filename: string) { - return removeFileExtension(filename); - } - export function getSourceFileOfNode(node: Node): SourceFile { while (node && node.kind !== SyntaxKind.SourceFile) node = node.parent; return node; From 1814261269dcfb450cc54c87963e5629004bd0bc Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Fri, 3 Oct 2014 16:57:41 -0700 Subject: [PATCH 084/110] Moved 'basicChildItem' to 'createChildItem' and renamed it 'createItem'. --- src/services/navigationBar.ts | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/src/services/navigationBar.ts b/src/services/navigationBar.ts index 4b5904e3cff..e9a8a75c8f0 100644 --- a/src/services/navigationBar.ts +++ b/src/services/navigationBar.ts @@ -3,11 +3,15 @@ module ts.NavigationBar { export function getNavigationBarItems(sourceFile: SourceFile): ts.NavigationBarItem[] { + // If the source file has any child items, then it included in the tree + // and takes lexical ownership of all other top-level items. var hasGlobalNode = false; return getItemsWorker(getTopLevelNodes(sourceFile), createTopLevelItem); function getIndent(node: Node): number { + // If we have a global node in the tree, + // then it adds an extra layer of depth to all subnodes. var indent = hasGlobalNode ? 1 : 0; var current = node.parent; @@ -150,57 +154,57 @@ module ts.NavigationBar { return undefined; } - return basicChildItem(node, getSourceText(parameter.name), ts.ScriptElementKind.memberVariableElement); + return createItem(node, getSourceText(parameter.name), ts.ScriptElementKind.memberVariableElement); case SyntaxKind.Method: var method = node; - return basicChildItem(node, getSourceText(method.name), ts.ScriptElementKind.memberFunctionElement); + return createItem(node, getSourceText(method.name), ts.ScriptElementKind.memberFunctionElement); case SyntaxKind.GetAccessor: var getAccessor = node; - return basicChildItem(node, getSourceText(getAccessor.name), ts.ScriptElementKind.memberGetAccessorElement); + return createItem(node, getSourceText(getAccessor.name), ts.ScriptElementKind.memberGetAccessorElement); case SyntaxKind.SetAccessor: var setAccessor = node; - return basicChildItem(node, getSourceText(setAccessor.name), ts.ScriptElementKind.memberSetAccessorElement); + return createItem(node, getSourceText(setAccessor.name), ts.ScriptElementKind.memberSetAccessorElement); case SyntaxKind.IndexSignature: - return basicChildItem(node, "[]", ts.ScriptElementKind.indexSignatureElement); + return createItem(node, "[]", ts.ScriptElementKind.indexSignatureElement); case SyntaxKind.EnumMember: var enumMember = node; - return basicChildItem(node, getSourceText(enumMember.name), ts.ScriptElementKind.memberVariableElement); + return createItem(node, getSourceText(enumMember.name), ts.ScriptElementKind.memberVariableElement); case SyntaxKind.CallSignature: - return basicChildItem(node, "()", ts.ScriptElementKind.callSignatureElement); + return createItem(node, "()", ts.ScriptElementKind.callSignatureElement); case SyntaxKind.ConstructSignature: - return basicChildItem(node, "new()", ts.ScriptElementKind.constructSignatureElement); + return createItem(node, "new()", ts.ScriptElementKind.constructSignatureElement); case SyntaxKind.Property: var property = node; - return basicChildItem(node, getSourceText(property.name), ts.ScriptElementKind.memberVariableElement); + return createItem(node, getSourceText(property.name), ts.ScriptElementKind.memberVariableElement); case SyntaxKind.FunctionDeclaration: var functionDeclaration = node; if (!isTopLevelFunctionDeclaration(functionDeclaration)) { - return basicChildItem(node, getSourceText(functionDeclaration.name), ts.ScriptElementKind.functionElement); + return createItem(node, getSourceText(functionDeclaration.name), ts.ScriptElementKind.functionElement); } break; case SyntaxKind.VariableDeclaration: var variableDeclaration = node; - return basicChildItem(node, getSourceText(variableDeclaration.name), ts.ScriptElementKind.variableElement); + return createItem(node, getSourceText(variableDeclaration.name), ts.ScriptElementKind.variableElement); case SyntaxKind.Constructor: - return basicChildItem(node, "constructor", ts.ScriptElementKind.constructorImplementationElement); + return createItem(node, "constructor", ts.ScriptElementKind.constructorImplementationElement); } return undefined; - } - function basicChildItem(node: Node, name: string, scriptElementKind: string): NavigationBarItem { - return getNavigationBarItem(name, scriptElementKind, getNodeModifiers(node), [getNodeSpan(node)]); + function createItem(node: Node, name: string, scriptElementKind: string): NavigationBarItem { + return getNavigationBarItem(name, scriptElementKind, getNodeModifiers(node), [getNodeSpan(node)]); + } } function getNavigationBarItem(text: string, kind: string, kindModifiers: string, spans: TypeScript.TextSpan[], childItems: ts.NavigationBarItem[]= [], indent: number = 0): ts.NavigationBarItem { From 208e36d294c18efe84cf663dda01d51579aa3824 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Fri, 3 Oct 2014 17:28:48 -0700 Subject: [PATCH 085/110] Cover all top-level items in 'getIndent'. --- src/services/navigationBar.ts | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/services/navigationBar.ts b/src/services/navigationBar.ts index e9a8a75c8f0..825d46a1f65 100644 --- a/src/services/navigationBar.ts +++ b/src/services/navigationBar.ts @@ -16,8 +16,20 @@ module ts.NavigationBar { var current = node.parent; while (current) { - if (current.kind === SyntaxKind.ModuleDeclaration || current.kind === SyntaxKind.FunctionDeclaration) { - indent++; + switch (current.kind) { + case SyntaxKind.ModuleDeclaration: + // If we have a module declared as A.B.C, it is more "intuitive" + // to say it only has a single layer of depth + do { + current = current.parent; + } while (current.kind === SyntaxKind.ModuleDeclaration); + + // fall through + case SyntaxKind.ClassDeclaration: + case SyntaxKind.EnumDeclaration: + case SyntaxKind.InterfaceDeclaration: + case SyntaxKind.FunctionDeclaration: + indent++; } current = current.parent; @@ -207,7 +219,7 @@ module ts.NavigationBar { } } - function getNavigationBarItem(text: string, kind: string, kindModifiers: string, spans: TypeScript.TextSpan[], childItems: ts.NavigationBarItem[]= [], indent: number = 0): ts.NavigationBarItem { + function getNavigationBarItem(text: string, kind: string, kindModifiers: string, spans: TypeScript.TextSpan[], childItems: ts.NavigationBarItem[] = [], indent: number = 0): ts.NavigationBarItem { return { text: text, kind: kind, From 3fa17eff27d9f68aabcf7e6b84a3fa96d994d168 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Fri, 3 Oct 2014 17:33:03 -0700 Subject: [PATCH 086/110] Cleaning up the new rename-comments/strings code. Mohamed rightly pointed out we were triplicating work and we could just roll the new checks into the existing tree walking code. --- src/services/services.ts | 137 +++++++++++++++------------------------ 1 file changed, 51 insertions(+), 86 deletions(-) diff --git a/src/services/services.ts b/src/services/services.ts index bb3fe8e3bf4..33bdd4956ec 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -2637,7 +2637,7 @@ module ts { if (node.kind === SyntaxKind.Identifier || node.kind === SyntaxKind.ThisKeyword || node.kind === SyntaxKind.SuperKeyword || isLiteralNameOfPropertyDeclarationOrIndexAccess(node) || isNameOfExternalModuleImportOrDeclaration(node)) { - return getReferencesForNode(node, [sourceFile]); + return getReferencesForNode(node, [sourceFile], /*findInStrings:*/ false, /*findInComments:*/ false); } switch (node.kind) { @@ -3098,90 +3098,10 @@ module ts { } Debug.assert(node.kind === SyntaxKind.Identifier || node.kind === SyntaxKind.NumericLiteral || node.kind === SyntaxKind.StringLiteral); - var references = getReferencesForNode(node, program.getSourceFiles()); - - var name = (node).text; - var tripleSlashDirectivePrefixRegex = /^\/\/\/\s*= 0) { - // Only consider it a match if there isn't a letter/number before or after - // the match. - var indexInSourceText = rawTextPositionInSourceText + matchIndex; - - if (indexInSourceText === 0 || !isIdentifierPart(sourceText.charCodeAt(indexInSourceText - 1), ScriptTarget.ES5)) { - var matchEnd = indexInSourceText + name.length; - if (matchEnd >= sourceText.length || !isIdentifierPart(sourceText.charCodeAt(matchEnd), ScriptTarget.ES5)) { - - references.push({ - fileName: sourceFile.filename, - textSpan: new TypeScript.TextSpan(indexInSourceText, name.length), - isWriteAccess: false - }); - } - } - - // Advance the matchIndex forward (if we don't, then we'll simply find the same - // match at the same position again). - matchIndex++; - } - } - - function addCommentReferences(sourceFile: SourceFile) { - var sourceText = sourceFile.text; - forEachChild(sourceFile, addCommentReferencesInNode); - - function addCommentReferencesInNode(node: Node) { - if (isToken(node)) { - // Found a token, walk its comments (if it has any) for matches). - forEach(getLeadingCommentRanges(sourceText, node.pos), addReferencesInCommentRange); - } - else { - forEach(node.getChildren(), addCommentReferencesInNode); - } - } - - function addReferencesInCommentRange(range: CommentRange) { - var commentText = sourceText.substring(range.pos, range.end); - - // Don't add matches in /// { @@ -3239,7 +3159,7 @@ module ts { if (lookUp(sourceFile.identifiers, symbolName)) { result = result || []; - getReferencesInNode(sourceFile, symbol, symbolName, node, searchMeaning, result); + getReferencesInNode(sourceFile, symbol, symbolName, node, searchMeaning, findInStrings, findInComments, result); } }); } @@ -3391,8 +3311,16 @@ module ts { * tuple of(searchSymbol, searchText, searchLocation, and searchMeaning). * searchLocation: a node where the search value */ - function getReferencesInNode(container: Node, searchSymbol: Symbol, searchText: string, searchLocation: Node, searchMeaning: SearchMeaning, result: ReferenceEntry[]): void { + function getReferencesInNode(container: Node, + searchSymbol: Symbol, + searchText: string, + searchLocation: Node, + searchMeaning: SearchMeaning, + findInStrings: boolean, + findInComments: boolean, + result: ReferenceEntry[]): void { var sourceFile = container.getSourceFile(); + var tripleSlashDirectivePrefixRegex = /^\/\/\/\s* token.getStart(); + } + + function isInComment(position: number) { + var token = getTokenAtPosition(sourceFile, position); + if (token && position < token.getStart()) { + // First, we have to see if this position actually landed in a comment. + var commentRanges = getLeadingCommentRanges(sourceFile.text, token.pos); + + // Then we want to make sure that it wasn't in a "///<" directive comment + // We don't want to unintentionally update a file name. + return forEach(commentRanges, c => { + if (c.pos < position && position < c.end) { + var commentText = sourceFile.text.substring(c.pos, c.end); + if (!tripleSlashDirectivePrefixRegex.test(commentText)) { + return true; + } + } + }); + } + + return false; + } } function getReferencesForSuperKeyword(superKeyword: Node): ReferenceEntry[]{ From 52f8ae3eec6663808718c73039830e596728d511 Mon Sep 17 00:00:00 2001 From: Yui T Date: Fri, 3 Oct 2014 17:37:29 -0700 Subject: [PATCH 087/110] Tuple conformance --- ...nmentCompatBetweenTupleAndArray.errors.txt | 36 ++++++ .../assignmentCompatBetweenTupleAndArray.js | 37 ++++++ .../reference/bestCommonTypeOfTuple.js | 58 +++++++++ .../reference/bestCommonTypeOfTuple.types | 96 +++++++++++++++ .../reference/bestCommonTypeOfTuple2.js | 77 ++++++++++++ .../reference/bestCommonTypeOfTuple2.types | 90 ++++++++++++++ .../reference/castingTuple.errors.txt | 61 ++++++++++ tests/baselines/reference/castingTuple.js | 95 +++++++++++++++ .../contextualTypeWithTuple.errors.txt | 40 ++++++ .../reference/contextualTypeWithTuple.js | 29 +++++ .../genericCallWithTupleType.errors.txt | 47 ++++++++ .../reference/genericCallWithTupleType.js | 46 +++++++ tests/baselines/reference/indexerWithTuple.js | 32 +++++ .../reference/indexerWithTuple.types | 64 ++++++++++ .../reference/typeInferenceWithTupleType.js | 48 ++++++++ .../typeInferenceWithTupleType.types | 114 ++++++++++++++++++ tests/cases/conformance/types/tuple/' | 15 +++ .../conformance/types/tuple/castingTuple.ts | 27 +++++ .../types/tuple/contextualTypeWithTuple.ts | 13 ++ .../types/tuple/indexerWithTuple.ts | 15 +++ .../types/tuple/typeInferenceWithTupleType.ts | 24 ++++ .../assignmentCompatBetweenTupleAndArray.ts | 18 +++ .../bestCommonType/bestCommonTypeOfTuple.ts | 25 ++++ .../bestCommonType/bestCommonTypeOfTuple2.ts | 21 ++++ .../typeInference/genericCallWithTupleType.ts | 24 ++++ 25 files changed, 1152 insertions(+) create mode 100644 tests/baselines/reference/assignmentCompatBetweenTupleAndArray.errors.txt create mode 100644 tests/baselines/reference/assignmentCompatBetweenTupleAndArray.js create mode 100644 tests/baselines/reference/bestCommonTypeOfTuple.js create mode 100644 tests/baselines/reference/bestCommonTypeOfTuple.types create mode 100644 tests/baselines/reference/bestCommonTypeOfTuple2.js create mode 100644 tests/baselines/reference/bestCommonTypeOfTuple2.types create mode 100644 tests/baselines/reference/castingTuple.errors.txt create mode 100644 tests/baselines/reference/castingTuple.js create mode 100644 tests/baselines/reference/contextualTypeWithTuple.errors.txt create mode 100644 tests/baselines/reference/contextualTypeWithTuple.js create mode 100644 tests/baselines/reference/genericCallWithTupleType.errors.txt create mode 100644 tests/baselines/reference/genericCallWithTupleType.js create mode 100644 tests/baselines/reference/indexerWithTuple.js create mode 100644 tests/baselines/reference/indexerWithTuple.types create mode 100644 tests/baselines/reference/typeInferenceWithTupleType.js create mode 100644 tests/baselines/reference/typeInferenceWithTupleType.types create mode 100644 tests/cases/conformance/types/tuple/' create mode 100644 tests/cases/conformance/types/tuple/castingTuple.ts create mode 100644 tests/cases/conformance/types/tuple/contextualTypeWithTuple.ts create mode 100644 tests/cases/conformance/types/tuple/indexerWithTuple.ts create mode 100644 tests/cases/conformance/types/tuple/typeInferenceWithTupleType.ts create mode 100644 tests/cases/conformance/types/typeRelationships/assignmentCompatibility/assignmentCompatBetweenTupleAndArray.ts create mode 100644 tests/cases/conformance/types/typeRelationships/bestCommonType/bestCommonTypeOfTuple.ts create mode 100644 tests/cases/conformance/types/typeRelationships/bestCommonType/bestCommonTypeOfTuple2.ts create mode 100644 tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithTupleType.ts diff --git a/tests/baselines/reference/assignmentCompatBetweenTupleAndArray.errors.txt b/tests/baselines/reference/assignmentCompatBetweenTupleAndArray.errors.txt new file mode 100644 index 00000000000..7c0a3a5c8b9 --- /dev/null +++ b/tests/baselines/reference/assignmentCompatBetweenTupleAndArray.errors.txt @@ -0,0 +1,36 @@ +tests/cases/conformance/types/typeRelationships/assignmentCompatibility/assignmentCompatBetweenTupleAndArray.ts(17,1): error TS2322: Type '[number, string]' is not assignable to type 'number[]': + Types of property 'pop' are incompatible: + Type '() => {}' is not assignable to type '() => number': + Type '{}' is not assignable to type 'number'. +tests/cases/conformance/types/typeRelationships/assignmentCompatibility/assignmentCompatBetweenTupleAndArray.ts(18,1): error TS2322: Type '{}[]' is not assignable to type '[{}]': + Property '0' is missing in type '{}[]'. + + +==== tests/cases/conformance/types/typeRelationships/assignmentCompatibility/assignmentCompatBetweenTupleAndArray.ts (2 errors) ==== + var numStrTuple: [number, string]; + var numNumTuple: [number, number]; + var numEmptyObjTuple: [number, {}]; + var emptyObjTuple: [{}]; + + var numArray: number[]; + var emptyObjArray: {}[]; + + // no error + numArray = numNumTuple; + emptyObjArray = emptyObjTuple; + emptyObjArray = numStrTuple; + emptyObjArray = numNumTuple; + emptyObjArray = numEmptyObjTuple; + + // error + numArray = numStrTuple; + ~~~~~~~~ +!!! error TS2322: Type '[number, string]' is not assignable to type 'number[]': +!!! error TS2322: Types of property 'pop' are incompatible: +!!! error TS2322: Type '() => {}' is not assignable to type '() => number': +!!! error TS2322: Type '{}' is not assignable to type 'number'. + emptyObjTuple = emptyObjArray; + ~~~~~~~~~~~~~ +!!! error TS2322: Type '{}[]' is not assignable to type '[{}]': +!!! error TS2322: Property '0' is missing in type '{}[]'. + \ No newline at end of file diff --git a/tests/baselines/reference/assignmentCompatBetweenTupleAndArray.js b/tests/baselines/reference/assignmentCompatBetweenTupleAndArray.js new file mode 100644 index 00000000000..cbe6b1ff04e --- /dev/null +++ b/tests/baselines/reference/assignmentCompatBetweenTupleAndArray.js @@ -0,0 +1,37 @@ +//// [assignmentCompatBetweenTupleAndArray.ts] +var numStrTuple: [number, string]; +var numNumTuple: [number, number]; +var numEmptyObjTuple: [number, {}]; +var emptyObjTuple: [{}]; + +var numArray: number[]; +var emptyObjArray: {}[]; + +// no error +numArray = numNumTuple; +emptyObjArray = emptyObjTuple; +emptyObjArray = numStrTuple; +emptyObjArray = numNumTuple; +emptyObjArray = numEmptyObjTuple; + +// error +numArray = numStrTuple; +emptyObjTuple = emptyObjArray; + + +//// [assignmentCompatBetweenTupleAndArray.js] +var numStrTuple; +var numNumTuple; +var numEmptyObjTuple; +var emptyObjTuple; +var numArray; +var emptyObjArray; +// no error +numArray = numNumTuple; +emptyObjArray = emptyObjTuple; +emptyObjArray = numStrTuple; +emptyObjArray = numNumTuple; +emptyObjArray = numEmptyObjTuple; +// error +numArray = numStrTuple; +emptyObjTuple = emptyObjArray; diff --git a/tests/baselines/reference/bestCommonTypeOfTuple.js b/tests/baselines/reference/bestCommonTypeOfTuple.js new file mode 100644 index 00000000000..a668b9978b0 --- /dev/null +++ b/tests/baselines/reference/bestCommonTypeOfTuple.js @@ -0,0 +1,58 @@ +//// [bestCommonTypeOfTuple.ts] +function f1(x: number): string { return "foo"; } + +function f2(x: number): number { return 10; } + +function f3(x: number): boolean { return true; } + +enum E1 { one } + +enum E2 { two } + + +var t1: [(x: number) => string, (x: number) => number]; +var t2: [E1, E2]; +var t3: [number, any]; +var t4: [E1, E2, number]; + +// no error +t1 = [f1, f2]; +t2 = [E1.one, E2.two]; +t3 = [5, undefined]; +t4 = [E1.one, E2.two, 20]; +var e1 = t1[2]; // {} +var e2 = t2[2]; // {} +var e3 = t3[2]; // any +var e4 = t4[3]; // number + +//// [bestCommonTypeOfTuple.js] +function f1(x) { + return "foo"; +} +function f2(x) { + return 10; +} +function f3(x) { + return true; +} +var E1; +(function (E1) { + E1[E1["one"] = 0] = "one"; +})(E1 || (E1 = {})); +var E2; +(function (E2) { + E2[E2["two"] = 0] = "two"; +})(E2 || (E2 = {})); +var t1; +var t2; +var t3; +var t4; +// no error +t1 = [f1, f2]; +t2 = [0 /* one */, 0 /* two */]; +t3 = [5, undefined]; +t4 = [0 /* one */, 0 /* two */, 20]; +var e1 = t1[2]; // {} +var e2 = t2[2]; // {} +var e3 = t3[2]; // any +var e4 = t4[3]; // number diff --git a/tests/baselines/reference/bestCommonTypeOfTuple.types b/tests/baselines/reference/bestCommonTypeOfTuple.types new file mode 100644 index 00000000000..936607769e7 --- /dev/null +++ b/tests/baselines/reference/bestCommonTypeOfTuple.types @@ -0,0 +1,96 @@ +=== tests/cases/conformance/types/typeRelationships/bestCommonType/bestCommonTypeOfTuple.ts === +function f1(x: number): string { return "foo"; } +>f1 : (x: number) => string +>x : number + +function f2(x: number): number { return 10; } +>f2 : (x: number) => number +>x : number + +function f3(x: number): boolean { return true; } +>f3 : (x: number) => boolean +>x : number + +enum E1 { one } +>E1 : E1 +>one : E1 + +enum E2 { two } +>E2 : E2 +>two : E2 + + +var t1: [(x: number) => string, (x: number) => number]; +>t1 : [(x: number) => string, (x: number) => number] +>x : number +>x : number + +var t2: [E1, E2]; +>t2 : [E1, E2] +>E1 : E1 +>E2 : E2 + +var t3: [number, any]; +>t3 : [number, any] + +var t4: [E1, E2, number]; +>t4 : [E1, E2, number] +>E1 : E1 +>E2 : E2 + +// no error +t1 = [f1, f2]; +>t1 = [f1, f2] : [(x: number) => string, (x: number) => number] +>t1 : [(x: number) => string, (x: number) => number] +>[f1, f2] : [(x: number) => string, (x: number) => number] +>f1 : (x: number) => string +>f2 : (x: number) => number + +t2 = [E1.one, E2.two]; +>t2 = [E1.one, E2.two] : [E1, E2] +>t2 : [E1, E2] +>[E1.one, E2.two] : [E1, E2] +>E1.one : E1 +>E1 : typeof E1 +>one : E1 +>E2.two : E2 +>E2 : typeof E2 +>two : E2 + +t3 = [5, undefined]; +>t3 = [5, undefined] : [number, undefined] +>t3 : [number, any] +>[5, undefined] : [number, undefined] +>undefined : undefined + +t4 = [E1.one, E2.two, 20]; +>t4 = [E1.one, E2.two, 20] : [E1, E2, number] +>t4 : [E1, E2, number] +>[E1.one, E2.two, 20] : [E1, E2, number] +>E1.one : E1 +>E1 : typeof E1 +>one : E1 +>E2.two : E2 +>E2 : typeof E2 +>two : E2 + +var e1 = t1[2]; // {} +>e1 : {} +>t1[2] : {} +>t1 : [(x: number) => string, (x: number) => number] + +var e2 = t2[2]; // {} +>e2 : {} +>t2[2] : {} +>t2 : [E1, E2] + +var e3 = t3[2]; // any +>e3 : any +>t3[2] : any +>t3 : [number, any] + +var e4 = t4[3]; // number +>e4 : number +>t4[3] : number +>t4 : [E1, E2, number] + diff --git a/tests/baselines/reference/bestCommonTypeOfTuple2.js b/tests/baselines/reference/bestCommonTypeOfTuple2.js new file mode 100644 index 00000000000..2f2db308fc9 --- /dev/null +++ b/tests/baselines/reference/bestCommonTypeOfTuple2.js @@ -0,0 +1,77 @@ +//// [bestCommonTypeOfTuple2.ts] +interface base { } +interface base1 { i } +class C implements base { c } +class D implements base { d } +class E implements base { e } +class F extends C { f } + +class C1 implements base1 { i = "foo"; c } +class D1 extends C1 { i = "bar"; d } + +var t1: [C, base]; +var t2: [C, D]; +var t3: [C1, D1]; +var t4: [base1, C1]; +var t5: [C1, F] + +var e11 = t1[4]; // base +var e21 = t2[4]; // {} +var e31 = t3[4]; // C1 +var e41 = t4[2]; // base1 +var e51 = t5[2]; // {} + + +//// [bestCommonTypeOfTuple2.js] +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var C = (function () { + function C() { + } + return C; +})(); +var D = (function () { + function D() { + } + return D; +})(); +var E = (function () { + function E() { + } + return E; +})(); +var F = (function (_super) { + __extends(F, _super); + function F() { + _super.apply(this, arguments); + } + return F; +})(C); +var C1 = (function () { + function C1() { + this.i = "foo"; + } + return C1; +})(); +var D1 = (function (_super) { + __extends(D1, _super); + function D1() { + _super.apply(this, arguments); + this.i = "bar"; + } + return D1; +})(C1); +var t1; +var t2; +var t3; +var t4; +var t5; +var e11 = t1[4]; // base +var e21 = t2[4]; // {} +var e31 = t3[4]; // C1 +var e41 = t4[2]; // base1 +var e51 = t5[2]; // {} diff --git a/tests/baselines/reference/bestCommonTypeOfTuple2.types b/tests/baselines/reference/bestCommonTypeOfTuple2.types new file mode 100644 index 00000000000..ec52e6c685f --- /dev/null +++ b/tests/baselines/reference/bestCommonTypeOfTuple2.types @@ -0,0 +1,90 @@ +=== tests/cases/conformance/types/typeRelationships/bestCommonType/bestCommonTypeOfTuple2.ts === +interface base { } +>base : base + +interface base1 { i } +>base1 : base1 +>i : any + +class C implements base { c } +>C : C +>base : base +>c : any + +class D implements base { d } +>D : D +>base : base +>d : any + +class E implements base { e } +>E : E +>base : base +>e : any + +class F extends C { f } +>F : F +>C : C +>f : any + +class C1 implements base1 { i = "foo"; c } +>C1 : C1 +>base1 : base1 +>i : string +>c : any + +class D1 extends C1 { i = "bar"; d } +>D1 : D1 +>C1 : C1 +>i : string +>d : any + +var t1: [C, base]; +>t1 : [C, base] +>C : C +>base : base + +var t2: [C, D]; +>t2 : [C, D] +>C : C +>D : D + +var t3: [C1, D1]; +>t3 : [C1, D1] +>C1 : C1 +>D1 : D1 + +var t4: [base1, C1]; +>t4 : [base1, C1] +>base1 : base1 +>C1 : C1 + +var t5: [C1, F] +>t5 : [C1, F] +>C1 : C1 +>F : F + +var e11 = t1[4]; // base +>e11 : base +>t1[4] : base +>t1 : [C, base] + +var e21 = t2[4]; // {} +>e21 : {} +>t2[4] : {} +>t2 : [C, D] + +var e31 = t3[4]; // C1 +>e31 : C1 +>t3[4] : C1 +>t3 : [C1, D1] + +var e41 = t4[2]; // base1 +>e41 : base1 +>t4[2] : base1 +>t4 : [base1, C1] + +var e51 = t5[2]; // {} +>e51 : {} +>t5[2] : {} +>t5 : [C1, F] + diff --git a/tests/baselines/reference/castingTuple.errors.txt b/tests/baselines/reference/castingTuple.errors.txt new file mode 100644 index 00000000000..ee09362f01f --- /dev/null +++ b/tests/baselines/reference/castingTuple.errors.txt @@ -0,0 +1,61 @@ +tests/cases/conformance/types/tuple/castingTuple.ts(24,10): error TS2353: Neither type '[number, string]' nor type '[number, number]' is assignable to the other: + Types of property '1' are incompatible: + Type 'string' is not assignable to type 'number'. +tests/cases/conformance/types/tuple/castingTuple.ts(25,10): error TS2353: Neither type '[C, D]' nor type '[A, I]' is assignable to the other: + Types of property '0' are incompatible: + Type 'C' is not assignable to type 'A': + Property 'a' is missing in type 'C'. +tests/cases/conformance/types/tuple/castingTuple.ts(26,5): error TS2403: Subsequent variable declarations must have the same type. Variable 'array1' must be of type '{}[]', but here has type 'number[]'. +tests/cases/conformance/types/tuple/castingTuple.ts(26,14): error TS2353: Neither type '[number, string]' nor type 'number[]' is assignable to the other: + Types of property 'pop' are incompatible: + Type '() => {}' is not assignable to type '() => number': + Type '{}' is not assignable to type 'number'. +tests/cases/conformance/types/tuple/castingTuple.ts(27,1): error TS2304: Cannot find name 't4'. + + +==== tests/cases/conformance/types/tuple/castingTuple.ts (5 errors) ==== + interface I { } + class A { a = 10; } + class C implements I { c }; + class D implements I { d }; + class E extends A { e }; + class F extends A { f }; + enum E1 { one } + enum E2 { one } + + // no error + var numStrTuple: [number, string] = [5, "foo"]; + var emptyObjTuple = <[{}, {}]>numStrTuple; + var numStrBoolTuple = <[number, string, boolean]>numStrTuple; + var classCDTuple: [C, D] = [new C(), new D()]; + var interfaceIITuple = <[I, I]>classCDTuple; + var classCDATuple = <[C, D, A]>classCDTuple; + var eleFromCDA1 = classCDATuple[2]; // A + var eleFromCDA2 = classCDATuple[5]; // {} + var t10: [E1, E2] = [E1.one, E2.one]; + var t11 = <[number, number]>t10; + var array1 = <{}[]>emptyObjTuple; + + // error + var t3 = <[number, number]>numStrTuple; + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2353: Neither type '[number, string]' nor type '[number, number]' is assignable to the other: +!!! error TS2353: Types of property '1' are incompatible: +!!! error TS2353: Type 'string' is not assignable to type 'number'. + var t9 = <[A, I]>classCDTuple; + ~~~~~~~~~~~~~~~~~~~~ +!!! error TS2353: Neither type '[C, D]' nor type '[A, I]' is assignable to the other: +!!! error TS2353: Types of property '0' are incompatible: +!!! error TS2353: Type 'C' is not assignable to type 'A': +!!! error TS2353: Property 'a' is missing in type 'C'. + var array1 = numStrTuple; + ~~~~~~ +!!! error TS2403: Subsequent variable declarations must have the same type. Variable 'array1' must be of type '{}[]', but here has type 'number[]'. + ~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2353: Neither type '[number, string]' nor type 'number[]' is assignable to the other: +!!! error TS2353: Types of property 'pop' are incompatible: +!!! error TS2353: Type '() => {}' is not assignable to type '() => number': +!!! error TS2353: Type '{}' is not assignable to type 'number'. + t4[2] = 10; + ~~ +!!! error TS2304: Cannot find name 't4'. \ No newline at end of file diff --git a/tests/baselines/reference/castingTuple.js b/tests/baselines/reference/castingTuple.js new file mode 100644 index 00000000000..c1835e9d117 --- /dev/null +++ b/tests/baselines/reference/castingTuple.js @@ -0,0 +1,95 @@ +//// [castingTuple.ts] +interface I { } +class A { a = 10; } +class C implements I { c }; +class D implements I { d }; +class E extends A { e }; +class F extends A { f }; +enum E1 { one } +enum E2 { one } + +// no error +var numStrTuple: [number, string] = [5, "foo"]; +var emptyObjTuple = <[{}, {}]>numStrTuple; +var numStrBoolTuple = <[number, string, boolean]>numStrTuple; +var classCDTuple: [C, D] = [new C(), new D()]; +var interfaceIITuple = <[I, I]>classCDTuple; +var classCDATuple = <[C, D, A]>classCDTuple; +var eleFromCDA1 = classCDATuple[2]; // A +var eleFromCDA2 = classCDATuple[5]; // {} +var t10: [E1, E2] = [E1.one, E2.one]; +var t11 = <[number, number]>t10; +var array1 = <{}[]>emptyObjTuple; + +// error +var t3 = <[number, number]>numStrTuple; +var t9 = <[A, I]>classCDTuple; +var array1 = numStrTuple; +t4[2] = 10; + +//// [castingTuple.js] +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +var A = (function () { + function A() { + this.a = 10; + } + return A; +})(); +var C = (function () { + function C() { + } + return C; +})(); +; +var D = (function () { + function D() { + } + return D; +})(); +; +var E = (function (_super) { + __extends(E, _super); + function E() { + _super.apply(this, arguments); + } + return E; +})(A); +; +var F = (function (_super) { + __extends(F, _super); + function F() { + _super.apply(this, arguments); + } + return F; +})(A); +; +var E1; +(function (E1) { + E1[E1["one"] = 0] = "one"; +})(E1 || (E1 = {})); +var E2; +(function (E2) { + E2[E2["one"] = 0] = "one"; +})(E2 || (E2 = {})); +// no error +var numStrTuple = [5, "foo"]; +var emptyObjTuple = numStrTuple; +var numStrBoolTuple = numStrTuple; +var classCDTuple = [new C(), new D()]; +var interfaceIITuple = classCDTuple; +var classCDATuple = classCDTuple; +var eleFromCDA1 = classCDATuple[2]; // A +var eleFromCDA2 = classCDATuple[5]; // {} +var t10 = [0 /* one */, 0 /* one */]; +var t11 = t10; +var array1 = emptyObjTuple; +// error +var t3 = numStrTuple; +var t9 = classCDTuple; +var array1 = numStrTuple; +t4[2] = 10; diff --git a/tests/baselines/reference/contextualTypeWithTuple.errors.txt b/tests/baselines/reference/contextualTypeWithTuple.errors.txt new file mode 100644 index 00000000000..e739c916c8a --- /dev/null +++ b/tests/baselines/reference/contextualTypeWithTuple.errors.txt @@ -0,0 +1,40 @@ +tests/cases/conformance/types/tuple/contextualTypeWithTuple.ts(11,1): error TS2322: Type '[{}, number]' is not assignable to type '[{ a: string; }, number]': + Types of property '0' are incompatible: + Type '{}' is not assignable to type '{ a: string; }': + Property 'a' is missing in type '{}'. +tests/cases/conformance/types/tuple/contextualTypeWithTuple.ts(12,1): error TS2322: Type '[number, string]' is not assignable to type '[number, string, boolean]': + Property '2' is missing in type '[number, string]'. +tests/cases/conformance/types/tuple/contextualTypeWithTuple.ts(13,5): error TS2322: Type '[string, string, number]' is not assignable to type '[string, string]': + Types of property 'pop' are incompatible: + Type '() => {}' is not assignable to type '() => string': + Type '{}' is not assignable to type 'string'. + + +==== tests/cases/conformance/types/tuple/contextualTypeWithTuple.ts (3 errors) ==== + // no error + var numStrTuple: [number, string] = [5, "hello"]; + var numStrTuple2: [number, string] = [5, "foo", true]; + var numStrBoolTuple: [number, string, boolean] = [5, "foo", true]; + var objNumTuple: [{ a: string }, number] = [{ a: "world" }, 5]; + var strTupleTuple: [string, [number, {}]] = ["bar", [5, { x: 1, y: 1 }]]; + numStrTuple = numStrTuple2; + numStrTuple = numStrBoolTuple; + + // error + objNumTuple = [ {}, 5]; + ~~~~~~~~~~~ +!!! error TS2322: Type '[{}, number]' is not assignable to type '[{ a: string; }, number]': +!!! error TS2322: Types of property '0' are incompatible: +!!! error TS2322: Type '{}' is not assignable to type '{ a: string; }': +!!! error TS2322: Property 'a' is missing in type '{}'. + numStrBoolTuple = numStrTuple; + ~~~~~~~~~~~~~~~ +!!! error TS2322: Type '[number, string]' is not assignable to type '[number, string, boolean]': +!!! error TS2322: Property '2' is missing in type '[number, string]'. + var strStrTuple: [string, string] = ["foo", "bar", 5]; + ~~~~~~~~~~~ +!!! error TS2322: Type '[string, string, number]' is not assignable to type '[string, string]': +!!! error TS2322: Types of property 'pop' are incompatible: +!!! error TS2322: Type '() => {}' is not assignable to type '() => string': +!!! error TS2322: Type '{}' is not assignable to type 'string'. + \ No newline at end of file diff --git a/tests/baselines/reference/contextualTypeWithTuple.js b/tests/baselines/reference/contextualTypeWithTuple.js new file mode 100644 index 00000000000..0e53cea283b --- /dev/null +++ b/tests/baselines/reference/contextualTypeWithTuple.js @@ -0,0 +1,29 @@ +//// [contextualTypeWithTuple.ts] +// no error +var numStrTuple: [number, string] = [5, "hello"]; +var numStrTuple2: [number, string] = [5, "foo", true]; +var numStrBoolTuple: [number, string, boolean] = [5, "foo", true]; +var objNumTuple: [{ a: string }, number] = [{ a: "world" }, 5]; +var strTupleTuple: [string, [number, {}]] = ["bar", [5, { x: 1, y: 1 }]]; +numStrTuple = numStrTuple2; +numStrTuple = numStrBoolTuple; + +// error +objNumTuple = [ {}, 5]; +numStrBoolTuple = numStrTuple; +var strStrTuple: [string, string] = ["foo", "bar", 5]; + + +//// [contextualTypeWithTuple.js] +// no error +var numStrTuple = [5, "hello"]; +var numStrTuple2 = [5, "foo", true]; +var numStrBoolTuple = [5, "foo", true]; +var objNumTuple = [{ a: "world" }, 5]; +var strTupleTuple = ["bar", [5, { x: 1, y: 1 }]]; +numStrTuple = numStrTuple2; +numStrTuple = numStrBoolTuple; +// error +objNumTuple = [{}, 5]; +numStrBoolTuple = numStrTuple; +var strStrTuple = ["foo", "bar", 5]; diff --git a/tests/baselines/reference/genericCallWithTupleType.errors.txt b/tests/baselines/reference/genericCallWithTupleType.errors.txt new file mode 100644 index 00000000000..7f84cee760c --- /dev/null +++ b/tests/baselines/reference/genericCallWithTupleType.errors.txt @@ -0,0 +1,47 @@ +tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithTupleType.ts(22,1): error TS2322: Type '[number, string]' is not assignable to type '[string, number]': + Types of property '0' are incompatible: + Type 'number' is not assignable to type 'string'. +tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithTupleType.ts(23,1): error TS2322: Type '[{}, {}]' is not assignable to type '[string, number]': + Types of property '0' are incompatible: + Type '{}' is not assignable to type 'string'. +tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithTupleType.ts(24,1): error TS2322: Type '[{}]' is not assignable to type '[{}, {}]': + Property '1' is missing in type '[{}]'. + + +==== tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithTupleType.ts (3 errors) ==== + interface I { + tuple1: [T, U]; + } + + var i1: I; + var i2: I<{}, {}>; + + // no error + i1.tuple1 = ["foo", 5]; + var e1 = i1.tuple1[0]; // string + var e2 = i1.tuple1[1]; // number + i1.tuple1 = ["foo", 5, false, true]; + var e3 = i1.tuple1[2]; // {} + i1.tuple1[3] = { a: "string" }; + var e4 = i1.tuple1[3]; // {} + i2.tuple1 = ["foo", 5]; + i2.tuple1 = ["foo", "bar"]; + i2.tuple1 = [5, "bar"]; + i2.tuple1 = [{}, {}]; + + // error + i1.tuple1 = [5, "foo"]; + ~~~~~~~~~ +!!! error TS2322: Type '[number, string]' is not assignable to type '[string, number]': +!!! error TS2322: Types of property '0' are incompatible: +!!! error TS2322: Type 'number' is not assignable to type 'string'. + i1.tuple1 = [{}, {}]; + ~~~~~~~~~ +!!! error TS2322: Type '[{}, {}]' is not assignable to type '[string, number]': +!!! error TS2322: Types of property '0' are incompatible: +!!! error TS2322: Type '{}' is not assignable to type 'string'. + i2.tuple1 = [{}]; + ~~~~~~~~~ +!!! error TS2322: Type '[{}]' is not assignable to type '[{}, {}]': +!!! error TS2322: Property '1' is missing in type '[{}]'. + \ No newline at end of file diff --git a/tests/baselines/reference/genericCallWithTupleType.js b/tests/baselines/reference/genericCallWithTupleType.js new file mode 100644 index 00000000000..5ac66f66c3c --- /dev/null +++ b/tests/baselines/reference/genericCallWithTupleType.js @@ -0,0 +1,46 @@ +//// [genericCallWithTupleType.ts] +interface I { + tuple1: [T, U]; +} + +var i1: I; +var i2: I<{}, {}>; + +// no error +i1.tuple1 = ["foo", 5]; +var e1 = i1.tuple1[0]; // string +var e2 = i1.tuple1[1]; // number +i1.tuple1 = ["foo", 5, false, true]; +var e3 = i1.tuple1[2]; // {} +i1.tuple1[3] = { a: "string" }; +var e4 = i1.tuple1[3]; // {} +i2.tuple1 = ["foo", 5]; +i2.tuple1 = ["foo", "bar"]; +i2.tuple1 = [5, "bar"]; +i2.tuple1 = [{}, {}]; + +// error +i1.tuple1 = [5, "foo"]; +i1.tuple1 = [{}, {}]; +i2.tuple1 = [{}]; + + +//// [genericCallWithTupleType.js] +var i1; +var i2; +// no error +i1.tuple1 = ["foo", 5]; +var e1 = i1.tuple1[0]; // string +var e2 = i1.tuple1[1]; // number +i1.tuple1 = ["foo", 5, false, true]; +var e3 = i1.tuple1[2]; // {} +i1.tuple1[3] = { a: "string" }; +var e4 = i1.tuple1[3]; // {} +i2.tuple1 = ["foo", 5]; +i2.tuple1 = ["foo", "bar"]; +i2.tuple1 = [5, "bar"]; +i2.tuple1 = [{}, {}]; +// error +i1.tuple1 = [5, "foo"]; +i1.tuple1 = [{}, {}]; +i2.tuple1 = [{}]; diff --git a/tests/baselines/reference/indexerWithTuple.js b/tests/baselines/reference/indexerWithTuple.js new file mode 100644 index 00000000000..bc3bee9dd17 --- /dev/null +++ b/tests/baselines/reference/indexerWithTuple.js @@ -0,0 +1,32 @@ +//// [indexerWithTuple.ts] +var strNumTuple: [string, number] = ["foo", 10]; +var numTupleTuple: [number, [string, number]] = [10, ["bar", 20]]; + +// no error +var idx0 = 0; +var idx1 = 1; +var ele10 = strNumTuple[0]; // string +var ele11 = strNumTuple[1]; // number +var ele12 = strNumTuple[2]; // {} +var ele13 = strNumTuple[idx0]; // {} +var ele14 = strNumTuple[idx1]; // {} +var ele15 = strNumTuple["0"]; // string +var ele16 = strNumTuple["1"]; // number +var strNumTuple1 = numTupleTuple[1]; //[string, number]; +var ele17 = numTupleTuple[2]; // {} + +//// [indexerWithTuple.js] +var strNumTuple = ["foo", 10]; +var numTupleTuple = [10, ["bar", 20]]; +// no error +var idx0 = 0; +var idx1 = 1; +var ele10 = strNumTuple[0]; // string +var ele11 = strNumTuple[1]; // number +var ele12 = strNumTuple[2]; // {} +var ele13 = strNumTuple[idx0]; // {} +var ele14 = strNumTuple[idx1]; // {} +var ele15 = strNumTuple["0"]; // string +var ele16 = strNumTuple["1"]; // number +var strNumTuple1 = numTupleTuple[1]; //[string, number]; +var ele17 = numTupleTuple[2]; // {} diff --git a/tests/baselines/reference/indexerWithTuple.types b/tests/baselines/reference/indexerWithTuple.types new file mode 100644 index 00000000000..7c22cac407f --- /dev/null +++ b/tests/baselines/reference/indexerWithTuple.types @@ -0,0 +1,64 @@ +=== tests/cases/conformance/types/tuple/indexerWithTuple.ts === +var strNumTuple: [string, number] = ["foo", 10]; +>strNumTuple : [string, number] +>["foo", 10] : [string, number] + +var numTupleTuple: [number, [string, number]] = [10, ["bar", 20]]; +>numTupleTuple : [number, [string, number]] +>[10, ["bar", 20]] : [number, [string, number]] +>["bar", 20] : [string, number] + +// no error +var idx0 = 0; +>idx0 : number + +var idx1 = 1; +>idx1 : number + +var ele10 = strNumTuple[0]; // string +>ele10 : string +>strNumTuple[0] : string +>strNumTuple : [string, number] + +var ele11 = strNumTuple[1]; // number +>ele11 : number +>strNumTuple[1] : number +>strNumTuple : [string, number] + +var ele12 = strNumTuple[2]; // {} +>ele12 : {} +>strNumTuple[2] : {} +>strNumTuple : [string, number] + +var ele13 = strNumTuple[idx0]; // {} +>ele13 : {} +>strNumTuple[idx0] : {} +>strNumTuple : [string, number] +>idx0 : number + +var ele14 = strNumTuple[idx1]; // {} +>ele14 : {} +>strNumTuple[idx1] : {} +>strNumTuple : [string, number] +>idx1 : number + +var ele15 = strNumTuple["0"]; // string +>ele15 : string +>strNumTuple["0"] : string +>strNumTuple : [string, number] + +var ele16 = strNumTuple["1"]; // number +>ele16 : number +>strNumTuple["1"] : number +>strNumTuple : [string, number] + +var strNumTuple1 = numTupleTuple[1]; //[string, number]; +>strNumTuple1 : [string, number] +>numTupleTuple[1] : [string, number] +>numTupleTuple : [number, [string, number]] + +var ele17 = numTupleTuple[2]; // {} +>ele17 : {} +>numTupleTuple[2] : {} +>numTupleTuple : [number, [string, number]] + diff --git a/tests/baselines/reference/typeInferenceWithTupleType.js b/tests/baselines/reference/typeInferenceWithTupleType.js new file mode 100644 index 00000000000..a9d75ad9990 --- /dev/null +++ b/tests/baselines/reference/typeInferenceWithTupleType.js @@ -0,0 +1,48 @@ +//// [typeInferenceWithTupleType.ts] +function combine(x: T, y: U): [T, U] { + return [x, y]; +} + +var combineResult = combine("string", 10); +var combineEle1 = combineResult[0]; // string +var combineEle2 = combineResult[1]; // number + +function zip(array1: T[], array2: U[]): [[T, U]] { + if (array1.length != array2.length) { + return [[undefined, undefined]]; + } + var length = array1.length; + var zipResult: [[T, U]]; + for (var i = 0; i < length; ++i) { + zipResult.push([array1[i], array2[i]]); + } + return zipResult; +} + +var zipResult = zip(["foo", "bar"], [5, 6]); +var zipResultEle = zipResult[0]; // [string, number] +var zipResultEleEle = zipResult[0][0]; // string + + + +//// [typeInferenceWithTupleType.js] +function combine(x, y) { + return [x, y]; +} +var combineResult = combine("string", 10); +var combineEle1 = combineResult[0]; // string +var combineEle2 = combineResult[1]; // number +function zip(array1, array2) { + if (array1.length != array2.length) { + return [[undefined, undefined]]; + } + var length = array1.length; + var zipResult; + for (var i = 0; i < length; ++i) { + zipResult.push([array1[i], array2[i]]); + } + return zipResult; +} +var zipResult = zip(["foo", "bar"], [5, 6]); +var zipResultEle = zipResult[0]; // [string, number] +var zipResultEleEle = zipResult[0][0]; // string diff --git a/tests/baselines/reference/typeInferenceWithTupleType.types b/tests/baselines/reference/typeInferenceWithTupleType.types new file mode 100644 index 00000000000..fbf1cd51920 --- /dev/null +++ b/tests/baselines/reference/typeInferenceWithTupleType.types @@ -0,0 +1,114 @@ +=== tests/cases/conformance/types/tuple/typeInferenceWithTupleType.ts === +function combine(x: T, y: U): [T, U] { +>combine : (x: T, y: U) => [T, U] +>T : T +>U : U +>x : T +>T : T +>y : U +>U : U +>T : T +>U : U + + return [x, y]; +>[x, y] : [T, U] +>x : T +>y : U +} + +var combineResult = combine("string", 10); +>combineResult : [string, number] +>combine("string", 10) : [string, number] +>combine : (x: T, y: U) => [T, U] + +var combineEle1 = combineResult[0]; // string +>combineEle1 : string +>combineResult[0] : string +>combineResult : [string, number] + +var combineEle2 = combineResult[1]; // number +>combineEle2 : number +>combineResult[1] : number +>combineResult : [string, number] + +function zip(array1: T[], array2: U[]): [[T, U]] { +>zip : (array1: T[], array2: U[]) => [[T, U]] +>T : T +>U : U +>array1 : T[] +>T : T +>array2 : U[] +>U : U +>T : T +>U : U + + if (array1.length != array2.length) { +>array1.length != array2.length : boolean +>array1.length : number +>array1 : T[] +>length : number +>array2.length : number +>array2 : U[] +>length : number + + return [[undefined, undefined]]; +>[[undefined, undefined]] : [[undefined, undefined]] +>[undefined, undefined] : [undefined, undefined] +>undefined : undefined +>undefined : undefined + } + var length = array1.length; +>length : number +>array1.length : number +>array1 : T[] +>length : number + + var zipResult: [[T, U]]; +>zipResult : [[T, U]] +>T : T +>U : U + + for (var i = 0; i < length; ++i) { +>i : number +>i < length : boolean +>i : number +>length : number +>++i : number +>i : number + + zipResult.push([array1[i], array2[i]]); +>zipResult.push([array1[i], array2[i]]) : number +>zipResult.push : (...items: [T, U][]) => number +>zipResult : [[T, U]] +>push : (...items: [T, U][]) => number +>[array1[i], array2[i]] : [T, U] +>array1[i] : T +>array1 : T[] +>i : number +>array2[i] : U +>array2 : U[] +>i : number + } + return zipResult; +>zipResult : [[T, U]] +} + +var zipResult = zip(["foo", "bar"], [5, 6]); +>zipResult : [[string, number]] +>zip(["foo", "bar"], [5, 6]) : [[string, number]] +>zip : (array1: T[], array2: U[]) => [[T, U]] +>["foo", "bar"] : string[] +>[5, 6] : number[] + +var zipResultEle = zipResult[0]; // [string, number] +>zipResultEle : [string, number] +>zipResult[0] : [string, number] +>zipResult : [[string, number]] + +var zipResultEleEle = zipResult[0][0]; // string +>zipResultEleEle : string +>zipResult[0][0] : string +>zipResult[0] : [string, number] +>zipResult : [[string, number]] + + diff --git a/tests/cases/conformance/types/tuple/' b/tests/cases/conformance/types/tuple/' new file mode 100644 index 00000000000..bc9a6f23927 --- /dev/null +++ b/tests/cases/conformance/types/tuple/' @@ -0,0 +1,15 @@ +var strNumTuple: [string, number] = ["foo", 10]; +var numTupleTuple: [number, [string, number]] = [10, ["bar", 20]]; + +// no error +var idx0 = 0; +var idx1 = 1; +var ele10 = strNumTuple[0]; // string +var ele11 = strNumTuple[1]; // number +var ele12 = strNumTuple[2]; // {} +var ele13 = strNumTuple[idx0]; // {} +var ele14 = strNumTuple[idx1]; // {} +var ele15 = strNumTuple["0"]; // string +var ele16 = strNumTuple["1"]; // number +var strNumTuple1 = numTupleTuple[1]; //[string, number]; +var ele17 = numTupleTuple[2]; // {} \ No newline at end of file diff --git a/tests/cases/conformance/types/tuple/castingTuple.ts b/tests/cases/conformance/types/tuple/castingTuple.ts new file mode 100644 index 00000000000..f154e5f00c8 --- /dev/null +++ b/tests/cases/conformance/types/tuple/castingTuple.ts @@ -0,0 +1,27 @@ +interface I { } +class A { a = 10; } +class C implements I { c }; +class D implements I { d }; +class E extends A { e }; +class F extends A { f }; +enum E1 { one } +enum E2 { one } + +// no error +var numStrTuple: [number, string] = [5, "foo"]; +var emptyObjTuple = <[{}, {}]>numStrTuple; +var numStrBoolTuple = <[number, string, boolean]>numStrTuple; +var classCDTuple: [C, D] = [new C(), new D()]; +var interfaceIITuple = <[I, I]>classCDTuple; +var classCDATuple = <[C, D, A]>classCDTuple; +var eleFromCDA1 = classCDATuple[2]; // A +var eleFromCDA2 = classCDATuple[5]; // {} +var t10: [E1, E2] = [E1.one, E2.one]; +var t11 = <[number, number]>t10; +var array1 = <{}[]>emptyObjTuple; + +// error +var t3 = <[number, number]>numStrTuple; +var t9 = <[A, I]>classCDTuple; +var array1 = numStrTuple; +t4[2] = 10; \ No newline at end of file diff --git a/tests/cases/conformance/types/tuple/contextualTypeWithTuple.ts b/tests/cases/conformance/types/tuple/contextualTypeWithTuple.ts new file mode 100644 index 00000000000..7e9575d7f82 --- /dev/null +++ b/tests/cases/conformance/types/tuple/contextualTypeWithTuple.ts @@ -0,0 +1,13 @@ +// no error +var numStrTuple: [number, string] = [5, "hello"]; +var numStrTuple2: [number, string] = [5, "foo", true]; +var numStrBoolTuple: [number, string, boolean] = [5, "foo", true]; +var objNumTuple: [{ a: string }, number] = [{ a: "world" }, 5]; +var strTupleTuple: [string, [number, {}]] = ["bar", [5, { x: 1, y: 1 }]]; +numStrTuple = numStrTuple2; +numStrTuple = numStrBoolTuple; + +// error +objNumTuple = [ {}, 5]; +numStrBoolTuple = numStrTuple; +var strStrTuple: [string, string] = ["foo", "bar", 5]; diff --git a/tests/cases/conformance/types/tuple/indexerWithTuple.ts b/tests/cases/conformance/types/tuple/indexerWithTuple.ts new file mode 100644 index 00000000000..0b51ecd32ee --- /dev/null +++ b/tests/cases/conformance/types/tuple/indexerWithTuple.ts @@ -0,0 +1,15 @@ +var strNumTuple: [string, number] = ["foo", 10]; +var numTupleTuple: [number, [string, number]] = [10, ["bar", 20]]; + +// no error +var idx0 = 0; +var idx1 = 1; +var ele10 = strNumTuple[0]; // string +var ele11 = strNumTuple[1]; // number +var ele12 = strNumTuple[2]; // {} +var ele13 = strNumTuple[idx0]; // {} +var ele14 = strNumTuple[idx1]; // {} +var ele15 = strNumTuple["0"]; // string +var ele16 = strNumTuple["1"]; // number +var strNumTuple1 = numTupleTuple[1]; //[string, number]; +var ele17 = numTupleTuple[2]; // {} \ No newline at end of file diff --git a/tests/cases/conformance/types/tuple/typeInferenceWithTupleType.ts b/tests/cases/conformance/types/tuple/typeInferenceWithTupleType.ts new file mode 100644 index 00000000000..d19353d29ef --- /dev/null +++ b/tests/cases/conformance/types/tuple/typeInferenceWithTupleType.ts @@ -0,0 +1,24 @@ +function combine(x: T, y: U): [T, U] { + return [x, y]; +} + +var combineResult = combine("string", 10); +var combineEle1 = combineResult[0]; // string +var combineEle2 = combineResult[1]; // number + +function zip(array1: T[], array2: U[]): [[T, U]] { + if (array1.length != array2.length) { + return [[undefined, undefined]]; + } + var length = array1.length; + var zipResult: [[T, U]]; + for (var i = 0; i < length; ++i) { + zipResult.push([array1[i], array2[i]]); + } + return zipResult; +} + +var zipResult = zip(["foo", "bar"], [5, 6]); +var zipResultEle = zipResult[0]; // [string, number] +var zipResultEleEle = zipResult[0][0]; // string + diff --git a/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/assignmentCompatBetweenTupleAndArray.ts b/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/assignmentCompatBetweenTupleAndArray.ts new file mode 100644 index 00000000000..3811809742c --- /dev/null +++ b/tests/cases/conformance/types/typeRelationships/assignmentCompatibility/assignmentCompatBetweenTupleAndArray.ts @@ -0,0 +1,18 @@ +var numStrTuple: [number, string]; +var numNumTuple: [number, number]; +var numEmptyObjTuple: [number, {}]; +var emptyObjTuple: [{}]; + +var numArray: number[]; +var emptyObjArray: {}[]; + +// no error +numArray = numNumTuple; +emptyObjArray = emptyObjTuple; +emptyObjArray = numStrTuple; +emptyObjArray = numNumTuple; +emptyObjArray = numEmptyObjTuple; + +// error +numArray = numStrTuple; +emptyObjTuple = emptyObjArray; diff --git a/tests/cases/conformance/types/typeRelationships/bestCommonType/bestCommonTypeOfTuple.ts b/tests/cases/conformance/types/typeRelationships/bestCommonType/bestCommonTypeOfTuple.ts new file mode 100644 index 00000000000..6d5aff974eb --- /dev/null +++ b/tests/cases/conformance/types/typeRelationships/bestCommonType/bestCommonTypeOfTuple.ts @@ -0,0 +1,25 @@ +function f1(x: number): string { return "foo"; } + +function f2(x: number): number { return 10; } + +function f3(x: number): boolean { return true; } + +enum E1 { one } + +enum E2 { two } + + +var t1: [(x: number) => string, (x: number) => number]; +var t2: [E1, E2]; +var t3: [number, any]; +var t4: [E1, E2, number]; + +// no error +t1 = [f1, f2]; +t2 = [E1.one, E2.two]; +t3 = [5, undefined]; +t4 = [E1.one, E2.two, 20]; +var e1 = t1[2]; // {} +var e2 = t2[2]; // {} +var e3 = t3[2]; // any +var e4 = t4[3]; // number \ No newline at end of file diff --git a/tests/cases/conformance/types/typeRelationships/bestCommonType/bestCommonTypeOfTuple2.ts b/tests/cases/conformance/types/typeRelationships/bestCommonType/bestCommonTypeOfTuple2.ts new file mode 100644 index 00000000000..e3487f6bee2 --- /dev/null +++ b/tests/cases/conformance/types/typeRelationships/bestCommonType/bestCommonTypeOfTuple2.ts @@ -0,0 +1,21 @@ +interface base { } +interface base1 { i } +class C implements base { c } +class D implements base { d } +class E implements base { e } +class F extends C { f } + +class C1 implements base1 { i = "foo"; c } +class D1 extends C1 { i = "bar"; d } + +var t1: [C, base]; +var t2: [C, D]; +var t3: [C1, D1]; +var t4: [base1, C1]; +var t5: [C1, F] + +var e11 = t1[4]; // base +var e21 = t2[4]; // {} +var e31 = t3[4]; // C1 +var e41 = t4[2]; // base1 +var e51 = t5[2]; // {} diff --git a/tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithTupleType.ts b/tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithTupleType.ts new file mode 100644 index 00000000000..60198e1c510 --- /dev/null +++ b/tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithTupleType.ts @@ -0,0 +1,24 @@ +interface I { + tuple1: [T, U]; +} + +var i1: I; +var i2: I<{}, {}>; + +// no error +i1.tuple1 = ["foo", 5]; +var e1 = i1.tuple1[0]; // string +var e2 = i1.tuple1[1]; // number +i1.tuple1 = ["foo", 5, false, true]; +var e3 = i1.tuple1[2]; // {} +i1.tuple1[3] = { a: "string" }; +var e4 = i1.tuple1[3]; // {} +i2.tuple1 = ["foo", 5]; +i2.tuple1 = ["foo", "bar"]; +i2.tuple1 = [5, "bar"]; +i2.tuple1 = [{}, {}]; + +// error +i1.tuple1 = [5, "foo"]; +i1.tuple1 = [{}, {}]; +i2.tuple1 = [{}]; From e6b5591ae91c96a706623b22e881162bd3edaffe Mon Sep 17 00:00:00 2001 From: Chris Bubernak Date: Fri, 3 Oct 2014 18:50:48 -0700 Subject: [PATCH 088/110] Updated baselines --- ...eticOperatorWithInvalidOperands.errors.txt | 29 ++--- ...WithNullValueAndInvalidOperands.errors.txt | 110 ++++++------------ ...ndefinedValueAndInvalidOperands.errors.txt | 110 ++++++------------ ...torWithIncompleteTypeAnnotation.errors.txt | 11 +- 4 files changed, 88 insertions(+), 172 deletions(-) diff --git a/tests/baselines/reference/arithmeticOperatorWithInvalidOperands.errors.txt b/tests/baselines/reference/arithmeticOperatorWithInvalidOperands.errors.txt index 668a7bef6a0..f58d2107e9f 100644 --- a/tests/baselines/reference/arithmeticOperatorWithInvalidOperands.errors.txt +++ b/tests/baselines/reference/arithmeticOperatorWithInvalidOperands.errors.txt @@ -395,8 +395,7 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(417,16): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(418,16): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(420,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(421,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(421,16): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(421,12): error TS2447: The '&' operator is not allowed for boolean types. Consider using && instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(422,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(423,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(423,16): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -451,8 +450,7 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(474,16): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(475,16): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(477,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(478,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(478,16): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(478,12): error TS2447: The '^' operator is not allowed for boolean types. Consider using !== instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(479,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(480,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(480,16): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -507,8 +505,7 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(531,17): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(532,17): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(534,13): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(535,13): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(535,17): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(535,13): error TS2447: The '|' operator is not allowed for boolean types. Consider using || instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(536,13): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(537,13): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(537,17): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -560,7 +557,7 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(581,13): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -==== tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts (560 errors) ==== +==== tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts (557 errors) ==== // these operators require their operands to be of type Any, the Number primitive type, or // an enum type enum E { a, b, c } @@ -1776,10 +1773,8 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti ~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. var r8b2 = b & b; - ~ -!!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. - ~ -!!! error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. + ~~~~~ +!!! error TS2447: The '&' operator is not allowed for boolean types. Consider using && instead. var r8b3 = b & c; ~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -1945,10 +1940,8 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti ~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. var r9b2 = b ^ b; - ~ -!!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. - ~ -!!! error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. + ~~~~~ +!!! error TS2447: The '^' operator is not allowed for boolean types. Consider using !== instead. var r9b3 = b ^ c; ~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -2114,10 +2107,8 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti ~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. var r10b2 = b | b; - ~ -!!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. - ~ -!!! error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. + ~~~~~ +!!! error TS2447: The '|' operator is not allowed for boolean types. Consider using || instead. var r10b3 = b | c; ~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. diff --git a/tests/baselines/reference/arithmeticOperatorWithNullValueAndInvalidOperands.errors.txt b/tests/baselines/reference/arithmeticOperatorWithNullValueAndInvalidOperands.errors.txt index 5ad26655c3c..3dd18398d58 100644 --- a/tests/baselines/reference/arithmeticOperatorWithNullValueAndInvalidOperands.errors.txt +++ b/tests/baselines/reference/arithmeticOperatorWithNullValueAndInvalidOperands.errors.txt @@ -166,81 +166,69 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(124,19): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(125,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(125,19): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(128,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(128,19): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(128,12): error TS2447: The '&' operator is not allowed for boolean types. Consider using && instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(129,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(129,19): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(130,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(130,19): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(132,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(132,16): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(132,12): error TS2447: The '&' operator is not allowed for boolean types. Consider using && instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(133,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(133,16): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(134,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(134,16): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(136,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(136,19): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(136,12): error TS2447: The '&' operator is not allowed for boolean types. Consider using && instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(137,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(137,19): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(138,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(138,19): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(140,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(140,19): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(140,12): error TS2447: The '&' operator is not allowed for boolean types. Consider using && instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(141,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(141,17): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(142,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(142,17): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(145,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(145,19): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(145,12): error TS2447: The '^' operator is not allowed for boolean types. Consider using !== instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(146,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(146,19): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(147,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(147,19): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(149,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(149,16): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(149,12): error TS2447: The '^' operator is not allowed for boolean types. Consider using !== instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(150,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(150,16): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(151,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(151,16): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(153,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(153,19): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(153,12): error TS2447: The '^' operator is not allowed for boolean types. Consider using !== instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(154,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(154,19): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(155,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(155,19): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(157,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(157,19): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(157,12): error TS2447: The '^' operator is not allowed for boolean types. Consider using !== instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(158,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(158,17): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(159,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(159,17): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(162,13): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(162,20): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(162,13): error TS2447: The '|' operator is not allowed for boolean types. Consider using || instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(163,13): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(163,20): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(164,13): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(164,20): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(166,13): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(166,17): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(166,13): error TS2447: The '|' operator is not allowed for boolean types. Consider using || instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(167,13): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(167,17): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(168,13): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(168,17): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(170,13): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(170,20): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(170,13): error TS2447: The '|' operator is not allowed for boolean types. Consider using || instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(171,13): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(171,20): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(172,13): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(172,20): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(174,13): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(174,20): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(174,13): error TS2447: The '|' operator is not allowed for boolean types. Consider using || instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(175,13): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(175,18): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(176,13): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(176,18): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -==== tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts (240 errors) ==== +==== tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts (228 errors) ==== // If one operand is the null or undefined value, it is treated as having the type of the // other operand. @@ -705,10 +693,8 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti // operator & var r8a1 = null & a; - ~~~~ -!!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. - ~ -!!! error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. + ~~~~~~~~ +!!! error TS2447: The '&' operator is not allowed for boolean types. Consider using && instead. var r8a2 = null & b; ~~~~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -721,10 +707,8 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti !!! error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. var r8b1 = a & null; - ~ -!!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. - ~~~~ -!!! error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. + ~~~~~~~~ +!!! error TS2447: The '&' operator is not allowed for boolean types. Consider using && instead. var r8b2 = b & null; ~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -737,10 +721,8 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti !!! error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. var r8c1 = null & true; - ~~~~ -!!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. - ~~~~ -!!! error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. + ~~~~~~~~~~~ +!!! error TS2447: The '&' operator is not allowed for boolean types. Consider using && instead. var r8c2 = null & ''; ~~~~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -753,10 +735,8 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti !!! error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. var r8d1 = true & null; - ~~~~ -!!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. - ~~~~ -!!! error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. + ~~~~~~~~~~~ +!!! error TS2447: The '&' operator is not allowed for boolean types. Consider using && instead. var r8d2 = '' & null; ~~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -770,10 +750,8 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti // operator ^ var r9a1 = null ^ a; - ~~~~ -!!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. - ~ -!!! error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. + ~~~~~~~~ +!!! error TS2447: The '^' operator is not allowed for boolean types. Consider using !== instead. var r9a2 = null ^ b; ~~~~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -786,10 +764,8 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti !!! error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. var r9b1 = a ^ null; - ~ -!!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. - ~~~~ -!!! error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. + ~~~~~~~~ +!!! error TS2447: The '^' operator is not allowed for boolean types. Consider using !== instead. var r9b2 = b ^ null; ~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -802,10 +778,8 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti !!! error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. var r9c1 = null ^ true; - ~~~~ -!!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. - ~~~~ -!!! error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. + ~~~~~~~~~~~ +!!! error TS2447: The '^' operator is not allowed for boolean types. Consider using !== instead. var r9c2 = null ^ ''; ~~~~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -818,10 +792,8 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti !!! error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. var r9d1 = true ^ null; - ~~~~ -!!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. - ~~~~ -!!! error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. + ~~~~~~~~~~~ +!!! error TS2447: The '^' operator is not allowed for boolean types. Consider using !== instead. var r9d2 = '' ^ null; ~~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -835,10 +807,8 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti // operator | var r10a1 = null | a; - ~~~~ -!!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. - ~ -!!! error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. + ~~~~~~~~ +!!! error TS2447: The '|' operator is not allowed for boolean types. Consider using || instead. var r10a2 = null | b; ~~~~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -851,10 +821,8 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti !!! error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. var r10b1 = a | null; - ~ -!!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. - ~~~~ -!!! error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. + ~~~~~~~~ +!!! error TS2447: The '|' operator is not allowed for boolean types. Consider using || instead. var r10b2 = b | null; ~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -867,10 +835,8 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti !!! error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. var r10c1 = null | true; - ~~~~ -!!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. - ~~~~ -!!! error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. + ~~~~~~~~~~~ +!!! error TS2447: The '|' operator is not allowed for boolean types. Consider using || instead. var r10c2 = null | ''; ~~~~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -883,10 +849,8 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti !!! error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. var r10d1 = true | null; - ~~~~ -!!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. - ~~~~ -!!! error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. + ~~~~~~~~~~~ +!!! error TS2447: The '|' operator is not allowed for boolean types. Consider using || instead. var r10d2 = '' | null; ~~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. diff --git a/tests/baselines/reference/arithmeticOperatorWithUndefinedValueAndInvalidOperands.errors.txt b/tests/baselines/reference/arithmeticOperatorWithUndefinedValueAndInvalidOperands.errors.txt index 7bd250ae661..994af459282 100644 --- a/tests/baselines/reference/arithmeticOperatorWithUndefinedValueAndInvalidOperands.errors.txt +++ b/tests/baselines/reference/arithmeticOperatorWithUndefinedValueAndInvalidOperands.errors.txt @@ -166,81 +166,69 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(124,19): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(125,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(125,19): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(128,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(128,24): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(128,12): error TS2447: The '&' operator is not allowed for boolean types. Consider using && instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(129,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(129,24): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(130,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(130,24): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(132,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(132,16): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(132,12): error TS2447: The '&' operator is not allowed for boolean types. Consider using && instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(133,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(133,16): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(134,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(134,16): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(136,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(136,24): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(136,12): error TS2447: The '&' operator is not allowed for boolean types. Consider using && instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(137,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(137,24): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(138,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(138,24): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(140,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(140,19): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(140,12): error TS2447: The '&' operator is not allowed for boolean types. Consider using && instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(141,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(141,17): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(142,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(142,17): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(145,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(145,24): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(145,12): error TS2447: The '^' operator is not allowed for boolean types. Consider using !== instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(146,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(146,24): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(147,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(147,24): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(149,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(149,16): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(149,12): error TS2447: The '^' operator is not allowed for boolean types. Consider using !== instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(150,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(150,16): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(151,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(151,16): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(153,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(153,24): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(153,12): error TS2447: The '^' operator is not allowed for boolean types. Consider using !== instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(154,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(154,24): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(155,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(155,24): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(157,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(157,19): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(157,12): error TS2447: The '^' operator is not allowed for boolean types. Consider using !== instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(158,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(158,17): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(159,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(159,17): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(162,13): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(162,25): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(162,13): error TS2447: The '|' operator is not allowed for boolean types. Consider using || instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(163,13): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(163,25): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(164,13): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(164,25): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(166,13): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(166,17): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(166,13): error TS2447: The '|' operator is not allowed for boolean types. Consider using || instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(167,13): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(167,17): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(168,13): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(168,17): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(170,13): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(170,25): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(170,13): error TS2447: The '|' operator is not allowed for boolean types. Consider using || instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(171,13): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(171,25): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(172,13): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(172,25): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(174,13): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(174,20): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(174,13): error TS2447: The '|' operator is not allowed for boolean types. Consider using || instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(175,13): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(175,18): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(176,13): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(176,18): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -==== tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts (240 errors) ==== +==== tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts (228 errors) ==== // If one operand is the undefined or undefined value, it is treated as having the type of the // other operand. @@ -705,10 +693,8 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti // operator & var r8a1 = undefined & a; - ~~~~~~~~~ -!!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. - ~ -!!! error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. + ~~~~~~~~~~~~~ +!!! error TS2447: The '&' operator is not allowed for boolean types. Consider using && instead. var r8a2 = undefined & b; ~~~~~~~~~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -721,10 +707,8 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti !!! error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. var r8b1 = a & undefined; - ~ -!!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. - ~~~~~~~~~ -!!! error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. + ~~~~~~~~~~~~~ +!!! error TS2447: The '&' operator is not allowed for boolean types. Consider using && instead. var r8b2 = b & undefined; ~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -737,10 +721,8 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti !!! error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. var r8c1 = undefined & true; - ~~~~~~~~~ -!!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. - ~~~~ -!!! error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. + ~~~~~~~~~~~~~~~~ +!!! error TS2447: The '&' operator is not allowed for boolean types. Consider using && instead. var r8c2 = undefined & ''; ~~~~~~~~~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -753,10 +735,8 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti !!! error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. var r8d1 = true & undefined; - ~~~~ -!!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. - ~~~~~~~~~ -!!! error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. + ~~~~~~~~~~~~~~~~ +!!! error TS2447: The '&' operator is not allowed for boolean types. Consider using && instead. var r8d2 = '' & undefined; ~~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -770,10 +750,8 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti // operator ^ var r9a1 = undefined ^ a; - ~~~~~~~~~ -!!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. - ~ -!!! error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. + ~~~~~~~~~~~~~ +!!! error TS2447: The '^' operator is not allowed for boolean types. Consider using !== instead. var r9a2 = undefined ^ b; ~~~~~~~~~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -786,10 +764,8 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti !!! error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. var r9b1 = a ^ undefined; - ~ -!!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. - ~~~~~~~~~ -!!! error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. + ~~~~~~~~~~~~~ +!!! error TS2447: The '^' operator is not allowed for boolean types. Consider using !== instead. var r9b2 = b ^ undefined; ~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -802,10 +778,8 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti !!! error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. var r9c1 = undefined ^ true; - ~~~~~~~~~ -!!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. - ~~~~ -!!! error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. + ~~~~~~~~~~~~~~~~ +!!! error TS2447: The '^' operator is not allowed for boolean types. Consider using !== instead. var r9c2 = undefined ^ ''; ~~~~~~~~~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -818,10 +792,8 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti !!! error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. var r9d1 = true ^ undefined; - ~~~~ -!!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. - ~~~~~~~~~ -!!! error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. + ~~~~~~~~~~~~~~~~ +!!! error TS2447: The '^' operator is not allowed for boolean types. Consider using !== instead. var r9d2 = '' ^ undefined; ~~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -835,10 +807,8 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti // operator | var r10a1 = undefined | a; - ~~~~~~~~~ -!!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. - ~ -!!! error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. + ~~~~~~~~~~~~~ +!!! error TS2447: The '|' operator is not allowed for boolean types. Consider using || instead. var r10a2 = undefined | b; ~~~~~~~~~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -851,10 +821,8 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti !!! error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. var r10b1 = a | undefined; - ~ -!!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. - ~~~~~~~~~ -!!! error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. + ~~~~~~~~~~~~~ +!!! error TS2447: The '|' operator is not allowed for boolean types. Consider using || instead. var r10b2 = b | undefined; ~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -867,10 +835,8 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti !!! error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. var r10c1 = undefined | true; - ~~~~~~~~~ -!!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. - ~~~~ -!!! error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. + ~~~~~~~~~~~~~~~~ +!!! error TS2447: The '|' operator is not allowed for boolean types. Consider using || instead. var r10c2 = undefined | ''; ~~~~~~~~~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -883,10 +849,8 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti !!! error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. var r10d1 = true | undefined; - ~~~~ -!!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. - ~~~~~~~~~ -!!! error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. + ~~~~~~~~~~~~~~~~ +!!! error TS2447: The '|' operator is not allowed for boolean types. Consider using || instead. var r10d2 = '' | undefined; ~~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. diff --git a/tests/baselines/reference/constructorWithIncompleteTypeAnnotation.errors.txt b/tests/baselines/reference/constructorWithIncompleteTypeAnnotation.errors.txt index 17b5398475a..ab82d01a819 100644 --- a/tests/baselines/reference/constructorWithIncompleteTypeAnnotation.errors.txt +++ b/tests/baselines/reference/constructorWithIncompleteTypeAnnotation.errors.txt @@ -72,8 +72,7 @@ tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(89,23): error TS tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(108,24): error TS2365: Operator '+' cannot be applied to types 'number' and 'boolean'. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(159,31): error TS2304: Cannot find name 'Property'. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(166,13): error TS2365: Operator '+=' cannot be applied to types 'number' and 'void'. -tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(180,40): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(180,47): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. +tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(180,40): error TS2447: The '^' operator is not allowed for boolean types. Consider using !== instead. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(213,16): error TS2304: Cannot find name 'bool'. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(218,29): error TS2304: Cannot find name 'yield'. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(223,23): error TS2304: Cannot find name 'bool'. @@ -96,7 +95,7 @@ tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(259,29): error T tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(259,37): error TS2304: Cannot find name 'string'. -==== tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts (96 errors) ==== +==== tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts (95 errors) ==== declare module "fs" { export class File { constructor(filename: string); @@ -370,10 +369,8 @@ tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(259,37): error T var i = a[1];/*[]*/ i = i + i - i * i / i % i & i | i ^ i;/*+ - * / % & | ^*/ var b = true && false || true ^ false;/*& | ^*/ - ~~~~ -!!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. - ~~~~~ -!!! error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. + ~~~~~~~~~~~~ +!!! error TS2447: The '^' operator is not allowed for boolean types. Consider using !== instead. b = !b;/*!*/ i = ~i;/*~i*/ b = i < (i - 1) && (i + 1) > i;/*< && >*/ From a500ac226629bbb230c8e37b6ffda71ca8f7a048 Mon Sep 17 00:00:00 2001 From: Chris Bubernak Date: Fri, 3 Oct 2014 18:58:50 -0700 Subject: [PATCH 089/110] specific type for function param --- src/compiler/checker.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 4ee96be9bd7..d0e28b356b5 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -5100,7 +5100,7 @@ module ts { } // if a user tries to apply an innappropriate operator to 2 boolean operands try and return them a helpful suggestion - function getSuggestedBooleanOperator(operator: any): SyntaxKind { + function getSuggestedBooleanOperator(operator: SyntaxKind): SyntaxKind { switch (operator) { case SyntaxKind.BarToken: case SyntaxKind.BarEqualsToken: From 6044e3aea3b29c18e47f90168c69d9ff2976da2c Mon Sep 17 00:00:00 2001 From: Chris Bubernak Date: Sat, 4 Oct 2014 10:10:55 -0700 Subject: [PATCH 090/110] Made fixes based on CR feedback --- src/compiler/checker.ts | 10 +-- .../diagnosticInformationMap.generated.ts | 2 +- src/compiler/diagnosticMessages.json | 2 +- ...eticOperatorWithInvalidOperands.errors.txt | 12 ++-- ...WithNullValueAndInvalidOperands.errors.txt | 48 +++++++------- ...ndefinedValueAndInvalidOperands.errors.txt | 48 +++++++------- ...wiseCompoundAssignmentOperators.errors.txt | 59 +++++++++++++++++ .../bitwiseCompoundAssignmentOperators.js | 63 +++++++++++++++++++ ...torWithIncompleteTypeAnnotation.errors.txt | 4 +- .../bitwiseCompoundAssignmentOperators.ts | 31 +++++++++ 10 files changed, 217 insertions(+), 62 deletions(-) create mode 100644 tests/baselines/reference/bitwiseCompoundAssignmentOperators.errors.txt create mode 100644 tests/baselines/reference/bitwiseCompoundAssignmentOperators.js create mode 100644 tests/cases/compiler/bitwiseCompoundAssignmentOperators.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index d0e28b356b5..d93df28b20b 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -5023,12 +5023,15 @@ module ts { if (rightType.flags & (TypeFlags.Undefined | TypeFlags.Null)) rightType = leftType; var suggestedOperator: SyntaxKind; - // if both operands are booleans and we have a guess as to what the user meant to do return a helpful error - if ((leftType.flags & TypeFlags.Boolean) && (rightType.flags & TypeFlags.Boolean) && (suggestedOperator = getSuggestedBooleanOperator(node.operator)) !== undefined) { + // if a user tries to apply a bitwise operator to 2 boolean operands + // try and return them a helpful suggestion + if ((leftType.flags & TypeFlags.Boolean) && + (rightType.flags & TypeFlags.Boolean) && + (suggestedOperator = getSuggestedBooleanOperator(node.operator)) !== undefined) { error(node, Diagnostics.The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead, tokenToString(node.operator), tokenToString(suggestedOperator)); } - // otherwise just check each operand seperately and report errors as normal else { + // otherwise just check each operand seperately and report errors as normal var leftOk = checkArithmeticOperandType(node.left, leftType, Diagnostics.The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type); var rightOk = checkArithmeticOperandType(node.right, rightType, Diagnostics.The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type); if (leftOk && rightOk) { @@ -5099,7 +5102,6 @@ module ts { return rightType; } - // if a user tries to apply an innappropriate operator to 2 boolean operands try and return them a helpful suggestion function getSuggestedBooleanOperator(operator: SyntaxKind): SyntaxKind { switch (operator) { case SyntaxKind.BarToken: diff --git a/src/compiler/diagnosticInformationMap.generated.ts b/src/compiler/diagnosticInformationMap.generated.ts index a430799ba50..ae51de69fa4 100644 --- a/src/compiler/diagnosticInformationMap.generated.ts +++ b/src/compiler/diagnosticInformationMap.generated.ts @@ -260,7 +260,7 @@ module ts { Property_0_is_protected_in_type_1_but_public_in_type_2: { code: 2444, category: DiagnosticCategory.Error, key: "Property '{0}' is protected in type '{1}' but public in type '{2}'." }, Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses: { code: 2445, category: DiagnosticCategory.Error, key: "Property '{0}' is protected and only accessible within class '{1}' and its subclasses." }, Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1: { code: 2446, category: DiagnosticCategory.Error, key: "Property '{0}' is protected and only accessible through an instance of class '{1}'." }, - The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead: { code: 2447, category: DiagnosticCategory.Error, key: "The '{0}' operator is not allowed for boolean types. Consider using {1} instead." }, + The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead: { code: 2447, category: DiagnosticCategory.Error, key: "The '{0}' operator is not allowed for boolean types. Consider using '{1}' instead." }, Import_declaration_0_is_using_private_name_1: { code: 4000, category: DiagnosticCategory.Error, key: "Import declaration '{0}' is using private name '{1}'." }, Type_parameter_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: { code: 4001, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of exported class has or is using name '{1}' from private module '{2}'." }, Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: { code: 4002, category: DiagnosticCategory.Error, key: "Type parameter '{0}' of exported class has or is using private name '{1}'." }, diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index d715c898510..12418bff929 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -1032,7 +1032,7 @@ "category": "Error", "code": 2446 }, - "The '{0}' operator is not allowed for boolean types. Consider using {1} instead.": { + "The '{0}' operator is not allowed for boolean types. Consider using '{1}' instead.": { "category": "Error", "code": 2447 }, diff --git a/tests/baselines/reference/arithmeticOperatorWithInvalidOperands.errors.txt b/tests/baselines/reference/arithmeticOperatorWithInvalidOperands.errors.txt index f58d2107e9f..0d376912b8d 100644 --- a/tests/baselines/reference/arithmeticOperatorWithInvalidOperands.errors.txt +++ b/tests/baselines/reference/arithmeticOperatorWithInvalidOperands.errors.txt @@ -395,7 +395,7 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(417,16): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(418,16): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(420,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(421,12): error TS2447: The '&' operator is not allowed for boolean types. Consider using && instead. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(421,12): error TS2447: The '&' operator is not allowed for boolean types. Consider using '&&' instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(422,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(423,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(423,16): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -450,7 +450,7 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(474,16): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(475,16): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(477,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(478,12): error TS2447: The '^' operator is not allowed for boolean types. Consider using !== instead. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(478,12): error TS2447: The '^' operator is not allowed for boolean types. Consider using '!==' instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(479,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(480,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(480,16): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -505,7 +505,7 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(531,17): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(532,17): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(534,13): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(535,13): error TS2447: The '|' operator is not allowed for boolean types. Consider using || instead. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(535,13): error TS2447: The '|' operator is not allowed for boolean types. Consider using '||' instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(536,13): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(537,13): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithInvalidOperands.ts(537,17): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -1774,7 +1774,7 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. var r8b2 = b & b; ~~~~~ -!!! error TS2447: The '&' operator is not allowed for boolean types. Consider using && instead. +!!! error TS2447: The '&' operator is not allowed for boolean types. Consider using '&&' instead. var r8b3 = b & c; ~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -1941,7 +1941,7 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. var r9b2 = b ^ b; ~~~~~ -!!! error TS2447: The '^' operator is not allowed for boolean types. Consider using !== instead. +!!! error TS2447: The '^' operator is not allowed for boolean types. Consider using '!==' instead. var r9b3 = b ^ c; ~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -2108,7 +2108,7 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. var r10b2 = b | b; ~~~~~ -!!! error TS2447: The '|' operator is not allowed for boolean types. Consider using || instead. +!!! error TS2447: The '|' operator is not allowed for boolean types. Consider using '||' instead. var r10b3 = b | c; ~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. diff --git a/tests/baselines/reference/arithmeticOperatorWithNullValueAndInvalidOperands.errors.txt b/tests/baselines/reference/arithmeticOperatorWithNullValueAndInvalidOperands.errors.txt index 3dd18398d58..c043cda8e68 100644 --- a/tests/baselines/reference/arithmeticOperatorWithNullValueAndInvalidOperands.errors.txt +++ b/tests/baselines/reference/arithmeticOperatorWithNullValueAndInvalidOperands.errors.txt @@ -166,62 +166,62 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(124,19): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(125,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(125,19): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(128,12): error TS2447: The '&' operator is not allowed for boolean types. Consider using && instead. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(128,12): error TS2447: The '&' operator is not allowed for boolean types. Consider using '&&' instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(129,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(129,19): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(130,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(130,19): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(132,12): error TS2447: The '&' operator is not allowed for boolean types. Consider using && instead. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(132,12): error TS2447: The '&' operator is not allowed for boolean types. Consider using '&&' instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(133,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(133,16): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(134,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(134,16): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(136,12): error TS2447: The '&' operator is not allowed for boolean types. Consider using && instead. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(136,12): error TS2447: The '&' operator is not allowed for boolean types. Consider using '&&' instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(137,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(137,19): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(138,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(138,19): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(140,12): error TS2447: The '&' operator is not allowed for boolean types. Consider using && instead. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(140,12): error TS2447: The '&' operator is not allowed for boolean types. Consider using '&&' instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(141,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(141,17): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(142,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(142,17): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(145,12): error TS2447: The '^' operator is not allowed for boolean types. Consider using !== instead. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(145,12): error TS2447: The '^' operator is not allowed for boolean types. Consider using '!==' instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(146,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(146,19): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(147,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(147,19): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(149,12): error TS2447: The '^' operator is not allowed for boolean types. Consider using !== instead. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(149,12): error TS2447: The '^' operator is not allowed for boolean types. Consider using '!==' instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(150,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(150,16): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(151,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(151,16): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(153,12): error TS2447: The '^' operator is not allowed for boolean types. Consider using !== instead. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(153,12): error TS2447: The '^' operator is not allowed for boolean types. Consider using '!==' instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(154,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(154,19): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(155,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(155,19): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(157,12): error TS2447: The '^' operator is not allowed for boolean types. Consider using !== instead. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(157,12): error TS2447: The '^' operator is not allowed for boolean types. Consider using '!==' instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(158,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(158,17): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(159,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(159,17): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(162,13): error TS2447: The '|' operator is not allowed for boolean types. Consider using || instead. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(162,13): error TS2447: The '|' operator is not allowed for boolean types. Consider using '||' instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(163,13): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(163,20): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(164,13): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(164,20): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(166,13): error TS2447: The '|' operator is not allowed for boolean types. Consider using || instead. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(166,13): error TS2447: The '|' operator is not allowed for boolean types. Consider using '||' instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(167,13): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(167,17): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(168,13): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(168,17): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(170,13): error TS2447: The '|' operator is not allowed for boolean types. Consider using || instead. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(170,13): error TS2447: The '|' operator is not allowed for boolean types. Consider using '||' instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(171,13): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(171,20): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(172,13): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(172,20): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(174,13): error TS2447: The '|' operator is not allowed for boolean types. Consider using || instead. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(174,13): error TS2447: The '|' operator is not allowed for boolean types. Consider using '||' instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(175,13): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(175,18): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithNullValueAndInvalidOperands.ts(176,13): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -694,7 +694,7 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti // operator & var r8a1 = null & a; ~~~~~~~~ -!!! error TS2447: The '&' operator is not allowed for boolean types. Consider using && instead. +!!! error TS2447: The '&' operator is not allowed for boolean types. Consider using '&&' instead. var r8a2 = null & b; ~~~~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -708,7 +708,7 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti var r8b1 = a & null; ~~~~~~~~ -!!! error TS2447: The '&' operator is not allowed for boolean types. Consider using && instead. +!!! error TS2447: The '&' operator is not allowed for boolean types. Consider using '&&' instead. var r8b2 = b & null; ~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -722,7 +722,7 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti var r8c1 = null & true; ~~~~~~~~~~~ -!!! error TS2447: The '&' operator is not allowed for boolean types. Consider using && instead. +!!! error TS2447: The '&' operator is not allowed for boolean types. Consider using '&&' instead. var r8c2 = null & ''; ~~~~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -736,7 +736,7 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti var r8d1 = true & null; ~~~~~~~~~~~ -!!! error TS2447: The '&' operator is not allowed for boolean types. Consider using && instead. +!!! error TS2447: The '&' operator is not allowed for boolean types. Consider using '&&' instead. var r8d2 = '' & null; ~~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -751,7 +751,7 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti // operator ^ var r9a1 = null ^ a; ~~~~~~~~ -!!! error TS2447: The '^' operator is not allowed for boolean types. Consider using !== instead. +!!! error TS2447: The '^' operator is not allowed for boolean types. Consider using '!==' instead. var r9a2 = null ^ b; ~~~~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -765,7 +765,7 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti var r9b1 = a ^ null; ~~~~~~~~ -!!! error TS2447: The '^' operator is not allowed for boolean types. Consider using !== instead. +!!! error TS2447: The '^' operator is not allowed for boolean types. Consider using '!==' instead. var r9b2 = b ^ null; ~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -779,7 +779,7 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti var r9c1 = null ^ true; ~~~~~~~~~~~ -!!! error TS2447: The '^' operator is not allowed for boolean types. Consider using !== instead. +!!! error TS2447: The '^' operator is not allowed for boolean types. Consider using '!==' instead. var r9c2 = null ^ ''; ~~~~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -793,7 +793,7 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti var r9d1 = true ^ null; ~~~~~~~~~~~ -!!! error TS2447: The '^' operator is not allowed for boolean types. Consider using !== instead. +!!! error TS2447: The '^' operator is not allowed for boolean types. Consider using '!==' instead. var r9d2 = '' ^ null; ~~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -808,7 +808,7 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti // operator | var r10a1 = null | a; ~~~~~~~~ -!!! error TS2447: The '|' operator is not allowed for boolean types. Consider using || instead. +!!! error TS2447: The '|' operator is not allowed for boolean types. Consider using '||' instead. var r10a2 = null | b; ~~~~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -822,7 +822,7 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti var r10b1 = a | null; ~~~~~~~~ -!!! error TS2447: The '|' operator is not allowed for boolean types. Consider using || instead. +!!! error TS2447: The '|' operator is not allowed for boolean types. Consider using '||' instead. var r10b2 = b | null; ~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -836,7 +836,7 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti var r10c1 = null | true; ~~~~~~~~~~~ -!!! error TS2447: The '|' operator is not allowed for boolean types. Consider using || instead. +!!! error TS2447: The '|' operator is not allowed for boolean types. Consider using '||' instead. var r10c2 = null | ''; ~~~~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -850,7 +850,7 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti var r10d1 = true | null; ~~~~~~~~~~~ -!!! error TS2447: The '|' operator is not allowed for boolean types. Consider using || instead. +!!! error TS2447: The '|' operator is not allowed for boolean types. Consider using '||' instead. var r10d2 = '' | null; ~~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. diff --git a/tests/baselines/reference/arithmeticOperatorWithUndefinedValueAndInvalidOperands.errors.txt b/tests/baselines/reference/arithmeticOperatorWithUndefinedValueAndInvalidOperands.errors.txt index 994af459282..9ee53c2f15c 100644 --- a/tests/baselines/reference/arithmeticOperatorWithUndefinedValueAndInvalidOperands.errors.txt +++ b/tests/baselines/reference/arithmeticOperatorWithUndefinedValueAndInvalidOperands.errors.txt @@ -166,62 +166,62 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(124,19): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(125,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(125,19): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(128,12): error TS2447: The '&' operator is not allowed for boolean types. Consider using && instead. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(128,12): error TS2447: The '&' operator is not allowed for boolean types. Consider using '&&' instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(129,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(129,24): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(130,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(130,24): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(132,12): error TS2447: The '&' operator is not allowed for boolean types. Consider using && instead. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(132,12): error TS2447: The '&' operator is not allowed for boolean types. Consider using '&&' instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(133,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(133,16): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(134,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(134,16): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(136,12): error TS2447: The '&' operator is not allowed for boolean types. Consider using && instead. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(136,12): error TS2447: The '&' operator is not allowed for boolean types. Consider using '&&' instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(137,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(137,24): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(138,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(138,24): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(140,12): error TS2447: The '&' operator is not allowed for boolean types. Consider using && instead. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(140,12): error TS2447: The '&' operator is not allowed for boolean types. Consider using '&&' instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(141,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(141,17): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(142,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(142,17): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(145,12): error TS2447: The '^' operator is not allowed for boolean types. Consider using !== instead. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(145,12): error TS2447: The '^' operator is not allowed for boolean types. Consider using '!==' instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(146,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(146,24): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(147,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(147,24): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(149,12): error TS2447: The '^' operator is not allowed for boolean types. Consider using !== instead. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(149,12): error TS2447: The '^' operator is not allowed for boolean types. Consider using '!==' instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(150,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(150,16): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(151,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(151,16): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(153,12): error TS2447: The '^' operator is not allowed for boolean types. Consider using !== instead. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(153,12): error TS2447: The '^' operator is not allowed for boolean types. Consider using '!==' instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(154,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(154,24): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(155,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(155,24): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(157,12): error TS2447: The '^' operator is not allowed for boolean types. Consider using !== instead. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(157,12): error TS2447: The '^' operator is not allowed for boolean types. Consider using '!==' instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(158,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(158,17): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(159,12): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(159,17): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(162,13): error TS2447: The '|' operator is not allowed for boolean types. Consider using || instead. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(162,13): error TS2447: The '|' operator is not allowed for boolean types. Consider using '||' instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(163,13): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(163,25): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(164,13): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(164,25): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(166,13): error TS2447: The '|' operator is not allowed for boolean types. Consider using || instead. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(166,13): error TS2447: The '|' operator is not allowed for boolean types. Consider using '||' instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(167,13): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(167,17): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(168,13): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(168,17): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(170,13): error TS2447: The '|' operator is not allowed for boolean types. Consider using || instead. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(170,13): error TS2447: The '|' operator is not allowed for boolean types. Consider using '||' instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(171,13): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(171,25): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(172,13): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(172,25): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. -tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(174,13): error TS2447: The '|' operator is not allowed for boolean types. Consider using || instead. +tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(174,13): error TS2447: The '|' operator is not allowed for boolean types. Consider using '||' instead. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(175,13): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(175,18): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithUndefinedValueAndInvalidOperands.ts(176,13): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -694,7 +694,7 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti // operator & var r8a1 = undefined & a; ~~~~~~~~~~~~~ -!!! error TS2447: The '&' operator is not allowed for boolean types. Consider using && instead. +!!! error TS2447: The '&' operator is not allowed for boolean types. Consider using '&&' instead. var r8a2 = undefined & b; ~~~~~~~~~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -708,7 +708,7 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti var r8b1 = a & undefined; ~~~~~~~~~~~~~ -!!! error TS2447: The '&' operator is not allowed for boolean types. Consider using && instead. +!!! error TS2447: The '&' operator is not allowed for boolean types. Consider using '&&' instead. var r8b2 = b & undefined; ~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -722,7 +722,7 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti var r8c1 = undefined & true; ~~~~~~~~~~~~~~~~ -!!! error TS2447: The '&' operator is not allowed for boolean types. Consider using && instead. +!!! error TS2447: The '&' operator is not allowed for boolean types. Consider using '&&' instead. var r8c2 = undefined & ''; ~~~~~~~~~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -736,7 +736,7 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti var r8d1 = true & undefined; ~~~~~~~~~~~~~~~~ -!!! error TS2447: The '&' operator is not allowed for boolean types. Consider using && instead. +!!! error TS2447: The '&' operator is not allowed for boolean types. Consider using '&&' instead. var r8d2 = '' & undefined; ~~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -751,7 +751,7 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti // operator ^ var r9a1 = undefined ^ a; ~~~~~~~~~~~~~ -!!! error TS2447: The '^' operator is not allowed for boolean types. Consider using !== instead. +!!! error TS2447: The '^' operator is not allowed for boolean types. Consider using '!==' instead. var r9a2 = undefined ^ b; ~~~~~~~~~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -765,7 +765,7 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti var r9b1 = a ^ undefined; ~~~~~~~~~~~~~ -!!! error TS2447: The '^' operator is not allowed for boolean types. Consider using !== instead. +!!! error TS2447: The '^' operator is not allowed for boolean types. Consider using '!==' instead. var r9b2 = b ^ undefined; ~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -779,7 +779,7 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti var r9c1 = undefined ^ true; ~~~~~~~~~~~~~~~~ -!!! error TS2447: The '^' operator is not allowed for boolean types. Consider using !== instead. +!!! error TS2447: The '^' operator is not allowed for boolean types. Consider using '!==' instead. var r9c2 = undefined ^ ''; ~~~~~~~~~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -793,7 +793,7 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti var r9d1 = true ^ undefined; ~~~~~~~~~~~~~~~~ -!!! error TS2447: The '^' operator is not allowed for boolean types. Consider using !== instead. +!!! error TS2447: The '^' operator is not allowed for boolean types. Consider using '!==' instead. var r9d2 = '' ^ undefined; ~~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -808,7 +808,7 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti // operator | var r10a1 = undefined | a; ~~~~~~~~~~~~~ -!!! error TS2447: The '|' operator is not allowed for boolean types. Consider using || instead. +!!! error TS2447: The '|' operator is not allowed for boolean types. Consider using '||' instead. var r10a2 = undefined | b; ~~~~~~~~~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -822,7 +822,7 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti var r10b1 = a | undefined; ~~~~~~~~~~~~~ -!!! error TS2447: The '|' operator is not allowed for boolean types. Consider using || instead. +!!! error TS2447: The '|' operator is not allowed for boolean types. Consider using '||' instead. var r10b2 = b | undefined; ~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -836,7 +836,7 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti var r10c1 = undefined | true; ~~~~~~~~~~~~~~~~ -!!! error TS2447: The '|' operator is not allowed for boolean types. Consider using || instead. +!!! error TS2447: The '|' operator is not allowed for boolean types. Consider using '||' instead. var r10c2 = undefined | ''; ~~~~~~~~~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. @@ -850,7 +850,7 @@ tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeti var r10d1 = true | undefined; ~~~~~~~~~~~~~~~~ -!!! error TS2447: The '|' operator is not allowed for boolean types. Consider using || instead. +!!! error TS2447: The '|' operator is not allowed for boolean types. Consider using '||' instead. var r10d2 = '' | undefined; ~~ !!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. diff --git a/tests/baselines/reference/bitwiseCompoundAssignmentOperators.errors.txt b/tests/baselines/reference/bitwiseCompoundAssignmentOperators.errors.txt new file mode 100644 index 00000000000..1cd51984682 --- /dev/null +++ b/tests/baselines/reference/bitwiseCompoundAssignmentOperators.errors.txt @@ -0,0 +1,59 @@ +tests/cases/compiler/bitwiseCompoundAssignmentOperators.ts(3,1): error TS2447: The '^=' operator is not allowed for boolean types. Consider using '!==' instead. +tests/cases/compiler/bitwiseCompoundAssignmentOperators.ts(7,1): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. +tests/cases/compiler/bitwiseCompoundAssignmentOperators.ts(9,6): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. +tests/cases/compiler/bitwiseCompoundAssignmentOperators.ts(14,1): error TS2447: The '&=' operator is not allowed for boolean types. Consider using '&&' instead. +tests/cases/compiler/bitwiseCompoundAssignmentOperators.ts(18,1): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. +tests/cases/compiler/bitwiseCompoundAssignmentOperators.ts(20,6): error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. +tests/cases/compiler/bitwiseCompoundAssignmentOperators.ts(24,1): error TS2447: The '|=' operator is not allowed for boolean types. Consider using '||' instead. +tests/cases/compiler/bitwiseCompoundAssignmentOperators.ts(28,1): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. + + +==== tests/cases/compiler/bitwiseCompoundAssignmentOperators.ts (8 errors) ==== + var a = true; + var b = 1; + a ^= a; + ~~~~~~ +!!! error TS2447: The '^=' operator is not allowed for boolean types. Consider using '!==' instead. + a = true; + b ^= b; + b = 1; + a ^= b; + ~ +!!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. + a = true; + b ^= a; + ~ +!!! error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. + b = 1; + + var c = false; + var d = 2; + c &= c; + ~~~~~~ +!!! error TS2447: The '&=' operator is not allowed for boolean types. Consider using '&&' instead. + c = false; + d &= d; + d = 2; + c &= d; + ~ +!!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. + c = false; + d &= c; + ~ +!!! error TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. + + var e = true; + var f = 0; + e |= e; + ~~~~~~ +!!! error TS2447: The '|=' operator is not allowed for boolean types. Consider using '||' instead. + e = true; + f |= f; + f = 0; + e |= f; + ~ +!!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type. + e = true; + f |= f; + + \ No newline at end of file diff --git a/tests/baselines/reference/bitwiseCompoundAssignmentOperators.js b/tests/baselines/reference/bitwiseCompoundAssignmentOperators.js new file mode 100644 index 00000000000..e9bfeabb965 --- /dev/null +++ b/tests/baselines/reference/bitwiseCompoundAssignmentOperators.js @@ -0,0 +1,63 @@ +//// [bitwiseCompoundAssignmentOperators.ts] +var a = true; +var b = 1; +a ^= a; +a = true; +b ^= b; +b = 1; +a ^= b; +a = true; +b ^= a; +b = 1; + +var c = false; +var d = 2; +c &= c; +c = false; +d &= d; +d = 2; +c &= d; +c = false; +d &= c; + +var e = true; +var f = 0; +e |= e; +e = true; +f |= f; +f = 0; +e |= f; +e = true; +f |= f; + + + +//// [bitwiseCompoundAssignmentOperators.js] +var a = true; +var b = 1; +a ^= a; +a = true; +b ^= b; +b = 1; +a ^= b; +a = true; +b ^= a; +b = 1; +var c = false; +var d = 2; +c &= c; +c = false; +d &= d; +d = 2; +c &= d; +c = false; +d &= c; +var e = true; +var f = 0; +e |= e; +e = true; +f |= f; +f = 0; +e |= f; +e = true; +f |= f; diff --git a/tests/baselines/reference/constructorWithIncompleteTypeAnnotation.errors.txt b/tests/baselines/reference/constructorWithIncompleteTypeAnnotation.errors.txt index ab82d01a819..0e91d11b280 100644 --- a/tests/baselines/reference/constructorWithIncompleteTypeAnnotation.errors.txt +++ b/tests/baselines/reference/constructorWithIncompleteTypeAnnotation.errors.txt @@ -72,7 +72,7 @@ tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(89,23): error TS tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(108,24): error TS2365: Operator '+' cannot be applied to types 'number' and 'boolean'. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(159,31): error TS2304: Cannot find name 'Property'. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(166,13): error TS2365: Operator '+=' cannot be applied to types 'number' and 'void'. -tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(180,40): error TS2447: The '^' operator is not allowed for boolean types. Consider using !== instead. +tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(180,40): error TS2447: The '^' operator is not allowed for boolean types. Consider using '!==' instead. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(213,16): error TS2304: Cannot find name 'bool'. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(218,29): error TS2304: Cannot find name 'yield'. tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(223,23): error TS2304: Cannot find name 'bool'. @@ -370,7 +370,7 @@ tests/cases/compiler/constructorWithIncompleteTypeAnnotation.ts(259,37): error T i = i + i - i * i / i % i & i | i ^ i;/*+ - * / % & | ^*/ var b = true && false || true ^ false;/*& | ^*/ ~~~~~~~~~~~~ -!!! error TS2447: The '^' operator is not allowed for boolean types. Consider using !== instead. +!!! error TS2447: The '^' operator is not allowed for boolean types. Consider using '!==' instead. b = !b;/*!*/ i = ~i;/*~i*/ b = i < (i - 1) && (i + 1) > i;/*< && >*/ diff --git a/tests/cases/compiler/bitwiseCompoundAssignmentOperators.ts b/tests/cases/compiler/bitwiseCompoundAssignmentOperators.ts new file mode 100644 index 00000000000..29f10cbf38e --- /dev/null +++ b/tests/cases/compiler/bitwiseCompoundAssignmentOperators.ts @@ -0,0 +1,31 @@ +var a = true; +var b = 1; +a ^= a; +a = true; +b ^= b; +b = 1; +a ^= b; +a = true; +b ^= a; +b = 1; + +var c = false; +var d = 2; +c &= c; +c = false; +d &= d; +d = 2; +c &= d; +c = false; +d &= c; + +var e = true; +var f = 0; +e |= e; +e = true; +f |= f; +f = 0; +e |= f; +e = true; +f |= f; + From 739885381771db522d6af162f7703cc93970e0bd Mon Sep 17 00:00:00 2001 From: Chris Bubernak Date: Sat, 4 Oct 2014 11:25:16 -0700 Subject: [PATCH 091/110] fixed spelling mistake --- src/compiler/checker.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index d93df28b20b..8915606f235 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -5031,7 +5031,7 @@ module ts { error(node, Diagnostics.The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead, tokenToString(node.operator), tokenToString(suggestedOperator)); } else { - // otherwise just check each operand seperately and report errors as normal + // otherwise just check each operand separately and report errors as normal var leftOk = checkArithmeticOperandType(node.left, leftType, Diagnostics.The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type); var rightOk = checkArithmeticOperandType(node.right, rightType, Diagnostics.The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type); if (leftOk && rightOk) { From 7222963923e2610a9c59b7e899858cb349454d93 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Sun, 5 Oct 2014 21:17:13 -0700 Subject: [PATCH 092/110] Tweak how we populate NavBarItems. Now we will always place child items of a node in the right bar, even if we're also placing it on the 'top level nodes' list on the left. This makes things clearer for users by making it clear that any time you have a node selected on the left, you can always find its children on the right. And, it still preserves the behavior we want where the left list acts as a high level 'table of contents' for the file. --- src/compiler/parser.ts | 2 +- src/services/navigationBar.ts | 83 ++++++++++++------- .../scriptLexicalStructureFunctions.ts | 2 +- .../scriptLexicalStructureFunctionsBroken.ts | 2 +- .../scriptLexicalStructureFunctionsBroken2.ts | 2 +- 5 files changed, 57 insertions(+), 34 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 422d133d5d0..a74ceb4e024 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -3639,7 +3639,7 @@ module ts { } return finishNode(node); } - + function parseAndCheckEnumDeclaration(pos: number, flags: NodeFlags): EnumDeclaration { function isIntegerLiteral(expression: Expression): boolean { function isInteger(literalExpression: LiteralExpression): boolean { diff --git a/src/services/navigationBar.ts b/src/services/navigationBar.ts index 5cf2dd90eea..144c0e5786b 100644 --- a/src/services/navigationBar.ts +++ b/src/services/navigationBar.ts @@ -22,7 +22,8 @@ module ts.NavigationBar { // to say it only has a single layer of depth do { current = current.parent; - } while (current.kind === SyntaxKind.ModuleDeclaration); + } + while (current.kind === SyntaxKind.ModuleDeclaration); // fall through case SyntaxKind.ClassDeclaration: @@ -37,14 +38,19 @@ module ts.NavigationBar { return indent; } - + function getChildNodes(nodes: Node[]): Node[] { var childNodes: Node[] = []; for (var i = 0, n = nodes.length; i < n; i++) { var node = nodes[i]; - if (node.kind === SyntaxKind.FunctionDeclaration) { + if (node.kind === SyntaxKind.ClassDeclaration || + node.kind === SyntaxKind.EnumDeclaration || + node.kind === SyntaxKind.InterfaceDeclaration || + node.kind === SyntaxKind.ModuleDeclaration || + node.kind === SyntaxKind.FunctionDeclaration) { + childNodes.push(node); } else if (node.kind === SyntaxKind.VariableStatement) { @@ -52,7 +58,7 @@ module ts.NavigationBar { } } - return childNodes; + return sortNodes(childNodes); } function getTopLevelNodes(node: SourceFile): Node[] { @@ -63,8 +69,27 @@ module ts.NavigationBar { return topLevelNodes; } - + + function sortNodes(nodes: Node[]): Node[] { + return nodes.slice(0).sort((n1: Declaration, n2: Declaration) => { + if (n1.name && n2.name) { + return n1.name.text.localeCompare(n2.name.text); + } + else if (n1.name) { + return 1; + } + else if (n2.name) { + -1; + } + else { + return n1.kind - n2.kind; + } + }); + } + function addTopLevelNodes(nodes: Node[], topLevelNodes: Node[]): void { + nodes = sortNodes(nodes); + for (var i = 0, n = nodes.length; i < n; i++) { var node = nodes[i]; switch (node.kind) { @@ -97,9 +122,10 @@ module ts.NavigationBar { return functionDeclaration.kind === SyntaxKind.FunctionDeclaration && functionDeclaration.body && functionDeclaration.body.kind === SyntaxKind.FunctionBlock && - forEach((functionDeclaration.body).statements, s => s.kind === SyntaxKind.FunctionDeclaration); + forEach((functionDeclaration.body).statements, + s => s.kind === SyntaxKind.FunctionDeclaration && !isEmpty((s).name.text)); } - + function getItemsWorker(nodes: Node[], createItem: (n: Node) => ts.NavigationBarItem): ts.NavigationBarItem[] { var items: ts.NavigationBarItem[] = []; @@ -161,31 +187,26 @@ module ts.NavigationBar { function createChildItem(node: Node): ts.NavigationBarItem { switch (node.kind) { case SyntaxKind.Parameter: - var parameter = node; if ((node.flags & NodeFlags.Modifier) === 0) { return undefined; } - return createItem(node, getTextOfNode(parameter.name), ts.ScriptElementKind.memberVariableElement); + return createItem(node, getTextOfNode((node).name), ts.ScriptElementKind.memberVariableElement); case SyntaxKind.Method: - var method = node; - return createItem(node, getTextOfNode(method.name), ts.ScriptElementKind.memberFunctionElement); + return createItem(node, getTextOfNode((node).name), ts.ScriptElementKind.memberFunctionElement); case SyntaxKind.GetAccessor: - var getAccessor = node; - return createItem(node, getTextOfNode(getAccessor.name), ts.ScriptElementKind.memberGetAccessorElement); + return createItem(node, getTextOfNode((node).name), ts.ScriptElementKind.memberGetAccessorElement); case SyntaxKind.SetAccessor: - var setAccessor = node; - return createItem(node, getTextOfNode(setAccessor.name), ts.ScriptElementKind.memberSetAccessorElement); + return createItem(node, getTextOfNode((node).name), ts.ScriptElementKind.memberSetAccessorElement); case SyntaxKind.IndexSignature: return createItem(node, "[]", ts.ScriptElementKind.indexSignatureElement); case SyntaxKind.EnumMember: - var enumMember = node; - return createItem(node, getTextOfNode(enumMember.name), ts.ScriptElementKind.memberVariableElement); + return createItem(node, getTextOfNode((node).name), ts.ScriptElementKind.memberVariableElement); case SyntaxKind.CallSignature: return createItem(node, "()", ts.ScriptElementKind.callSignatureElement); @@ -194,19 +215,13 @@ module ts.NavigationBar { return createItem(node, "new()", ts.ScriptElementKind.constructSignatureElement); case SyntaxKind.Property: - var property = node; - return createItem(node, getTextOfNode(property.name), ts.ScriptElementKind.memberVariableElement); + return createItem(node, getTextOfNode((node).name), ts.ScriptElementKind.memberVariableElement); case SyntaxKind.FunctionDeclaration: - var functionDeclaration = node; - if (!isTopLevelFunctionDeclaration(functionDeclaration)) { - return createItem(node, getTextOfNode(functionDeclaration.name), ts.ScriptElementKind.functionElement); - } - break; + return createItem(node, getTextOfNode((node).name), ts.ScriptElementKind.functionElement); case SyntaxKind.VariableDeclaration: - var variableDeclaration = node; - return createItem(node, getTextOfNode(variableDeclaration.name), ts.ScriptElementKind.variableElement); + return createItem(node, getTextOfNode((node).name), ts.ScriptElementKind.variableElement); case SyntaxKind.Constructor: return createItem(node, "constructor", ts.ScriptElementKind.constructorImplementationElement); @@ -219,7 +234,15 @@ module ts.NavigationBar { } } + function isEmpty(text: string) { + return !text || text.trim() === ""; + } + function getNavigationBarItem(text: string, kind: string, kindModifiers: string, spans: TypeScript.TextSpan[], childItems: ts.NavigationBarItem[] = [], indent: number = 0): ts.NavigationBarItem { + if (isEmpty(text)) { + return undefined; + } + return { text: text, kind: kind, @@ -290,7 +313,7 @@ module ts.NavigationBar { function createFunctionItem(node: FunctionDeclaration) { if (node.name && node.body && node.body.kind === SyntaxKind.FunctionBlock) { - var childItems = getItemsWorker((node.body).statements, createChildItem); + var childItems = getItemsWorker(getChildNodes((node.body).statements), createChildItem); return getNavigationBarItem(node.name.text, ts.ScriptElementKind.functionElement, @@ -335,7 +358,7 @@ module ts.NavigationBar { ? constructor.parameters.concat(node.members) : node.members; - var childItems = getItemsWorker(nodes, createChildItem); + var childItems = getItemsWorker(sortNodes(nodes), createChildItem); } return getNavigationBarItem( @@ -348,7 +371,7 @@ module ts.NavigationBar { } function createEnumItem(node: EnumDeclaration): ts.NavigationBarItem { - var childItems = getItemsWorker(node.members, createChildItem); + var childItems = getItemsWorker(sortNodes(node.members), createChildItem); return getNavigationBarItem( node.name.text, ts.ScriptElementKind.enumElement, @@ -359,7 +382,7 @@ module ts.NavigationBar { } function createIterfaceItem(node: InterfaceDeclaration): ts.NavigationBarItem { - var childItems = getItemsWorker(node.members, createChildItem); + var childItems = getItemsWorker(sortNodes(node.members), createChildItem); return getNavigationBarItem( node.name.text, ts.ScriptElementKind.interfaceElement, diff --git a/tests/cases/fourslash/scriptLexicalStructureFunctions.ts b/tests/cases/fourslash/scriptLexicalStructureFunctions.ts index a42a226c2c0..dd1f1571875 100644 --- a/tests/cases/fourslash/scriptLexicalStructureFunctions.ts +++ b/tests/cases/fourslash/scriptLexicalStructureFunctions.ts @@ -20,4 +20,4 @@ test.markers().forEach((marker) => { verify.getScriptLexicalStructureListContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); }); -verify.getScriptLexicalStructureListCount(5); // 4 functions + global +verify.getScriptLexicalStructureListCount(9); // 4 functions + global. Note: there are 9 because of the functions show up at the top level and as child items. diff --git a/tests/cases/fourslash/scriptLexicalStructureFunctionsBroken.ts b/tests/cases/fourslash/scriptLexicalStructureFunctionsBroken.ts index 687b9b87296..7b28acf22a5 100644 --- a/tests/cases/fourslash/scriptLexicalStructureFunctionsBroken.ts +++ b/tests/cases/fourslash/scriptLexicalStructureFunctionsBroken.ts @@ -9,4 +9,4 @@ test.markers().forEach((marker) => { verify.getScriptLexicalStructureListContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); }); -verify.getScriptLexicalStructureListCount(1); // 1 function - no global since the inner function thinks it has a declaration. +verify.getScriptLexicalStructureListCount(3); // , 'f' in the top level list, and 'f' as a child of '' diff --git a/tests/cases/fourslash/scriptLexicalStructureFunctionsBroken2.ts b/tests/cases/fourslash/scriptLexicalStructureFunctionsBroken2.ts index 1ac7ed09ad8..155de5dfc9e 100644 --- a/tests/cases/fourslash/scriptLexicalStructureFunctionsBroken2.ts +++ b/tests/cases/fourslash/scriptLexicalStructureFunctionsBroken2.ts @@ -10,4 +10,4 @@ test.markers().forEach((marker) => { verify.getScriptLexicalStructureListContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); }); -verify.getScriptLexicalStructureListCount(1); // 1 function with no global - the broken declaration adds nothing for us at the global scope. +verify.getScriptLexicalStructureListCount(3); // and 'f' as a child of 'global' and as as top level function. \ No newline at end of file From 3a6c328f00dca3b957e0565907e0bebb97b98620 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Sun, 5 Oct 2014 21:58:37 -0700 Subject: [PATCH 093/110] Update tests. --- tests/cases/fourslash/scriptLexicalStructureFunctionsBroken.ts | 2 +- tests/cases/fourslash/scriptLexicalStructureFunctionsBroken2.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/cases/fourslash/scriptLexicalStructureFunctionsBroken.ts b/tests/cases/fourslash/scriptLexicalStructureFunctionsBroken.ts index 7b28acf22a5..f8d5f0bf27a 100644 --- a/tests/cases/fourslash/scriptLexicalStructureFunctionsBroken.ts +++ b/tests/cases/fourslash/scriptLexicalStructureFunctionsBroken.ts @@ -9,4 +9,4 @@ test.markers().forEach((marker) => { verify.getScriptLexicalStructureListContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); }); -verify.getScriptLexicalStructureListCount(3); // , 'f' in the top level list, and 'f' as a child of '' +verify.getScriptLexicalStructureListCount(2); // and 'f'. \ No newline at end of file diff --git a/tests/cases/fourslash/scriptLexicalStructureFunctionsBroken2.ts b/tests/cases/fourslash/scriptLexicalStructureFunctionsBroken2.ts index 155de5dfc9e..cab6a055a5b 100644 --- a/tests/cases/fourslash/scriptLexicalStructureFunctionsBroken2.ts +++ b/tests/cases/fourslash/scriptLexicalStructureFunctionsBroken2.ts @@ -10,4 +10,4 @@ test.markers().forEach((marker) => { verify.getScriptLexicalStructureListContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); }); -verify.getScriptLexicalStructureListCount(3); // and 'f' as a child of 'global' and as as top level function. \ No newline at end of file +verify.getScriptLexicalStructureListCount(2); // and 'f' \ No newline at end of file From 1a48da9c94caef0eb9e908b58964af8407d011d5 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Sun, 5 Oct 2014 23:47:34 -0700 Subject: [PATCH 094/110] Don't show locals as children of functions. --- src/services/navigationBar.ts | 2 +- tests/cases/fourslash/scriptLexicalStructureFunctions.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/services/navigationBar.ts b/src/services/navigationBar.ts index 144c0e5786b..53eed356ceb 100644 --- a/src/services/navigationBar.ts +++ b/src/services/navigationBar.ts @@ -313,7 +313,7 @@ module ts.NavigationBar { function createFunctionItem(node: FunctionDeclaration) { if (node.name && node.body && node.body.kind === SyntaxKind.FunctionBlock) { - var childItems = getItemsWorker(getChildNodes((node.body).statements), createChildItem); + var childItems = getItemsWorker(sortNodes((node.body).statements), createChildItem); return getNavigationBarItem(node.name.text, ts.ScriptElementKind.functionElement, diff --git a/tests/cases/fourslash/scriptLexicalStructureFunctions.ts b/tests/cases/fourslash/scriptLexicalStructureFunctions.ts index dd1f1571875..298cfc657f0 100644 --- a/tests/cases/fourslash/scriptLexicalStructureFunctions.ts +++ b/tests/cases/fourslash/scriptLexicalStructureFunctions.ts @@ -20,4 +20,4 @@ test.markers().forEach((marker) => { verify.getScriptLexicalStructureListContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); }); -verify.getScriptLexicalStructureListCount(9); // 4 functions + global. Note: there are 9 because of the functions show up at the top level and as child items. +verify.getScriptLexicalStructureListCount(7); // 4 functions + global. Note: there are 7 because of the functions show up at the top level and as child items. From 0f39e5aa1060642156ccb889b07c266dc4a85ed4 Mon Sep 17 00:00:00 2001 From: Yui T Date: Mon, 6 Oct 2014 09:51:42 -0700 Subject: [PATCH 095/110] Remove duplicate fil --- tests/cases/conformance/types/tuple/' | 15 --------------- 1 file changed, 15 deletions(-) delete mode 100644 tests/cases/conformance/types/tuple/' diff --git a/tests/cases/conformance/types/tuple/' b/tests/cases/conformance/types/tuple/' deleted file mode 100644 index bc9a6f23927..00000000000 --- a/tests/cases/conformance/types/tuple/' +++ /dev/null @@ -1,15 +0,0 @@ -var strNumTuple: [string, number] = ["foo", 10]; -var numTupleTuple: [number, [string, number]] = [10, ["bar", 20]]; - -// no error -var idx0 = 0; -var idx1 = 1; -var ele10 = strNumTuple[0]; // string -var ele11 = strNumTuple[1]; // number -var ele12 = strNumTuple[2]; // {} -var ele13 = strNumTuple[idx0]; // {} -var ele14 = strNumTuple[idx1]; // {} -var ele15 = strNumTuple["0"]; // string -var ele16 = strNumTuple["1"]; // number -var strNumTuple1 = numTupleTuple[1]; //[string, number]; -var ele17 = numTupleTuple[2]; // {} \ No newline at end of file From 6dfb60d77caa71b77e17eed963f927381851b16a Mon Sep 17 00:00:00 2001 From: Yui T Date: Mon, 6 Oct 2014 09:51:42 -0700 Subject: [PATCH 096/110] Remove duplicate file --- tests/cases/conformance/types/tuple/' | 15 --------------- 1 file changed, 15 deletions(-) delete mode 100644 tests/cases/conformance/types/tuple/' diff --git a/tests/cases/conformance/types/tuple/' b/tests/cases/conformance/types/tuple/' deleted file mode 100644 index bc9a6f23927..00000000000 --- a/tests/cases/conformance/types/tuple/' +++ /dev/null @@ -1,15 +0,0 @@ -var strNumTuple: [string, number] = ["foo", 10]; -var numTupleTuple: [number, [string, number]] = [10, ["bar", 20]]; - -// no error -var idx0 = 0; -var idx1 = 1; -var ele10 = strNumTuple[0]; // string -var ele11 = strNumTuple[1]; // number -var ele12 = strNumTuple[2]; // {} -var ele13 = strNumTuple[idx0]; // {} -var ele14 = strNumTuple[idx1]; // {} -var ele15 = strNumTuple["0"]; // string -var ele16 = strNumTuple["1"]; // number -var strNumTuple1 = numTupleTuple[1]; //[string, number]; -var ele17 = numTupleTuple[2]; // {} \ No newline at end of file From 61f776b8f42ab7f99d62924d3146d3385c043877 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Mon, 6 Oct 2014 11:30:03 -0700 Subject: [PATCH 097/110] Added test case for rename of enum member using rename api --- tests/cases/fourslash/renameNameOnEnumMember.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 tests/cases/fourslash/renameNameOnEnumMember.ts diff --git a/tests/cases/fourslash/renameNameOnEnumMember.ts b/tests/cases/fourslash/renameNameOnEnumMember.ts new file mode 100644 index 00000000000..155c293cc84 --- /dev/null +++ b/tests/cases/fourslash/renameNameOnEnumMember.ts @@ -0,0 +1,11 @@ +/// + +////enum e { +//// firstMember, +//// secondMember, +//// thirdMember +////} +////var enumMember = e.[|/**/thirdMember|]; + +goTo.marker(""); +verify.renameInfoSucceeded("thirdMember", "e.thirdMember"); \ No newline at end of file From 4cf78744e32f9d3ad305e9a222814f5c9f4b618e Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Mon, 6 Oct 2014 11:37:08 -0700 Subject: [PATCH 098/110] Added test cases for --outDir option --- src/harness/harness.ts | 4 +- ...eMapWithCaseSensitiveFileNamesAndOutDir.js | 27 +++ ...WithCaseSensitiveFileNamesAndOutDir.js.map | 3 + ...eSensitiveFileNamesAndOutDir.sourcemap.txt | 156 ++++++++++++++++++ ...pWithCaseSensitiveFileNamesAndOutDir.types | 11 ++ ...pWithNonCaseSensitiveFileNamesAndOutDir.js | 27 +++ ...hNonCaseSensitiveFileNamesAndOutDir.js.map | 3 + ...eSensitiveFileNamesAndOutDir.sourcemap.txt | 156 ++++++++++++++++++ ...thNonCaseSensitiveFileNamesAndOutDir.types | 11 ++ ...eMapWithCaseSensitiveFileNamesAndOutDir.ts | 12 ++ ...pWithNonCaseSensitiveFileNamesAndOutDir.ts | 12 ++ 11 files changed, 420 insertions(+), 2 deletions(-) create mode 100644 tests/baselines/reference/sourceMapWithCaseSensitiveFileNamesAndOutDir.js create mode 100644 tests/baselines/reference/sourceMapWithCaseSensitiveFileNamesAndOutDir.js.map create mode 100644 tests/baselines/reference/sourceMapWithCaseSensitiveFileNamesAndOutDir.sourcemap.txt create mode 100644 tests/baselines/reference/sourceMapWithCaseSensitiveFileNamesAndOutDir.types create mode 100644 tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNamesAndOutDir.js create mode 100644 tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNamesAndOutDir.js.map create mode 100644 tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNamesAndOutDir.sourcemap.txt create mode 100644 tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNamesAndOutDir.types create mode 100644 tests/cases/compiler/sourceMapWithCaseSensitiveFileNamesAndOutDir.ts create mode 100644 tests/cases/compiler/sourceMapWithNonCaseSensitiveFileNamesAndOutDir.ts diff --git a/src/harness/harness.ts b/src/harness/harness.ts index 686f6f9bd0f..e35fe83f9b2 100644 --- a/src/harness/harness.ts +++ b/src/harness/harness.ts @@ -660,7 +660,7 @@ module Harness { var useCaseSensitiveFileNames = sys.useCaseSensitiveFileNames; this.settings.forEach(setting => { switch (setting.flag.toLowerCase()) { - // "filename", "comments", "declaration", "module", "nolib", "sourcemap", "target", "out", "outDir", "noimplicitany", "noresolve" + // "filename", "comments", "declaration", "module", "nolib", "sourcemap", "target", "out", "outdir", "noimplicitany", "noresolve" case "module": case "modulegentarget": if (typeof setting.value === 'string') { @@ -1070,7 +1070,7 @@ module Harness { var optionRegex = /^[\/]{2}\s*@(\w+)\s*:\s*(\S*)/gm; // multiple matches on multiple lines // List of allowed metadata names - var fileMetadataNames = ["filename", "comments", "declaration", "module", "nolib", "sourcemap", "target", "out", "outDir", "noimplicitany", "noresolve", "newline", "newlines", "emitbom", "errortruncation", "usecasesensitivefilenames"]; + var fileMetadataNames = ["filename", "comments", "declaration", "module", "nolib", "sourcemap", "target", "out", "outdir", "noimplicitany", "noresolve", "newline", "newlines", "emitbom", "errortruncation", "usecasesensitivefilenames"]; function extractCompilerSettings(content: string): CompilerSetting[] { diff --git a/tests/baselines/reference/sourceMapWithCaseSensitiveFileNamesAndOutDir.js b/tests/baselines/reference/sourceMapWithCaseSensitiveFileNamesAndOutDir.js new file mode 100644 index 00000000000..148a66f15db --- /dev/null +++ b/tests/baselines/reference/sourceMapWithCaseSensitiveFileNamesAndOutDir.js @@ -0,0 +1,27 @@ +//// [tests/cases/compiler/sourceMapWithCaseSensitiveFileNamesAndOutDir.ts] //// + +//// [app.ts] +// Note in the out result we are using same folder name only different in casing +// Since this is case sensitive, the folders are different and hence the relative paths in sourcemap shouldn't be just app.ts or app2.ts +class c { +} + +//// [app2.ts] +class d { +} + +//// [app.js] +// Note in the out result we are using same folder name only different in casing +// Since this is case sensitive, the folders are different and hence the relative paths in sourcemap shouldn't be just app.ts or app2.ts +var c = (function () { + function c() { + } + return c; +})(); +//# sourceMappingURL=app.js.map//// [app2.js] +var d = (function () { + function d() { + } + return d; +})(); +//# sourceMappingURL=app2.js.map \ No newline at end of file diff --git a/tests/baselines/reference/sourceMapWithCaseSensitiveFileNamesAndOutDir.js.map b/tests/baselines/reference/sourceMapWithCaseSensitiveFileNamesAndOutDir.js.map new file mode 100644 index 00000000000..e665c70c15b --- /dev/null +++ b/tests/baselines/reference/sourceMapWithCaseSensitiveFileNamesAndOutDir.js.map @@ -0,0 +1,3 @@ +//// [app.js.map] +{"version":3,"file":"app.js","sourceRoot":"","sources":["../testFiles/app.ts"],"names":["c","c.constructor"],"mappings":"AAEA,AAFA,gFAAgF;AAChF,wIAAwI;IAClI,CAAC;IAAPA,SAAMA,CAACA;IACPC,CAACA;IAADD,QAACA;AAADA,CAACA,AADD,IACC"}//// [app2.js.map] +{"version":3,"file":"app2.js","sourceRoot":"","sources":["../testFiles/app2.ts"],"names":["d","d.constructor"],"mappings":"AAAA,IAAM,CAAC;IAAPA,SAAMA,CAACA;IACPC,CAACA;IAADD,QAACA;AAADA,CAACA,AADD,IACC"} \ No newline at end of file diff --git a/tests/baselines/reference/sourceMapWithCaseSensitiveFileNamesAndOutDir.sourcemap.txt b/tests/baselines/reference/sourceMapWithCaseSensitiveFileNamesAndOutDir.sourcemap.txt new file mode 100644 index 00000000000..7d94304c359 --- /dev/null +++ b/tests/baselines/reference/sourceMapWithCaseSensitiveFileNamesAndOutDir.sourcemap.txt @@ -0,0 +1,156 @@ +=================================================================== +JsFile: app.js +mapUrl: app.js.map +sourceRoot: +sources: ../testFiles/app.ts +=================================================================== +------------------------------------------------------------------- +emittedFile:tests/cases/compiler/testfiles/app.js +sourceFile:../testFiles/app.ts +------------------------------------------------------------------- +>>>// Note in the out result we are using same folder name only different in casing +1 > +2 > +3 >^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +1 >// Note in the out result we are using same folder name only different in casing + >// Since this is case sensitive, the folders are different and hence the relative paths in sourcemap shouldn't be just app.ts or app2.ts + > +2 > +3 >// Note in the out result we are using same folder name only different in casing +1 >Emitted(1, 1) Source(3, 1) + SourceIndex(0) +2 >Emitted(1, 1) Source(1, 1) + SourceIndex(0) +3 >Emitted(1, 81) Source(1, 81) + SourceIndex(0) +--- +>>>// Since this is case sensitive, the folders are different and hence the relative paths in sourcemap shouldn't be just app.ts or app2.ts +1-> +2 >^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +1-> + > +2 >// Since this is case sensitive, the folders are different and hence the relative paths in sourcemap shouldn't be just app.ts or app2.ts +1->Emitted(2, 1) Source(2, 1) + SourceIndex(0) +2 >Emitted(2, 137) Source(2, 137) + SourceIndex(0) +--- +>>>var c = (function () { +1 >^^^^ +2 > ^ +3 > ^^^^^^^^^^^^^^-> +1 > + >class +2 > c +1 >Emitted(3, 5) Source(3, 7) + SourceIndex(0) +2 >Emitted(3, 6) Source(3, 8) + SourceIndex(0) +--- +>>> function c() { +1->^^^^ +2 > ^^^^^^^^^ +3 > ^ +1-> +2 > class +3 > c +1->Emitted(4, 5) Source(3, 1) + SourceIndex(0) name (c) +2 >Emitted(4, 14) Source(3, 7) + SourceIndex(0) name (c) +3 >Emitted(4, 15) Source(3, 8) + SourceIndex(0) name (c) +--- +>>> } +1 >^^^^ +2 > ^ +3 > ^^^^^^^^^-> +1 > { + > +2 > } +1 >Emitted(5, 5) Source(4, 1) + SourceIndex(0) name (c.constructor) +2 >Emitted(5, 6) Source(4, 2) + SourceIndex(0) name (c.constructor) +--- +>>> return c; +1->^^^^ +2 > ^^^^^^^^ +1-> +2 > } +1->Emitted(6, 5) Source(4, 1) + SourceIndex(0) name (c) +2 >Emitted(6, 13) Source(4, 2) + SourceIndex(0) name (c) +--- +>>>})(); +1 > +2 >^ +3 > +4 > ^^^^ +5 > ^^^^^^^^^^^^^^^^^^^^^^^^^-> +1 > +2 >} +3 > +4 > class c { + > } +1 >Emitted(7, 1) Source(4, 1) + SourceIndex(0) name (c) +2 >Emitted(7, 2) Source(4, 2) + SourceIndex(0) name (c) +3 >Emitted(7, 2) Source(3, 1) + SourceIndex(0) +4 >Emitted(7, 6) Source(4, 2) + SourceIndex(0) +--- +>>>//# sourceMappingURL=app.js.map=================================================================== +JsFile: app2.js +mapUrl: app2.js.map +sourceRoot: +sources: ../testFiles/app2.ts +=================================================================== +------------------------------------------------------------------- +emittedFile:tests/cases/compiler/testfiles/app2.js +sourceFile:../testFiles/app2.ts +------------------------------------------------------------------- +>>>var d = (function () { +1 > +2 >^^^^ +3 > ^ +4 > ^^^^^^^^^^^^^^-> +1 > +2 >class +3 > d +1 >Emitted(1, 1) Source(1, 1) + SourceIndex(0) +2 >Emitted(1, 5) Source(1, 7) + SourceIndex(0) +3 >Emitted(1, 6) Source(1, 8) + SourceIndex(0) +--- +>>> function d() { +1->^^^^ +2 > ^^^^^^^^^ +3 > ^ +1-> +2 > class +3 > d +1->Emitted(2, 5) Source(1, 1) + SourceIndex(0) name (d) +2 >Emitted(2, 14) Source(1, 7) + SourceIndex(0) name (d) +3 >Emitted(2, 15) Source(1, 8) + SourceIndex(0) name (d) +--- +>>> } +1 >^^^^ +2 > ^ +3 > ^^^^^^^^^-> +1 > { + > +2 > } +1 >Emitted(3, 5) Source(2, 1) + SourceIndex(0) name (d.constructor) +2 >Emitted(3, 6) Source(2, 2) + SourceIndex(0) name (d.constructor) +--- +>>> return d; +1->^^^^ +2 > ^^^^^^^^ +1-> +2 > } +1->Emitted(4, 5) Source(2, 1) + SourceIndex(0) name (d) +2 >Emitted(4, 13) Source(2, 2) + SourceIndex(0) name (d) +--- +>>>})(); +1 > +2 >^ +3 > +4 > ^^^^ +5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^-> +1 > +2 >} +3 > +4 > class d { + > } +1 >Emitted(5, 1) Source(2, 1) + SourceIndex(0) name (d) +2 >Emitted(5, 2) Source(2, 2) + SourceIndex(0) name (d) +3 >Emitted(5, 2) Source(1, 1) + SourceIndex(0) +4 >Emitted(5, 6) Source(2, 2) + SourceIndex(0) +--- +>>>//# sourceMappingURL=app2.js.map \ No newline at end of file diff --git a/tests/baselines/reference/sourceMapWithCaseSensitiveFileNamesAndOutDir.types b/tests/baselines/reference/sourceMapWithCaseSensitiveFileNamesAndOutDir.types new file mode 100644 index 00000000000..2d42e0b5e4b --- /dev/null +++ b/tests/baselines/reference/sourceMapWithCaseSensitiveFileNamesAndOutDir.types @@ -0,0 +1,11 @@ +=== tests/cases/compiler/testFiles/app.ts === +// Note in the out result we are using same folder name only different in casing +// Since this is case sensitive, the folders are different and hence the relative paths in sourcemap shouldn't be just app.ts or app2.ts +class c { +>c : c +} + +=== tests/cases/compiler/testFiles/app2.ts === +class d { +>d : d +} diff --git a/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNamesAndOutDir.js b/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNamesAndOutDir.js new file mode 100644 index 00000000000..4dc043e0ce7 --- /dev/null +++ b/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNamesAndOutDir.js @@ -0,0 +1,27 @@ +//// [tests/cases/compiler/sourceMapWithNonCaseSensitiveFileNamesAndOutDir.ts] //// + +//// [app.ts] +// Note in the out result we are using same folder name only different in casing +// Since this is non case sensitive, the relative paths should be just app.ts and app2.ts in the sourcemap +class c { +} + +//// [app2.ts] +class d { +} + +//// [app.js] +// Note in the out result we are using same folder name only different in casing +// Since this is non case sensitive, the relative paths should be just app.ts and app2.ts in the sourcemap +var c = (function () { + function c() { + } + return c; +})(); +//# sourceMappingURL=app.js.map//// [app2.js] +var d = (function () { + function d() { + } + return d; +})(); +//# sourceMappingURL=app2.js.map \ No newline at end of file diff --git a/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNamesAndOutDir.js.map b/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNamesAndOutDir.js.map new file mode 100644 index 00000000000..027c795967c --- /dev/null +++ b/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNamesAndOutDir.js.map @@ -0,0 +1,3 @@ +//// [app.js.map] +{"version":3,"file":"app.js","sourceRoot":"","sources":["app.ts"],"names":["c","c.constructor"],"mappings":"AAEA,AAFA,gFAAgF;AAChF,0GAA0G;IACpG,CAAC;IAAPA,SAAMA,CAACA;IACPC,CAACA;IAADD,QAACA;AAADA,CAACA,AADD,IACC"}//// [app2.js.map] +{"version":3,"file":"app2.js","sourceRoot":"","sources":["app2.ts"],"names":["d","d.constructor"],"mappings":"AAAA,IAAM,CAAC;IAAPA,SAAMA,CAACA;IACPC,CAACA;IAADD,QAACA;AAADA,CAACA,AADD,IACC"} \ No newline at end of file diff --git a/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNamesAndOutDir.sourcemap.txt b/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNamesAndOutDir.sourcemap.txt new file mode 100644 index 00000000000..cfcd91a6552 --- /dev/null +++ b/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNamesAndOutDir.sourcemap.txt @@ -0,0 +1,156 @@ +=================================================================== +JsFile: app.js +mapUrl: app.js.map +sourceRoot: +sources: app.ts +=================================================================== +------------------------------------------------------------------- +emittedFile:tests/cases/compiler/testfiles/app.js +sourceFile:app.ts +------------------------------------------------------------------- +>>>// Note in the out result we are using same folder name only different in casing +1 > +2 > +3 >^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +4 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +1 >// Note in the out result we are using same folder name only different in casing + >// Since this is non case sensitive, the relative paths should be just app.ts and app2.ts in the sourcemap + > +2 > +3 >// Note in the out result we are using same folder name only different in casing +1 >Emitted(1, 1) Source(3, 1) + SourceIndex(0) +2 >Emitted(1, 1) Source(1, 1) + SourceIndex(0) +3 >Emitted(1, 81) Source(1, 81) + SourceIndex(0) +--- +>>>// Since this is non case sensitive, the relative paths should be just app.ts and app2.ts in the sourcemap +1-> +2 >^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +1-> + > +2 >// Since this is non case sensitive, the relative paths should be just app.ts and app2.ts in the sourcemap +1->Emitted(2, 1) Source(2, 1) + SourceIndex(0) +2 >Emitted(2, 107) Source(2, 107) + SourceIndex(0) +--- +>>>var c = (function () { +1 >^^^^ +2 > ^ +3 > ^^^^^^^^^^^^^^-> +1 > + >class +2 > c +1 >Emitted(3, 5) Source(3, 7) + SourceIndex(0) +2 >Emitted(3, 6) Source(3, 8) + SourceIndex(0) +--- +>>> function c() { +1->^^^^ +2 > ^^^^^^^^^ +3 > ^ +1-> +2 > class +3 > c +1->Emitted(4, 5) Source(3, 1) + SourceIndex(0) name (c) +2 >Emitted(4, 14) Source(3, 7) + SourceIndex(0) name (c) +3 >Emitted(4, 15) Source(3, 8) + SourceIndex(0) name (c) +--- +>>> } +1 >^^^^ +2 > ^ +3 > ^^^^^^^^^-> +1 > { + > +2 > } +1 >Emitted(5, 5) Source(4, 1) + SourceIndex(0) name (c.constructor) +2 >Emitted(5, 6) Source(4, 2) + SourceIndex(0) name (c.constructor) +--- +>>> return c; +1->^^^^ +2 > ^^^^^^^^ +1-> +2 > } +1->Emitted(6, 5) Source(4, 1) + SourceIndex(0) name (c) +2 >Emitted(6, 13) Source(4, 2) + SourceIndex(0) name (c) +--- +>>>})(); +1 > +2 >^ +3 > +4 > ^^^^ +5 > ^^^^^^^^^^^^^^^^^^^^^^^^^-> +1 > +2 >} +3 > +4 > class c { + > } +1 >Emitted(7, 1) Source(4, 1) + SourceIndex(0) name (c) +2 >Emitted(7, 2) Source(4, 2) + SourceIndex(0) name (c) +3 >Emitted(7, 2) Source(3, 1) + SourceIndex(0) +4 >Emitted(7, 6) Source(4, 2) + SourceIndex(0) +--- +>>>//# sourceMappingURL=app.js.map=================================================================== +JsFile: app2.js +mapUrl: app2.js.map +sourceRoot: +sources: app2.ts +=================================================================== +------------------------------------------------------------------- +emittedFile:tests/cases/compiler/testfiles/app2.js +sourceFile:app2.ts +------------------------------------------------------------------- +>>>var d = (function () { +1 > +2 >^^^^ +3 > ^ +4 > ^^^^^^^^^^^^^^-> +1 > +2 >class +3 > d +1 >Emitted(1, 1) Source(1, 1) + SourceIndex(0) +2 >Emitted(1, 5) Source(1, 7) + SourceIndex(0) +3 >Emitted(1, 6) Source(1, 8) + SourceIndex(0) +--- +>>> function d() { +1->^^^^ +2 > ^^^^^^^^^ +3 > ^ +1-> +2 > class +3 > d +1->Emitted(2, 5) Source(1, 1) + SourceIndex(0) name (d) +2 >Emitted(2, 14) Source(1, 7) + SourceIndex(0) name (d) +3 >Emitted(2, 15) Source(1, 8) + SourceIndex(0) name (d) +--- +>>> } +1 >^^^^ +2 > ^ +3 > ^^^^^^^^^-> +1 > { + > +2 > } +1 >Emitted(3, 5) Source(2, 1) + SourceIndex(0) name (d.constructor) +2 >Emitted(3, 6) Source(2, 2) + SourceIndex(0) name (d.constructor) +--- +>>> return d; +1->^^^^ +2 > ^^^^^^^^ +1-> +2 > } +1->Emitted(4, 5) Source(2, 1) + SourceIndex(0) name (d) +2 >Emitted(4, 13) Source(2, 2) + SourceIndex(0) name (d) +--- +>>>})(); +1 > +2 >^ +3 > +4 > ^^^^ +5 > ^^^^^^^^^^^^^^^^^^^^^^^^^^-> +1 > +2 >} +3 > +4 > class d { + > } +1 >Emitted(5, 1) Source(2, 1) + SourceIndex(0) name (d) +2 >Emitted(5, 2) Source(2, 2) + SourceIndex(0) name (d) +3 >Emitted(5, 2) Source(1, 1) + SourceIndex(0) +4 >Emitted(5, 6) Source(2, 2) + SourceIndex(0) +--- +>>>//# sourceMappingURL=app2.js.map \ No newline at end of file diff --git a/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNamesAndOutDir.types b/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNamesAndOutDir.types new file mode 100644 index 00000000000..2dd1319e9dd --- /dev/null +++ b/tests/baselines/reference/sourceMapWithNonCaseSensitiveFileNamesAndOutDir.types @@ -0,0 +1,11 @@ +=== tests/cases/compiler/testFiles/app.ts === +// Note in the out result we are using same folder name only different in casing +// Since this is non case sensitive, the relative paths should be just app.ts and app2.ts in the sourcemap +class c { +>c : c +} + +=== tests/cases/compiler/testFiles/app2.ts === +class d { +>d : d +} diff --git a/tests/cases/compiler/sourceMapWithCaseSensitiveFileNamesAndOutDir.ts b/tests/cases/compiler/sourceMapWithCaseSensitiveFileNamesAndOutDir.ts new file mode 100644 index 00000000000..17195b434e5 --- /dev/null +++ b/tests/cases/compiler/sourceMapWithCaseSensitiveFileNamesAndOutDir.ts @@ -0,0 +1,12 @@ +// @outDir: tests/cases/compiler/testfiles +// @sourcemap: true +// @useCaseSensitiveFileNames: true +// @Filename: testFiles/app.ts +// Note in the out result we are using same folder name only different in casing +// Since this is case sensitive, the folders are different and hence the relative paths in sourcemap shouldn't be just app.ts or app2.ts +class c { +} + +// @Filename: testFiles/app2.ts +class d { +} \ No newline at end of file diff --git a/tests/cases/compiler/sourceMapWithNonCaseSensitiveFileNamesAndOutDir.ts b/tests/cases/compiler/sourceMapWithNonCaseSensitiveFileNamesAndOutDir.ts new file mode 100644 index 00000000000..90343b8cffc --- /dev/null +++ b/tests/cases/compiler/sourceMapWithNonCaseSensitiveFileNamesAndOutDir.ts @@ -0,0 +1,12 @@ +// @outDir: tests/cases/compiler/testfiles +// @sourcemap: true +// @useCaseSensitiveFileNames: false +// @Filename: testFiles/app.ts +// Note in the out result we are using same folder name only different in casing +// Since this is non case sensitive, the relative paths should be just app.ts and app2.ts in the sourcemap +class c { +} + +// @Filename: testFiles/app2.ts +class d { +} \ No newline at end of file From bc8c6c98485f918b4172888db86adcb0482b98e3 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Mon, 6 Oct 2014 13:12:41 -0700 Subject: [PATCH 099/110] Handle findAllRefs/getOccurrences for properties inherited from aliased types. --- src/services/services.ts | 15 ++++++----- ...etOccurrencesPropertyInAliasedInterface.ts | 26 +++++++++++++++++++ 2 files changed, 34 insertions(+), 7 deletions(-) create mode 100644 tests/cases/fourslash/getOccurrencesPropertyInAliasedInterface.ts diff --git a/src/services/services.ts b/src/services/services.ts index 15295c0d054..e4d28f4700f 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -3544,7 +3544,7 @@ module ts { } function getPropertySymbolsFromBaseTypes(symbol: Symbol, propertyName: string, result: Symbol[]): void { - if (symbol.flags & (SymbolFlags.Class | SymbolFlags.Interface)) { + if (symbol && symbol.flags & (SymbolFlags.Class | SymbolFlags.Interface)) { forEach(symbol.getDeclarations(), declaration => { if (declaration.kind === SyntaxKind.ClassDeclaration) { getPropertySymbolFromTypeReference((declaration).baseType); @@ -3559,14 +3559,15 @@ module ts { function getPropertySymbolFromTypeReference(typeReference: TypeReferenceNode) { if (typeReference) { - // TODO: move to getTypeOfNode instead - var typeReferenceSymbol = typeInfoResolver.getSymbolInfo(typeReference.typeName); - if (typeReferenceSymbol) { - var propertySymbol = typeReferenceSymbol.members[propertyName]; - if (propertySymbol) result.push(typeReferenceSymbol.members[propertyName]); + var type = typeInfoResolver.getTypeOfNode(typeReference); + if (type) { + var propertySymbol = typeInfoResolver.getPropertyOfType(type, propertyName); + if (propertySymbol) { + result.push(propertySymbol); + } // Visit the typeReference as well to see if it directly or indirectly use that property - getPropertySymbolsFromBaseTypes(typeReferenceSymbol, propertyName, result); + getPropertySymbolsFromBaseTypes(type.symbol, propertyName, result); } } } diff --git a/tests/cases/fourslash/getOccurrencesPropertyInAliasedInterface.ts b/tests/cases/fourslash/getOccurrencesPropertyInAliasedInterface.ts new file mode 100644 index 00000000000..f9d47b07478 --- /dev/null +++ b/tests/cases/fourslash/getOccurrencesPropertyInAliasedInterface.ts @@ -0,0 +1,26 @@ +////module m { +//// export interface Foo { +//// [|abc|] +//// } +////} +//// +////import Bar = m.Foo; +//// +////export interface I extends Bar { +//// [|abc|] +////} +//// +////class C implements Bar { +//// [|abc|] +////} +//// +////(new C()).[|abc|]; + +test.ranges().forEach(r => { + goTo.position(r.start); + + test.ranges().forEach(range => { + verify.occurrencesAtPositionContains(range); + }); + verify.occurrencesAtPositionCount(test.ranges().length); +}); \ No newline at end of file From e2c4d7d0d9a9f5f0ea3e5a8dca1797352d7df655 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Mon, 6 Oct 2014 14:22:08 -0700 Subject: [PATCH 100/110] Fixing issue where the top level source file item was not being selected. --- src/services/navigationBar.ts | 30 ++++++++++++++----- .../scriptLexicalStructureFunctions.ts | 2 +- .../scriptLexicalStructureFunctionsBroken.ts | 2 +- .../scriptLexicalStructureFunctionsBroken2.ts | 2 +- ...uctureItemsContainsNoAnonymousFunctions.ts | 2 +- 5 files changed, 26 insertions(+), 12 deletions(-) diff --git a/src/services/navigationBar.ts b/src/services/navigationBar.ts index 53eed356ceb..ef2b5e9334a 100644 --- a/src/services/navigationBar.ts +++ b/src/services/navigationBar.ts @@ -117,13 +117,25 @@ module ts.NavigationBar { } function isTopLevelFunctionDeclaration(functionDeclaration: FunctionDeclaration) { - // A function declaration is 'top level' if it contains any function declarations - // within it. - return functionDeclaration.kind === SyntaxKind.FunctionDeclaration && - functionDeclaration.body && - functionDeclaration.body.kind === SyntaxKind.FunctionBlock && - forEach((functionDeclaration.body).statements, - s => s.kind === SyntaxKind.FunctionDeclaration && !isEmpty((s).name.text)); + 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 (forEach((functionDeclaration.body).statements, + s => s.kind === SyntaxKind.FunctionDeclaration && !isEmpty((s).name.text))) { + + return true; + } + + // 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) { + return true; + } + } + } + + return false; } function getItemsWorker(nodes: Node[], createItem: (n: Node) => ts.NavigationBarItem): ts.NavigationBarItem[] { @@ -402,7 +414,9 @@ module ts.NavigationBar { } function getNodeSpan(node: Node) { - return TypeScript.TextSpan.fromBounds(node.getStart(), node.getEnd()); + return node.kind === SyntaxKind.SourceFile + ? TypeScript.TextSpan.fromBounds(node.getFullStart(), node.getEnd()) + : TypeScript.TextSpan.fromBounds(node.getStart(), node.getEnd()); } function getTextOfNode(node: Node): string { diff --git a/tests/cases/fourslash/scriptLexicalStructureFunctions.ts b/tests/cases/fourslash/scriptLexicalStructureFunctions.ts index 298cfc657f0..b683790c60d 100644 --- a/tests/cases/fourslash/scriptLexicalStructureFunctions.ts +++ b/tests/cases/fourslash/scriptLexicalStructureFunctions.ts @@ -20,4 +20,4 @@ test.markers().forEach((marker) => { verify.getScriptLexicalStructureListContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); }); -verify.getScriptLexicalStructureListCount(7); // 4 functions + global. Note: there are 7 because of the functions show up at the top level and as child items. +verify.getScriptLexicalStructureListCount(8); // 4 functions + global. Note: there are 8 because of the functions show up at the top level and as child items. diff --git a/tests/cases/fourslash/scriptLexicalStructureFunctionsBroken.ts b/tests/cases/fourslash/scriptLexicalStructureFunctionsBroken.ts index f8d5f0bf27a..7846a9723d1 100644 --- a/tests/cases/fourslash/scriptLexicalStructureFunctionsBroken.ts +++ b/tests/cases/fourslash/scriptLexicalStructureFunctionsBroken.ts @@ -9,4 +9,4 @@ test.markers().forEach((marker) => { verify.getScriptLexicalStructureListContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); }); -verify.getScriptLexicalStructureListCount(2); // and 'f'. \ No newline at end of file +verify.getScriptLexicalStructureListCount(3); // and 'f'. \ No newline at end of file diff --git a/tests/cases/fourslash/scriptLexicalStructureFunctionsBroken2.ts b/tests/cases/fourslash/scriptLexicalStructureFunctionsBroken2.ts index cab6a055a5b..50bf91e02d6 100644 --- a/tests/cases/fourslash/scriptLexicalStructureFunctionsBroken2.ts +++ b/tests/cases/fourslash/scriptLexicalStructureFunctionsBroken2.ts @@ -10,4 +10,4 @@ test.markers().forEach((marker) => { verify.getScriptLexicalStructureListContains(marker.data.itemName, marker.data.kind, marker.fileName, marker.data.parentName); }); -verify.getScriptLexicalStructureListCount(2); // and 'f' \ No newline at end of file +verify.getScriptLexicalStructureListCount(3); // and 'f' \ No newline at end of file diff --git a/tests/cases/fourslash/scriptLexicalStructureItemsContainsNoAnonymousFunctions.ts b/tests/cases/fourslash/scriptLexicalStructureItemsContainsNoAnonymousFunctions.ts index 531575d6d10..a4086450176 100644 --- a/tests/cases/fourslash/scriptLexicalStructureItemsContainsNoAnonymousFunctions.ts +++ b/tests/cases/fourslash/scriptLexicalStructureItemsContainsNoAnonymousFunctions.ts @@ -41,4 +41,4 @@ goTo.marker("file3"); verify.getScriptLexicalStructureListContains("", "module"); verify.getScriptLexicalStructureListContains("foo", "function"); verify.getScriptLexicalStructureListContains("bar", "function"); -verify.getScriptLexicalStructureListCount(3); \ No newline at end of file +verify.getScriptLexicalStructureListCount(5); \ No newline at end of file From 0625cc4650e71362bdcbc21c046ef1d027667574 Mon Sep 17 00:00:00 2001 From: Jason Freeman Date: Mon, 6 Oct 2014 18:17:58 -0700 Subject: [PATCH 101/110] Update compiler version to 1.3 --- package.json | 2 +- src/compiler/tsc.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 6b1d991cca6..00752302254 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "typescript", "author": "Microsoft Corp.", "homepage": "http://typescriptlang.org/", - "version": "1.1.0", + "version": "1.3.0", "licenses": [ { "type": "Apache License 2.0", diff --git a/src/compiler/tsc.ts b/src/compiler/tsc.ts index 2a148407631..c8cccd2da1c 100644 --- a/src/compiler/tsc.ts +++ b/src/compiler/tsc.ts @@ -9,7 +9,7 @@ /// module ts { - var version = "1.1.0.0"; + var version = "1.3.0.0"; /** * Checks to see if the locale is in the appropriate format, From be02f962c7f4324f608064b69ce80bb262cb830a Mon Sep 17 00:00:00 2001 From: Yui T Date: Mon, 6 Oct 2014 18:34:01 -0700 Subject: [PATCH 102/110] Fix compileOnSave with external module --- src/compiler/emitter.ts | 22 ++++++++++++++-------- src/services/services.ts | 7 ++++--- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index fb40117fb9b..74520b3fc6c 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -3228,21 +3228,27 @@ module ts { } if (targetSourceFile === undefined) { + // No targetSourceFile is specified (i.e. calling emitter from batch compiler) forEach(program.getSourceFiles(), sourceFile => { if (shouldEmitToOwnFile(sourceFile, compilerOptions)) { var jsFilePath = getOwnEmitOutputFilePath(sourceFile, ".js"); emitFile(jsFilePath, sourceFile); } }); - } - else { - // Emit only one file specified in targetFilename. This is mainly used in compilerOnSave feature - var jsFilePath = getOwnEmitOutputFilePath(targetSourceFile, ".js"); - emitFile(jsFilePath, targetSourceFile); - } - if (compilerOptions.out) { - emitFile(compilerOptions.out); + if (compilerOptions.out) { + emitFile(compilerOptions.out); + } + } else { + // targetSourceFile is specified (i.e. calling emitter from language service) + if (shouldEmitToOwnFile(targetSourceFile, compilerOptions)) { + // If shouldEmitToOwnFile is true or targetSouceFile is an external module file, then emit targetSourceFile in its own output file + var jsFilePath = getOwnEmitOutputFilePath(targetSourceFile, ".js"); + emitFile(jsFilePath, targetSourceFile); + } else { + // If shouldEmitToOwnFile is false, then emit all, non-external-module file, into one single output file + emitFile(compilerOptions.out); + } } // Sort and make the unique list of diagnostics diff --git a/src/services/services.ts b/src/services/services.ts index 6e49e8427e5..bd222cb8240 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -3881,7 +3881,8 @@ module ts { filename = TypeScript.switchToForwardSlashes(filename); var compilerOptions = program.getCompilerOptions(); var targetSourceFile = program.getSourceFile(filename); // Current selected file to be output - var emitToSingleFile = ts.shouldEmitToOwnFile(targetSourceFile, compilerOptions); + // If --out flag is not specified, shouldEmitToOwnFile is true. Otherwise shouldEmitToOwnFile is false. + var shouldEmitToOwnFile = ts.shouldEmitToOwnFile(targetSourceFile, compilerOptions); var emitDeclaration = compilerOptions.declaration; var emitOutput: EmitOutput = { outputFiles: [], @@ -3902,7 +3903,7 @@ module ts { var syntacticDiagnostics: Diagnostic[] = []; var containSyntacticErrors = false; - if (emitToSingleFile) { + if (shouldEmitToOwnFile) { // Check only the file we want to emit containSyntacticErrors = containErrors(program.getDiagnostics(targetSourceFile)); } else { @@ -3929,7 +3930,7 @@ module ts { // Perform semantic and force a type check before emit to ensure that all symbols are updated // EmitFiles will report if there is an error from TypeChecker and Emitter // Depend whether we will have to emit into a single file or not either emit only selected file in the project, emit all files into a single file - var emitFilesResult = emitToSingleFile ? getFullTypeCheckChecker().emitFiles(targetSourceFile) : getFullTypeCheckChecker().emitFiles(); + var emitFilesResult = getFullTypeCheckChecker().emitFiles(targetSourceFile);; emitOutput.emitOutputStatus = emitFilesResult.emitResultStatus; // Reset writer back to undefined to make sure that we produce an error message if CompilerHost.writeFile method is called when we are not in getEmitOutput From 747ae1b1f50fb966e4d4c24706fc4304516d5b94 Mon Sep 17 00:00:00 2001 From: Yui T Date: Mon, 6 Oct 2014 18:37:01 -0700 Subject: [PATCH 103/110] Add fourslash tests to cover external module case --- .../getEmitOutputExternalModule.baseline | 9 +++++++ .../getEmitOutputExternalModule2.baseline | 15 +++++++++++ .../getEmitOutputSingleFile2.baseline | 24 ----------------- .../fourslash/getEmitOutputExternalModule.ts | 19 ++++++++++++++ .../fourslash/getEmitOutputExternalModule2.ts | 26 +++++++++++++++++++ 5 files changed, 69 insertions(+), 24 deletions(-) create mode 100644 tests/baselines/reference/getEmitOutputExternalModule.baseline create mode 100644 tests/baselines/reference/getEmitOutputExternalModule2.baseline create mode 100644 tests/cases/fourslash/getEmitOutputExternalModule.ts create mode 100644 tests/cases/fourslash/getEmitOutputExternalModule2.ts diff --git a/tests/baselines/reference/getEmitOutputExternalModule.baseline b/tests/baselines/reference/getEmitOutputExternalModule.baseline new file mode 100644 index 00000000000..b5e670c5fd7 --- /dev/null +++ b/tests/baselines/reference/getEmitOutputExternalModule.baseline @@ -0,0 +1,9 @@ +EmitOutputStatus : Succeeded +Filename : declSingleFile.js +var x = 5; +var Bar = (function () { + function Bar() { + } + return Bar; +})(); + diff --git a/tests/baselines/reference/getEmitOutputExternalModule2.baseline b/tests/baselines/reference/getEmitOutputExternalModule2.baseline new file mode 100644 index 00000000000..5c03a092257 --- /dev/null +++ b/tests/baselines/reference/getEmitOutputExternalModule2.baseline @@ -0,0 +1,15 @@ +EmitOutputStatus : JSGeneratedWithSemanticErrors +Filename : declSingleFile.js +var x = 5; +var Bar = (function () { + function Bar() { + } + return Bar; +})(); +var x = "world"; +var Bar2 = (function () { + function Bar2() { + } + return Bar2; +})(); + diff --git a/tests/baselines/reference/getEmitOutputSingleFile2.baseline b/tests/baselines/reference/getEmitOutputSingleFile2.baseline index 77fa6b9acdd..2f5dbe3daf8 100644 --- a/tests/baselines/reference/getEmitOutputSingleFile2.baseline +++ b/tests/baselines/reference/getEmitOutputSingleFile2.baseline @@ -5,28 +5,4 @@ exports.bar = "hello world"; Filename : tests/cases/fourslash/inputFile3.d.ts export declare var foo: number; export declare var bar: string; -Filename : declSingleFile.js -var x = 5; -var Bar = (function () { - function Bar() { - } - return Bar; -})(); -var x1 = "hello world"; -var Foo = (function () { - function Foo() { - } - return Foo; -})(); -Filename : declSingleFile.d.ts -declare var x: number; -declare class Bar { - x: string; - y: number; -} -declare var x1: string; -declare class Foo { - x: string; - y: number; -} diff --git a/tests/cases/fourslash/getEmitOutputExternalModule.ts b/tests/cases/fourslash/getEmitOutputExternalModule.ts new file mode 100644 index 00000000000..ef9fb348c57 --- /dev/null +++ b/tests/cases/fourslash/getEmitOutputExternalModule.ts @@ -0,0 +1,19 @@ +/// + +// @BaselineFile: getEmitOutputExternalModule.baseline +// @out: declSingleFile.js + +// @Filename: inputFile1.ts +// @emitThisFile: true +//// var x: number = 5; +//// class Bar { +//// x : string; +//// y : number +//// } + +// @Filename: inputFile2.ts +//// export module M { +//// class C {c} +//// } + +verify.baselineGetEmitOutput(); \ No newline at end of file diff --git a/tests/cases/fourslash/getEmitOutputExternalModule2.ts b/tests/cases/fourslash/getEmitOutputExternalModule2.ts new file mode 100644 index 00000000000..abecc219698 --- /dev/null +++ b/tests/cases/fourslash/getEmitOutputExternalModule2.ts @@ -0,0 +1,26 @@ +/// + +// @BaselineFile: getEmitOutputExternalModule2.baseline +// @out: declSingleFile.js + +// @Filename: inputFile1.ts +//// var x: number = 5; +//// class Bar { +//// x : string; +//// y : number +//// } + +// @Filename: inputFile2.ts +// @emitThisFile: true +//// var x: string = "world"; +//// class Bar2 { +//// x : string; +//// y : number +//// } + +// @Filename: inputFile3.ts +//// export module M { +//// class C {c} +//// } + +verify.baselineGetEmitOutput(); \ No newline at end of file From d345d228a7fb153d4f1bab3ae75bfa05b308560f Mon Sep 17 00:00:00 2001 From: Yui T Date: Tue, 7 Oct 2014 10:17:29 -0700 Subject: [PATCH 104/110] Fix spelling --- src/compiler/emitter.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 74520b3fc6c..f7c9fa300a9 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -3242,7 +3242,7 @@ module ts { } else { // targetSourceFile is specified (i.e. calling emitter from language service) if (shouldEmitToOwnFile(targetSourceFile, compilerOptions)) { - // If shouldEmitToOwnFile is true or targetSouceFile is an external module file, then emit targetSourceFile in its own output file + // If shouldEmitToOwnFile is true or targetSourceFile is an external module file, then emit targetSourceFile in its own output file var jsFilePath = getOwnEmitOutputFilePath(targetSourceFile, ".js"); emitFile(jsFilePath, targetSourceFile); } else { From 7d725037b38fc4bd05a9639a84b6245198462989 Mon Sep 17 00:00:00 2001 From: Yui T Date: Tue, 7 Oct 2014 13:20:06 -0700 Subject: [PATCH 105/110] Address code review --- src/compiler/emitter.ts | 4 ++-- src/services/services.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index f7c9fa300a9..37442772078 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -3228,7 +3228,7 @@ module ts { } if (targetSourceFile === undefined) { - // No targetSourceFile is specified (i.e. calling emitter from batch compiler) + // No targetSourceFile is specified (e.g. calling emitter from batch compiler) forEach(program.getSourceFiles(), sourceFile => { if (shouldEmitToOwnFile(sourceFile, compilerOptions)) { var jsFilePath = getOwnEmitOutputFilePath(sourceFile, ".js"); @@ -3240,7 +3240,7 @@ module ts { emitFile(compilerOptions.out); } } else { - // targetSourceFile is specified (i.e. calling emitter from language service) + // targetSourceFile is specified (e.g calling emitter from language service) if (shouldEmitToOwnFile(targetSourceFile, compilerOptions)) { // If shouldEmitToOwnFile is true or targetSourceFile is an external module file, then emit targetSourceFile in its own output file var jsFilePath = getOwnEmitOutputFilePath(targetSourceFile, ".js"); diff --git a/src/services/services.ts b/src/services/services.ts index bd222cb8240..b00c2b703e8 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -3930,7 +3930,7 @@ module ts { // Perform semantic and force a type check before emit to ensure that all symbols are updated // EmitFiles will report if there is an error from TypeChecker and Emitter // Depend whether we will have to emit into a single file or not either emit only selected file in the project, emit all files into a single file - var emitFilesResult = getFullTypeCheckChecker().emitFiles(targetSourceFile);; + var emitFilesResult = getFullTypeCheckChecker().emitFiles(targetSourceFile); emitOutput.emitOutputStatus = emitFilesResult.emitResultStatus; // Reset writer back to undefined to make sure that we produce an error message if CompilerHost.writeFile method is called when we are not in getEmitOutput From 0b7453b9d6475ffefa3f1dbd83e57d65a1416757 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Tue, 7 Oct 2014 13:31:21 -0700 Subject: [PATCH 106/110] Properly marshall diagnostic codes to the managed layer --- src/services/shims.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/services/shims.ts b/src/services/shims.ts index 40ce6c7b8df..c7d293794ca 100644 --- a/src/services/shims.ts +++ b/src/services/shims.ts @@ -502,7 +502,8 @@ module ts { start: diagnostic.start, length: diagnostic.length, /// TODO: no need for the tolowerCase call - category: DiagnosticCategory[diagnostic.category].toLowerCase() + category: DiagnosticCategory[diagnostic.category].toLowerCase(), + code: diagnostic.code }; } From 8346b48e6d7b178784a127c94c4625b783fae066 Mon Sep 17 00:00:00 2001 From: Jason Freeman Date: Tue, 7 Oct 2014 13:37:57 -0700 Subject: [PATCH 107/110] Add assserts to help diagnose signature help crash #832 --- src/compiler/parser.ts | 6 ------ src/services/signatureHelp.ts | 6 ++++++ src/services/utilities.ts | 9 ++++++++- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index a74ceb4e024..a43f31e583a 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -2397,9 +2397,6 @@ module ts { else { parseExpected(SyntaxKind.OpenParenToken); } - // It is an error to have a trailing comma in an argument list. However, the checker - // needs evidence of a trailing comma in order to give good results for signature help. - // That is why we do not allow a trailing comma, but we "preserve" a trailing comma. callExpr.arguments = parseDelimitedList(ParsingContext.ArgumentExpressions, parseArgumentExpression, /*allowTrailingComma*/ false); parseExpected(SyntaxKind.CloseParenToken); @@ -2627,9 +2624,6 @@ module ts { parseExpected(SyntaxKind.NewKeyword); node.func = parseCallAndAccess(parsePrimaryExpression(), /* inNewExpression */ true); if (parseOptional(SyntaxKind.OpenParenToken) || token === SyntaxKind.LessThanToken && (node.typeArguments = tryParse(parseTypeArgumentsAndOpenParen))) { - // It is an error to have a trailing comma in an argument list. However, the checker - // needs evidence of a trailing comma in order to give good results for signature help. - // That is why we do not allow a trailing comma, but we "preserve" a trailing comma. node.arguments = parseDelimitedList(ParsingContext.ArgumentExpressions, parseArgumentExpression, /*allowTrailingComma*/ false); parseExpected(SyntaxKind.CloseParenToken); diff --git a/src/services/signatureHelp.ts b/src/services/signatureHelp.ts index 080e4704b83..189d8d2e727 100644 --- a/src/services/signatureHelp.ts +++ b/src/services/signatureHelp.ts @@ -241,6 +241,12 @@ module ts.SignatureHelp { return undefined; } + // If the node is not a subspan of its parent, this is a big problem. + // There have been crashes that might be caused by this violation. + if (n.pos < n.parent.pos || n.end > n.parent.end) { + Debug.fail("Node of kind " + SyntaxKind[n.kind] + " is not a subspan of its parent of kind " + SyntaxKind[n.parent.kind]); + } + var argumentInfo = getImmediatelyContainingArgumentInfo(n); if (argumentInfo) { return argumentInfo; diff --git a/src/services/utilities.ts b/src/services/utilities.ts index af320ea0a0c..4ceb20fdcee 100644 --- a/src/services/utilities.ts +++ b/src/services/utilities.ts @@ -27,11 +27,18 @@ module ts { // for the position of the relevant node (or comma). var syntaxList = forEach(node.parent.getChildren(), c => { // find syntax list that covers the span of the node - if (c.kind == SyntaxKind.SyntaxList && c.pos <= node.pos && c.end >= node.end) { + if (c.kind === SyntaxKind.SyntaxList && c.pos <= node.pos && c.end >= node.end) { return c; } }); + // syntaxList should not be undefined here. If it is, there is a problem. Find out if + // there at least is a child that is a list. + if (!syntaxList) { + Debug.assert(findChildOfKind(node.parent, SyntaxKind.SyntaxList), + "Node of kind " + SyntaxKind[node.parent.kind] + " has no list children"); + } + return syntaxList; } From 9e4fe5b1e8aadde9b16eac50023f4e0ade7982ae Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Tue, 7 Oct 2014 14:24:24 -0700 Subject: [PATCH 108/110] Don't merge nav bar items that are at different indent levels --- src/services/navigationBar.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/navigationBar.ts b/src/services/navigationBar.ts index ef2b5e9334a..9f16fa57741 100644 --- a/src/services/navigationBar.ts +++ b/src/services/navigationBar.ts @@ -148,7 +148,7 @@ module ts.NavigationBar { var item = createItem(child); if (item !== undefined) { if (item.text.length > 0) { - var key = item.text + "-" + item.kind; + var key = item.text + "-" + item.kind + "-" + item.indent; var itemWithSameName = keyToItem[key]; if (itemWithSameName) { From 01533905355a41edb585aaaa0e788a8ffffef00a Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Tue, 7 Oct 2014 15:07:49 -0700 Subject: [PATCH 109/110] Outlining spans for a standalone block shouldn't have the span of their parent. --- Jakefile | 3 +- src/services/outliningElementsCollector.ts | 34 ++++++++++++++++++++-- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/Jakefile b/Jakefile index 4f2808dcbd1..74f950be9e0 100644 --- a/Jakefile +++ b/Jakefile @@ -58,7 +58,8 @@ var servicesSources = [ "shims.ts", "signatureHelp.ts", "utilities.ts", - "navigationBar.ts" + "navigationBar.ts", + "outliningElementsCollector.ts" ].map(function (f) { return path.join(servicesDirectory, f); })); diff --git a/src/services/outliningElementsCollector.ts b/src/services/outliningElementsCollector.ts index c9a513ee2aa..aaaedb735ea 100644 --- a/src/services/outliningElementsCollector.ts +++ b/src/services/outliningElementsCollector.ts @@ -33,13 +33,14 @@ module ts { export module OutliningElementsCollector { export function collectElements(sourceFile: SourceFile): OutliningSpan[] { var elements: OutliningSpan[] = []; + var collapseText = "..."; function addOutliningSpan(hintSpanNode: Node, startElement: Node, endElement: Node, autoCollapse: boolean) { if (hintSpanNode && startElement && endElement) { var span: OutliningSpan = { textSpan: TypeScript.TextSpan.fromBounds(startElement.pos, endElement.end), hintSpan: TypeScript.TextSpan.fromBounds(hintSpanNode.getStart(), hintSpanNode.end), - bannerText: "...", + bannerText: collapseText, autoCollapse: autoCollapse }; elements.push(span); @@ -66,10 +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); + + // 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) { + + 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 = TypeScript.TextSpan.fromBounds(n.getStart(), n.end); + elements.push({ + textSpan: span, + hintSpan: span, + bannerText: collapseText, + autoCollapse: autoCollapse(n) + }); + } + break; + + case SyntaxKind.FunctionBlock: case SyntaxKind.ModuleBlock: case SyntaxKind.TryBlock: - case SyntaxKind.TryBlock: case SyntaxKind.CatchBlock: case SyntaxKind.FinallyBlock: var openBrace = findChildOfKind(n, SyntaxKind.OpenBraceToken, sourceFile); From e5b6bfbc4636e347eadf66658b78e78736ce29e4 Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Tue, 7 Oct 2014 20:51:23 -0700 Subject: [PATCH 110/110] add declaration target to generate declarations for compiler and services --- Jakefile | 22 ++++++++++++++++------ src/services/shims.ts | 2 +- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/Jakefile b/Jakefile index 74f950be9e0..da91239d7a5 100644 --- a/Jakefile +++ b/Jakefile @@ -128,6 +128,7 @@ function concatenateFiles(destinationFile, sourceFiles) { } var useDebugMode = false; +var generateDeclarations = false; var host = (process.env.host || process.env.TYPESCRIPT_HOST || "node"); var compilerFilename = "tsc.js"; /* Compiles a file from a list of sources @@ -142,6 +143,9 @@ function compileFile(outFile, sources, prereqs, prefixes, useBuiltCompiler, noOu file(outFile, prereqs, function() { var dir = useBuiltCompiler ? builtLocalDirectory : LKGDirectory; var options = "-removeComments --module commonjs -noImplicitAny "; //" -propagateEnumConstants " + if (generateDeclarations) { + options += "--declaration "; + } var cmd = host + " " + dir + compilerFilename + " " + options + " "; if (useDebugMode) { @@ -250,7 +254,7 @@ task("local", ["generate-diagnostics", "lib", tscFile, servicesFile]); // Local target to build the compiler and services desc("Emit debug mode files with sourcemaps"); task("debug", function() { - useDebugMode = true; + useDebugMode = true; }); @@ -264,6 +268,12 @@ task("clean", function() { jake.rmRf(builtDirectory); }); +// generate declarations for compiler and services +desc("Generate declarations for compiler and services"); +task("declaration", function() { + generateDeclarations = true; +}); + // Generate Markdown spec var word2mdJs = path.join(scriptsDirectory, "word2md.js"); var word2mdTs = path.join(scriptsDirectory, "word2md.ts"); @@ -283,12 +293,12 @@ compileFile(word2mdJs, // The generated spec.md; built for the 'generate-spec' task file(specMd, [word2mdJs, specWord], function () { jake.cpR(headerMd, specMd, {silent: true}); - var specWordFullPath = path.resolve(specWord); + var specWordFullPath = path.resolve(specWord); var cmd = "cscript //nologo " + word2mdJs + ' "' + specWordFullPath + '" >>' + specMd; - console.log(cmd); - child_process.exec(cmd, function () { - complete(); - }); + console.log(cmd); + child_process.exec(cmd, function () { + complete(); + }); }, {async: true}) diff --git a/src/services/shims.ts b/src/services/shims.ts index c7d293794ca..bab9b98a983 100644 --- a/src/services/shims.ts +++ b/src/services/shims.ts @@ -174,7 +174,7 @@ module ts { } /// TODO: delete this, it is only needed until the VS interface is updated - enum LanguageVersion { + export enum LanguageVersion { EcmaScript3 = 0, EcmaScript5 = 1, }

GT?VBbOImio?Fpq@fh7eMl7iQnGqEQ6PSl{ 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