diff --git a/doc/TypeScript Language Specification.docx b/doc/TypeScript Language Specification.docx
index 740dd2c6034..381ac186a4b 100644
Binary files a/doc/TypeScript Language Specification.docx and b/doc/TypeScript Language Specification.docx differ
diff --git a/doc/TypeScript Language Specification.pdf b/doc/TypeScript Language Specification.pdf
index 4263dd72dc1..049f7e06fb3 100644
Binary files a/doc/TypeScript Language Specification.pdf and b/doc/TypeScript Language Specification.pdf differ
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:
diff --git a/src/compiler/binder.ts b/src/compiler/binder.ts
index 16302ecf4b5..c9f9d6bf6e3 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 declaration
+ // 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.name, Diagnostics.Duplicate_identifier_0, getDisplayName(node)));
+
symbol = createSymbol(0, name);
}
}
diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts
index 0eec2c34a54..c95ce3be317 100644
--- a/src/compiler/checker.ts
+++ b/src/compiler/checker.ts
@@ -92,7 +92,9 @@ module ts {
getContextualType: getContextualType,
getFullyQualifiedName: getFullyQualifiedName,
getResolvedSignature: getResolvedSignature,
- getEnumMemberValue: getEnumMemberValue
+ getEnumMemberValue: getEnumMemberValue,
+ isValidPropertyAccess: isValidPropertyAccess,
+ getAliasedSymbol: resolveImport
};
var undefinedSymbol = createSymbol(SymbolFlags.Property | SymbolFlags.Transient, "undefined");
@@ -2573,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;
}
@@ -4239,6 +4241,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);
@@ -4311,25 +4332,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.
@@ -5672,6 +5700,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 multipleConstructorImplementation = false;
for (var i = 0; i < declarations.length; i++) {
var node = declarations[i];
var inAmbientContext = isInAmbientContext(node);
@@ -5694,10 +5724,10 @@ module ts {
if (node.body && bodyDeclaration) {
if (isConstructor) {
- error(node, Diagnostics.Multiple_constructor_implementations_are_not_allowed);
+ multipleConstructorImplementation = true;
}
else {
- error(node, Diagnostics.Duplicate_function_implementation);
+ duplicateFunctionDeclaration = true;
}
}
else if (!isExportSymbolInsideModule && previousDeclaration && previousDeclaration.parent === node.parent && previousDeclaration.end !== node.pos) {
@@ -5721,6 +5751,18 @@ module ts {
}
}
+ if (multipleConstructorImplementation) {
+ forEach(declarations, declaration => {
+ error(declaration, Diagnostics.Multiple_constructor_implementations_are_not_allowed);
+ });
+ }
+
+ if (duplicateFunctionDeclaration) {
+ forEach( declarations, declaration => {
+ error(declaration.name, Diagnostics.Duplicate_function_implementation);
+ });
+ }
+
if (!isExportSymbolInsideModule && lastSeenNonAmbientDeclaration && !lastSeenNonAmbientDeclaration.body) {
reportImplementationExpectedError(lastSeenNonAmbientDeclaration);
}
@@ -7061,23 +7103,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;
@@ -7156,75 +7181,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;
@@ -7478,7 +7434,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/core.ts b/src/compiler/core.ts
index e723e15716a..4e74ec1b967 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/compiler/diagnosticInformationMap.generated.ts b/src/compiler/diagnosticInformationMap.generated.ts
index ba6f742c4c1..e0b8099ef3c 100644
--- a/src/compiler/diagnosticInformationMap.generated.ts
+++ b/src/compiler/diagnosticInformationMap.generated.ts
@@ -5,6 +5,7 @@ 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." },
+ 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." },
diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json
index 0480cd3000c..1b89d2242c7 100644
--- a/src/compiler/diagnosticMessages.json
+++ b/src/compiler/diagnosticMessages.json
@@ -10,6 +10,10 @@
"'{0}' expected.": {
"category": "Error",
"code": 1005
+ },
+ "A file cannot have a reference to itself.": {
+ "category": "Error",
+ "code": 1006
},
"Trailing comma not allowed.": {
"category": "Error",
@@ -1355,6 +1359,7 @@
"category": "Error",
"code": 5001
},
+
"Cannot find the common subdirectory path for the input files.": {
"category": "Error",
"code": 5009
diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts
index 5dfedc37e0a..fb40117fb9b 100644
--- a/src/compiler/emitter.ts
+++ b/src/compiler/emitter.ts
@@ -3127,7 +3127,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);
}
@@ -3157,12 +3157,12 @@ 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.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)) {
@@ -3182,11 +3182,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);
diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts
index 9a11fef88b0..422d133d5d0 100644
--- a/src/compiler/parser.ts
+++ b/src/compiler/parser.ts
@@ -43,11 +43,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);
}
@@ -64,7 +64,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 {
@@ -391,6 +391,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 && (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;
@@ -1065,7 +1159,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:
@@ -1218,18 +1312,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 {
@@ -1240,6 +1322,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;
@@ -2938,7 +3037,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);
@@ -3818,15 +3917,17 @@ 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 {
referencedFiles.push({
- pos: range.pos,
- end: range.end,
+ pos: start,
+ end: end,
filename: matchResult[3]
});
}
@@ -3943,6 +4044,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))) {
@@ -4001,7 +4105,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);
});
}
diff --git a/src/compiler/types.ts b/src/compiler/types.ts
index dcc42bf3358..da2cb9099c2 100644
--- a/src/compiler/types.ts
+++ b/src/compiler/types.ts
@@ -655,6 +655,9 @@ 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;
+ getAliasedSymbol(symbol: Symbol): Symbol;
}
export interface TextWriter {
diff --git a/src/harness/fourslash.ts b/src/harness/fourslash.ts
index a97319ff332..ebc6ec61d8f 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);
}
}
@@ -753,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) {
@@ -767,51 +776,79 @@ 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);
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');
}
}
}
@@ -886,31 +923,38 @@ 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';
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 +963,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,35 +977,22 @@ 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);
}
- //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);
-
- // 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];
}
@@ -1009,7 +1040,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(
@@ -1309,7 +1340,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) {
@@ -1326,7 +1357,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);
// }
// }
// }
@@ -1365,7 +1396,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;
@@ -1422,11 +1453,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];
@@ -1442,10 +1473,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');
}
}
@@ -1480,7 +1511,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);
}
}
@@ -1489,7 +1520,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);
}
}
@@ -1532,14 +1563,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 + '"');
}
@@ -1577,7 +1608,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('verifyClassifications failed - expected total classifications to be ' + expected.length + ', but was ' + actual.length);
}
for (var i = 0; i < expected.length; i++) {
@@ -1586,7 +1617,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('verifyClassifications failed - expected classifications type to be ' +
expectedType + ', but was ' +
actualClassification.classificationType);
}
@@ -1594,7 +1625,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('verifyClassifications failed - expected classificatied text to be ' +
expectedClassification.text + ', but was ' +
actualText);
}
@@ -1621,14 +1652,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() + ')');
}
}
}
@@ -1638,7 +1669,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++) {
@@ -1647,7 +1678,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() + ')');
}
}
}
@@ -1658,7 +1689,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;
@@ -1667,11 +1698,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);
}
}
@@ -1681,7 +1712,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);
}
}
@@ -1768,7 +1799,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 + '.');
}
}
@@ -1788,7 +1819,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++) {
@@ -1804,7 +1835,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) + ')');
}
}
@@ -1815,7 +1846,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 + '.');
}
}
@@ -1840,7 +1871,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)) {
@@ -1848,7 +1879,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) {
@@ -1902,21 +1933,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) {
@@ -1925,7 +1956,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);
}
}
@@ -2010,7 +2041,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) {
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/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/navigationBar.ts b/src/services/navigationBar.ts
index 825d46a1f65..5cf2dd90eea 100644
--- a/src/services/navigationBar.ts
+++ b/src/services/navigationBar.ts
@@ -166,26 +166,26 @@ module ts.NavigationBar {
return undefined;
}
- return createItem(node, getSourceText(parameter.name), ts.ScriptElementKind.memberVariableElement);
+ return createItem(node, getTextOfNode(parameter.name), ts.ScriptElementKind.memberVariableElement);
case SyntaxKind.Method:
var method = node;
- return createItem(node, getSourceText(method.name), ts.ScriptElementKind.memberFunctionElement);
+ return createItem(node, getTextOfNode(method.name), ts.ScriptElementKind.memberFunctionElement);
case SyntaxKind.GetAccessor:
var getAccessor = node;
- return createItem(node, getSourceText(getAccessor.name), ts.ScriptElementKind.memberGetAccessorElement);
+ return createItem(node, getTextOfNode(getAccessor.name), ts.ScriptElementKind.memberGetAccessorElement);
case SyntaxKind.SetAccessor:
var setAccessor = node;
- return createItem(node, getSourceText(setAccessor.name), ts.ScriptElementKind.memberSetAccessorElement);
+ return createItem(node, getTextOfNode(setAccessor.name), ts.ScriptElementKind.memberSetAccessorElement);
case SyntaxKind.IndexSignature:
return createItem(node, "[]", ts.ScriptElementKind.indexSignatureElement);
case SyntaxKind.EnumMember:
var enumMember = node;
- return createItem(node, getSourceText(enumMember.name), ts.ScriptElementKind.memberVariableElement);
+ return createItem(node, getTextOfNode(enumMember.name), ts.ScriptElementKind.memberVariableElement);
case SyntaxKind.CallSignature:
return createItem(node, "()", ts.ScriptElementKind.callSignatureElement);
@@ -195,18 +195,18 @@ module ts.NavigationBar {
case SyntaxKind.Property:
var property = node;
- return createItem(node, getSourceText(property.name), ts.ScriptElementKind.memberVariableElement);
+ return createItem(node, getTextOfNode(property.name), ts.ScriptElementKind.memberVariableElement);
case SyntaxKind.FunctionDeclaration:
var functionDeclaration = node;
if (!isTopLevelFunctionDeclaration(functionDeclaration)) {
- return createItem(node, getSourceText(functionDeclaration.name), ts.ScriptElementKind.functionElement);
+ return createItem(node, getTextOfNode(functionDeclaration.name), ts.ScriptElementKind.functionElement);
}
break;
case SyntaxKind.VariableDeclaration:
var variableDeclaration = node;
- return createItem(node, getSourceText(variableDeclaration.name), ts.ScriptElementKind.variableElement);
+ return createItem(node, getTextOfNode(variableDeclaration.name), ts.ScriptElementKind.variableElement);
case SyntaxKind.Constructor:
return createItem(node, "constructor", ts.ScriptElementKind.constructorImplementationElement);
@@ -258,7 +258,7 @@ module ts.NavigationBar {
function getModuleName(moduleDeclaration: ModuleDeclaration): string {
// We want to maintain quotation marks.
if (moduleDeclaration.name.kind === SyntaxKind.StringLiteral) {
- return getSourceText(moduleDeclaration.name);
+ return getTextOfNode(moduleDeclaration.name);
}
// Otherwise, we need to aggregate each identifier to build up the qualified name.
@@ -382,8 +382,8 @@ module ts.NavigationBar {
return TypeScript.TextSpan.fromBounds(node.getStart(), node.getEnd());
}
- function getSourceText(node: Node): string {
- return getSourceTextOfNodeFromSourceText(sourceFile.text, node);
+ function getTextOfNode(node: Node): string {
+ return getTextOfNodeFromSourceText(sourceFile.text, node);
}
}
}
\ No newline at end of file
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++;
diff --git a/src/services/services.ts b/src/services/services.ts
index 320e0072d97..e89c0d4eb98 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]);
}
}
}
@@ -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;
@@ -1025,6 +1032,8 @@ module ts {
static primitiveType = "primitive type";
static label = "label";
+
+ static alias = "alias"
}
export class ScriptElementKindModifier {
@@ -1662,8 +1671,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 {
@@ -2052,15 +2061,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;
@@ -2144,7 +2144,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 = getTouchingToken(sourceFile, TypeScript.end(node) - 1);
if (isPunctuation(mappedNode.kind)) {
mappedNode = mappedNode.parent;
}
@@ -2164,15 +2164,20 @@ 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) {
var symbol = typeInfoResolver.getSymbolInfo(mappedNode);
+
+ // This is an alias, follow what it aliases
+ if (symbol && symbol.flags & SymbolFlags.Import) {
+ symbol = typeInfoResolver.getAliasedSymbol(symbol);
+ }
+
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);
}
});
@@ -2184,7 +2189,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);
}
});
@@ -2219,7 +2224,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);
@@ -2317,6 +2322,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;
}
@@ -2368,7 +2374,7 @@ module ts {
fileName = TypeScript.switchToForwardSlashes(fileName);
var sourceFile = getSourceFile(fileName);
- var node = getNodeAtPosition(sourceFile, position);
+ var node = getTouchingPropertyName(sourceFile, position);
if (!node) {
return undefined;
}
@@ -2476,7 +2482,7 @@ module ts {
fileName = TypeScript.switchToForwardSlashes(fileName);
var sourceFile = getSourceFile(fileName);
- var node = getNodeAtPosition(sourceFile, position);
+ var node = getTouchingWord(sourceFile, position);
if (!node) {
return undefined;
}
@@ -2559,7 +2565,7 @@ module ts {
filename = TypeScript.switchToForwardSlashes(filename);
var sourceFile = getSourceFile(filename);
- var node = getNodeAtPosition(sourceFile, position);
+ var node = getTouchingPropertyName(sourceFile, position);
if (!node) {
return undefined;
}
@@ -2574,7 +2580,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,
@@ -2623,7 +2630,7 @@ module ts {
filename = TypeScript.switchToForwardSlashes(filename);
var sourceFile = getSourceFile(filename);
- var node = getNodeAtPosition(sourceFile, position);
+ var node = getTouchingWord(sourceFile, position);
if (!node) {
return undefined;
}
@@ -2645,6 +2652,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:
@@ -2685,6 +2697,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;
@@ -2762,12 +2779,108 @@ 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 = getThrowStatementOwner(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 with catch-clauses.
+ */
+ 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);
+ }
+ else {
+ // Exceptions thrown within a try block lacking a catch clause
+ // are "owned" in the current context.
+ aggregate(tryStatement.tryBlock);
+ }
+
+ 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
+ * nearest ancestor that is a try-block (whose try statement has a catch clause),
+ * function-block, or source file.
+ */
+ function getThrowStatementOwner(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 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;
+ }
+
+ return undefined;
+ }
function getTryCatchFinallyOccurrences(tryStatement: TryStatement): ReferenceEntry[] {
var keywords: Node[] = [];
@@ -2919,6 +3032,23 @@ 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) {
+ 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;
@@ -2939,13 +3069,21 @@ 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 = getNodeAtPosition(sourceFile, position);
+ var node = getTouchingPropertyName(sourceFile, position);
if (!node) {
return undefined;
}
@@ -2959,7 +3097,88 @@ 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*
+
+ if (findInStrings) {
+ forEach(program.getSourceFiles(), addStringReferences);
+ }
+
+ if (findInComments) {
+ forEach(program.getSourceFiles(), addCommentReferences);
+ }
+
+ return references;
+
+ function addReferencesInRawText(rawText: string, rawTextPositionInSourceText: number, sourceText: string) {
+ var matchIndex = 0;
+ while ((matchIndex = rawText.indexOf(name, matchIndex)) >= 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 /// {
cancellationToken.throwIfCancellationRequested();
- var node = getNodeAtPosition(sourceFile, position);
+ var node = getTouchingWord(sourceFile, position);
if (!node || node.getWidth() !== labelName.length) {
return;
}
@@ -3184,7 +3403,7 @@ module ts {
forEach(possiblePositions, position => {
cancellationToken.throwIfCancellationRequested();
- var referenceLocation = getNodeAtPosition(sourceFile, position);
+ var referenceLocation = getTouchingPropertyName(sourceFile, position);
if (!isValidReferencePosition(referenceLocation, searchText)) {
return;
}
@@ -3236,7 +3455,7 @@ module ts {
forEach(possiblePositions, position => {
cancellationToken.throwIfCancellationRequested();
- var node = getNodeAtPosition(sourceFile, position);
+ var node = getTouchingWord(sourceFile, position);
if (!node || node.kind !== SyntaxKind.SuperKeyword) {
return;
@@ -3302,7 +3521,7 @@ module ts {
forEach(possiblePositions, position => {
cancellationToken.throwIfCancellationRequested();
- var node = getNodeAtPosition(sourceFile, position);
+ var node = getTouchingWord(sourceFile, position);
if (!node || node.kind !== SyntaxKind.ThisKeyword) {
return;
}
@@ -3921,7 +4140,7 @@ module ts {
return result;
- function classifySymbol(symbol: Symbol) {
+ function classifySymbol(symbol: Symbol, isInTypePosition: boolean) {
var flags = symbol.getFlags();
if (flags & SymbolFlags.Class) {
@@ -3930,14 +4149,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;
+ }
}
}
@@ -3947,7 +4168,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()),
@@ -4116,7 +4337,7 @@ module ts {
var sourceFile = getCurrentSourceFile(filename);
var result: TypeScript.TextSpan[] = [];
- var token = getTokenAtPosition(sourceFile, position);
+ var token = getTouchingToken(sourceFile, position);
if (token.getStart(sourceFile) === position) {
var matchKind = getMatchingTokenKind(token);
@@ -4400,7 +4621,7 @@ module ts {
fileName = TypeScript.switchToForwardSlashes(fileName);
var sourceFile = getSourceFile(fileName);
- var node = getNodeAtPosition(sourceFile, position);
+ var node = getTouchingWord(sourceFile, position);
// Can only rename an identifier.
if (node && node.kind === SyntaxKind.Identifier) {
@@ -4465,6 +4686,7 @@ module ts {
getBreakpointStatementAtPosition: getBreakpointStatementAtPosition,
getNavigateToItems: getNavigateToItems,
getRenameInfo: getRenameInfo,
+ findRenameLocations: findRenameLocations,
getNavigationBarItems: getNavigationBarItems,
getOutliningSpans: getOutliningSpans,
getTodoComments: getTodoComments,
@@ -4486,26 +4708,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: "\
@@ -4535,8 +4789,27 @@ module ts {
entries: []
};
-
- var token = SyntaxKind.Unknown;
+ // 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 angleBracketStack = 0;
+
do {
token = scanner.scan();
@@ -4549,6 +4822,35 @@ 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;
+ }
+ 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.
+ angleBracketStack++;
+ }
+ else if (token === SyntaxKind.GreaterThanToken && angleBracketStack > 0) {
+ // If we think we're currently in something generic, then mark that that
+ // generic entity is complete.
+ angleBracketStack--;
+ }
+ else if (token === SyntaxKind.AnyKeyword ||
+ token === SyntaxKind.StringKeyword ||
+ token === SyntaxKind.NumberKeyword ||
+ 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.
+ token = SyntaxKind.Identifier;
+ }
+ }
lastNonTriviaToken = token;
}
diff --git a/src/services/shims.ts b/src/services/shims.ts
index 45ac958935e..40ce6c7b8df 100644
--- a/src/services/shims.ts
+++ b/src/services/shims.ts
@@ -102,6 +102,12 @@ module ts {
*/
getRenameInfo(fileName: string, position: number): string;
+ /**
+ * Returns a JSON-encoded value of the type:
+ * { fileName: string, textSpan: { start: number, length: number } }[]
+ */
+ findRenameLocations(fileName: string, position: number, findInStrings: boolean, findInComments: boolean): string;
+
/**
* Returns a JSON-encoded value of the type:
* { fileName: string; textSpan: { start: number; length: number}; kind: string; name: string; containerKind: string; containerName: string }
@@ -344,12 +350,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;
}
@@ -375,6 +375,7 @@ module ts {
if (diagnosticMessagesJson == null || diagnosticMessagesJson == "") {
return null;
}
+
try {
return JSON.parse(diagnosticMessagesJson);
}
@@ -655,6 +656,14 @@ module ts {
});
}
+ public findRenameLocations(fileName: string, position: number, findInStrings: boolean, findInComments: boolean): string {
+ return this.forwardJSONCall(
+ "findRenameLocations('" + fileName + "', " + position + ", " + findInStrings + ", " + findInComments + ")",
+ () => {
+ 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/signatureHelp.ts b/src/services/signatureHelp.ts
index 796472c030e..080e4704b83 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,35 @@ module ts.SignatureHelp {
return undefined;
}
- function createSignatureHelpItems(candidates: Signature[], bestSignature: Signature, argumentListOrTypeArgumentList: Node): SignatureHelpItems {
+ /**
+ * 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 => {
var parameters = candidateSignature.parameters;
var parameterHelpItems: SignatureHelpParameter[] = parameters.length === 0 ? emptyArray : map(parameters, p => {
@@ -321,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,
//
@@ -338,63 +365,38 @@ 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;
+
+ // 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,
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);
diff --git a/src/services/utilities.ts b/src/services/utilities.ts
index 9e68ef1a7aa..af320ea0a0c 100644
--- a/src/services/utilities.ts
+++ b/src/services/utilities.ts
@@ -50,34 +50,54 @@ 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 getTokenAtPosition(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 or (position === end && token is keyword or identifier))
+ */
+ export function getTouchingWord(sourceFile: SourceFile, position: number): Node {
+ return getTouchingToken(sourceFile, position, isWord);
}
- /** Get the token whose text contains the position, or the containing node. */
- export function getNodeAtPosition(sourceFile: SourceFile, position: number) {
+ /* 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);
+ }
+
+ /** 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 */
+ function getTokenAtPositionWorker(sourceFile: SourceFile, position: number, allowPositionInLeadingTrivia: boolean, includeItemAtEndPosition: (n: Node) => boolean): Node {
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;
+ var start = allowPositionInLeadingTrivia ? child.getFullStart() : child.getStart(sourceFile);
+ if (start <= 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;
@@ -130,8 +150,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)) {
@@ -167,7 +187,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.
@@ -202,7 +222,19 @@ 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;
}
+
+ 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
diff --git a/tests/baselines/reference/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndGenericClassStaticFunctionOfTheSameName.errors.txt b/tests/baselines/reference/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndGenericClassStaticFunctionOfTheSameName.errors.txt
index 2ab89730405..d200258fdb1 100644
--- a/tests/baselines/reference/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndGenericClassStaticFunctionOfTheSameName.errors.txt
+++ b/tests/baselines/reference/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndGenericClassStaticFunctionOfTheSameName.errors.txt
@@ -1,12 +1,15 @@
+tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndGenericClassStaticFunctionOfTheSameName.ts(5,12): 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 (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 {
diff --git a/tests/baselines/reference/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndNonGenericClassStaticFunctionOfTheSameName.errors.txt b/tests/baselines/reference/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndNonGenericClassStaticFunctionOfTheSameName.errors.txt
index 5db506d1052..474613e283f 100644
--- a/tests/baselines/reference/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndNonGenericClassStaticFunctionOfTheSameName.errors.txt
+++ b/tests/baselines/reference/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndNonGenericClassStaticFunctionOfTheSameName.errors.txt
@@ -1,12 +1,15 @@
+tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMergeWithModulesExportedGenericFunctionAndNonGenericClassStaticFunctionOfTheSameName.ts(5,12): 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 (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 {
diff --git a/tests/baselines/reference/ClassAndModuleThatMergeWithStaticFunctionAndExportedFunctionThatShareAName.errors.txt b/tests/baselines/reference/ClassAndModuleThatMergeWithStaticFunctionAndExportedFunctionThatShareAName.errors.txt
index 9b62647f40b..a59953e7fb2 100644
--- a/tests/baselines/reference/ClassAndModuleThatMergeWithStaticFunctionAndExportedFunctionThatShareAName.errors.txt
+++ b/tests/baselines/reference/ClassAndModuleThatMergeWithStaticFunctionAndExportedFunctionThatShareAName.errors.txt
@@ -1,12 +1,16 @@
+tests/cases/conformance/internalModules/DeclarationMerging/ClassAndModuleThatMergeWithStaticFunctionAndExportedFunctionThatShareAName.ts(4,12): 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,25): 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 {
@@ -21,6 +25,8 @@ 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 {
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..16df32bb2c5 100644
--- a/tests/baselines/reference/ambientClassOverloadForFunction.errors.txt
+++ b/tests/baselines/reference/ambientClassOverloadForFunction.errors.txt
@@ -1,8 +1,11 @@
+tests/cases/compiler/ambientClassOverloadForFunction.ts(1,15): error TS2300: Duplicate identifier 'foo'.
tests/cases/compiler/ambientClassOverloadForFunction.ts(2,10): 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'.
diff --git a/tests/baselines/reference/anyDeclare.errors.txt b/tests/baselines/reference/anyDeclare.errors.txt
index c9728323818..8eda3672f24 100644
--- a/tests/baselines/reference/anyDeclare.errors.txt
+++ b/tests/baselines/reference/anyDeclare.errors.txt
@@ -1,10 +1,13 @@
+tests/cases/compiler/anyDeclare.ts(3,9): error TS2300: Duplicate identifier 'myFn'.
tests/cases/compiler/anyDeclare.ts(4,14): 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'.
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..b17ab32d408 100644
--- a/tests/baselines/reference/augmentedTypesClass2a.errors.txt
+++ b/tests/baselines/reference/augmentedTypesClass2a.errors.txt
@@ -1,10 +1,13 @@
+tests/cases/compiler/augmentedTypesClass2a.ts(2,7): 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'.
-==== 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'.
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..3102f9d4786 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(6,6): 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'.
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..8d1ce671c9e 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(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'.
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..24c194d25c3 100644
--- a/tests/baselines/reference/augmentedTypesVar.errors.txt
+++ b/tests/baselines/reference/augmentedTypesVar.errors.txt
@@ -1,41 +1,55 @@
+tests/cases/compiler/augmentedTypesVar.ts(6,5): 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'.
+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..64927462104 100644
--- a/tests/baselines/reference/callOverloads1.errors.txt
+++ b/tests/baselines/reference/callOverloads1.errors.txt
@@ -1,10 +1,13 @@
+tests/cases/compiler/callOverloads1.ts(1,7): 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'?
-==== 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) {
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..6291fa8f3de 100644
--- a/tests/baselines/reference/callOverloads2.errors.txt
+++ b/tests/baselines/reference/callOverloads2.errors.txt
@@ -1,14 +1,18 @@
+tests/cases/compiler/callOverloads2.ts(3,7): error TS2300: Duplicate identifier 'Foo'.
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'?
-==== tests/cases/compiler/callOverloads2.ts (5 errors) ====
+==== tests/cases/compiler/callOverloads2.ts (7 errors) ====
- class Foo {
+ class Foo { // error
+ ~~~
+!!! error TS2300: Duplicate identifier 'Foo'.
bar1() { /*WScript.Echo("bar1");*/ }
constructor(x: any) {
@@ -16,15 +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;}
+ 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 986f0478369..ecb889bc1ab 100644
--- a/tests/baselines/reference/callOverloads3.errors.txt
+++ b/tests/baselines/reference/callOverloads3.errors.txt
@@ -1,21 +1,27 @@
+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;
+ 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 cec3a1834ba..3010d7c15d8 100644
--- a/tests/baselines/reference/callOverloads4.errors.txt
+++ b/tests/baselines/reference/callOverloads4.errors.txt
@@ -1,21 +1,27 @@
+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;
+ 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 240e10b9f55..e521a9a9076 100644
--- a/tests/baselines/reference/callOverloads5.errors.txt
+++ b/tests/baselines/reference/callOverloads5.errors.txt
@@ -1,20 +1,26 @@
+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) ====
- function Foo():Foo;
+==== tests/cases/compiler/callOverloads5.ts (7 errors) ====
+ 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 ff1fd1e66cf..034aa4039cf 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..1801bd42e4d 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
@@ -28,10 +29,12 @@ tests/cases/conformance/types/objectTypeLiteral/callSignatures/callSignaturesWit
c.foo(1);
var b = {
- foo(x = 1),
+ foo(x = 1), // error
~
!!! error TS1005: '{' expected.
- foo(x = 1) { },
+ ~~~
+!!! error TS2300: Duplicate identifier 'foo'.
+ 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 91d29d981c2..b90fae9cb40 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) ====
- interface foo{ }
- class foo{ }
+==== tests/cases/compiler/class1.ts (2 errors) ====
+ interface foo{ } // error
+ ~~~
+!!! error TS2300: Duplicate identifier '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 d497fb4c44e..8d31e847d71 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,8): error TS2300: Duplicate identifier 'cli'.
tests/cases/compiler/classAndInterface1.ts(2,11): error TS2300: Duplicate identifier 'cli'.
-==== tests/cases/compiler/classAndInterface1.ts (1 errors) ====
- class cli { }
+==== tests/cases/compiler/classAndInterface1.ts (2 errors) ====
+ class cli { } // error
+ ~~~
+!!! 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/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/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..2e8c16d4494 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) ====
- class C { foo: string; }
+==== tests/cases/conformance/classes/classDeclarations/classAndVariableWithSameName.ts (4 errors) ====
+ class C { foo: string; } // error
+ ~
+!!! error TS2300: Duplicate identifier 'C'.
var C = ''; // error
~
!!! 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/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..14bc27fb5ca 100644
--- a/tests/baselines/reference/classOverloadForFunction.errors.txt
+++ b/tests/baselines/reference/classOverloadForFunction.errors.txt
@@ -1,8 +1,11 @@
+tests/cases/compiler/classOverloadForFunction.ts(1,7): error TS2300: Duplicate identifier 'foo'.
tests/cases/compiler/classOverloadForFunction.ts(2,10): 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'.
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..6b08be330a0 100644
--- a/tests/baselines/reference/classWithTwoConstructorDefinitions.errors.txt
+++ b/tests/baselines/reference/classWithTwoConstructorDefinitions.errors.txt
@@ -1,17 +1,23 @@
+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() { }
+ constructor() { } // error
+ ~~~~~~~~~~~~~~~~~
+!!! error TS2392: Multiple constructor implementations are not allowed.
constructor(x) { } // error
~~~~~~~~~~~~~~~~~~
!!! error TS2392: Multiple constructor implementations are not allowed.
}
class D {
- constructor(x: T) { }
+ constructor(x: T) { } // error
+ ~~~~~~~~~~~~~~~~~~~~~
+!!! 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/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/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..914088f6c19 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 (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 {
diff --git a/tests/baselines/reference/cloduleWithDuplicateMember2.errors.txt b/tests/baselines/reference/cloduleWithDuplicateMember2.errors.txt
index 1118f23a98d..55d2fdbddf2 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(7,16): error TS2300: Duplicate identifier 'x'.
tests/cases/compiler/cloduleWithDuplicateMember2.ts(10,21): 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,6 +16,8 @@ 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() { }
diff --git a/tests/baselines/reference/conflictingTypeAnnotatedVar.errors.txt b/tests/baselines/reference/conflictingTypeAnnotatedVar.errors.txt
index f1e7d2abeed..0b667108b5f 100644
--- a/tests/baselines/reference/conflictingTypeAnnotatedVar.errors.txt
+++ b/tests/baselines/reference/conflictingTypeAnnotatedVar.errors.txt
@@ -1,11 +1,14 @@
+tests/cases/compiler/conflictingTypeAnnotatedVar.ts(1,5): 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,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.
-==== 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'.
diff --git a/tests/baselines/reference/constructSignatureWithAccessibilityModifiersOnParameters2.errors.txt b/tests/baselines/reference/constructSignatureWithAccessibilityModifiersOnParameters2.errors.txt
index d17f52e90c1..e12f3a59ca1 100644
--- a/tests/baselines/reference/constructSignatureWithAccessibilityModifiersOnParameters2.errors.txt
+++ b/tests/baselines/reference/constructSignatureWithAccessibilityModifiersOnParameters2.errors.txt
@@ -1,8 +1,11 @@
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(4,35): 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,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.
@@ -15,15 +18,19 @@ 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 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'.
@@ -35,6 +42,8 @@ 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..d2cc5ecd65b 100644
--- a/tests/baselines/reference/constructorOverloads4.errors.txt
+++ b/tests/baselines/reference/constructorOverloads4.errors.txt
@@ -1,12 +1,15 @@
+tests/cases/compiler/constructorOverloads4.ts(2,18): 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'?
-==== 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;
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..e3409dbb399 100644
--- a/tests/baselines/reference/constructorOverloads7.errors.txt
+++ b/tests/baselines/reference/constructorOverloads7.errors.txt
@@ -1,9 +1,12 @@
+tests/cases/compiler/constructorOverloads7.ts(1,15): 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.
-==== 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;
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..42df015bc5b 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(10,5): 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,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,27): 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,6 +17,8 @@ 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,6 +29,8 @@ 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,6 +41,8 @@ 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..ed6e50c1dbd 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(197,15): 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 '{}'.
-==== 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;
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..7212121e106 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,6 +46,8 @@ 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; }'.
}
diff --git a/tests/baselines/reference/duplicateClassElements.errors.txt b/tests/baselines/reference/duplicateClassElements.errors.txt
index 9ff44679e44..004e68314fd 100644
--- a/tests/baselines/reference/duplicateClassElements.errors.txt
+++ b/tests/baselines/reference/duplicateClassElements.errors.txt
@@ -8,30 +8,43 @@ 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(2,12): error TS2300: Duplicate identifier 'a'.
tests/cases/compiler/duplicateClassElements.ts(3,12): error TS2300: Duplicate identifier 'a'.
-tests/cases/compiler/duplicateClassElements.ts(6,5): error TS2393: Duplicate function implementation.
+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,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,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,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,12): error TS2300: Duplicate identifier 'z2'.
-==== tests/cases/compiler/duplicateClassElements.ts (18 errors) ====
+==== tests/cases/compiler/duplicateClassElements.ts (26 errors) ====
class 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.
@@ -57,6 +70,8 @@ tests/cases/compiler/duplicateClassElements.ts(41,12): error TS2300: Duplicate i
}
public z() {
+ ~
+!!! error TS2300: Duplicate identifier 'z'.
}
get z() {
~
@@ -75,11 +90,15 @@ tests/cases/compiler/duplicateClassElements.ts(41,12): error TS2300: Duplicate i
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;
~~
@@ -88,11 +107,15 @@ tests/cases/compiler/duplicateClassElements.ts(41,12): error TS2300: Duplicate i
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.
+ ~~
+!!! error TS2300: Duplicate identifier 'z2'.
}
public z2() {
~~
diff --git a/tests/baselines/reference/duplicateIdentifierInCatchBlock.errors.txt b/tests/baselines/reference/duplicateIdentifierInCatchBlock.errors.txt
index 08eb464c8ad..d8065df27c8 100644
--- a/tests/baselines/reference/duplicateIdentifierInCatchBlock.errors.txt
+++ b/tests/baselines/reference/duplicateIdentifierInCatchBlock.errors.txt
@@ -1,11 +1,16 @@
+tests/cases/compiler/duplicateIdentifierInCatchBlock.ts(1,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,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'.
-==== 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() { }
~
@@ -13,6 +18,8 @@ tests/cases/compiler/duplicateIdentifierInCatchBlock.ts(16,9): error TS2403: Sub
}
function w() { }
+ ~
+!!! error TS2300: Duplicate identifier 'w'.
try { } catch (e) {
var w;
~
@@ -21,6 +28,8 @@ 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'.
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..674d4f601e6 100644
--- a/tests/baselines/reference/duplicateInterfaceMembers1.errors.txt
+++ b/tests/baselines/reference/duplicateInterfaceMembers1.errors.txt
@@ -1,9 +1,12 @@
+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;
+ ~
+!!! error TS2300: Duplicate identifier 'x'.
x: number;
~
!!! error TS2300: Duplicate identifier 'x'.
diff --git a/tests/baselines/reference/duplicateObjectLiteralProperty.errors.txt b/tests/baselines/reference/duplicateObjectLiteralProperty.errors.txt
index 370a7070505..4c3f6d1eb7e 100644
--- a/tests/baselines/reference/duplicateObjectLiteralProperty.errors.txt
+++ b/tests/baselines/reference/duplicateObjectLiteralProperty.errors.txt
@@ -2,16 +2,22 @@ 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(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,9): 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
~
@@ -23,6 +29,8 @@ tests/cases/compiler/duplicateObjectLiteralProperty.ts(16,9): error TS2300: Dupl
~
!!! error TS2300: Duplicate identifier 'a'.
c: 1,
+ ~
+!!! error TS2300: Duplicate identifier 'c'.
"c": 56, // Duplicate
~~~
!!! error TS2300: Duplicate identifier '"c"'.
@@ -34,9 +42,13 @@ 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.
diff --git a/tests/baselines/reference/duplicatePropertiesInStrictMode.errors.txt b/tests/baselines/reference/duplicatePropertiesInStrictMode.errors.txt
index 17a55a7876b..6ae8518677d 100644
--- a/tests/baselines/reference/duplicatePropertiesInStrictMode.errors.txt
+++ b/tests/baselines/reference/duplicatePropertiesInStrictMode.errors.txt
@@ -1,11 +1,14 @@
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.
diff --git a/tests/baselines/reference/duplicatePropertyNames.errors.txt b/tests/baselines/reference/duplicatePropertyNames.errors.txt
index ac21db7830a..108a88d1451 100644
--- a/tests/baselines/reference/duplicatePropertyNames.errors.txt
+++ b/tests/baselines/reference/duplicatePropertyNames.errors.txt
@@ -1,20 +1,32 @@
+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;
+ ~~~
+!!! error TS2300: Duplicate identifier 'foo'.
foo: string;
~~~
!!! error TS2300: Duplicate identifier 'foo'.
@@ -27,6 +39,8 @@ tests/cases/conformance/types/members/duplicatePropertyNames.ts(46,5): error TS2
interface Array {
foo: T;
+ ~~~
+!!! error TS2300: Duplicate identifier 'foo'.
foo: T;
~~~
!!! error TS2300: Duplicate identifier 'foo'.
@@ -34,16 +48,22 @@ tests/cases/conformance/types/members/duplicatePropertyNames.ts(46,5): error TS2
class C {
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 = () => { }
+ ~~~
+!!! error TS2300: Duplicate identifier 'baz'.
baz = () => { }
~~~
!!! error TS2300: Duplicate identifier 'baz'.
@@ -51,6 +71,8 @@ tests/cases/conformance/types/members/duplicatePropertyNames.ts(46,5): error TS2
interface I {
foo: string;
+ ~~~
+!!! error TS2300: Duplicate identifier 'foo'.
foo: string;
~~~
!!! error TS2300: Duplicate identifier 'foo'.
@@ -58,11 +80,15 @@ tests/cases/conformance/types/members/duplicatePropertyNames.ts(46,5): error TS2
var a: {
foo: string;
+ ~~~
+!!! error TS2300: Duplicate identifier 'foo'.
foo: string;
~~~
!!! error TS2300: Duplicate identifier 'foo'.
bar: () => {};
+ ~~~
+!!! error TS2300: Duplicate identifier 'bar'.
bar: () => {};
~~~
!!! error TS2300: Duplicate identifier 'bar'.
@@ -70,10 +96,14 @@ tests/cases/conformance/types/members/duplicatePropertyNames.ts(46,5): error TS2
var b = {
foo: '',
+ ~~~
+!!! error TS2300: Duplicate identifier 'foo'.
foo: '',
~~~
!!! error TS2300: Duplicate identifier 'foo'.
bar: () => { },
+ ~~~
+!!! error TS2300: Duplicate identifier 'bar'.
bar: () => { }
~~~
!!! error TS2300: Duplicate identifier 'bar'.
diff --git a/tests/baselines/reference/duplicateStringNamedProperty1.errors.txt b/tests/baselines/reference/duplicateStringNamedProperty1.errors.txt
index 9353eb34151..7d6c5d6bafc 100644
--- a/tests/baselines/reference/duplicateStringNamedProperty1.errors.txt
+++ b/tests/baselines/reference/duplicateStringNamedProperty1.errors.txt
@@ -1,9 +1,12 @@
+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'.
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..ae7d1ba92d5 100644
--- a/tests/baselines/reference/es6ClassTest9.errors.txt
+++ b/tests/baselines/reference/es6ClassTest9.errors.txt
@@ -1,14 +1,17 @@
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,10): 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'.
diff --git a/tests/baselines/reference/exportSameNameFuncVar.errors.txt b/tests/baselines/reference/exportSameNameFuncVar.errors.txt
index 0103d0e8968..a06457e88ae 100644
--- a/tests/baselines/reference/exportSameNameFuncVar.errors.txt
+++ b/tests/baselines/reference/exportSameNameFuncVar.errors.txt
@@ -1,8 +1,11 @@
+tests/cases/compiler/exportSameNameFuncVar.ts(1,12): error TS2300: Duplicate identifier 'a'.
tests/cases/compiler/exportSameNameFuncVar.ts(2,17): error TS2300: Duplicate identifier 'a'.
-==== tests/cases/compiler/exportSameNameFuncVar.ts (1 errors) ====
+==== tests/cases/compiler/exportSameNameFuncVar.ts (2 errors) ====
export var a = 10;
+ ~
+!!! error TS2300: Duplicate identifier 'a'.
export function a() {
~
!!! error TS2300: Duplicate identifier 'a'.
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..dd2374f2447 100644
--- a/tests/baselines/reference/fieldAndGetterWithSameName.errors.txt
+++ b/tests/baselines/reference/fieldAndGetterWithSameName.errors.txt
@@ -1,10 +1,13 @@
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,7): 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.
diff --git a/tests/baselines/reference/funClodule.errors.txt b/tests/baselines/reference/funClodule.errors.txt
index 20598f276f3..72a9ed0db51 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(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,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'.
-==== 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,7 +24,11 @@ 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
@@ -23,7 +37,11 @@ tests/cases/compiler/funClodule.ts(19,7): error TS2300: Duplicate identifier 'fo
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..640844064c4 100644
--- a/tests/baselines/reference/functionAndPropertyNameConflict.errors.txt
+++ b/tests/baselines/reference/functionAndPropertyNameConflict.errors.txt
@@ -1,10 +1,13 @@
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,16): 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.
diff --git a/tests/baselines/reference/functionCall15.errors.txt b/tests/baselines/reference/functionCall15.errors.txt
index 09c246d34dc..4b6acf34e14 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,25): error TS2300: Duplicate identifier 'b'.
tests/cases/compiler/functionCall15.ts(1,39): 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..86fa348d817 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(8,9): 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,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'.
-==== 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..168b9191df4 100644
--- a/tests/baselines/reference/functionWithSameNameAsField.errors.txt
+++ b/tests/baselines/reference/functionWithSameNameAsField.errors.txt
@@ -1,9 +1,12 @@
+tests/cases/compiler/functionWithSameNameAsField.ts(2,12): error TS2300: Duplicate identifier 'total'.
tests/cases/compiler/functionWithSameNameAsField.ts(3,12): error TS2300: Duplicate identifier 'total'.
-==== tests/cases/compiler/functionWithSameNameAsField.ts (1 errors) ====
+==== tests/cases/compiler/functionWithSameNameAsField.ts (2 errors) ====
class TestProgressBar {
public total: number;
+ ~~~~~
+!!! error TS2300: Duplicate identifier 'total'.
public total(total: number) {
~~~~~
!!! error TS2300: Duplicate identifier 'total'.
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..95fb571d9b8 100644
--- a/tests/baselines/reference/gettersAndSettersErrors.errors.txt
+++ b/tests/baselines/reference/gettersAndSettersErrors.errors.txt
@@ -4,19 +4,25 @@ 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(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,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.
-==== 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
~~~
diff --git a/tests/baselines/reference/giant.errors.txt b/tests/baselines/reference/giant.errors.txt
index 01ddc29ea05..5ef1393915d 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(23,12): 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,16): error TS2300: Duplicate identifier 'psF'.
+tests/cases/compiler/giant.ts(27,13): 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,17): error TS2300: Duplicate identifier 'rsF'.
+tests/cases/compiler/giant.ts(33,12): 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,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,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,20): error TS2300: Duplicate identifier 'psF'.
+tests/cases/compiler/giant.ts(91,17): 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,21): error TS2300: Duplicate identifier 'rsF'.
+tests/cases/compiler/giant.ts(97,16): 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,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,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,20): error TS2300: Duplicate identifier 'psF'.
+tests/cases/compiler/giant.ts(170,17): 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,21): error TS2300: Duplicate identifier 'rsF'.
+tests/cases/compiler/giant.ts(176,16): 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,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,20): error TS2300: Duplicate identifier 'pgF'.
+tests/cases/compiler/giant.ts(247,16): 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,21): error TS2300: Duplicate identifier 'rgF'.
+tests/cases/compiler/giant.ts(251,17): 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,20): error TS2300: Duplicate identifier 'tsF'.
+tests/cases/compiler/giant.ts(257,16): 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,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,16): error TS2300: Duplicate identifier 'psF'.
+tests/cases/compiler/giant.ts(285,13): 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,17): error TS2300: Duplicate identifier 'rsF'.
+tests/cases/compiler/giant.ts(291,12): 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,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,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,20): error TS2300: Duplicate identifier 'psF'.
+tests/cases/compiler/giant.ts(349,17): 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,21): error TS2300: Duplicate identifier 'rsF'.
+tests/cases/compiler/giant.ts(355,16): 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,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,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,20): error TS2300: Duplicate identifier 'psF'.
+tests/cases/compiler/giant.ts(428,17): 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,21): error TS2300: Duplicate identifier 'rsF'.
+tests/cases/compiler/giant.ts(434,16): 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,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,20): error TS2300: Duplicate identifier 'pgF'.
+tests/cases/compiler/giant.ts(505,16): 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,21): error TS2300: Duplicate identifier 'rgF'.
+tests/cases/compiler/giant.ts(509,17): 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,20): error TS2300: Duplicate identifier 'tsF'.
+tests/cases/compiler/giant.ts(515,16): 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,16): error TS2300: Duplicate identifier 'pgF'.
+tests/cases/compiler/giant.ts(541,12): 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,17): error TS2300: Duplicate identifier 'rgF'.
+tests/cases/compiler/giant.ts(545,13): 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,16): error TS2300: Duplicate identifier 'tsF'.
+tests/cases/compiler/giant.ts(551,12): 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.
-==== tests/cases/compiler/giant.ts (227 errors) ====
+==== tests/cases/compiler/giant.ts (281 errors) ====
/*
Prefixes
@@ -251,6 +305,8 @@ 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'.
@@ -259,12 +315,16 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all
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'.
@@ -273,6 +333,8 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all
private rsF(param:any) { }
~~~~~~~
!!! error TS1005: '{' expected.
+ ~~~
+!!! error TS2300: Duplicate identifier 'rsF'.
private set rsF(param:any)
~~~
!!! error TS2300: Duplicate identifier 'rsF'.
@@ -281,12 +343,16 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all
!!! 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'.
@@ -353,6 +419,8 @@ 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'.
@@ -361,12 +429,16 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all
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'.
@@ -375,6 +447,8 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all
private rsF(param:any) { }
~~~~~~~
!!! error TS1005: '{' expected.
+ ~~~
+!!! error TS2300: Duplicate identifier 'rsF'.
private set rsF(param:any)
~~~
!!! error TS2300: Duplicate identifier 'rsF'.
@@ -383,12 +457,16 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all
!!! 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'.
@@ -472,6 +550,8 @@ 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'.
@@ -480,12 +560,16 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all
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'.
@@ -494,6 +578,8 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all
private rsF(param:any) { }
~~~~~~~
!!! error TS1005: '{' expected.
+ ~~~
+!!! error TS2300: Duplicate identifier 'rsF'.
private set rsF(param:any)
~~~
!!! error TS2300: Duplicate identifier 'rsF'.
@@ -502,12 +588,16 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all
!!! 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'.
@@ -601,6 +691,8 @@ 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.
@@ -609,6 +701,8 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all
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.
@@ -617,6 +711,8 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all
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.
@@ -625,6 +721,8 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all
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.
@@ -637,6 +735,8 @@ 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.
@@ -645,6 +745,8 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all
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.
@@ -681,6 +783,8 @@ 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'.
@@ -689,12 +793,16 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all
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'.
@@ -703,6 +811,8 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all
private rsF(param:any) { }
~~~~~~~
!!! error TS1005: '{' expected.
+ ~~~
+!!! error TS2300: Duplicate identifier 'rsF'.
private set rsF(param:any)
~~~
!!! error TS2300: Duplicate identifier 'rsF'.
@@ -711,12 +821,16 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all
!!! 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'.
@@ -783,6 +897,8 @@ 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'.
@@ -791,12 +907,16 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all
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'.
@@ -805,6 +925,8 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all
private rsF(param:any) { }
~~~~~~~
!!! error TS1005: '{' expected.
+ ~~~
+!!! error TS2300: Duplicate identifier 'rsF'.
private set rsF(param:any)
~~~
!!! error TS2300: Duplicate identifier 'rsF'.
@@ -813,12 +935,16 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all
!!! 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'.
@@ -902,6 +1028,8 @@ 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'.
@@ -910,12 +1038,16 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all
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'.
@@ -924,6 +1056,8 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all
private rsF(param:any) { }
~~~~~~~
!!! error TS1005: '{' expected.
+ ~~~
+!!! error TS2300: Duplicate identifier 'rsF'.
private set rsF(param:any)
~~~
!!! error TS2300: Duplicate identifier 'rsF'.
@@ -932,12 +1066,16 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all
!!! 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'.
@@ -1031,6 +1169,8 @@ 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.
@@ -1039,6 +1179,8 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all
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.
@@ -1047,6 +1189,8 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all
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.
@@ -1055,6 +1199,8 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all
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.
@@ -1067,6 +1213,8 @@ 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.
@@ -1075,6 +1223,8 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all
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.
@@ -1121,6 +1271,8 @@ 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.
@@ -1129,6 +1281,8 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all
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.
@@ -1137,6 +1291,8 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all
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.
@@ -1145,6 +1301,8 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all
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.
@@ -1157,6 +1315,8 @@ 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.
@@ -1165,6 +1325,8 @@ tests/cases/compiler/giant.ts(668,9): error TS2386: Overload signatures must all
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.
diff --git a/tests/baselines/reference/importAndVariableDeclarationConflict3.errors.txt b/tests/baselines/reference/importAndVariableDeclarationConflict3.errors.txt
index 739ca67724f..39567a11753 100644
--- a/tests/baselines/reference/importAndVariableDeclarationConflict3.errors.txt
+++ b/tests/baselines/reference/importAndVariableDeclarationConflict3.errors.txt
@@ -1,12 +1,15 @@
+tests/cases/compiler/importAndVariableDeclarationConflict3.ts(5,8): error TS2300: Duplicate identifier 'x'.
tests/cases/compiler/importAndVariableDeclarationConflict3.ts(6,8): 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;
+ ~
+!!! error TS2300: Duplicate identifier 'x'.
import x = m.m;
~
!!! error TS2300: Duplicate identifier 'x'.
diff --git a/tests/baselines/reference/interfaceDeclaration1.errors.txt b/tests/baselines/reference/interfaceDeclaration1.errors.txt
index a9654fabdcf..3d7fcb86784 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,9 +10,11 @@ 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;
+ ~~~~
+!!! error TS2300: Duplicate identifier 'item'.
item:number;
~~~~
!!! error TS2300: Duplicate identifier 'item'.
@@ -18,6 +22,8 @@ tests/cases/compiler/interfaceDeclaration1.ts(52,11): error TS2320: Interface 'i
interface I2 {
item:any;
+ ~~~~
+!!! 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..39e5cfaa834 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,6 +18,8 @@ tests/cases/compiler/lastPropertyInLiteralWins.ts(14,5): error TS2300: Duplicate
}
test({ // Should error, as last one wins, and is wrong type
thunk: (str: string) => {},
+ ~~~~~
+!!! error TS2300: Duplicate identifier 'thunk'.
thunk: (num: number) => {}
~~~~~
!!! error TS2300: Duplicate identifier 'thunk'.
@@ -25,6 +29,8 @@ tests/cases/compiler/lastPropertyInLiteralWins.ts(14,5): error TS2300: Duplicate
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
thunk: (num: number) => {},
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ~~~~~
+!!! error TS2300: Duplicate identifier 'thunk'.
thunk: (str: string) => {}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~
diff --git a/tests/baselines/reference/memberOverride.errors.txt b/tests/baselines/reference/memberOverride.errors.txt
index 5cc005b7339..c63803f5aa1 100644
--- a/tests/baselines/reference/memberOverride.errors.txt
+++ b/tests/baselines/reference/memberOverride.errors.txt
@@ -1,12 +1,15 @@
+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: "",
+ ~
+!!! 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..0b5984dcc6d 100644
--- a/tests/baselines/reference/mergedInterfacesWithConflictingPropertyNames.errors.txt
+++ b/tests/baselines/reference/mergedInterfacesWithConflictingPropertyNames.errors.txt
@@ -1,11 +1,16 @@
+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 {
@@ -17,6 +22,8 @@ tests/cases/conformance/interfaces/declarationMerging/mergedInterfacesWithConfli
module M {
interface A {
x: T;
+ ~
+!!! error TS2300: Duplicate identifier 'x'.
}
interface A {
@@ -41,6 +48,8 @@ tests/cases/conformance/interfaces/declarationMerging/mergedInterfacesWithConfli
module M3 {
export interface A {
x: T;
+ ~
+!!! error TS2300: Duplicate identifier 'x'.
}
}
diff --git a/tests/baselines/reference/mergedInterfacesWithConflictingPropertyNames2.errors.txt b/tests/baselines/reference/mergedInterfacesWithConflictingPropertyNames2.errors.txt
index 74b6c39b1f7..d0a50f4ae69 100644
--- a/tests/baselines/reference/mergedInterfacesWithConflictingPropertyNames2.errors.txt
+++ b/tests/baselines/reference/mergedInterfacesWithConflictingPropertyNames2.errors.txt
@@ -1,11 +1,16 @@
+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) ====
+==== tests/cases/conformance/interfaces/declarationMerging/mergedInterfacesWithConflictingPropertyNames2.ts (6 errors) ====
interface A {
x: string; // error
+ ~
+!!! error TS2300: Duplicate identifier 'x'.
}
interface A {
@@ -17,6 +22,8 @@ tests/cases/conformance/interfaces/declarationMerging/mergedInterfacesWithConfli
module M {
interface A {
x: T;
+ ~
+!!! error TS2300: Duplicate identifier 'x'.
}
interface A {
@@ -41,6 +48,8 @@ tests/cases/conformance/interfaces/declarationMerging/mergedInterfacesWithConfli
module M3 {
export interface A {
x: T;
+ ~
+!!! error TS2300: Duplicate identifier 'x'.
}
}
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..baa7c6cbfd5 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(24,9): 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,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'.
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..eb99f26bb4c 100644
--- a/tests/baselines/reference/numericClassMembers1.errors.txt
+++ b/tests/baselines/reference/numericClassMembers1.errors.txt
@@ -1,10 +1,14 @@
+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'.
@@ -12,6 +16,8 @@ tests/cases/compiler/numericClassMembers1.ts(8,2): error TS2300: Duplicate ident
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..c5890d7c98c 100644
--- a/tests/baselines/reference/numericNamedPropertyDuplicates.errors.txt
+++ b/tests/baselines/reference/numericNamedPropertyDuplicates.errors.txt
@@ -1,18 +1,27 @@
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(4,12): 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'.
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;
+ ~
+!!! error TS2300: Duplicate identifier '2'.
static 2: number;
~
!!! error TS2300: Duplicate identifier '2'.
@@ -20,6 +29,8 @@ tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericNamedP
interface I {
2: number;
+ ~
+!!! error TS2300: Duplicate identifier '2'.
2.: number;
~~
!!! error TS2300: Duplicate identifier '2.'.
@@ -27,6 +38,8 @@ tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericNamedP
var a: {
1: number;
+ ~
+!!! error TS2300: Duplicate identifier '1'.
1: number;
~
!!! error TS2300: Duplicate identifier '1'.
@@ -34,6 +47,8 @@ tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericNamedP
var b = {
2: 1
+ ~
+!!! error TS2300: Duplicate identifier '2'.
2: 1
~
!!! error TS1005: ',' expected.
diff --git a/tests/baselines/reference/numericStringNamedPropertyEquivalence.errors.txt b/tests/baselines/reference/numericStringNamedPropertyEquivalence.errors.txt
index 9ce36b4937c..4ebef99bd07 100644
--- a/tests/baselines/reference/numericStringNamedPropertyEquivalence.errors.txt
+++ b/tests/baselines/reference/numericStringNamedPropertyEquivalence.errors.txt
@@ -1,14 +1,20 @@
+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;
~~~
@@ -17,6 +23,8 @@ tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericString
interface I {
"1": number;
+ ~~~
+!!! error TS2300: Duplicate identifier '"1"'.
"1.": number; // not a duplicate
1: number;
~
@@ -25,6 +33,8 @@ tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericString
var a: {
"1": number;
+ ~~~
+!!! error TS2300: Duplicate identifier '"1"'.
1.0: string;
~~~
!!! error TS2300: Duplicate identifier '1.0'.
@@ -32,6 +42,8 @@ tests/cases/conformance/types/objectTypeLiteral/propertySignatures/numericString
var b = {
"0": '',
+ ~~~
+!!! error TS2300: Duplicate identifier '"0"'.
0: ''
~
!!! error TS2300: Duplicate identifier '0'.
diff --git a/tests/baselines/reference/objectLiteralErrors.errors.txt b/tests/baselines/reference/objectLiteralErrors.errors.txt
index 367043a53ef..1fc92ac5a48 100644
--- a/tests/baselines/reference/objectLiteralErrors.errors.txt
+++ b/tests/baselines/reference/objectLiteralErrors.errors.txt
@@ -18,41 +18,77 @@ 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,12): 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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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.
@@ -61,63 +97,99 @@ 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'.
@@ -125,71 +197,99 @@ tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(45,51)
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; } };
@@ -197,21 +297,29 @@ tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(45,51)
!!! 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'.
diff --git a/tests/baselines/reference/objectTypeWithDuplicateNumericProperty.errors.txt b/tests/baselines/reference/objectTypeWithDuplicateNumericProperty.errors.txt
index 122304d1497..c89cd04d1ee 100644
--- a/tests/baselines/reference/objectTypeWithDuplicateNumericProperty.errors.txt
+++ b/tests/baselines/reference/objectTypeWithDuplicateNumericProperty.errors.txt
@@ -1,23 +1,29 @@
+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'.
@@ -31,6 +37,8 @@ tests/cases/conformance/types/members/objectTypeWithDuplicateNumericProperty.ts(
interface I {
1;
+ ~
+!!! error TS2300: Duplicate identifier '1'.
1.0;
~~~
!!! error TS2300: Duplicate identifier '1.0'.
@@ -44,6 +52,8 @@ tests/cases/conformance/types/members/objectTypeWithDuplicateNumericProperty.ts(
var a: {
1;
+ ~
+!!! error TS2300: Duplicate identifier '1'.
1.0;
~~~
!!! error TS2300: Duplicate identifier '1.0'.
@@ -57,6 +67,8 @@ tests/cases/conformance/types/members/objectTypeWithDuplicateNumericProperty.ts(
var b = {
1: 1,
+ ~
+!!! error TS2300: Duplicate identifier '1'.
1.0: 1,
~~~
!!! error TS2300: Duplicate identifier '1.0'.
diff --git a/tests/baselines/reference/optionalParamArgsTest.errors.txt b/tests/baselines/reference/optionalParamArgsTest.errors.txt
index ed46bfd3344..a8ce88e494e 100644
--- a/tests/baselines/reference/optionalParamArgsTest.errors.txt
+++ b/tests/baselines/reference/optionalParamArgsTest.errors.txt
@@ -1,5 +1,6 @@
tests/cases/compiler/optionalParamArgsTest.ts(35,47): error TS1016: A required parameter cannot follow an optional parameter.
-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.
@@ -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,13 +55,15 @@ 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"
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 1d081bb64a9..66c1cae2a7e 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,6 +52,8 @@ tests/cases/compiler/optionalPropertiesSyntax.ts(34,5): error TS2375: Duplicate
interface propertySig {
//Property signatures can be optional
prop: any;
+ ~~~~
+!!! error TS2300: Duplicate identifier 'prop'.
prop?: any;
~~~~
!!! error TS2300: Duplicate identifier 'prop'.
diff --git a/tests/baselines/reference/overloadsWithinClasses.errors.txt b/tests/baselines/reference/overloadsWithinClasses.errors.txt
index 1055290316c..02872861a4b 100644
--- a/tests/baselines/reference/overloadsWithinClasses.errors.txt
+++ b/tests/baselines/reference/overloadsWithinClasses.errors.txt
@@ -1,13 +1,16 @@
-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 (1 errors) ====
+==== 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 d1a0513c1f6..5885385a20c 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(3,24): error TS2300: Duplicate identifier 'names'.
tests/cases/compiler/parameterPropertyInConstructor2.ts(4,24): 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,6 +12,8 @@ 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.
+ ~~~~~
+!!! 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..eb4d6dc3471 100644
--- a/tests/baselines/reference/parserErrorRecovery_ModuleElement2.errors.txt
+++ b/tests/baselines/reference/parserErrorRecovery_ModuleElement2.errors.txt
@@ -1,17 +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(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 (3 errors) ====
+==== 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 1c239f59b22..e0d49bb8470 100644
--- a/tests/baselines/reference/parserMemberFunctionDeclarationAmbiguities1.errors.txt
+++ b/tests/baselines/reference/parserMemberFunctionDeclarationAmbiguities1.errors.txt
@@ -1,28 +1,40 @@
-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(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(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,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 (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() {}
- ~~~~~~~~~~~~~~~~~~
+ ~~~~~~
!!! 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/project/visibilityOfTypeUsedAcrossModules2/amd/visibilityOfTypeUsedAcrossModules2.errors.txt b/tests/baselines/reference/project/visibilityOfTypeUsedAcrossModules2/amd/visibilityOfTypeUsedAcrossModules2.errors.txt
index 9bdeb723415..d5c992fff66 100644
--- a/tests/baselines/reference/project/visibilityOfTypeUsedAcrossModules2/amd/visibilityOfTypeUsedAcrossModules2.errors.txt
+++ b/tests/baselines/reference/project/visibilityOfTypeUsedAcrossModules2/amd/visibilityOfTypeUsedAcrossModules2.errors.txt
@@ -1,9 +1,12 @@
+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.
diff --git a/tests/baselines/reference/project/visibilityOfTypeUsedAcrossModules2/node/visibilityOfTypeUsedAcrossModules2.errors.txt b/tests/baselines/reference/project/visibilityOfTypeUsedAcrossModules2/node/visibilityOfTypeUsedAcrossModules2.errors.txt
index 9bdeb723415..d5c992fff66 100644
--- a/tests/baselines/reference/project/visibilityOfTypeUsedAcrossModules2/node/visibilityOfTypeUsedAcrossModules2.errors.txt
+++ b/tests/baselines/reference/project/visibilityOfTypeUsedAcrossModules2/node/visibilityOfTypeUsedAcrossModules2.errors.txt
@@ -1,9 +1,12 @@
+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.
diff --git a/tests/baselines/reference/propertyAndAccessorWithSameName.errors.txt b/tests/baselines/reference/propertyAndAccessorWithSameName.errors.txt
index ece553abea8..9ef943cc07a 100644
--- a/tests/baselines/reference/propertyAndAccessorWithSameName.errors.txt
+++ b/tests/baselines/reference/propertyAndAccessorWithSameName.errors.txt
@@ -2,15 +2,20 @@ 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(2,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,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,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 (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.
@@ -22,6 +27,8 @@ tests/cases/conformance/classes/propertyMemberDeclarations/propertyAndAccessorWi
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.
@@ -31,6 +38,8 @@ tests/cases/conformance/classes/propertyMemberDeclarations/propertyAndAccessorWi
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.
diff --git a/tests/baselines/reference/propertyAndFunctionWithSameName.errors.txt b/tests/baselines/reference/propertyAndFunctionWithSameName.errors.txt
index a98382863a4..84428a2dfb1 100644
--- a/tests/baselines/reference/propertyAndFunctionWithSameName.errors.txt
+++ b/tests/baselines/reference/propertyAndFunctionWithSameName.errors.txt
@@ -1,10 +1,14 @@
+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;
+ ~
+!!! error TS2300: Duplicate identifier 'x'.
x() { // error
~
!!! error TS2300: Duplicate identifier 'x'.
@@ -14,6 +18,8 @@ tests/cases/conformance/classes/propertyMemberDeclarations/propertyAndFunctionWi
class D {
x: number;
+ ~
+!!! error TS2300: Duplicate identifier 'x'.
x(v) { } // error
~
!!! error TS2300: Duplicate identifier 'x'.
diff --git a/tests/baselines/reference/propertySignatures.errors.txt b/tests/baselines/reference/propertySignatures.errors.txt
index d5ab5678c00..fd415334e74 100644
--- a/tests/baselines/reference/propertySignatures.errors.txt
+++ b/tests/baselines/reference/propertySignatures.errors.txt
@@ -1,10 +1,13 @@
+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'.
diff --git a/tests/baselines/reference/reassignStaticProp.errors.txt b/tests/baselines/reference/reassignStaticProp.errors.txt
index eb373437609..bbcfe826787 100644
--- a/tests/baselines/reference/reassignStaticProp.errors.txt
+++ b/tests/baselines/reference/reassignStaticProp.errors.txt
@@ -1,10 +1,13 @@
+tests/cases/compiler/reassignStaticProp.ts(3,12): error TS2300: Duplicate identifier 'bar'.
tests/cases/compiler/reassignStaticProp.ts(5,12): 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
~~~
diff --git a/tests/baselines/reference/selfReferencingFile.errors.txt b/tests/baselines/reference/selfReferencingFile.errors.txt
new file mode 100644
index 00000000000..727be1ea0b2
--- /dev/null
+++ b/tests/baselines/reference/selfReferencingFile.errors.txt
@@ -0,0 +1,11 @@
+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 TS1006: 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..e6e8deb5d47
--- /dev/null
+++ b/tests/baselines/reference/selfReferencingFile3.errors.txt
@@ -0,0 +1,11 @@
+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 TS1006: A file cannot have a reference to itself.
+
+ class selfReferencingFile3 {
+
+ }
\ No newline at end of file
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/stringLiteralTypesInImplementationSignatures2.errors.txt b/tests/baselines/reference/stringLiteralTypesInImplementationSignatures2.errors.txt
index ed30960896e..cbc517e0520 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,6 +60,8 @@ 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') { },
diff --git a/tests/baselines/reference/stringNamedPropertyDuplicates.errors.txt b/tests/baselines/reference/stringNamedPropertyDuplicates.errors.txt
index 8e8af394d39..e15cb03e062 100644
--- a/tests/baselines/reference/stringNamedPropertyDuplicates.errors.txt
+++ b/tests/baselines/reference/stringNamedPropertyDuplicates.errors.txt
@@ -1,18 +1,27 @@
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(4,12): 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"'.
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;
+ ~~~~~
+!!! 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"'.
@@ -20,6 +29,8 @@ tests/cases/conformance/types/objectTypeLiteral/propertySignatures/stringNamedPr
interface I {
"a b": number;
+ ~~~~~
+!!! error TS2300: Duplicate identifier '"a b"'.
"a b": number;
~~~~~
!!! error TS2300: Duplicate identifier '"a b"'.
@@ -27,6 +38,8 @@ tests/cases/conformance/types/objectTypeLiteral/propertySignatures/stringNamedPr
var a: {
"a b": number;
+ ~~~~~
+!!! error TS2300: Duplicate identifier '"a b"'.
"a b": number;
~~~~~
!!! error TS2300: Duplicate identifier '"a b"'.
@@ -34,6 +47,8 @@ tests/cases/conformance/types/objectTypeLiteral/propertySignatures/stringNamedPr
var b = {
"a b": 1
+ ~~~~~
+!!! error TS2300: Duplicate identifier '"a b"'.
"a b": 1
~~~~~
!!! error TS1005: ',' expected.
diff --git a/tests/baselines/reference/targetTypeCastTest.errors.txt b/tests/baselines/reference/targetTypeCastTest.errors.txt
index b719ac656fe..c44de5535d0 100644
--- a/tests/baselines/reference/targetTypeCastTest.errors.txt
+++ b/tests/baselines/reference/targetTypeCastTest.errors.txt
@@ -1,8 +1,11 @@
+tests/cases/compiler/targetTypeCastTest.ts(1,13): error TS2300: Duplicate identifier 'Point'.
tests/cases/compiler/targetTypeCastTest.ts(3,10): 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) {
~~~~~
diff --git a/tests/baselines/reference/targetTypeTest1.errors.txt b/tests/baselines/reference/targetTypeTest1.errors.txt
index dccc680abaa..a0b05690a3b 100644
--- a/tests/baselines/reference/targetTypeTest1.errors.txt
+++ b/tests/baselines/reference/targetTypeTest1.errors.txt
@@ -1,10 +1,14 @@
+tests/cases/compiler/targetTypeTest1.ts(1,15): 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,10): 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;
@@ -61,6 +65,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;
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/baselines/reference/twoAccessorsWithSameName.errors.txt b/tests/baselines/reference/twoAccessorsWithSameName.errors.txt
index 6b4990ceeda..81da707c566 100644
--- a/tests/baselines/reference/twoAccessorsWithSameName.errors.txt
+++ b/tests/baselines/reference/twoAccessorsWithSameName.errors.txt
@@ -9,16 +9,21 @@ 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(2,9): 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,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,9): 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.
@@ -30,6 +35,8 @@ 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.
@@ -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;
},
diff --git a/tests/baselines/reference/twoAccessorsWithSameName2.errors.txt b/tests/baselines/reference/twoAccessorsWithSameName2.errors.txt
index 2a6db805b19..836a06a8192 100644
--- a/tests/baselines/reference/twoAccessorsWithSameName2.errors.txt
+++ b/tests/baselines/reference/twoAccessorsWithSameName2.errors.txt
@@ -4,15 +4,19 @@ 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(2,16): 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,16): 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.
@@ -24,6 +28,8 @@ 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.
diff --git a/tests/baselines/reference/varAndFunctionShareName.errors.txt b/tests/baselines/reference/varAndFunctionShareName.errors.txt
index aa518152fcc..dc4dd4e1b3b 100644
--- a/tests/baselines/reference/varAndFunctionShareName.errors.txt
+++ b/tests/baselines/reference/varAndFunctionShareName.errors.txt
@@ -1,8 +1,11 @@
+tests/cases/compiler/varAndFunctionShareName.ts(1,5): error TS2300: Duplicate identifier 'myFn'.
tests/cases/compiler/varAndFunctionShareName.ts(2,10): 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..e18815fd46b 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..7240e73d0ac 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/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
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();
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/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/completionListOnAliases.ts b/tests/cases/fourslash/completionListOnAliases.ts
new file mode 100644
index 00000000000..785a65a76bd
--- /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", undefined, undefined, undefined ,/*kind: */ "alias");
+
+goTo.marker("2");
+verify.memberListContains("value");
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");
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");
diff --git a/tests/cases/fourslash/fourslash.ts b/tests/cases/fourslash/fourslash.ts
index 35b6894b1ce..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);
}
@@ -294,6 +293,10 @@ module FourSlashInterface {
FourSlash.currentTestState.verifySignatureHelpCount(expected);
}
+ public signatureHelpArgumentCountIs(expected: number) {
+ FourSlash.currentTestState.verifySignatureHelpArgumentCount(expected);
+ }
+
public currentSignatureParamterCountIs(expected: number) {
FourSlash.currentTestState.verifyCurrentSignatureHelpParameterCount(expected);
}
@@ -413,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 {
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/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);
+});
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/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);
+});
+
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);
+});
+
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');
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);
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
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
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
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
diff --git a/tests/cases/fourslash/signatureHelpOnOverloadsDifferentArity3.ts b/tests/cases/fourslash/signatureHelpOnOverloadsDifferentArity3.ts
new file mode 100644
index 00000000000..c217a12ef58
--- /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);
+verify.signatureHelpArgumentCountIs(0);
+
+edit.insert(", ");
+verify.signatureHelpCountIs(4);
+verify.currentSignatureHelpIs("f(s: string, b: boolean): any");
+verify.currentSignatureParamterCountIs(2);
+verify.currentParameterHelpArgumentNameIs("b");
+verify.currentParameterSpanIs("b: boolean");
+
+edit.insert(", ");
+verify.signatureHelpCountIs(4);
+verify.currentSignatureHelpIs("f(s: string, b: boolean): any");
+verify.currentSignatureParamterCountIs(2);
\ No newline at end of file
diff --git a/tests/cases/unittests/services/colorization.ts b/tests/cases/unittests/services/colorization.ts
index d89cf702693..ee5350a25eb 100644
--- a/tests/cases/unittests/services/colorization.ts
+++ b/tests/cases/unittests/services/colorization.ts
@@ -217,5 +217,57 @@ 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));
+ });
+
+ 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